From d374e4f5af1f626cfc2cde9743e7d47cff0049a6 Mon Sep 17 00:00:00 2001 From: Shrey Nigam Date: Sat, 12 Jun 2021 12:18:10 +0530 Subject: [PATCH 1/5] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index a12d5a0..b09d561 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,18 @@

Development under progress...!

+
+ +## Meet our team + +- [@ShreyNigam](https://www.github.com/shrey6162) +- [@ManavJain](https://github.com/manavj23) +- [@ViditVikramSingh](https://github.com/vidsingh) + + + + --------------------------------------------------------------------------------------------------------------------------------- + From 516259c7be5d047951a328d981cb6c37b421710d Mon Sep 17 00:00:00 2001 From: Shrey Nigam Date: Tue, 29 Mar 2022 18:21:21 +0530 Subject: [PATCH 2/5] Add files via upload --- Procfile | 1 + Screen Shots/1.png | Bin 0 -> 2563836 bytes Screen Shots/2.png | Bin 0 -> 119954 bytes Screen Shots/3.png | Bin 0 -> 124254 bytes Screen Shots/4.png | Bin 0 -> 116537 bytes Screen Shots/5.png | Bin 0 -> 805394 bytes Screen Shots/6.png | Bin 0 -> 154431 bytes app.js | 41 + models/Home.js | 25 + models/Matches/MatchInfo.js | 17 + models/Matches/MatchLineups.js | 16 + models/Matches/MatchProbabilities.js | 16 + models/PlayerInfo.js | 19 + models/Results.js | 27 + models/ScheduleOf.js | 15 + models/Tournaments/RecentTournament.js | 17 + models/Tournaments/TournamentInfo.js | 19 + models/Tournaments/TournamentLeaders.js | 16 + models/Tournaments/TournamentResults.js | 15 + models/Tournaments/TournamentStandings.js | 20 + package-lock.json | 1608 +++++++++++++++++++++ package.json | 23 + views/Matches/matchInfo.ejs | 326 +++++ views/Matches/matchLineups.ejs | 133 ++ views/Matches/matchProbabilities.ejs | 125 ++ views/Tournaments/tournamentInfo.ejs | 153 ++ views/Tournaments/tournamentLeaders.ejs | 110 ++ views/Tournaments/tournamentResults.ejs | 169 +++ views/Tournaments/tournamentStandings.ejs | 52 + views/Tournaments/tournaments.ejs | 179 +++ views/home.ejs | 357 +++++ views/index.ejs | 41 + views/partials/footer.ejs | 69 + views/partials/header.ejs | 51 + views/playerInfo.ejs | 141 ++ views/results.ejs | 164 +++ views/schedule.ejs | 142 ++ 37 files changed, 4107 insertions(+) create mode 100644 Procfile create mode 100644 Screen Shots/1.png create mode 100644 Screen Shots/2.png create mode 100644 Screen Shots/3.png create mode 100644 Screen Shots/4.png create mode 100644 Screen Shots/5.png create mode 100644 Screen Shots/6.png create mode 100644 app.js create mode 100644 models/Home.js create mode 100644 models/Matches/MatchInfo.js create mode 100644 models/Matches/MatchLineups.js create mode 100644 models/Matches/MatchProbabilities.js create mode 100644 models/PlayerInfo.js create mode 100644 models/Results.js create mode 100644 models/ScheduleOf.js create mode 100644 models/Tournaments/RecentTournament.js create mode 100644 models/Tournaments/TournamentInfo.js create mode 100644 models/Tournaments/TournamentLeaders.js create mode 100644 models/Tournaments/TournamentResults.js create mode 100644 models/Tournaments/TournamentStandings.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 views/Matches/matchInfo.ejs create mode 100644 views/Matches/matchLineups.ejs create mode 100644 views/Matches/matchProbabilities.ejs create mode 100644 views/Tournaments/tournamentInfo.ejs create mode 100644 views/Tournaments/tournamentLeaders.ejs create mode 100644 views/Tournaments/tournamentResults.ejs create mode 100644 views/Tournaments/tournamentStandings.ejs create mode 100644 views/Tournaments/tournaments.ejs create mode 100644 views/home.ejs create mode 100644 views/index.ejs create mode 100644 views/partials/footer.ejs create mode 100644 views/partials/header.ejs create mode 100644 views/playerInfo.ejs create mode 100644 views/results.ejs create mode 100644 views/schedule.ejs diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..207d22f --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: node app.js \ No newline at end of file diff --git a/Screen Shots/1.png b/Screen Shots/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5e64f4685c3f418d23d5def1cb4a2b541a9138ec GIT binary patch literal 2563836 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
  • tznMjFwgj=gITyvFAs}2rM(kmh>sa>84cG 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

    4OTBkMwfT>B8^=jR;Yv+j^?H?Y_mebuh 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 %vFz84fs_6(=bDQOpWaZeNm(((BZwP21CB zj(i+ybNZa;jlUF=X2>n`o%K~43CwNEpz~&ADKfDGm@-%UISV%Xto(z5o{}v}=JbSuDLx}*%YR(0HQ17B?}sg(RGU`>oOrO?!25_y1fdy zJG=t|;~{$5;3$uhT_J~C_gKzH6{%60D2YJi zn`J&?qpf`pT8!qfo5%ZZol6Iu|NagGGOzgPT))iCb^AW?+oxVF>x@HE< zl{a~}*TtWhDJ(kYLjL{h!T?+`pcDQIpfwKsI&OY@cYBYqxxI4%qn`w{F>H41My=eA zMySVtK^(}N6zSG+{N{9 zUhom1s=3A=`OW8z7DIYmq+ek+XLwy8Q8X#U5LU|=meZaKzj=R|N8|(sh~f1zx9p-) zU3Fk23l+-ar;A%3KVFp}#Wn-_Smvnk@*}IZmRVrS=H79$0dN+krvYDv!9{8e%g2}Y z2-mq8q3b`V)8-*Zee~vmM}0?r*Z=-BWeSRwzbABW9OWx5<8{_}>MZ<~{R?NJ0+Qhn zqzG7v-&?ZUk)b6wovhXMjgDE^UaoFg$Gcj`dnnS?<}n(9ECdh-9)A>M0%Se}V~*z} z=Nc+Y(3v3Jc(t=7Dt`&qYiQO7th;8Nttz0EiUBP-O;O&L^@cFX2%gc=+W68Y)^v{4glPUv; z+S$xln}_%*zJFQ(SV!OFMnJvE-JcusnnR#rrhk;L%_gfBBT z&hya^1M`n~nvxnkE`};dTvEXsVI+)a6R!f&H{i9#yk@+#&I5B>KABorSO~d2J1(ls z8b7?dB@db|b;5V0_L|z(o+6!3_-;_;iC8FMbcV5%qao%GLxuP6nwy{9Ta{G=M)0Z~ zU|mx$cJ=)8OPI4GXN zsNbJgy_6Ii{$#D)XM41m5KJQ=wi()o=Sy4)PSi4zr55>@sFNC~;Y1|~X74tVoO#PE zKk%bR4I~7dH*Csgrz)Lyh7eJNT5$@g-(9)|K+6@b*}xBBXx*q`{az!Hs+eys8E}BW z?Q^}1Vt-I1!MZUqpEXx03N)#VARPE4Jj!m{N}v(fzu2Z0Pj6e^7gL}#EdwR)={PSl za6~MM?P4PL>iB5>Ve6*{-H@ges`O8Y@5!F;jGawf^>;7q>P&!r&S`;Ld5e#72`;Q= zWh;~F0j&<~d$G?S25I~*mQ&WmNil&jMymt7KB+O!s#M#92bCgsF(g`P7cJSP{9NHk z43jR;Wm@&067EkU5w1jj>blvcE(*0GSBG`0v=lk-Od3XUvH z>2)m~Zj-MRxQh<8sZFB-(-eLDjr#(J%b{um8jB}NTrZ#VrmBs?u(p9k|6Sv|#-3$) z&jPv$oJ`g=;tZUy!5{oAPonhe`F2Ii(de@eSm=vLLPl9?S)D|ww<4w4iWHnffj(^a zdYla7iEa5LKbxjRxT(BPN)=jdP+?cq*ONtsKKZy;ScE57fJ@9Ji<`|%pjL$0e2~-z zUhg>;b|zWUqNyzrC@l+SZM$=d1cTItT5**6xb(+9mHyBxBoc~&vLZJ)SfG8V)#8W}$&Wr=5cT=FR2s^p4BY49bJcjFMsaMMa-ojumbD<=^#Y5|oOP z%Q9>bHDBU7(t*J$x-rV4V8hFDnX8$d9Vc(^8;bGAYO1BBJ8J(Flw}R2xF`_puoo(P$$&>(FpilMI4s49E^OlI zC1Y4WPEl@f#)V!ac!lpLM1MXH-U_h%IN_waP`Ugi<0%3|P)7L5S}X@K{w*p|skW$z zXFb_&%4I}H{bIv&RY6VkKW|gIDmmucCJ7EiL9l`4%OcX~DYXbYQ*mFhU`h5@i%%IT zEC@VHF=RtoS($P5w8k7t6G)I)#m;;(qun^3accL!nwbLvCp$$fqFM!Cm{>a$-(Nl^ zJoL=IA;i5t;UN#xBE_-t=?hbtzh6|AkK~F|z+olg=Ab0&8Y7g15`%U1-Wjg9ztWvP z_Fo?021g8hwtudD52kdei=-;(#pO#>jAZACp-fKgNxmmU9XI$63BoN9|;!>s6@mYnsPJa=eLI zX85%?Y#^&C^^g@LF_Kj?QHrNkN0*<0-tHTd${>h=jaRl1das9tB7cNf0m|hhI}RED zB(nL5NRF{z(NmlIidS=gT``FE-c4WUy$n(_^F{tc3VNgR@L970cDx_kW*~2!{Ql|p zxVGZ~r~ZWSNqGcKAKTVD9|bAY_1Qq{#}D8AJX8s(7jR_>dkZ#5>%_EP!9TdjLA1I+ z642QEXU>TgU_qn<1%Cnbh1`qDipiWWt;Ro{1S+YWsi3_1IB6~hVX|6vcAX}Yl|@`h z@V+%`$n~$hm;F^wJxI}^pIp3Os3z-3J=9zzD5!XLABU0p{07+m_kVw|s&{G-a@A;% zGXf}Wlt%}*W(b+Ue~A*6;yFJ0DRK%;ONZ9P=s>KuKTV_s+`t5o(uAX8wEP z`uanE4*>JOJGq|l-lS+Ni&g$TalYWz`6PEC@2ntPar2mgl0L4_vl%K}5O9E9B+w4N zI@=FuM~!B{0_^r%q}d{cHCD0d{*Fd{Dgkp1}-r)ln4rBBUGn-y-gWXNPZ7htV;L< zO`pFzUxcK9AAyv)(aW@5M&-mTQC`0Kl(^P4PWE*`k(!$QLQhZ6YR{@$V{3CquFJEN z`P`+>5b<~gX~77kmSINa&uUm>fEe7o$cmDWPmiw`!&NmQO|p)MvE#i#xK^mJ5?fTnZU6iCj}HeB@3E7x zqK4d?>&?!smO2qK3MEnJ8e@gy3sNvy^t3DePZH5ZdTquCfWxn?(c8^KHVtpt5B_))UleHf>)`bb3xtgvsPXrYJ8>8BYVf)iZm7}f^&ZCIC6JkcB9$0Y;rEI>9{+q9n7U&WD0zNL zD&SdLcwQYU9KN0@fTGukHnd;3ugk4hFQv1s?y=+FVe>}#=YsS3~=*qL=@2h#* zpX4K=S-vWn-hXp}2AKN3Q5XnXmyG+6AsaRJV(co%lhA{yM{;WGZL4cg)}VqD&xKQA zOl;eT+T0*{mn@PO!T3^WZF_M9V3pR}kdPt%_W#`;b*^lA%awf52TEUiST%!o$|_VuojQY z&&pe>^HN>&EZ7fKv_?GhknD(|8_(Yxy9OYu&vUQOn|?SfKEh(JNZbX|qinvXhsQYRvb ztnA@w%q0;&x}VT$izjDwAqv*s(nm*{8{=~?SGP4ur5Q!&#>1X}w0~V$kM%c4VBhXa zm1aEk8p@)`(uO`>iQ)AL_;V@;A12E?k7evlIwP;g7^KV^9R!=58-0;0R76qzwj+FP zCMcl&oLHnvGm&+w&U$54m%FzyDxDc;sr>ugsOC>^FH@vx_p!^Q{hGX`1Vs=8_TF+hh5oVBsrO@SP;#4vm7cr0`yB3^YTq-p{q%m*gpw`L z+zoZ_^F8LpK-r4bdaV@Ebz3{su24``TI@+Ndl;Xr(+sP;>Y~m#&jbnIc;BVJ(Wh6D z9oxMnshs17w)?}?n03iij)Z_fFb%r_8pjUSm2v}SH4-AO9s0I2L4^d_n}Yk?joM{b zhy;9`zFikOgdBQHRu3JChnxqdPPsmRC9G$@kseyS1161k zh=*QLv?>~8(J$M09Mhh#e2vKC&W){VyKnasx)4}D2dB%c? zr#aWtbo0T3IM80bJrTQgT(958aY9}Y-RaY;w4D++^C1-;AqpH>kEX{-d?l|H-3*2W zgKsYY`V83u@Whsul2T^@i7?jMR6a3I+rBbXz-9w8g5iJaneQH1ezI9%on1w=D8oDW zCR;Z=79#H@`Hu2_QYw-wJU=R!59RqBJ7owMP`e~lIE3T+e$O0l0$-r|qfE$Ab?4QB zxOqss3{#W`={OrJbI92skh{JZdy&@>c)_!YdhA^E!6v@Ot4gN0)1>>w3^?Qzp39us z{Hg%{m7)*@udBl{>O6dtyFQq#8;geD6Vgc1eLkQ($l)T~C-hS^<^^E*t(kh$s^I69 zLZ(1$q%#B`gUtq^xwmV0lGyED5(zuoDPhQ(ON;gm*oZ4mrK>9(b=YDZ|LJ=bsjy&L-M4XVN^0TJ1RXND0W z706m2?|talZLTjZ{q#Xc| z-7tjS;2P%M4-d-~lt-*1(^}K+qeuO71YS#Xrr(TQC@1LfF@!VLRbXdU`$DwI=Wle3 z3gHsr)Yjks3~=LHf){>8{DipO??;`h7Vvw`ag^ zJ>+sVk7A@XXHHQ1?mFaB^KKgmOLYSBXKwsO>)k(J?!L~utIosA+vCxY4zucpXxB`% z%=HQoBF4_p3!1+%J^$0hfBx!+Ke@yj%1V74V*9dGaqawW^e`d%;B4dU_EtI~(Tgm_ z<|TjyWyYH^6p4U&&?S!a^-Z3h76Y^>0iV`||E{8E6<~wGi|2A)vA&sFXJUTz=<;9- z_1=TZ!kT--k@Uu?rmdyTqzdr&`S$djC4w^n zB1L`jPlMOeV6X$CcQCXSAv}&Mw$)m^uLQ-n*#?_3 z>@;(KL%)C4`e_%ami25_g%2O)d!j63turYcn@wUsB9F6*9C4R74%`|KDO~3SbcVc5 zZ=&!1$e_7{fm%A~Pw$6R>bg*cxCYt{-$OTm3}(=I-M4goUFR$A{-J-tr&9wCl&Y$6l+1-?zn*^Q?n;U&yZ29y6{VC-5^6G9qBuM;&LMFOr#ZQ9CWYuJM2eJRkz5R5} zV0W^w53vMf^v@Soew_wEdLZE1yO9)wEI%q#qCJX zLSE8f)yVKnSDdXU+{1Sn6gX$=z-*Qy^c`VdA>kVWSo#C7fzWA%98_nA0;IvO0s4 zaR&yu2O#`hB~3K)s{XOuQ9w%$lM=3j+l$@D%J*7np-0&j|QtF)vx9sp;&(UyKi`S zcQm8OO;O`p?KTNkJCuVm+seOO-DrQJBP_ zgnD$4@4W9^ziH!PzlW8QH>FHEx%gf-B2>KHLCN4^ckfnivbDe>0b_c z1y*&uA)OkW(?(11;6QJS`0&J25Fy2gK9`{wBkez3e=_^}2v0AamptcMqV`M0nW<5@ zqeV7&;#@~nTF1Rx2&tL<*nqsx*(EwY>M%4)C(9nu6fsPX`Gt-z=DO_DlHin;D90aF z6*|sNWfmI7cA5L7-B0w2g>5pers`5z7G^oWnnobrnqzo$lQ9+V-hi@Suz*UU{_6hF zm)X($>a6vc;V^DbSfn3_@S!G2D8E`Tbqk#jELPJgfiB+Y(hL)@K;=I_B&mPg3+G^^ zAAD`i0E%MVn4pC>_py>&IU)wZ#7LLM8fLp&2PE z&0ZJT_#r|ZNagu^LZ6!tM$e|Bp1PUy=pdMM$L_53#_)jdQT>Hci zC=@XHSUexQ$+IEz)`T91$2$(?Y9dQRTiQcIp}fp$j-TLl+&EKRdWOq5R-XpGm4|j@ z+pEoFfRsaxD7@^Z1bUhqKjEFKywHESsBG(x#}=bb+DuviVWj}NtTFKN9V8dn!){uH zru`L|OP;3KZeG(j;G$Q!aav@QD*X7xkHp~T!fCIpzPj+>Sb+zOHgYSXTs1$CX?zL3 zE+GnCtom8}Q5?>R?V+GvgUDqfh@tmA{B%PADXUIhdnhbwo$6~@amv-K82HWiKSCEOHO`a^c zM?94vLk#02CDbF~5J~c3|DmO=%b%6R=v_?X#VQw9Bzx$El37Vt!hk>|oJ@p+{+qm- z52d~HBB(Qz@&YInOLl;5*_5lU`1?At*u#S4qqz796{?uYlh1s1{xxN|JF449s(qjL zzrC{!egwBy_-4XqCKYnDLcsj&?b%+Adk2vu8qGfFKp*#C_{7Qdf+u2tA}!h^wz<~P z&ZCLiO|V$*kpzk4-BYMJQLw7FV#3-FHWj$7tQ`oqfh@^T7VSuQvn65tp-5BWHK{e3 zoH2o#!Q@AtQTM~&;_enQ%e^=#m9<0*dTuNYlFv5&VFV$OVlB;?08|dwg1|LP%xgiSvQbnh8+8E^36+e^Xi4?#-Ysi3%SJcH zI~0kkywv8*i>Gz9W_A9ooXMcISNlEA$5?dmDTh@eKuu!6#o-%Z{~|ABQ(4Mnkp7@M zLW~vXo{ir6DUqMdcegHA%{WFU1G=5|;x+C!S1Bc&UaIHgK-=r7Xlu43%@@INWUsw} zy3~5UvHnK_BHWLKBuJiWf)Wt|)>J&Jbl9JxOrKWA&V+ufXTu`#>z}gXaRD$nR+hn3 zsxutQ*BCOrG`dr&S^L*d+I^8-Oa z^L#)l_u=|>7B5jh;hj%-T{^!5@NZ8ui+aE^VMl&yNpr&@$MI)nIuX-%aCtvP?FjJ;1c0qsxkJTkBz-$cGGF*hVUJ-k_8 zpR}tpuA+-BTG;mqkc_vKVj@$V@V&>N6JutFg^>#vW@Z;X*DfUS9MX*kEu%!xQ;5nl zTkN#=_~PPxd+<#_rwqi}Dt>N%3f^ceaP=wVm$aBhkVnlR+&k#&l#pQR=0L$C?nEXM z&rBG$VPND8^5C?=)56DxOoYSbk?Xnx~9(_eghcoMV7OvciSG6Ge4 zX^clX#*P;f6Jf9VoEWUhEOo^BS?gv@0K$TOw8#82w_IPWzkECl4PkCffGL5DzEuWD zR!)(C%_`G(NAQIN4c^xt>*%K$JShMIKk9(Bt^k%kKsA%vG^((4KS)L&vGlOTdfMA` zv+Zu{b3$v?oEtNqQd}1hRT!7}uqyFVm&Ve$a#|yNE%$tpJQ$gj&@UauMXE7weE4ui zD1Pn=5ZHytz?3;fwpiVGY-`zRRaH6wHny{DV^MR6sQ@m_zOqrEwXDi2cIX&`09sU98CFl{oZ^8NjOhfsL3hHw3Y|4NN$FMkPi2WHdj5!Gx2^& zevT;-h_ZZ#FCs!^Y@ha4sLxO8QNPZO)+!QfuKS63s1KmB6pP9_n^@Ic9m|MMO}wch zFB4L-eDFa9=?d}TFm{Hh)QTE0bSYC2BVsd+OZqku%1|Wjl@XEW82xin1w9-8Bj4v5#~sdTlWc{Mf)btBDAZEUvob z!HWoGRw%>7&Y$+ueNN?0Wy`~z2d`=D@GXTM+Fa@OFRj`;epQI=7FAY=%XeMMr8?_N z41u7@YDE1wJNMXhq>!1T`Ojw_7V{OFNHW^LN2ppjMsS%&$TECD+9V?D)Ey-sUG4jX z%rhrM3q<655^{3sEE((u)&gNf&zXv806C-$2-9)6l~jXu7IYfAaltklD5^pl&Rh#k zl?X>P3@kLNzhwOUC)2Pu2i2PBgyqFRhy|2!IG{F zdO-%y%-Z^fj?31SXy=^DOgCNZUqh*p1)+q($}cY~J{G){JEZm33;Vt9ipfOX@Wix zVG9VZ2x&9j=$xz{+ts%rwjU~D9cJso;p!StFWC6PS#*h64-9zlak1F5AVWm`V<10P z_qig-$UEZwlPSZ(3`s0O7@2j9856zXP9+N61ZlN|Yp*!)hyy6N?yC0@9qx+*5 z-00ET;$X@$HQ5c6*K@^HjAwIO@EIw{@FkOD*1AuY-O<0Fn)diV!&q_!Sy)vqcdpE2 z%Z47j5`L*nuKjptBPhkIJBl$~L(Fx>qTFZ&gI zOQJtLirVh@d?g*7Sgf2gYbID&Sz5W;=w2N1)|rf&xZrUK5+}!u>zU(M9Eo~~*Z2@m zWUmGIej?z(vXs>PM9>rP{MG-x07b1Xm?Ak@Ws3vJbBXRC<^C?(_1S->CJJ~UP&}09 zR-p@@FDwk6%`uRfaxy0K>f7|R&!okg!w1tms{wzWq&&iUYy?$=NPzA$^DcsnH z`ut9AjqmtmdV}Ck|B{}AqL-oM!?VpK`5Q+Ga(yTkgO^DznMN;XdxHeCfgguw*~ZS3 zJBBRpr;`(8J|CBu)`RtTQRd32Ee5=Zx`I7={(w`0wU87(^Qg=MsvsY8KZ5pGnz(CP zE5(7NI5NQkXStUTUZ_Ym=WQ*RQERrQ)PsdFf+FI3Wl3=}RaC|-K%e3@xGPJ!G>e(6 zvw`M;q9iy2)#1R?6bRKjMiU6DE<-HbYKN@f{q~OrWc5gbG>9C8@t1hiA8fI)Zgq6j z&rF?l8t~Bia&26bVx_#g!-?J%x$1WQ@8B%ja!*ifcQOD_D@dFHyXr}C)h?eAn^t6V z!JvV|pHSqduMaYnrgBcBnS+}ao^`ZdfI&K{Q!^udcFkt|>B9gy>Fs~7R+CB@ztg|; z=0QNC)M;nI{K8^;(9MS5FPV^AlL+Pm<_`-UWfkXBl6A)XA7wht1Pt8GmlhVJA{<*< z0_+AL&UkF=70(sD$G^oXnNIKCuNHq`egU`w-$D8Ghk@HE@NC9@Dfp^*>F#zZ9yXm} zAPBS8xT=TVkj#!nx2e04hTAGnp>P-r25{U7uYi6 zvbZoWB_#zpffX(I$V75SlrmrX%CybxH*{X_WS9ru_DwGVYn|IwncKZO0I)D)AJ&|;dRuS))+ry*TtlE8XvHfbrr}MDm z;!?BPytBEp{hs`nrjED1$G_K)?WaePfBfdDtq_Q-)suh!l#wXiaZ&6musRXdp-dMU2gU9;E=CVK^N-GGGpPO1fHrNI*g4f0?*QUu>ncUbO-o0QaDE{Ty0~>py22%;?o$(Ezka z;t|lcD%jlv#ItpW>WfD1y~jczW>s}d>Ooz03bDPg5N?~JQz9jaiT-95~HS$P(|nM zUk~rL#qTBr${bZgm)jHySt2AjM3FY}bs{;FLTbKyt@FpJ=X0i{y4hAAlzJ(&UwM=2 zEh~-q@3btsOnHy%EvD4TW=iy@0y&$OCNlwg4O76UE*K*J*zLdm5=axRy#`__J&nR^TnGd&I&l#FlL?_;7A!CULJl{Q{ zN|l3n7u(;92pA}hHru?ghSrmB@ML9`6H5&hGX$8WpIOwuKJ9B*{NasE7XMaCQhinMB$?)c5b!(gd_xpzMZWKE@ zRi~_%*42%IVlc}(o~H>GIS>$ zf|4igkvOx4$dhXS-Lnur7AD?`3XOA}vwVAmIqP32ClMHkBTNlGlaEV0)2LHq+l*J{tcFo2a|0UROVou+e<4MDda3eGLYXR_CS{@5 zd;a{Ld&v@B0`LN%$A0!Z4Mt{s;?wlyBQ0iPHZT>SR8o~sJ%8$Tz6dzqgxR)?YZnx6 zqc`0-lR*1&ua_ZBa6;L(G$%zh6h#o86%krd6Gd8}!hO2%`WLfrLhHe=7v4SAxLi@A zUKgy&vQv6#uLQDzUeU!0{oOCei^e^DC>}Ho1OI1msQfYB3Wh-lEfM9BEgzra#FoOt z-L2m9uKR})sD6(P)z0{lwGQ+*wa_&7Or+57pcnJRego6ZAX50(kIsyc?n`$XtR{!Zn9+aLbr0kBlPX{xam@_mEu6+u~*? z)dVt1g-C!TxcR$@FrR;ebdf7aXl9m|s*azUD&}J!coSM~squt6_H6sgAt?ZpkBVP? z1L~xCLP*%nT?F}!X?#YcG?KxMXT&Ls;Axz~DGMO78QiHfwa{=~j)5j|Q)!~=jLUB( z1Jrz9s%~FPP%r>F$*SF=Dkpo_B=Mw*J!{!@F`fY}vq;=~GT%!#G`wex0resPF=>Xh zj_nbO@KA@X>B0cyDQwEJ%=0S~k#HF553{KhK8*Nv zn4ISivD&J?1=vbv-lq~?Z~UNpF&y7a@bg3zsAO@eD7@b#H%rq#(K4{PvSB6{f%$f9 z7Mtb#?v(QK{}zH93M~t*P-f4dAPq%wi?ATMAsoQp4{zub!hO_y< zZ9HO+lGxPVRBbA%#H`vYMQc-vqE?L>u@yC1TWbAk#oo2|Ca6_at43@pwQ4>0|HX43 zUX$aF-KzZ`~1OCqw5E;feg<% z!{RXodwOWN+&lFiiNC!|ORQi4r;+(Kt4coiU8FU5{+eMTYn%5@x`O zeHo8SdwkGNz4B+6DWJ#_OdTdY0M@r%RTckE%R!X(235+cqk@?Rc|=Hct%1&ogMBp= zS$Nf-J!`aVd|C$t*>Q_smWbxDWWuruG@n7Cnzo@L0&0UUu2|)VSZ=cB<*ureG7fU($Sh{F+^Qt5b`2a^oPXuH|N*Yy}hgImCT-)r)hl@4brJ{j!pmoZ*i$A~+$*65z#zBR3W980m7 zU^3p;{$($f;x#Y@xC2?Sl_kERE>9o-Qvl@@e16l^y7XUw91Rx}x(q;6N#g$av8Zfc z9sXeLmG#th?h^lN5g%%#+}Ckr7)#Wj#E6e7%0E(-EhLE$A6WmxXvZ8?!%k%Pk$Fh= z=%-rQfeo}d#LpVD6wF|E{dZaq7-*Z#AC{rdmRYF=k6JqR{&ld&iwkaT7Tg?T*-f7s z?Vd$1iBSxg!nr9>gu})@t+q^qf}6BGz#7_Gd4CYz1ye#GK*xa3^!WH~i0}M)kY=eH z^HIBalowmHNBfJA+kR{eoM6|;FgD-BmlG%z z#)>+iv}_LMK)Ej4|N4uI@!nK38f`Qp=ok;c_r0WY` z5ca{*1GuL6N6xQ2F|rih3*9isiU~g6T0x!iqVX^)n=l}W0$pC1f4;tfr zcADY?g8eou=g}&QB8s;c>qTaL8D_G&9^27h#ElmHT<%T%@vFv|o4Wxn0dZZVr+;(l zeLa$(m3bY+?6_@BTl_PLjj=gXsO-DmKR+gH?SEUma(y-YKHB_0G4E)$&E-7l0duP- zSI50nz-|$DcGd4&)#>tc3+U<+z8ud!YPG3OtwN75dd>mP;S|G{kM?GrryA3=NyOuA z&c7|X`A+0MSu7Wg`B3+3`Bz(WGvI~}nzynre~w@^3izcEhFAUe^xD%aC|NdPn$gSf z5(WLic_J)LFXA#PxsAsIjPzzA?B!(wmIFLLgqSoc1OeQX^5uT%s>r z9#}QRHC8@g^NipD{o6RZdF$a}fS}_b)3QLMo0u?U$DIbup5Ls!{iPtUps-IF9kg<4 zl;PNNFrg@{534qo{+WYvAy_u}n0VMpzqG9p-JZgKgUMzMY z`%UMI`S%Ni7BTerV2CY=hdrdWe)-Mw(a5R?Ecsu0Ht?&uK@F(7_4NbJBANQ%`Sx!bnd98m1Wt2@5g`XlgOXeIOCX zXOx)B$}r41(f*MwC@U#{B1LyK1(nZT)vNn$^aV%=4tH0EJ7JUEAr1-Rkz)6HA<8kI zxt{V1ppWHAx?%H;fcZzq$lq~PxZEDXL8~k!c7N|RZ%N+7LNXi3!9>KS{eJ%r1E&tm zOIJ|GM)NbeDP60tIZK5AI-^#zjPTiXc0?ieJCNMX^6|X9Hr8p3Mikr%`rsupaGnVf&g*eB9vC1G(p81E8zzpC-8EOwfLxvP-m%)|F0qKL1x)l>lHMDB~SdLP#tr`U0X(j#ad!5!Ba zS6&6N!t`rwjf?9!ZI{+enU3I-7Md;XyJs*DE-RtF{F`u^mFMo`6sJ>8&&Wq$_)W!A z4(*DYigeeXjUL|F=Z1HX>j@1#c}$P`_O$qY85JEAu{`hNTEW}bSDrBMpY}&&sm0R( zj`V`tq;X}x@2Ol_%&M!7QSi#DzCr``CPP7{0-(KltlV%O9zm8o7JXv&{ok;j;+;XW zQL*BjkB>)9Y1Rv*9k68pdz@~bskIs58qI6V-=SFxskuDm=6hxp7v4zJS3wBb{Up;V zV-;=5h3B1y1{x~rx-)?d*^VG6wYb?#SUFJ%;e)8SlzA1)_~GdN=;6q1yK2Zid!cRq zG!VfqD?Wk!aDmsPvH#MB&y$8=^ud(A;~$M5(0CF&j?k=9=T>*N_w?LDF)5^>`UH}g z#x%mM$4lP+o~vUaX78pbeo{j-BrIaR^oj+3gT=kn)rU3>CUwcUNue9UBoyjOh9a@} zW3h6W!Q?Y=sH%PjK~kn^QY2ZT+13^Auep+V#zUUf3@>Wk9%1k2k~t5&QTOH5F47!% zlc)J_ABcf4*@kLTx_V#TQgLVUn_?|QUh=F4+~>mR*T;++m~J1)(lBXd z_&f8Hkacbk7pTQkPBLFUU|*|h7pC7Z=5^~{rHFrUaN5R1R?Qj1WCp4|Bqw}jCeF!2 zBqj7zRIwvhayo!A4TN1RoUABmNyRjx=3EZM^}GIk7FH_e zWuth^?PlSh;EVvQ{!S`g?98(~qNbO>t_8P7I}9eS=l9zo`9Dg3~jy4V$fBF<;~X#WAs zi~}(w^dI?jb~m)50Cq?aW(V-(4IXe)iyyE3AO$hac=iNT#X~?OHUXcWZU2$q3&T%p zqnhGU2zs%yXf8RrUcXS^2n|QRMhfF6hDL)>V(OF@m?_~bW{zUg!R5k94Rp)Y3LCCf z;Z6+1pEA}ubo6iLpU2u;_ACv$AH3gC8M0x#$GQfJoKXBp)9HW}KWvb$)5)g+!D6n? zk6>y%njfk?vWD`X@)*k1Y>QZ4ZV)1g*Fnnk%>85>aH;S9Z?*R3>D=&j4LrFZL?iGI zNe@AvY1k8;F3yNt_9F7ME;%Rrc#vr%6rk4+SnKqOY^_66KJ}&e>mFuE+9&bAL3}iI zMPgBt%-(5j+>ReKnDPROIFdm88YJd;KT>L_eh{+G~A{Ogi2i2WdGn8wz0b0)R^tF#cq10kGVR28sI8Jx(Wb z(u%2MCQWgdnDsuM?Y7qD_Dj*b#SkbkPT}RDg`iA>HEz3ryY96ACs6m0o^AqeGkD5OYR!RBs~w9dN{E>L189@% z!x?dLR5=!kID~Zn&iLM=M@_yK^CpPdbIyU`B&Wsa2J!1P0FPm-!Z)=E7#pl^cheiH zpvNaCyK$l&fj2immhAi{`;j~Fug~KZzcc?o^1{tvXB}nd?fMa3wG%z&eYiu`cUdBi zTFi^}M|-1{M;%wVJv(2PLC%5t*Xd=O{Q(VQu$ARs!8fPupe}#Kc;Lj_brCS1V^Nof zXNQ+@SgXLx{_%rxD)(i}a?z06I?<^7_rKhm5+B?62l`!a?Ntq11718g#Rxae^}VKx zW54Lvs3xH6%-q7l++07ImeH&aX7cDB^{kG{+{H+7%6$_=N6WV#rh8HOE9_L$QU{H# zEX|L--8(|AdiSzt9okz==Ya*nRnsHZz$2lxwROJA3NWhgPfsWWpYCqruoG>*A8@i1 zbIeCU76_xU-i)MvMx$As%_oCWk-#ww@QnBgt7>q-Xb&*kDU&?LxGn}*@umu?fhEv( zk929MR5G|Yb&RNY;v43e;KztUW_LT15B{+pjDsBj-&bW(7&u6G8v37ofhAnL2wjFo z3t=myL6cN=2rAdsZ!Il9UD=JuMrXgj&o*pp?bL!*&hMcsEjt2vDPUfR`GKFnYxX@_ zp4FM2Ik2rU6`p&sSe`b%8QFQccKGe+EHS#3{qSxJKnGI+K|&z8I-zj6K?806_U#SB z>1ev>`PIQ~_0hkzOJdRVy@m#!p2g@v#v*_dJBk&}!Ddii-HfjtZY_;3Ed}}RE8HG` zP8YTGuV=ZuU0Uir2+H82eY*@u#PjYz_wm)whDztMiGzv7(ZVDoud0eUM_Y>5{Jj@T zk(?~8cAI6RaR4irwMekA{xw6{tmk=kojqVfu$>ZG=Nn)g5HFlL{h#UCNON@a_wSPt z)7BT|zr{a7>dB^rIE!eN8G8kU<4%8ncFZlGdjMiA1`?8hx7*E~t%uPt-Y_aF*$h<& z>~OXtg4hh$qqu*&3xJ>GZv!D1^Gp*VsQQ{B8ITAcnv9-q+18jd+QD#AMAcC&VHzkt z$2aZf15RYqDRvma+@FyerjLL{#k1W~G%KoHO@&j}D5Ew(5A6RE2+XWgd^!w8$?DcT zK3nRzf2P6+4l{%@>Jm}BI80)6K}WjJlUpGO=JLetq2!W;@U|*6+HJR}l;K}5G*NI1 zWw<4!SM*t2oz!4+TLlj+B}T={T_8U4VMv&VhocTSEMU6$YOcSlDL9y{kNx2}CzTRQ z#=@27)9B>PIKcSd2wa}9BbRMVPp~NUYu}hj6|F}G>Jtgcd7 z+flizcCa|&_aFjlYHD%d*sKD^<9fm$Z-WQjP!?7$l-v;T7=hKvyuLFOF%4ie{`+WW zXOni~;|alikmiS8S=Pj$s*joApI}sZKkXlUedp&ECUO0?&E~@NAH68a^t7NoDPFe2 z!UD=KX0yV|-V%ufE{YX0Ds^#$ig`t4%9}FF5DkAi2i8_lrkVb!OI+6h%{f2(>*pyc z)GiixMCSeYK2uuD^RFcLbIyE*ha*$pJrS)uOu@yC${v26w2t=}Kog?!sm)@lIhu^A zeS4S+BwFrC?(Or2LN5$B^WP$4AaV3e#S0#xVNb%7Am5F~UP514Q$vQwes<;X64%Ut z-xf4ISW~BMtskI0;*)#YMzc!A_11QCB1Ev9J~v>$Z|qXom)ncga9KUy@Pt>?Q-cR3 ziB0)T?M}{tjO=-?@k#zsgJUKo0wqk2+wh=CMwuxVdd!(1mZW?ZFGlXW7&FRvZIxT( zUe<9y#x*BZ6-&EsJzXh5K1NoS7Ba36Im8D6--#}apI{75l4mH=6Q(g|3Yx(S0uhOs zsw=4BKd#QpBB}OX!iYA>N+(reEV@8W`fAL5Il*NoE*zWV~=<(+}zYk^!O&iEX!Q_v@f{7IgoF z(S#^HxZDRZsgC_thi8zxDMvm$eq;d;+$`qf)AxKsop}|7n{W<-XE2A4dCyX(K8Wm36M|I0#M?29As+ob z-#20FvAOb80$F$wt3xm9&%zwx=d<|;IzlCtdP~CA?-OB#b%bz@*dk_I9yFA64#Q5>AEPxveq7-6087t8ZzG7yHi1l!3O`kcrT{F$ne2(LF?6!%cXI(`8V}di!BLN-pzQD<>ts#<*gsDg~B2< zFnD0Ht(43-q7Ud7Ee@fBvx2^Bk=fa^c1~hvHyH873L{iX41xI zSy@v{A5v?hHSmZ3?w;Z+f8o}#8tRgX-=B^<(%18FW78RwgN)c6C(87RUR$9Dz<%UU7M@tLDg?|q8K3n`61<)n zmrt;vWJ;HczsqNQB+@(Y?w4V$*fp)tYmS%oIV1eL=ElJ07o5q1z`D8J6l}zQ--do0 zlX$`_hs6O_(PXii6Fo<~CN~X(VHh7me+*gP6;nWvS6-92BfEBr{>5VN7D->CTK=Lo zlar6rQ2AIR%tm>fI&}dWU{5qcf&`DC^z5iS{_81Zzu7UG_TssaRMgrzMhl+(^VkzL ziaL4FB4t!^kzn9a5J;D^wmD(#y>H^4&r7>d`f4`C54B#JI7svN38jj(lXNow8H_lU z8AK?650Ml?^*#MsB1LXoLZ@jMizLuZuI=fQ<2fv5`7cK7StZh#N9zPrA+#hl`CR|K z^kWHLYdD?MBU(BosIj`&XmE1{?cX=I7}(~UHn~Q|*CNHKRG8Umg0a#*enL7@h4L0Y z{sbH?3h)pB)mBw2=IoTkzyu7?;&+UUS$11;jDE4cb6;7uY;XQyahTOewtTf(rjM_0 zF`GT^us^sqgT1`Lt+T04h!?mnK60-Nxf*x(!rTFe_=)a7+0@Lr;@w}|?OTY=gH!}B z1{WNn-!=Zu%fo-6o)xMCG{GtsGe*|=QU*ditNKc7B?RyHha2VK3Ch@^KVRO>=(L)- z+m3iL8)@QLvRhg@S`=6kuX?AFVvJVUDN9`!5ltg70DZvSb9$PMMvJ^-SeM0k0VdX+ zOAv{UQJH7RE*3VY)4F(2Sy}mEdu_*nhuCTs@yf0-Ms-6b`yppxpEw35&uxfdf&ywY zPzx)>et2}WSab>G(?b6J8O#m2-Z|N=t=y9;zG{uGeAyYa_&|eh_cS2L2Y4_){*r)X zo<AL+2m(Uk|4RaKqWC!^Cl zQWJGzRR1fVmC_L$kcj?<65%3IFy@qvhB?ydi035mAN`UA4!qIZ0Sz4;ZO&yfe(c4t zBEbZ&5ZUo*^Ld|nACvU|UA|Pl;{C|(c{~;eYv_khw4fLsEtyV1M7ZLRk;S6~^D+Os zw%n-X%wi|a4^g03VMPek;(4L4{=nL@wA|MG?N=C0+9x{@ z2l?Z7u`&|c1DSsXhqa?*g?HRbxma5Gq%4eleO{}SgyGnR zl{lN_MpaymN(*9s0{Z&>8e>xk5>=)$E2E?7#4<~gZK~SS_Q0Wcz`x7uT_deZe|Ga% z7cHuK_&3{+jFLQbmTt3Lad@lYE9H+E(iyI9aPm*3ev;yy+|5UtAC{yyb>rNHADvxt zy*ws=P(9>k`%nPbqWCag@i?i(b(9^Gu~j|gmsbx}F~k4@_a%T5o%4BnIHsg(Y|fIX z&G`4)U$f)|*=NZfpRI*tFG>Rt2Nrm{OAW9o`5XJAR6Az2pX3ob2x*^^@VZh*BS~uV zm$B8_7Wgr*6P(zvP8r{6y|f(z9ft$b%3~&B=&Y8P6)lMQikJB82MzhASIjbe#^rT% z@te`r)mnv&;k2O%k?O@*x#R1O3nB6@J@y}AyP_o`1-zkeX1;rUIgQ)DNf+cqR|Pg5 zKF>aNu5YAY;?EYh~jNM^u-! zoGIkhJ+)!sRpotEnra@t>_S*m~Q>U`7>u6f`Zf^uHPdr~B)@reji#6}wy^ zF9~Xw>M`dij6iT z$n@W5*DEy|t*PtQies<=W4^-)!A78Ov%^zR(!kWcJl__NSfBYahM=;K)l_})?}$)#>d?g!9|b4fYLUnHh>HRQ$K+7F{ikx;_8%9`;ukPyjs?Zm{;(TTkkYlGq??rxOo z_C(KdvNXo$lMpSHq=n2)S@!v_6**r|Z4_kVnu%ilvCCv|7=Kwt6VvLYGQqXf>+40u z4)23lj?sdXceCy!+1SI+axd9^*T;0k#SiO-3q2@_q$Tiq$L>+ zXd&t^|8A{rFLV2+AXr#Y%C|}vGjrdG&}sUL>NC8lg-5~@a5bj!wuU~M*37ToiRF9( z&MM^Pi32K6Rq;IDsi*H}X~uwyH)0^&gjmhrwh?}|{z^kAujS^kA|EXb-Rn&H3lzoM zG3KzUJ>YB3%G`Ya{3>7Z0}14VhGvaxD}YH_K)ptGNw3wUjsZN5C;cFj(uxJ+h(NuO|6PP2ckBI8X}a5U?O#xenteg zFIS&I5$n*hG%QbS{0QYz$&nrKBa?4n>z)!V*zANBDtzn;`8n9HcurR3=^<&^@E|j7 zE~7)!l$MNoedvVQ1r0Z2Zve~GVZ=X92eND#=}m9@4`{o+OW~HQKoWv z%rsI-48#5J-4ZBplOjO!&VgB8Kd6K~82wRD+1Wlc2UFO8u4>r>4Riz(rq^(#P}*mz zbtG{~VrZwKl=~2m{Gs$Z_b@B<0)Au9ZB{vAAB#t)%5WI2bGEm>ta%; zyLDAS-|J{q@D-4uySu%ao?aLGTOj%<9c+&&p8mkn-rV7weHJ&N*xA+sdBxSV)5tla z7hMb-#~1&|{dX&Ndwf9U?6!|aOXy7Fa5z9$QwTYSNp^W`O#u!ocPD}owYyW*m_HMQPHa9j-Yfepmj&XdidS#B6|*7?w|)y4jGx94IBfG-u+z!njUVbjsT?CF+h9j zyxOlTj*jjCfD7xl{&#=YmwZ>+86sOMn_9=6XDeDxvAH2RhN^uj(=4A$jD1Xfmiqf; zjD2)JNfgrpNIL_be;rTz8V}ll)-szczWd*o%YoQ%gYyf+>&srfi3z>EaR6vP8utKk zbMa@*`|d~m>EeXD=)3gArT)$SO^3So%ZeuFv%q@>-1(_UtYS;?VYx`v_gbzSfd3C-^6+%ze_J2 zj4yhi2K-Ne4dzrV-UE|%0eDO<%Q|m?7A|b@prgZWFZ*4Fr+N>SFS}kb4fLnBw$Z!> zV;k|Tzpjwsyfo)6U@!o%RKaZg>^+X|D?z9ICX1(s-uqr7zU&H=SHZG>^{5g_s?C6{ zz#V80t^}N_|GTQ*xr+cl&-WV8s>4RHGFS|kSA5Ct5R>7;%y`SR2g~`ymDE!Uw1h4N zh|AO07pnqCqP*g3#ztW#0ALN+oX>(f6effWK~FDYF?UI?6n-F#6x`}7?%KpjX48~g^2^;0%R(EE6+cc;&g#z8$U z3;J{WG9XCDz1VcmQM5FDa!chN`sZPz`$`8P^5zyYZP+#WJ*Vb~+>v%Lw!-A&oFwan zh^>^3Kim{0Ssx$J{pk=bwEa7V%Qk9XykB+#RY;rps)!lS0Q6z#N*{e7szcEwFbmcrN%$4*a?Cp%7$RR;QP?SRk1}aJ45?=z)u>^-~|Cs^=EdGt2i? zpnWMCgcI=lSsp|nNQ^`nhXAt!?`Vuj_iqhc*td0l!SfU0)kp!4TTWGu7xg6!jDY>X|uNvEH+ z$g2&mg@nKDrcpseu1=XNLk&U^qrW=BgsL^_E%)THDH#2Kqk~PcO&owNplT28veyEX z97*(XGnC%-7sU-ZsC<;>&jY<~)Ib?&)|i?+3@A9eXn-1EPPUNkf)|WZhbv!AJD-unIHQRNi&2bh8F5wbbUAnsQvy@iA-x#Qenk5p34rSpAqS(KzR3(F{YNPgeCun#iMH-%A6S zE`m?}?#8H6N7d*i7s#lE!dEOqnACcfPxoQZNq3uw?%^SxPlq9nQaUMuG z&l#Ovz5SNi`&@`Gg?zs9n=*|eeiqrc_>W9YmJmdj>{bMllC%UO2LJfZoe3%-gfGSg z=});zJSXKT1=}8f#NjC!NY@Dn?!)6uzQTSobNE>4FbXCD$!f>Xrv^>6chvPGiJ{L8Bboat-9XPa?nI8xec-Ct7 z4Udi~o28%3_BYP^qbFWRk>!=}N+QH`1wf#fJhB?Y5n0t;epyT);!_3G#oNB( zPrGo{?2;&_ZWIn}|LgnBmdWd6H~kINCXDhGI!UrreBX zgirG$us90KeD$|N&s6&&_2)Y(%xSJEx<>NKIlz=@X?f#*oGl}fAk3>VWlf%h+Tywo zg_l1$k+rtQ95ZvIV24lwASvJp&M*`T6Vg19BaCNTuz9=OI+D-LK}46@r(N z^sp5iCbwOLXOd6zJSX-30Mas*bsOc+tj^*XYbMF$Sa zvyNSrP@-3p>D1xXr^ZRjh}3db6LZ>d)aEcCX$k~CJIqbXt3PXI{xq>lE8#(*?Sgif z@vigP(^YvTSrIpbGi)w+Af=Ct*4%a+#Kif~he^j(APApSS8=EwYFUl3@&x7P9Bsn5h_lkC9ESfBvS81>v zM|ky4KPxSzT`Tf#d$iJu2LWvY(EEVefr@`Eovl~ckbhX%8~(*$hu)x$00vB}A{=WDE)!mp5m0fk9za$`;Z(7LRl!Cycg$RpOwi@`mN<)&>hy zZdhXP7Zta`>z`>u74zAPi;Iw58%D(GpFcam<$q^Bk7(M>k~0Sm(9O*u&Fg>u_Fl2S zTXaQj$w)0uG`5Z(+BV@ZAJD#stw$Ze6shoQ>2me?qJ{Reh)jPLYzj9=(tjz2BTfyL zz~7&j#*U48&LZgS%CrC3Hnp}l2L%St5PuXu>qV+AE+w?xFZwg{zhZ@(p!Q{NuQtr3 zp^|8oNHoxFPLsTsCE|x2a+LuxRgV;m0s7uMZMDSc@L1hxW5ldmt7Nk}o%(SC%HMUs zA0znXpONBU8ONmxIjhLtjzmEV3rj0Y06DvO>X0ot;X%LIQi=z(IH4;Q-=AY(0fE8$ zS3qSNhb zcfc>Y#O5koU*n>I4dM9q>L?P>X8-ufa`h}lQ*Btx`-DCqh{2&?G&UsnkU0s1Mk|Ro zlTyIKa5}5z6XetG{Cws1Pit=Qb#sUu#h^l=@q8+dAP)$pPdhIKU6xfnU#wiL3_O65 zV}(DcusU0bJ4`<;RYo8hd;vg1Ai!sl&DAYNF+#ui5^S{Lho;bQ0i|eD&WuFxl09^( z%h8jP9Ce7V}rklOo)WSRh3kY(tQ=}JZljhNlgw;SvE zWSHQ!k&?P;P9clkS06zY`=4fy})?TvXPIO+O3 zU_|?|mp^MN07ZRCdT*&^v3$4jOrhSjb-CO~R}fq1>fW4p&$vcI+bhuh6o&% zBI_iWqVe}k(1?iORLjBA7N>0S>})QkirR*7slrVzTPjqH4Bo=6W1ZT5sBv-beqtsS z)6!f>afLZRmADljDo8u_L0GNxid^Tib!LsXHMjA#TrlguO?jkf(}GW%l`ZC8SnM$<3}XeLbhCoYF`(?1&%+)SZJ!c$qXMcJWDPr@G4@oZD@rxI@r`JZ$r^Gmq9 zDJL_K^L#enNGW#88W0>8?XZ}j%ZATyHp&GFKfGpLpc^}H?3AJ<2|pc+k9tP0Dy3l>qRdU>M_GL9%9oHm~PGIN!ntDO99MhI!b9sf4|m=pCQXViW^<~81{OCD0uR*(0aJPsVE zSrzosfRN54Fw{z>yNsBK15DNm^%QeCyKJ_MofQ;*@YG@TOeiU>X4%W{3BL5e zjJ~c}bKn-?qp5T|qUzNPG+Dw>*>@ z=37~MBJ#B%8~>t9Jyr5k0P!keThdcvq?r`H zJr8GC;euun*nDJVlQNFfmW*|FBP=QUxBrWhwg~XpwQ^FUj}0A!QV1T%7h;y}HCla~7^S!!2$iBsw%!?V zlYBxhj6F6UN5N-^kJ=2(>Xuej=jw=5X%Pl80zTcwT2&JQiE|2gaJb}P*KdPHq&-M$ zh?;Jr@MS!CMARHV@zp8UN{8&H|ILK#;kZ1}%HW7?mQu3xUz!l{2v8nQzMqzEB<=6= ztj}k!TOjfcTm!*@fdMT4@=sEImtiJ6`)VVy*O%*b3@;7n?i0P;HYWibf7zqih`Q4s ze#e%AWj}sPW(t3ng;S}5*q&K?0QAyWa_4Z6My%x&J}2lu2iiY*BLc~ul#*9AQGgc8 z_B-0KS#igrN>4>svgj9|*{g~=+gvo$MelRZl!r0e2- z#6u8fX!w;xtkjMJKByfIg7=ST70+`$na^Vr6SS{@bMjv7tP|jNJf5WaH2%LAAf)B} z$wV>8nfjgp*TNQljJo-gus!1T(SN_DB{?3Ku#&(D7`pLgA%-JdAL`zK0~a{)P`0uf zL7*`%HoPuJ&vG&p3;SbMlTee2&V`5rH04KhdU>Xl0TikNr&|4nqCZZUe1E)y{&H*E zYUZ=&^C&QoIrw7rDV&3t49lh9 zRBNrRd>EY>A$%}iCO!*Q7MwAa1zx>srKCPQl+pD>JS+awpX@rA^I)Jh(B;wnAn9Zn zn~!-**OQ)pd>AWppClEG_wwa8TBq0;WzAR(PI55GsXmnXVL+x>}dL-D6L=?jO$vYL!rZ)a8{f zK(iX?bnOpRqiWe47;SETk50@lo<=9Kv*)rODFhF}?rudx?q;hxSO%XFx-I`Y6!8U0 zx30(CLv9v3Z>;W`?$(cPmu)ZEffM*@#Wzi@2k)*9d{+jf;$p|Bfy_^ckI(7e%Jm$f z?>2BVs0=(6@2#}oC9vF6$@L;S(pSL<&deT;1L__n<}^rgtJ$)l^WVR+7D`~&0l*dK z-H)?*jyrbsZfruvKG3cH+uiB}X!`!kN4dGVfI;x?%>C{hrfY|)JSoIooK^+j9G=zD zPK!|(Dc&3}U9p4E`au`7dRK$RfGivQ{{7X~zksYQ_K<&TowrLNPf%xe%!`$T60#Pw zs~&f&ZFbMf{X+uT25jEflXH<=<(fwywEc|@MuV^ktI8YrtEcr1ISGwCQT$_I=J<9+#hdSD0`3EQUp449kn&A$Bo>Q4S)NV zQkg^5Aptm%Z-1*>YFW{WsFMK42|N&@_J3-&@q-Ek?*OBW?2me#8w?7a;(_sS@Fv-- zvaRevi2Q+pf$?sOb8DLUd#|gam(sbNSJ%5IpLk)3s5&1t%4mF8mFl__2G?d;)ij?D z>Jq-Xxs^RLFdW-?D;IGkrn~OMxZiQH^=RdK_tA=Zc~b+`C!9yf4@E^F$(IN~sMtV% zfePWyZ@(($U7qhmbLudWsvt;7U?(~VFSaO~tfJz zTC=c!ZW33>H^r$KOc*+^s6wE;n z>TdVw?v`D*SFm`Di6Fvkz{aobJqgCjwF(;?ter?8GLyPyws?BBHJ&}aa{+7t=Mxhi zIrFWvXSNnToZd=d@*fkQoWF8o=f#dNx+Ok+S8%_D`@#xZF;0 zz{Ap$9RbC*QHk(k0B^#t@FMx*ADd%bHBSs#KC!05d7xtB>=Q(SZPr6qQN?cM~pnmd~Y#qtx0(@cF zqu-)buhPgfUu6vd&Se|ME!jnV3q08=GN@6woL5FlGX*G|5lqA;20`S6;Yi~;x-vng zBW%5#`k{oRC7!e_{^=5f8CXurLGh2nZC$QKton_MvyQo)z-JH@!VmGqAEbX z9>i+c4QZEe*jDr>gHA+XQ zN$)0w*<)a@5`>;{ETod4`|lH^N1NLV&>2UXzy4XY(^9mjTtb#oWj~uI5N88gm2ZYG zx30D^5Q|S3ZHO18P(xwf!mt6U1OV2YNs}z@R6X=7wcXXU=z|85`|a0Nich8vp5*%^ zT+Bvny6ZD~{+J{>0)vUSKfb$x5J{_fFMSu|mYiFiex}L4TI)m6Kh-fMdrXH%kuYhh z@O7iBkN}s06`!!fnC)MZ#O#2X{~OnI;(;Fp9jLGdZpM}!|7PNm$tQ$cc0c5AKt7I> z?zvPFU0m{X|4ta_i$tR1B0hq-jPt26IN5$dXWL$0@-$QDCCLv391Oe|5HjYix)0Es znJNv7J{&_36A(z7_G!NyN|Igw!XfhB8;XAZ7_K#A!8i<@*4aQ#qT;~&tQ29@CiN=lOU)zSFRz47s6 zd-U_&yBad)59>>>8rhVHQfRt9*l;jHX*gv))$->eh2Ln^g9(j{wZ zbmR3h8s!!mtb{d{xW%xB*&{vWKw^@A0b!^yc+=wHwj^?Dh-3;T^Ii!0yr$O?{G}%o z#u<8ExuK>?dG8pa#>1iSsiAMLSb-l=@|8n#A0-81Re2JZOQ^~elTQuDdu|Q(;9%=g z;!@^tq{kp%A%AgAm^Cn1K5>+(%Ah86_0CB(ee00H!XvB{N`gd^8pqD?h~UE#P%6ZE z=JGZ0<6qILsse8I)=6QkFk``8TI=FryaguTJOVhI`Mo@|g7Lwui*M3;@q>jVe5YkZ zn;*FGpvoNH>Y(fMYrk$BxgC?}r1G(<%3#{1FP;O!#zo_kzZdBzQh;V;a3<~Va6%YE zG)cJKz+Z04tly8D%5Zabh14^-Y2DB!;i*k@T~aT^m!KoN;=mxAO$kr^ z&cw~Z;1SjmBa&wR<+ig{RXN30F|M@VMv3=>CJc zA(}*LnW@o|zU;lfPMIP6L77bRJXgVk8<~{-%^gN5?G$BbG5o7TLb|T}kGCW##i1S^ zc+{DlHH|cl0t*Tr80V@DET9u8^&*eh++Y@)>UWLy8cWs~j8N5{=L+0X85S9m3l+0^ z-i0;+7om>t=SQEWoUNxmygqGyYM^-0&#%0v^NC=<>u_Q9v;V~rd)NK1-D3*zhrbUV z|4RXEZG}KQR^A@6yodNHdr_9!H+OowtTt7@dM5T$RFpdJT4{yHjawN#rj@Wxd(Ys{ z{}?$dyoE2|rF*mf%4eGg;O8#N@dk#x`;?{hkgkfursuQ}8=)%x(vqX#YdIs>OAwvi z+hcF!`>I*~hx^M-&)**HM=|4-$0xszk1b1|j=Du3j;M8XG(g{KDvupJTzppYy+4T$ zz|;{I7&Ow#zChy8gtGL&@yB)P7+$xV(V>>w!$e&kvm`OHC+sKgBm*_&2VGwh3M@fHCYEg#I&; z!5~(;5JueklTY+ybLYnotKO(S1ARhOEWeGb4X&_2$!%9c59J%oQT-h9sXWCIcf*C$ z3xoZ-}} zNF@PuG_Q|dmQCC?o%Wb6Qr0W!5O#L<%nSEM9FfamfAW&Y9~T2#*3s%jB&R&93C)$3$38_ZnzLH_2#|&RdVDvn7Vs%Z_`RUmi_uif(U;2n1RG9GX6VMuq-|JCzj*y|q!EM#Lq{vi ztYU#?#oafsMqlwJed@7fHlRf(AP`j9rexZl;N0<&7pPB)9P>s8VJDG$G+0;8w^`>f zd(!Y^@$_P_lYb zm*V22J~N>jR¨gXgv-0TSE6oM}*@E#Bw-&c<={YCh9T* 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

      706iC5hk~`>p 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

      e0t6dy7ArDZ}0z) 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�*2PIqm)R9q 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%0AD^29yJnmaWH{h^D1(S)5C~1y~Ckhv{*^S zhR_jnYtQ8`EX`0eo?-Xt3Fu}Fb&w;>&cqn?nC&BBY4o`XYQVUV;m27YqU}h7se%eF zq?}B_6AK{H95B4}G$%A+7iFpZQ(t%FPr#0l zJEb(mU4z|D14wfP2_wE;J-(0kF8*;8(r>u1v)|@O+^$as1-o~2_L48(%pE-V^h_vE zV5g%dWTcMuF!8wA>d!7?V!*Kg@a?!H05|oWFSkpzQPUM{(_s z+=L(nFm>X4EhBT(5Z5&iqiFE;5O;#blIM7USiyffU3s%zK`{}goB zLnMMqX0zEnDktX=n4+HLx^EzeGdkFTsr`*`S+2Xgo0^>>5&@aLYHFC`RnOG|>S!ZU zY#3&xAFZ!GUon3Zd`4CKK;V+p_4kN)l zY~^w}pAz(>!l=LBx79aP+hq6daJ_)thow@tH80Z3-4`Jf!GQ zJ+NPH=<@w*&0k&)`BK{Rs4D6M>X5?F3hQc^h3fkjdQ5xVYm#Rh3<0K=h3cnR6-f&g zuFucdcl?AsB7L}v$niQ7zP<15oRZkku}Kz8csN0POuW`X;Ju~tbb@rhpq_67P>0_j zWMB$0)W(df{fN3y!jt)q3AOHcg(7&Kjy5?nGv-&5LL;xO2uWw9Y6zBo)&Su@?7pn5 zwyFfECKQZT_gc9+a(S_4{pdy@vzEqD;Y}sz%l@h+NB}(ah4osj?0DIfGIM~(M;<-^ z<~H?2Lj5a{gr-^fghK+WRpB46Doxc?+VF)}XVhAF1xoUEno*gn_!_uP$SIEkr%>&~ z_=-qoh!2(BsDop?ebj>Scl4y?3nr=3w=B@D#J(Lb6IbI~>=`2f3Rv6m;UC*X)D)i0 z^TIZlMklF?wvoGXha1yU=j|2yqdjtl=WQ_B!=u2hTi~Hd-|m_8NB>5HUnI=F(#G9S z*UU`%-oF-^xn6xwV@JgM4aH&IFD2>NR56ym3Xxe2wu2k?b|146x(vHL#|hv<4Z=c; zgIf8&x$EjIDm2T2<`4JGr|?X#&5;88j_#e~glF>2I_u@Fd|&sGDYKc7u;Kdk7T#lgGh1qf12 zLI8r8q(gtj1?vvW5w63I_HifzeLkY}E$3~q zX7y7>7zoz5F9IKx!>w)P(H9O|PibTghcybZ{fM&cwqakh!C|d9O!UZ=cB8&o@b}XN zKvI1~NJ@%}RVu-UtVOSZOFb

      +8dXoZwqTKjN-})*YtjX7tG&HlJFNlv$$(h6EG} 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

      ?)v)r=H_O% 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

      -$R93^x|r0+bFE9P7Zq%R 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
      2wm1-+!^Rlh& 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 Ls)D`bPOZqixhjG_CR*3>+Ew3Rhv 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� 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

      }7q={5J}E^?!z4*eiLoFH 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

      Xy9PtVTw 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 z z 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
      3PR8lzP@mo@ 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

      % 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 z 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�w;RSmh{h0C1> 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 z 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

      )FI2Bu|j+*qdV>6_< z;AUGyC%sLNq=$|mP!1rlNk#Va!d)VA5E1OMIS0h!3jQYi70a#cjxy{xXW1bgdH*Wi zedAYOoYQf^zW7vagdED0H19mIn}iATRxWkw{^oFMxB=i4&KC~Si=FwOJsPL1lbHSj z=(cqzzxeZKxHdK-+vRNSS7v6b9d^4nZ{K|Lt1tih>tDUSJ=`5eBConGWnR{0U6yrO zYEfMqC(+f70+Nz&qLes5IcUhJX0*&&?$67^xzs@QUYT#@oGi$U&#$jT}W&9)`NkXJEIF zoRTmi2@%W`Kps*xQ&S_WR0#r)6cK81Zu}Dfua!MjhMBxCZVcJnj!~U=< zD+v3;VLa?0T)i%JUDm}B9>JBFC|QWX-Mb~1u!nc_N4wHxe=Kdlg$Kew&2jOvsZv7( zp9!}OZE3)3ZQpJ4Kbk8fGb5PWZfA}%^+4Z7_-$cRq+d6xU$NR6D5q|ChOvj-3s z zF^yYaMb}?go!0LdTzUQ7omwJ^Sue@5_9va+`yzBJH=%YZy~YPT5D}kuLv89YHdYgP>Ar5 zS;-?T4E-6Cp|_PcnkC%b)v4#yfoOiA-DI!dr+)p6=tAt)N(yEGLbzj35zSGJ5Z3%i z0a^iAskL2gtvZaHMUYdwlh#bO0AiVTJ5zPjBx$$XwKG`NvX%yF*HV^wNl6-CFgBHs zmaRuOUT>nmMua93(x?dyqa!8?1360`BsGp?o^`N2M;v^(Y!nLexnd@3Y zz3*F0oJfR)JEBN|5GQ6yL^(+kPGW9uu0^d>E7hxpM!2`s0Eq=GEG$VRaTc548PZbS z7JGGU@>0eKGjle$Qdm%c*}c;ZJQ~fs2_*}Vhz8~Xl7kTpPR(nt6}N;%_%bo9tE#lo z?$Q-8tko@=Gf_}@7^`et>7ERa18BQ(9;mrAZKYgzHan`5B;m}GZgkLUx`zb7bo?QQPN1xOi z0)DxHKYa>+@$-Ed75?I>0`c-G_aXO_GlX}enAY9UIE)MkNNHn53q{k?>U@2YCaOj( zOh#0Re2Z0_x=AQ`L^wDa#~naV=OkJSQKR*GR8njEm$koN^6p2^O}PwCqn-$9pEeI-v>tmX}o)NcXM}rbA5RI>iX5) z_3KES z4O(edegN%x!gMp^XaYm#+0KJC-t<}fDlrxO-0(AHFwTO4gx&rc8ghY#caY8p|QssIcp_i%;{`ymgv zH+NT8*ZZoW9`nO#d0Y<1{oVD^Pk*xc^x^);r*FTtc@R6uI1c0O?(k-Ryi4Q6DVu9i zH5e9hvshNItJ_-Fhh_b^)ceIh6o0fhdlV0AHKnbuZ)-cF%X4_K%w5s~>daOGwHPjl zyj63Fr1iBYZk=f3kg^C9vhdJw+hHIHXZA*cfB6Z%^vM3TBGYa^ZzGs3BNMg8JdK$j{vw$BAL$LHru>d6TaTFpKu9+D)6kO_IB z=DXVD9k{BV&+|0yZjJ}Fsa8-v?5_4FeZ=_zXr|{HSRa1)cAh_c_~RG1Uw!lT>(5?) z^%gsP#P_FlwWs%^*26g6UERL@{O#?lyW`a{54o+wjRVt~Olz%X>RKXvH|!4k{g@=d z$K7tXmz%5IaW}Y@vUZP;4!N0oSOkS{YJAVlKU+%L|KlF)-h^|^qg9Sm8x^I@??3#& zBJ*5`ul84W`~4fz-FhFr%{3Dxy7(7_Hz{&7uC}#!d|k@vsXjcGhX1XhsY`1kUCK z><|tl_Z#4^!hbFKZrooD*JHZk;d-8K=fkU~>(B1T>vxskpS>21TE_vw=|oggSdd#v z#LT2lZa{D8(B2Q*c?6eC;4eLzoKeqVHniiR+cUzX(HMAhO+S zN>g-ccLIo7m)n?VKMcolx*o^lFz$I6Jw+w2t_}|mX}V6S_ndQUj{{LBw@8o%no;it zDK~BSzT#4BvRFMY3n098z$6hLM&>+@S>4r?g~v3ZR$tK~@P-wDI2=t%6wSDtx?vR) zi*U}8B(*+nks+sH+8+1ye^p zBcgRgH=)jr$#y{uvDE-yJl+;Uz_*&q2K)dF9UEBa0fDQm?YYT7eW^bJ)O(P-fvhXsuHsJomdgk5m>h{>TN3T_DEn$ub zQ4!|GO>KyU2<4%RYjicvt(HkGIB4u?RX8HV-Kl}`2x7Q8q|%fVRM&Ok_KI4HtI>dzIOQRwR8?#3au0bJcDtQvE$f;@ z_Pf1^M8vWzr_*UZ&udxN*-W*IfHh~{0J`y28!he5nLBEAVy&fWt=nv9LVc7Ha~96o z6lUS7fQ11>%#tNTG!}0Y001BWNklt;{b?m_j5y((_l!Wx8V>Xs<6Fqncuwan+Ul?rc45WKAg%+$w8`$&|C z8s$G{0A5X1wG=JYi@IuSJVvvDlax}<<2VfCFbq73=5Prpnuf83qnlm?TJx-%u?APD z!c>w6cQQwZR>6&zKuGAI?LZiU!^I&12^MbthtgLwv@Vhez&noWX0BGvR@b#DV1Pi4 z)=#=6rY#@f#4IT#Nh!0iq|_%h6D7JVeP$NTa?kw|w0K0gnf3xh>x*cfbC7^DwizEl zxPyq@5lpdFzW_%tN4}c&MrR^5MIu)d2y@pca5dUO$EKJRZH4O?F*#_X7LqqxC2FL8 zicUP-X#FIRBm;3unJ3}g@aQzJnCGRME?aj!OVh?fL|9XCv!>M(YTo6@h={jI5!Rb0 z`ZV!CShW1ZJj_EaOv5OMf_}n4`w8x(%SydA6q3BKl$n$l@2B;z)HxRbHb=|}eE@LHc*OoRet#7|= zknYfT&oD$q7+eqsa6+CyuTb_tV3=7FTOup2b2mWgq5$nwUCun5ex?NU&m8f5uR@-+ z5aSyz%!UN3Br^4Nd z!8;}i7Kf_Y;=W4alo3`ntomYXyZvr|b1OsMB&QTE)Uarc=8Fphz*f9I&h>HD!xQCc zoJLh!YKcbn28>&OX}c92Uv3MCG7O$F=i!(~9EYG$^0b?F$J2-J*V6|_0knG((2K=v z`?q_an^#q-wG*Tap`b(q2_&as6o3Nbkf&)HhhZFY)jBWhyey~FIgP{h-SzRf-%Ue? z`#M)t2(0Qlm(yIH&iXjpxsD;bX&T4F9x__cIE{zn4opk6qV7%t5@KNzMp&3>RdZq< z^M1@%`|;+uyB~+3Ms$qJAZocqP?O^EjTN#Os5%RBz{u0~dg|RHkPUIUq+TH6oTn^% za?w)EtHT)2&1=-BGNEmMO_+k2krIa1UQR84$qB;99(%+HXD8ut8gt6?<5|yDB&T6O zkZUw&Sy$IZT{WP9QMf}L6%dWZ>KaSst3)I7Krx1g+ft>BWSd|}E1!qM95qlJ1+GzR zEHzdO1BR>d?Qh>}dqf&G^ zJ&hUD@s`GXoU&G})gsoGodwKvJ>9>XKK!_Q{rQwIlSL@VoL$`z#zT^E$3qGR4a`9_ zQp`rlNGfWL$LdejPL}ij`1-5e_|z zvgwt(i;HfnW|FFvQaATt@<6F|UPT?C)-|32YEITE4ek-H7Iv{JX>2&WKq3F^5!=jp zS=hky*3z;sFrhb0HGWhOL6Qt9O>5P;EFT}w4^Q*8Ov7v?R zZK!8>V+74Vo7?^2FisQatl*o&;q~oJEf0@RwQVJ_!KdECG2dd7zQq3I zKD9)wYBc4+9;vrHncOT+X9bI47{|l7za6JrdmL>B2Ess_>38@AbZbT;fl&9g)bqKV zPUYcIm$T{IP(kNntVBla3>TQ!d96#a$F;s+&WH8!${t?X!>d8|QSvzOtJklD&!;Ch zl(S6_Itd*@GNPK*JmPR*sWNe{Q~1zC52_njBU#O^!G=st7O-vntr4$1bD&Xf6OhOS z%FDz0;~#$9@0Mx5t97YGBM3}xzAWeY{G_^WOvZQ_IBaWmSJP8B_3L8C4ja!r1^+^|yaBd3(09{@~~S{@e4}tSeL$*ZnYXdvp6A{`gOR^X)HR zzqsQv>#101H~}o&rJe>#i*zIRJ*Nl5yw2|7s-}io&{cAHpZoo|4=hOD_0?@+bt%qL zJ*_C1;^yvVJnWp}Je{ivPi44q6SzQCED;d|*U`*k$|A?x8<8}Oy)c11%iwYd-?9rx?l5|-llL(wQZQRQA-TE=DWMd%Oba7jv*g)Ib_1y4M zGc_yAGUuu5k+ZZ}RU%HDBY9K2LEYncgH5YSc9kBf7Z)OkuvV1-rX)Fceb-y>o^q;W zRW0H0T3Ih;Q7df_m;k`ciyMn1iD0T-cB+K&8h;{8)d4fBgN7Dur>Gbnt{@yXV(11( z3NxrG3U9iG+dxMH={5t)r#u9W>DDG1!?(WA)@`m6{M=}xvi*{6Kpjp_?C?!ZVEd&T z7djlsISWbd+=@=~^xb#g{rA89TS@ZGFTZ{L`V|xJcB5)#9JgS8?IcwS*>-~KHzwao z{Q8|+CRho7apjYLvZ`Z4XP$7_*iJ7~*hac*N!RtGu4pY`V`<>&5N@2l?QyS ziZFH-W^$&~#=~+FX3CuqDi}osq+0J*?y+hk2?}aUz{Bftt!TTo!H9ONix3E6Zp8k2 z^fu6Kn>}h!eWNGV621m0CiY5%tq&4|8H{4fKRfMWzE%eRb3j{mJLKXrIb@<=5<-uc~LD9Mv|pV#BjG#bXivpNJ?8I9hGXah<-X9BB8tW}?~Y2_)E4go~St8B}1_Iw@OA zqFvnERl~|G=1Dxcv1&Dj_3###p0=?1<0&c%)Os`3m&{agZMQH3;HIP7_^$Q8AcV7o z2e|tE5Gq+6Jmldnm$j6#I)|%@XNH)$ucqp7G}Xzfr(%`DM@D2I4YDf41*soP5dp7r zpid{5vt;ig_kG9Q5BZQ&PXrG;U#9fkUMUPGU^ z@c$G*Yiw-aqGIU*tNk=$ilMK&?2nlq+ z4tz^#R~0)!4guUZnZYe~egfUrl_i^$0c|#A6EFh>Y@kOtBhm)WR>HV{B3%2tazFwJ z$PtF{hTBpG2Qb4H#Dq{(LLT2>yaC<8cW`h&Q=h~Hdh*LdtcA!bqlvccrZ%emO7{7K zZqYh-K~I%AJ(b=Yto5&*k556{pFZ^Lkbcr6{(awPyWp{-%vaNC+SGNE=!D~6f^ z8UZ(VS7-piRZ-NNvn>#SFfySdSdau|3Z`H|pU^WBBL#wCM2RRZlfDr5G*6j8_--pa44$NRZ4aC*njHhyJh| z_q$;?3=v++y3EVvatWf;_vBX2r_&tMhZwqa*o^>BvtA~9IQw}`$T$74-yO#OMl}39 z%}hKFy`)sdW!)e_LYze`i7JY!6PSWI3wIHggh8QDgKyO73e<8<-U+^uF&t3Gtf19X zAQHwcUuk{Zirzl!KT$0{@-U9WVLdO)I$P-04{Gh68pmr+=`e>eGbM;+ff$Ne0W*nE zVoDrp zG$3|xGMfvEu_K5mF&GwAFejkqlW_q?I)3}h?(UZR-8{*~yRskVUMx&6mI4_2Y7y-~ID1+Ue|Yo5$A6wZ?0U6t@{$tBRl`n;olmDB1Gi%@a#t7 zKilrq0FPz~f@{I_N!Z-7{cY2#`)%c4kPxTDeUiTKhN16rC%kEe)@OyUmJGN1QfM=G5zdwL~62=?<>gnm* z#vKgetz7m9HTNK*oVr~%9NxWo^WEFG?>{_ze4Jj7M?jX<9v=0@Z@&8G&;R$AtG#%5 z{HOo>Z~yV(ugyxM-J!z;rA*To%jsnO{W!e%YF*!6KKy;3rMe);8>$J^Vk>q;G} zGc|W+&N&%@RckW68^`_raCdiqJl^&DAr0MXZi^mw;}u`~hU`Y12z^zlFeeMMO6w635(nYaj6a?JsSDb&iPJjOE7`A2!z4}E_)+`N4K>eu`6 zX7{UK-W>aX`umvX$A_}d>pt@$pSS^;nOTK2-VI^96qjdgoPgF=GYWMNw=6k)&(_zUEF<{R;|mlBJ(f#?O~>qvhr z`A>HF<+zJ{och~`{>6{OtMBCamTx}B@ECcKSQAOtaqbz6RZUf6sanQFW0D(5`<(Yy zX{zg+*-Ah+MfD1dwATBTL-E=5^$arj`6v7#w=3WFv%h~PxzLWU)6M?)t8aew`u;wd z>18R8Q(32Cv%^40%sc6KyY86AeeOH(!};O7Or_Y$Gg~8u#3YwP-*= ztESa*-*Mk@ViWQgcLOIWrl<3%@47zaB-L1)qB=3TJBU+8fP$Qz2)UE4?+6I^vRKiT zn0oILz|3_V5rUK@cR8g@EM{S5K_Ns=R6PYw{PD3AOGdQMEu9QySw}Q`{^=I z)2wP{`UH2PA#rqtb|N-`gbl?1WN5Sgr7qk?8OBy1WBWz*Pt^kGc~#4VU=madpwBML z2A5YHn>Nh$Cs)l=%g|l1#c;Dt5Q*9`s?osQ!s3b#Z>gYflE>DhW!-dHOIhnTF3Ln$ zmw8?;%)T4)S6{yT_S;|F-yV;Lo6Bi>_;~)ufB4<+{^?&HPM4*q*~X24!<#|`ZIoUj zWJ$x&^?g@Oz$#bUOraX?LCzeqDV0-QSsn~$s#%YPI4`zc*xA`0W)2f;*Q*R zUG5y9qNe3i)@C6NO!LIVYPu}TvMg2szA6FD7fVK`m z<9(Wit2vcwWYvx~5wQ>vIn1?ORF^fHX0B70`PirXUH@{Q?{{)D&?ra zrTC&K%q}VCoHK*H=yJNu=QD&kiwNgF2STg7j=6A>KGn6v!cx_;BizF(2&Uf;qi2Se0YGv0I7a}Ah!xHpfZa?D+=pZBfdJ9 zZuJtaO^vFXT?ewlO-aX4Gh^k*u!{_GtE=s-PU-K1#&*ycP|A)Kq$ z0fV_Vi#JsS{^Tn^b+9+4EoTt7ce84M)>pa*@-1W!I)Fw%f@hM|c_r*1X&bStdn#?6 z%7$TYM2SBzo3Fq68RUIE?my!s_OoZ^djIF1-WrLqq4A%e?(4+QGa+>-j--23yK~5?>($I~Eet(z)WnSE@iXFfl zChUk+9di^5APf<%^D>_&I%sAFm;%{|jgm%&CjcBE4g)MAG=d-rLf~+MLYXLaU7wD- zao6WzJu4!A{P5o|mo-q0dK-I!gUzMQ4FG(2#FxF z!LQqSf2#lM&co=0$G+bW`x{+a7lGPK%;64~);Xw5*y=q_9?^IGkh^u6&(k9XSC%0s zs^Und1%WJS-;D`9tsaZA2~#4LNN@%s458V8LFQ>=To9}g=GX)+# z4!8F*-j&jql6aT9v_sdGTG>YAe&5}G`SO>4s^{tS-QQk*)P2HDrg6->eI9Ra#+$>j zJKXk%ib6u9x z!~F1p)};$iwVq>ylM#V9aROn!%jLhvB%5u@jN5t?dY6JIOXI@$iDtKTXGRB?=UGOu`dY<1^0wpkBHJ3qBTt!AT4xgT$b{Y#de zBZCE*Jb~Do0dZR#!YNTr4pp_dPLp2FdYNpUoQtQW1`6ZZXaTL>R;e4zpdK2ow)z@Q zQ@U`sOpoNY+`Q~MOuECq2Rz+;nGthQ>QoZQd!&e}H#JJD$n|{25k5)bwEQUQIBfgaUD;dA- zceg{w!_8@U@os$aW_a;kdhyl|A23WM%}!1h62u|di3_k2oI)a;gvaB{h&F&vfL){uv&4UK;*m;1b#LjTsd)fIiH75ir&@d;=Ppw`F% zn8&heS(eB1<>91dvM5!-cp_h>4IZKyQswEs%RRk|O*BR{!fVqd4T9Y}8^nFi&sVQl7bxP6%olw(& zAZAV}OG?biLyI+SI)giTXn-P|!eAb5Sk;%cga@b&rzR%xMx3i7PlzB3ku;9oo`>M2 ztn+C-N7&q;sFq$|W9q*%aJ%K=*V_is;gi2dD~1|@6SxWzY%kg(c#UONH?}qg(B6+L zn*<&XHCN~w9^{q+2u2a~jLhH)m`Tq4us@V_XVYVp`XL^ngaiV>+YzjvUHNuVQK+j6 z&vk(Qy7!nH%CgLfh$M9>_rU?US5v0yRizcMsxPDli3S3}?p0hj+W1zOgHgmD-&n4m~*OV=kJr%eWR%t>*b@4DFg0JQC_VmWGZNz1Idht^^d%c!W zwPZmACy%h^(Gpj+U2B2?R>uzjNISm~5oW4I>oeTc%~XrK5kTO|Ei_dt<6%Evmh)ksDRy0c|8P1_^Ld&s^Hf%~Dqm{0{U#SgPBQjszwdXuT}q-w zO;uIb5_KFUoB-St2+k7NM%9l|+(o4G8_v=e~0fGoR*Vnr228p)6_W zyJcA~)8uN~NJkLJBdn-f)hFS$e+MF>9;o0z!jtwf>ZsWhYUo02{5<7s6WHbkt->o? zBLIl7Qs(IbPwSa9^&t*9^Ri}~!nLYxGgIVDbB zRL$1QWxY(@Va#2h`SwVylU7s zLbO(neS~-|Q;4H7TZyk)(1@1bG9s=dU5ZKH3*RE0vx!!aM>k?z8;2pRVLU5W>wBCIqUHs*X{E*@#7k)E`HW5>r%Z zE_Ya1DOOfXghUdRd>P>uO3(-em1vaPO6005Z7T@tWFZhvDJT&r_5HE$4?{kr)Pv1k zJGVRyNfHr>Fher4u%H>NHKduU@0hw**QIORad)+9`AE#ykmnI*Ufk6}8{L|`rGTFl zbHDxVZ$E=>pM$peJ^Hrssl(W34_+U*0*p@^#rBk^Mq1qiI>bHj0=NV1fcl*sIW`sA z=kL9Vs6C}rxj72J5mh0fw20seS`pS{(MZ4o%Al^v={BCHY!M_jd0c8xFAv~cV+&#h z49LI;zDIY9d;ksb9?=0Qyz{sOogkwl6AEgJxl$%jqd;s!lz%w?V$0F6@yMTd5;y2} z%~x5s001BWNklsic7!$p=akUe)`9!e?A9o8xg;PQ(nQr#yxN884)wQ!f{f4 zrLJG4dbDvSW+r18b1;D^OQcTF8HTc4+-lOFQtngN+fsDa2-@`SgeeIpf{?Kl_hqIa z-VNL(bTBJXEFj$uZtL{$ZhCyDI+H{dBQIK(WoGZC8*;bL{qAx)t(Tc0k~s+BRn875 z#mrq5U=iuM4nbwHWR?)M1=j`oKr-hDRLx5#RLgESqByhkDR)u?i>rE2V4t|(4`cV$ z*D;La?ce>?dAhu>iB33z?OGjD(DlMWz|D1a3O0lg7&I*wHkYMLa!C{k(PbICyx)(< zoBeJa#$kkMS=VJPi&mi-3fIuJFhz;g@b+PO^JqU_h{oamk6!Oy{gH?|9;Y(V8pmB4 zcSDv$5oKA==X2_*?-?FU*XD``JRz8<&*`um`#w{`#vG>BPBw=~utYTZYp!k=?tx-h z8M7c0gpjr(z*J9eTPHW9lBx9>Etb`WxySk7HovX5QQq#VF8E33c5podv||1 zpO$5Ta}>adgd@D1C%r5%&y+^#6M7*aoQ)(B=M=qEc*Q!#66l;^-Z;fxA-f2(rRZr6 z)h3la3K*dd4K}pF`9ATXkKTg}tJ!IlIU~5N_Th289b(xFGZ$z-U;f?y zng3-y-|y(vj_z-FFYfmHo5Sv~?~ps{emp(uL&?-6PbvYyK}3nE-yL4vfBCH=UlyGo zewaU=ALh&Y{rkS_`f+E~n=nxM91eF|%XHS$iPlv-gi}hSvH61&2Z@s`GcJ!yddYo% zkZ$Y_{y3G>$F~pfK0Lnpu1~i&H(!k12({(?kEb6W%RHN{=2P(t+z=tsb-YVsmv^Zc z=~=PN;pd3U=0jNro7=#{Q;b76f-7kMiSSIrXB+C|?!-b~vr&dHNA1|iCdF7~q};t$ ze?--U&Wb5BfnAyjiPY(wiU@~=sjq7(YcXrHmH~K>n$K%FUuHAYI&%{>v*iG7j$|8- z`wVl~!o#qHhwu6vxO$H#f1 zd8S!?a;(Q8?shk0_wB1+uHT*P?PY%RIKMs7uICpw`06^1NwRy2+@_BNd+!n`TI=fqhnaq|}#G)~8IeMLUbFdS&f!Z*=ob^V!y%$-nXbZibdm?R zzj^uH{?+&0tG9G_nTKV~ror$Km8{YSlSwM!b7Exl1}4Vw_1C}nqyN+&UyZk45g8%g zfB)*k568Fv^52*FBRr($q|6bB@T;@zzYg6#M``Ig6#V=1z$eljQAF@&`f+`SE1@hJ zazsqDPSg7zz8}_k2VWi^&L2Oz6&Cj}wX)9hJWWEpANRX)ce5YIt`p%j$-{CsD@>Gg z>QiP;rf%lB&wZdo7%0$#x-M~-c<8v#Y&v_H_T%n&7|XJ1DfO$Db-7$7$vF>wN+OcA zsG+iEO(gYwFT$o;Im-w%c6>@zRwN>bSW=Q)si06bkU31<6sE2oCY%#zcQ=n!b(+`Q z<=pit_g&Yk+FFXLwR$OBHK_`BGEyoc>eX<$$V-owhHjNM^*PCpXX^^*Zs}0@B1KBJ@Rm`xTlhv z7AK;RMlWruG!3#8BBInT7O0u~S`4U)ufnPFp-iojE0eI00mQI|E(wDx$WljpE8{lj zlybJB?(U|hN_3@zZWg;l5mh(xX(z4*@u^bL8ZN^e_Z9KE`V!f(#GF6c!0G#U(sD?#KX}8^S!5O-+n0$Q_6DslVL~`I}#S z@%rQW{PFSh!;f#j`~JJfhs!*bb*X+%0aTw`44L=4eB2L*n_Wt*rL4=kED+YJ$PIv* zce|nQ`zMIdBX?bwbMCsFQ&~&VW=G~8j@b2ici1r}68`Z1!Lx96Ud9ZnGqg-(9#-d5Dcr-`KGoKLV<<3*FpB^Yo~|+V8Wh}I)kPSIE7=s` zVY)8U`QZaRmdC71wWa`psmtj&=DS_K9puo_AV}~qH}k46yLc>t1*8y`EID%)$U4vK zbXm_AUza5NaXnuuaPQoLhT2MiHfS320#_O#+Gll=zR@+4BiwT)Xho(Bf#}JA^=PAVhCjJZ+2yx z+NEg}97dsP%ThRTCt?xg9u9@8ld_aR3DRJz?YrPM6CPj^=0qt6Q`OU!U~o5dH(hrS z89~WnRyS+SCl3TOF-aE5#Pyt9CBFjHRCLVUyiS)jg%xu%uL)cOa~u`pEmdP1b;x7wlGQl z>|LVast{BmHbSGU2XCscx_yLiAS|9>+?G&uKm~1YHh~3fuhs32Gy+JCj8#=6D!e-Y z2ha=f0qC)2ScWHfMnUipc>twPq17hN(As$w$$lbA{F?yobCi4ous$6W+5YkT^nQAu ze)`Zel$NmZ89)2D`rs#@RePD+Hwe^GfFfbI@@)}S;e|F$Qb(#a1>| zYv!d-ASR@6xS1h57YSk#p*pi`ASs4P!6Mx+UL0k)dHdz%;rpVOq8E>)!C-B??Rrk@ z>%$F1>OoNxSv4zIab%$+Jf5cyr^|l7+wXVeuFI@NS2KWw38uELLfG%t;`HWm z{qe#d=PrvB-f4eJvAQa$goRTYy6AgJjCGzreE5(%^u4%Rt3*XW)inY_)aQJ&OE>#r zzw3cmi^A&`P{FVoN@$zG-zZF|tlMHJgk0CsGtjnHEKDHgZs>3KL5tlyBO9|ted^8_DYT*FP6*=4r5z=2>_IGCbi8b~_i)ai@%69&oUQEq zalmOj=-MT#*?e!^Zl@Y@#3rBP`{fDAAdMlxvYrzO0WA>*FJNpK=Z}g}WMxd7qFajfa7Wx?QnkK@uJ`NOz--%X~tY z`aDnP_ing+JWr1&D@t(c(CPb^AGDFpQM6?M=Gc8(bJDsFD#e4Oxswq%_%%N(k*2Jr5%ltj2 zd3`vYYin5B^1W)eF~Nzcj-^Cwii1x-^*W=V2qxr|a^L6N3+IQ& zhYuefW?%cUfBE|Um%n^@`Gw+;zcR+`?=vODW4` zI-edM)@4C!a9*c|9bwm@k>@|1xgD@8cjx)RK+rbiR|`cZ^nybt_c`6edNTw?uzLgy zK}nHFkIB6l)MNITBTB@&`65)Rq7ysd)rm7AR84)R zU^yzA4dRE&d%klmQ} zkbR)@$l<5+`C%OQyYc9VSy%PqrtVc*&ACy%XOAUfjVk!Rk=Zv|(zBd|>jiclM4Pj+%}*Lhy&8G$GkrHC14=~?!Duc4$>MWA-&BPbvcN?Eug4r-cVSttuP9n@wVXpwJX%u=ybDgTW zy_zp;@yP6~;R;tba}_3IsJW>wODSr(>$`5~axW=cqtaQO>~r^GKCj4G68dg9jQzkY z%lRR6wPF$WY~c~1k$?Z)pxbyBo_=o5yM4QjlKFIb#KvfhXD__QwCk)AHP!^RY}^qr z!@A97yCh}K7SI(GT|^2=plmKB7f#gWUDxkeIy7EXW%9Cz5M5g`z_!cMc8@ml&XvRy zTZ!%wVQ#SkobuFlT}oZbovFJAGo>WtZqf*(RJYQr2r6t7B&f2k0Z0HIdPVIj7r0f- zu8v6VNDb6I)@FusuDcne)}H?uybHNmbo7su!2Ah_sZna?h?y z!~=k;MXYQ!o#xziOyuFydU||#{O8~OuBerzEX#V>A9lNuO0lr3!qj$_c^ebLhS_1O z(F32AtIw8mOE+j+AkVUv`kk5J)j3G6OBex!Y@(DL%vJFKEfmvLFtQ?3HHF<~UhCp) z|7e<<)_S9E?y6QwajTN)aCQn+Joz)5FJUzO1TN_mP|^Wf}UsKkRm6KMsirrAp9& zge6Jd8CQDaIPSWf)y!0DIX#Z!IF9`=bUDwfDu^MQxZz8+_qv0}Vz{m5p#QuMK+%5)U@2oa$;ETLlg(@a=Gi zIB_tOBuNkpVlYY0sMd$icn!LhaYn6WUN0fX6;A|Qs|UQ-D~5SHhwkoL zMHgyRi>S(Cp+)O~tCI@MoN{IslSb%uv!`v!sAh0#zruvcamTLV!648b%%| z=hS8HQx$cteX9_Z;>*0|u^V${cTlw`at&6521=k3ojpienI2J3HYZ74urvpyVB%i# zz|wo9aI)~?)>=A<&2Og~Q-?=zwb5{oHZRx8L-)bJLej@cOM zE^$rqtHe^9550EB>YG=~vYIZ`aKeZTjKC2XfxaQUSb!PG8z@{s+khBcVF7eN2UJOi zBhbSLO3mUp2n)d(ED*-$Wq;jADn0c&T=R!hZl53d_~h>Mclh~o{P{Qe49ty9tL547 z&gXC8__^D&Cq-OkMH)C(H%fA%U_$e;um;Rk&><>lTWJ(F(AN&$fH`NN!K6j(rk}w2CsKW}V z`VPVYBNU+alIr2km$f@zhV!)BO%!hH>h3|r07b;AI-^#U``s?@4+B}Cc90|ib%qBC7;*;WX1_Zgcj{h>(Iz%oQ7vv8 zIXjv(#diIA)f04Rz0jk@c;A*T6C}y7JKP?QFTi4Do7`&ZSnkkIm;citj0m^^Ad*bu zh@+u{QLWM3+~yKXA%|RSF&|29WKQ#aIllEg`@Nm zhd#NxE!K1rLV(l_$K$K7`@4JX`aJa0n|FGSh*L53OYKk)AOWIq3J@G_R+h`hhx3o` zV|>}C!3BnhMg6h{gi^n|y&t=y<#AmarjTho+_NJ&k0(o$Tv*=Os%k5N7_uAp zhgZkl@pd>IIqf34Wjaj{-|Muh&#TY20b$S2{{Pa&XQ3pHyB_KRdY2D5VJ&$yM%~XmgVtu8oDm$ z)P(yhW=u^*k^)vQi-v`@`0yEe`}C(ze`0&+S$F|G;lDNPFpzT|`yok2;PK(~{r7Li zyZzzS;nnLGUw{3@+YcX&ovEt&nsb~Nefy*92{;AjLaVK-m8D?h1a}x*C-=poLznY0 z`6J=M%Ay5Y8~6ybQfVz9?#EFiA8zjUhr_VjOV@*Cb&s-`FKb!M*URPf@#BYODcetS z5UOW%vylRCRUAG&9MNW3o{kr_)*wJs0c;==VGtZ7j>!+E*{z`tVF3V{i8&-lP&r6m zN?8_P7h9Kra*m)7ank}_9J68#UqY9FMU#_eY@~2{+U~CewLp~ci`ztD6k)4bA?7~! zH|ToKrD(ZK%Kb5?Uc*AyO2$kXIZ5Aj?mEpjO=dD0js5sC4=)|Pd3U+IVJhRz%U54~ zbv~ai-+x!-$?A8gf{f5KZ7cEXDb;F4cDuOZib_R8DCv5XKSgXe?CjH! z4G3sY{5ttd_9Ira^<31{vquNHM|a?zT$DOIM`+jnpO>aYIm^!1nV&DVFke$3<`EoEJor7Z3yBH=O5v(1ZMrhe#U z-w%?s?CzaS zJCTkkRmFqwDu(9I5XWa9M-|q@CNgttBeND|Z$E2UAqUxFLe|tX4*b8{FNr_(lU1 zNs_7pbps`9LUIiemDxz{5pEX3Obo8lHMG4-JtDk5mpA}dH8bH#7G;rUx-{+&TFU8k zK0W^J>GAZ#o45b@fBVmW`e%Pyp_7O(GSrzsaBQ;4weGE7jM|Cb0)9=Jn4VVW=NSna z4&B-el^IBkIuz8_Z==>$GeHjyXJ%n)c1o=!ur0OrZd=aQ@NQ5g1vw(js;t4rgVU;Z z?v)HfwP)(8uGVnds)ZVMWefsfqAD;`iwhAR`{6L|j{8F|DNL;t^Cir~oG62H5*+p& z__iN-zx()pI9*P&s)8tqROzjpC1*)e&FW3qlQ=T|AKu<=Ig;ea5?&qeW&(%^znH1&KB##BSuAqMmX&oW$;t!*0S|X` zHPxd>&taA!_r#QP>T;L6EFxtorN%@T@Av!tZa<7e*Z0%)I!!r|!z#0|NIwj@&xgZq ze?0BR@pwFZd3=0)ey+7lS5@<_%K#^iOsrv-s(~qM10`7ih%hs+>$=%XwoHJ?&6wH4 z-;B6zVWk$Wx@jkbG$;kd&Ldw#D3ge;<@)$6NUWfe2+U(nZ^!h0m*0%(&{Hp#VeIZT za9drfFV$B^aW)}ujaO7Rt@SdO%fy{X-{supE}Lszw3ec!gnkwYOK!T>EE2kBK%*0f zl65Ur*R{@zE{j)t=_Q2lgqf35;?(!K@A5csN{G4tvTCVR9A*@_tur|_`-qS$CiSGu z&WSjIv$HuVZY2swh>PdJi9&0ESeTv27?LD)gGh=ZfjE4p2?XZ|w`NXkWTCB1lv%_? z-N^Vh%O1D>HM=UnWw_T`*Sbh(qh}UL5nK_XH_K|KDW{Y&x5yGGvJjD(VhfBY1 z?b=>)a1mi4Nle1DS%ZLJ)d5YMC5v>4a{`fRRCT0g%d(DLB4%nVLRW{nSD?bHyBgHl zh$YHXkG@lMK(eu@8X@{|8OY|M8bFnqS~U$GNd$KZv>|#Aq2yy|BymS4mc@_pp6DW)<*lr_r()4Pn4<09wfeb9*1yo=Ku5bl9U<3}p zJ#YXJBmr?VwOY(Bilv5MV*4_x`BHU) zRk~iYNIyuD-Y)aHdM(vZ)Ri-jyZ!!f&(dp!&FWKON6NBZS6d3kK6DanUQlOXb}r5y zqI^nBM7{Vf+ub@pEVHfUT1|btbRF0UfSRf?qnf9f{Blk;00CCFrPfNGMaDz_@Z0ak zdHw0r5Bw8f&pzAghDPT9>LzkiV$|T&^9{POTLDblYAMPq=itdmb#0E2oKADT^gkN7ZW1S;ny+$D!8p_~pyp-LA}sM4@LBnM-2S7?Dpb z`@Va)JAV7&T~)tc7Fbvj$G|zv0(y#)pXf!zxdE?)x~WUOh$H~a03l}{52uII!~4tQ zdAeMzwEo@pSDJD{hP0s#eW28HJ-=@Xg%KyqFd9 z3avzyO2M+A^hnHVx|RashFI0(?4I=%a8x}wA7j0CDnfHOHgIE001BWNkl8;@`M`}bw&53}BX_oeGjUY^T(p07`Jxq=G3y6L7w?SN@nE?++PhoAWUzB`^) zgo2X+#V?bUl&_0Q`Ddxa^D?9GQnz{=laa3f@Ro^`_nF`PB;z6{dj-u zc1P)V;6c47TU?-2DpvJ1asmo=>!vQ-M3%RwiQ53)ttP_9{Pg(c`SI!S?)30*f7lOQ zru~rWq5J8}?6wlAWYX2AYc0=;=Sq(gUuIobb8Wb(!Ii3FR*aOoeoxxfs;-my2C@=| zvqsnVl9EX7bALRX#&MS^7iwP?N8I;~~4XomQTcnsYf+KkoQ2u7{3a?|TU435Sv z@+R@|Izu6X0OY95lv85clbt%d&-Fyh9xAT1mC$XKVACmUd!VY7qU&nQVr9{~sLd6V z`J{F=EMY1EEnEB+3P1$gKwJ3fdL#b=3a@Unm1|v|mg}RrY3YqB#9d7%y)J7_)rM?+ z?o!T@1rW04%EOe1iPYiDLTTuSQ@?+hX1Y%5zU%sj+?`lSUjvr>18 zP9)&u#w^1)oZh_o=C|whd0i%}v)l4Y@+#_zUp`9yN<85;pZf;I{(lcvbVEJT z*nuq*46dO!*BV1CiBe+j5=qip)QcdoYptu6LKcaLxhV`ux**Roi{zAYX674OA5d3J z0x!!V%pwT@k>muCOhjm=$`*sxBF*!|%}S|;!cI}@#tfXAdA0D2A|{cPQ!loKp9Bon>n<;MFqzyF4EMzdBz3qOU^HFJJWneQnxV z{<^nAH|%TcBlGrVuVykFArTA!>Vbl~x@UMHUr9UDj=X2|1;X5srF@q&kBJ7R&TQQn z%6QfNyPaM<(ebp~=40_11&=`YLd1i6DXYU%N`2S4h4ZV!6a>y<3R5F?L}Sdu=_N?; z){s&PmmDOK8lW`6$(zwQvxCVD1T%=-`bXsE>Z(<%)`;UV0&i6dtvP4!x|@1QlX>E8 zwGgn85UHtu-rl)=-^@W8ykKfPTw!K13-Hy|l&wS~qTKf)a(;fE&gWYH^nAX&dGqGohxaL` ze&`*WEUdYUH^6@5&u$q>F#B3I6KFPX%Y0iaeyffNicPkKC$F1i(QY zADv=ozsZ!vlsj!{%q`iYEf8&0xZP0OT6Lph2lox3SsWXgxs__QMhMeTNIvDY7 z=kw)qnH-dp2&XPL7PFa!9ba5V)t7F8NNSHmL36wMYQyq|)RjaMVmST(93aS*0F(};3ifJwN zGTU{@{h=SnzVEZ7rKr|I@D!=Ia0*S}l;i0DU^NV;Let*)i6MVHl<3I~S?OS?Ml zA~1`j#9fvyOA>cLD!D+7U*NR3SkzdVO%lpUoD)eV&JH$m6M``W%)-uDxD)EN>!lk~ z={xNbvWS2U#9C5UQ&ZPpG)SxKxFPYPZ9kn28Nc?1TpS!VRw0 zlqAT^loS-+XCy7`Gleh{0Mf8QZ1dBtJwy~+fvcKmv+eS&VHVwIJomMq{P`I<)v zNW_^r3-_5t8t_Y^YRkG>?IXsL25@lGN`*Q?J=U;A6}#0-agy9jrNIP=U!%(I>O?U+ zZE8eF!s0FlG9@>LIfc)jS$Hb9H*5-F4&KneEfATj#>;E1s&K!72uv*ElD1aVKXAO_ z+tLQw{_SH+d_vrq+R|*~(_7g{jnmrj)-iVv`~8twAD@0fkmHT-X+UkTR77J2AaL1E zDgg|1;5|rS3DyH6FhOSU1ihk$62cDH1ILEj(g3Z+w#g;LhjO?<0p0Srtp;e}mKj}^@pyW3fB$y= zG_7CeS__(xrQIYEcw-wdqMH*vHV07FGM%R}oemFo^Wx8w!bmH;k~j-QA;syeH6^X5 zY+$_~XqU~M*ScfAH@bUTmM>E`uYfT#h{*tRg2BxfwM+GCHxERwX4h(~wa!~~=Xbq# z1&O?xor|5Tu13XCeVOfg(NUO{*JXYD{FwW6dN}S*r+@kH|ILyF;RQI1-NW5+Uj6ZT z!4}sULee3P#rx~T=-+uQRq?kcngcNo8U|J}F$^qbvr zmpdtLvzGIKfJv7P5WrfSS)sg?eyp zO0BhOcmr$}rS99TLVNyS)$9MOqcMYiWj|`!Gom8ODeZUTZs?yMpU#id)8nI??hoU; z_Ydyn)6YL-)NdZ{e)zdUmn7Z~(p@-zruw+nrwbl0c)DU;ID>^miB#M&EGs_Z0JneyQn*vp5m)uEC zG0@cZwQb9HGq2UwwM>&<&#ONde^R?tKeKDv7-J#wjW*>I^)4fZWTV)QXim}Ys9MjL z#~)2Wd~(_uQi0azXPqWc5wcl^YcF?i^>ClaD!Y*`unW8r%K2K(mpUAFeNKjK-hcW0 z_{Tr|Wa#(DZ%y&(mPsk_8GgeV|Gab&Q{gc3|6(4d0OXnK69EcyzhD6VaP_C zwLNnZ&MA=y2?-I%t1fk!NW_TiQgy9mEp@5m(2v7-ce?NT4lyhrDpnCi2q4s2wN?OK zm)$%i0Z>Zd6l~d;g%ca}hC`*4+|l)&q)cElcu`o5ddk_I$+SINYpLVVkGruShTL_g zTGqAJ8g|}sB}Igo9a2{CQ>k|jBu;(Gy`*j%L1o%tofa7Xe?x8mzT+0MZ=y^=$)R7Q z_Xf)VKL@T)JB1XMaJDu zQYvdbKcD~o-~X-eyYGJgyMOxrdv`b0Qfl?mP}0{&tj^Y>-AGKqY{n)}8{m*_xbE!} zg$3*uMmJYB_nSTx)22B~5|xh+p4}I>MVJ!{LE*)%niH|7On0aK zzB>l}I;1UfViAE`(Y5iSf`rHvGu5@MRznNTmUStm^wJSimpe&P)>4+qwUjjpaWBlr z{eHiX7I>g+*Li;Y@>x>OUBBP&`o0%Q^E9g&k#v0)?g2LQWm(K7A`=n7gOaSO%-r`~ zN+||7BX6-bY}=YBM7Qk^4kzYB)c5@`49irOsW$Vk;F&X|(FMd^Yq^q-;(O_P895#M z{>{F>+vh`%fvcF3n^n__TCG+s)rz4ARD^{{P&HIT>$=p-gt>I@^6s$j`!0zr#my|| zPIBTTlqFb!(LS#0x-4tCOzSjxb!rssW=SfkOVWw3q!cXy4W(XHwc5%*RV}sc{jO%# zn%D|51Z6FXK$r!%N(>g}1Wo{(hcgFRVrB;Cj&qmOF7vVauKK{d@6yOB1cFI5Vzo5a z)UdyB2y#wBnK(01cmp}O4QaSTjYAa`@nBcsXj$ zDRrHQq?EP?M{5c1J_VR4acDTONJ_#R0b6g36H_%S)lAh4LM~Cqh1V&sx|ULtq$sCA z;GEOYGbILt$cfZ_T}w5+l|aFV*Y;;)f7%vUC@9piC22@Xp%g6+h$Lo_obw2PNUP7# z(5O`=$|*@``jy~{GlV=uSHgdel85fOM)0z>Z?|E*cy{CcLe|zH6d#0`DG8Y4{QjXM z-GZ_IqMeGrg8XfrumohFZ&h;(a<`UQ1 zCvy|NY(;qZjO{jNZU>r)C(2hx=UU(e*aHKQK@L_>1uNWO@#8)7PDHn016YFXHhF{* zNC3eqj5fvF8&nEn%Ul!L1Sr_SZGzAo>Nh*L|154x+hY7Gog};}ix5DGQ*+C>y^yyu zoxZxH{);>N`gY&mKHlcFKG3bQaxz8Ly0{irz*&h^$g^)iEfFO`Vq``lNHF`*M(02* zlmnJ?XAgPYcEu2*@2*<0tQIQqUE-ljdCY0Y)}fM>Qp<&yr0=*-aE6-41gTxBUR>9% zSI7sE%$xvJEQ$$$$dC`md_2snuGhtvRg^MP$C(XY!k(C|7N4(P3jtb}W%@$hx6)HG z>7DNC@_zaJ_W7sNr^h0F+1(RKm82k4r)p4hh84HyGe~3N8q8e@231VRV}5x1=EL1? zIA9o!X{qHpT^^U~<#u<1s`MI|;dUF_B5)9eAZa{{6w`1~Ey_7YT)#`E_^6x&p`}FhYf8TYpyDoZr1YY-p+Mo;~oC0t|B@~13M#F8Im0;$a z`(uB4oAxIRy_&A`MX`8`%v*rOmgFLK;}mcR;0CX2y*^*^-R^KdYEOa%DY-FG%H!A# zJ1vu&ETvkf7_)HloD7u71}YC&-|O|=<bjPTm6a-(Mfwir zcCB8t$>_9PEqN!_k*ix(E7jKODnObleL5E+0IAM;Ia{aJpFEBI{hRmq4q^rsELo@wteIg#E(Vl>HGxEUe_*`Vr)AYg#RL-Ym1q)JXLji6;k0{vUN-Mh zNKSp;rG7NY1@x>+x!b?{rk8gqmGt=L+9e!M_42eneV)Jkr1KeAqC-b8#+qpEM7snQ zH7O*_mAt|Vw3N!Va4n>n`+iKgSb3a%c0$fw?z+2uetY1zr@L==`}bY$n0(cxRIID6 z3z;GdX)Vk0xRyt=2~=OqTL4F+&W2nxZTzGgT>Db-;-%7k`6pUo)`aJ7jHaO1vHDn4}mn0QEbr1in4=i=jJ<+7INi(W36XDP;zgf4qe+Ih`XMU9F`9s1>*QJgL{ zB?zeldFT(_e%S51ahHc(Ka4@&Gu1lPdATn0WnCwNkqbNlec$PBCndNn=f^GF7s1e9t)mUoE?+Vg67>z3;}K@wxww|d7P%x8>le1o>rNzmmjpQk{&qU zBOMJ=b|+ zr#dgobTLlHH*XJj!}0z&pP%RRqxw>PQeT49%$$gfxFHU&V|vufcB2@)eErqtMKL{1 z+NP!=GQZTskwYeUf*V-j-z0oH;ttB!)n_$>$%yV$PT!s1{?nX4{J9){u)}BXCKFY6 zH4dsWJH!;lkUWt|=z9vSfD*|dr+a3i%+!a!Vx*wt7AVNrA0_V&)*Y?C>pq{B;jm1X z`Fhp5n5~<*`Rna$`$y3E?e=uWz5Nw_?yE=he_?U<`n#vo>G!|?y^{U(`1$hqv^-xP zr>QPecrL%aKb{V|K4o!X6!XFahFK}o`ReYyYezQpDQ{-v1b~J5#0;o|e5p${zdSu& zFHcD%abhro2_#+D@AikoY1oa!*sEF9P{nhzpzk;Uc7}TDhQWz|E@xrcc1fsNEtQ;= zEV%Yjaf+Z%U6(s^UW!60oJbhpP~Wy{wVDNitLw(y&~-_KOPS|+s->7W8fMVwN@WAF z2`?S3nQ9^v5`hRLftg&X4gFYnH8A)Ur`2Cp?@L7W4ITZfAg{k(^)IjTzy1@if5TUl z8E**KwjIU$`At8zrB53s8{s7r@~huY2GEPD-1ZSbF%DWu2?bOP;o)wiM9OtWE#zR4 zF{OPia}xm#x^9bCH_V%8%fmux5dAkHz9ecHztGii*s#5D(s@CTH+58L5&0|Kv!%E21+bBW|MC*+L+?qX+ z2)6UBL!bKouV7Fl-Es3&0t?IrzrP4pIUWwe8-V!MAG?Sp3$&h$k~z2n%Xh!nFoYTanE( z(Y1KJnh%Oy?)K?n=-==9hh0AP+;f!DZsrxuEMzfT%~zw9SdBvgyQr_VEK^yox)jRj z_T6|Ixo4wl6!`%OWnvMCx~kVuOIeq7ndh?1Wtm|?;}7|fxIaS7NklSJD2}UIORPl|@d~IiBpBjuu*4gO#$#h(2r-zlvqT;9`+Md!G)wi)UzWs5gTYA z($XmZVz8j$E0(@4DfJ>9F{4r`Udy^Hv%@%vII-zXR0o^5jh1Sqnnb-3Vrt|FYlx5; z5BFhL^Quhf$>my*qPZg;>N&;izAW+3qT1n2FPHqeud zvGzV^UstGu)Kd_yK@M|PYMItQcpvaG+_be7TSxn)7HZpl+tFO0WMmKoo)ZxBtuaX+ zu1O6nb9*Tke|c{7*9#0MGlrp5n^8(mL?+7Fdeu}>jAx-xH1(d*3yPvJ1Xexx;6&UJ zh{B4|U|Or2xz%EmVqs*#0A+K46Q_hcBK6$w`~Cq7tW>pS^~W@h`OT52_ceI|v%sq2 zOTnX|&g$oBO4z9e-~Vcu7=!QuyL;Uorl%jTKmF{pc9aJmM%q337gsZo5o=lf@>t6X zNL{B@f9m@=4ZJUOEcEU5`Jcc1VgK__E1$;_yln}g7^ zu~)K6YF=6EXm%j^Ch?n*-X6x&!*Abz=s7K_%MX9B<$AS7TR=3*DY|rMk5jvSyh&ae zlQX-t0tia5!!X?69p0RdAKu(`NlYuFX4bny|8T$Shkh;g)0g@AdA`m=zuOJFdzM}u zCBwj+hmHI{x|o_~HKe zv*WSO#o|%b4Whj*ynt>25Sqm83J{P2;7}M410#8OcsG3b?YbMEtXy$f@T8b;dZq;C z=4s|zMa={lQga^z*Htfi>GpSrF=5CoLc7ihob&khUdvQIRakGU*`O)+M5GHO*Kwck zd;7LN|JFXfo&W9W`al0i`LYMjM#b4(2qH*8Dwt;fr0dLA67Re5;Fxr}dQox{BPfc2 zois6a><*vZp(uqt$%VRmr(i2<@4ZdbVQq%6<`El2kY;%H{gy=gW^j^m83g zB^`R&5A&F2N%Mp{gDX&Aget%|P$qqxq?Wm+cYA2@w>D`{O1-41F0alA0aIJ0*{ ze|YmIpAJi+g~}6FCL->AC+Wz3|L$-<3{T(7b(;V1fzn=e~Isq$O8*U81$wTFU5E8DjPBu);1G2mY z)UBpwco;Oaj!0~~X#VY%GO>^lQPhj!<3qwxL4<}kpfImau*6Bg1eK`dn29^UmO}Gl z<%JP5daSh9)H=UzedZpFWokhHlperJ~bhn z-#pnk<=pjMKklR-&oi#`^25_|zAoQ?|K0b$|K`KPek{}c`EmLDQ_W+^yG(pP$_HG3 zH~o29@BfH#(dDw7y)3Zm#wbbZ*x8YEw3?DK1D>Q{tTNUz&^7mP(rU|eyu zyAgfwSt@*)uj_odJb#&=9=$BdEO$qieYF9avpn?qiT$!YB>(^r6iGxuROo-IEnpW? zH-k0HEODgp0f^6hgBm&J!C>aXDd*1J-4|0LfH|eU%l$w+x^_WSXgp+qiJTQeAT=US z2`O=AVX|q_>*S9Ye|%DVEcH{-rxnkNi{c7WXE*0+LP!)CG89eG+c(8>a^Hj-i7dcp zL@#rm&p+C9$*HDJWPd>FsP80We;kH>&@a6`%lYYiKKJ>q=Htw&sI%5pt9QHmboU|e zzR$bwKmEs#AAkJgbUCXnW@eVHny=mA-SOeS98*`_rpwcGS$>|@$7&bDN^l8)gUzvq zmdY)XZ}|dqEU2i-UIx$sLKDD8Hc#qST^*I78jqxdKs(?q{9xESLeTTS$nv49huP@S zct)@2hU0qwFXy-4PY=I4^XaFx`%=;ss(A%VGJ><2D-uMFz-%Njpl=A`lsa+7;h1vb zK6~z$s$ldTJIvR4fv%uLL&qcEAMQ@Sy?=kE%lXTn|KsBy{-5jRr@DTIEkuRBHViPp zNx+!^h9Yb$Hq3QHw0{Zs-59%n1GfByLK z@zbX+=dSPWPN&1+^ziWJ?c0aLVSm^kT9cu!x~|lqCU&qpKt?Gi$()C7SB1IHnZvcO zs#QgdRhkzDgg7T+0f?Q3)Q!@a;xZTSA~Gf>uo;=FxfxQ*eU@=Q>~?+543x57FXzV) zvtmiivM$%Br|Vn>Mc<*{;Z0wUvLvr$X3B73u#hUd#o%jg%;B_UBW`TAIe^9F=my$u zboswt9r??v@nXgD^~?W;dd92Pe01dLb!z}kvIE$}$*uVSM`#}e!=^}J+q{tn-b!1W znIPmL`l5wuDDlG;C_p9Xs^u~jr9yc~!;$n1oq+MKqTur&*BmqV+XE@9=<^<9@cVwgjSQ=d##>uMGW9`{MAW338vCKp1K_0pg`^7q{vD&a*X59yKx|<_u!-W{{;-D}*}fy~}VHb2h7`lv0Al6?UiG0KSHn#j0Rq zVrNOgfq^vzG9dDRx~`?Ht2USTSJ-aD>%9pMvl~SoXHbR47zwj<#2HO! z)FEI{VvHgu;Z9VSi|GtoVJp0XD7@m~L=fh5gPjcu(+WpzSxFnxYFC2Xy+n1aW~R^( z#IGRBiJ5Xdx=c#I(5Jp{DzZ6uIVW&(PF1bca9+nScAW0jyqYtE82f$y{{8*OkM-&4 zi95lGY6?MgSmB0)YaUWq)iw@L`0fM&doTR0H|q`1*oQ4)e9UP3zC@x zn%LbGb+SVK9fQ-LpRGjxV8zzQrzwGt5<(PB1NeR^J( zC!APLV}IX|Z#sp|xK^$v@ak5S%&S@PrC>ERQ?;t93Q!(LCfTOugou~~js8s#isk&Z z#g_rZ!sN`xu?EGMAR2a_2^L%nG6u*pfmssw#5?bfX}C+Cl8FpU>gN=Er1iWk&(r+n zarvV2Pd0ycI};``3pJ#oUfj!O>eSAVVx)i?U7bKFN!Rs#-{rpR_Q!mB-<{qMyWKF3 z+;zxVnJQs6o6VM5ms$&g3gVL7FMAK2!yGB~DI@Qq_=}6qlTdJ5n)Srum9>Vg`|p{i)BH zU@LT)F3;!3S}RKmZFL9%Y+6ifDY`7HR<&9k>Zoch=$S{(f?81&F-snhP;nF^V`lDB zH_9+b*Ez+sU-cK=)xYaVx3RXb5{TE`U%z#}ZeMI-y&33Ui9>n&Rx};SK?)N15g6T5 zHC7{cZt4uCs0KLfwxPeCp`&&d0uVKACcN(7rtNPby&=v5N}zQ^I~9C|RB%BHC?2Y~ zOudM@D@?qJE$l!8Tu^QmFm1+Iud^;E)P$0u41<$3MLi>THV?m-e^{;J<+vfVuUr1N z^zGKiC%`GX7%w-EHdt?)?riDfYxeJ7p4dxj`D^*4kvqr4ONFT@$eEcbao`nH0={5! zAy0s`Am<i(@71h&#$Xa@Mkz>se|}G9;u-4e|p3uxYh*3Btc?RlP#1 zII_{GIF{vpe(o=i>HNg~y^<73t0V;{xHzf;?q1xBp^Mzwom|;mjZCv)$JiV78RH=x zkH>MqAOG-hygPpS*xl|sZcC0f@cxF>-*9{a??nL&(@aDAt=Ixs?CoQW` z>7*X_`R;B6^XI1;w$r8by>ya#hPa~&;Gun<$%PaG77=$U#g|Fv^RlK~yOoe7iQ0BH z47Fzw#6Gughj@EI-E4;8Ctw3 z7K3hA<)yfxmp24r@E}SQK-EpxYU)YAi4;i5LBx{AAq^w(086f6hLN2}t3o{iqu9}w zlbuiXGs@?k%^6|P(8vJ{2G~%mUrj3t#94B0v}kDtg)n9dRzAQ$_>PGK?rLOU$p!1R z)NY}rvbYdsqHG`-StS&r%49^WuBFb`a=!GkOL^#f7S8CBbzBs+1Rpr~f#i~qds;^t z_r;(qISZtMR>qR0-{sUL3GqsDPf7aSkov4d1-76tNoB8zFbX8~!`Pp+o7TMM%kXKz zWs@haA{a*6?}d9>1?XVe2nsbAv2_Mgs+z10j^1*Q)l@I5tpIY@ANGfb)7|^K!-vPu z*Xi+m`LxWRFV->N<^CjN-sLoQsb@l2AJ_FuwEbUkdg!*qZdz>HvhdgI?k}(>zx_-+ zdBMO5!jEjDV7O^_Q!`m@^o#F>ooiGWMejlfQHO_tfz9`>o}knSFfvEg&SPRgghm5@XX3=v5Byz1j?%ltwOF` ztX|75*A97?N6({nT@@<2u2$!DnV0LjT*Zoj1d?QQI}iq;oH!AEbWaq-cehPY0_>1& zE4xX7w|mCK4bf+j0GDkB53vy3=$3q86 z>JEY=4x*CXFrP4F7Qp-!*hubo=P*|q0PIA8`VE*b_ z{Jkk*tHEv;)ZN`hWE{uCet$Zio*tiwxc~)tS_?m)cgMqGWR!`NS&7&Yu2Q~MEufvl zS(vl1cy(P0JB-b_I;)eJ>U>?!=gZ^g=TAR9=Dr(-KBb`_J$J+L?tZ`D?+^P@)=~?( zaWboQ>y=20uA%~FNn(}~4_zi8CeY2BSBa`M3DV%~fB+$dQ&QDjH7K zHVSWij%d)fUBF=EHCSKHmI`U zi(xnuJ259_Vu!)12O>!%F`^Zd&PGb`L~!x&Q4a!TwAkpY&qnPgM3w+Bk-}Ux?k9zP z*zF|T)q_Edl!z#qCG(XTKq*D5HYIViaUFiScd-mZ=p+1b8YbF8r#IiTCOi~#MDuFGw36?fIv@Pi-;eA7Gy{)=i-O@S`+rn-J zNbY!rAHTe;Jr^(UzEOrFuYzgtRJSvEDU#ani?LVJP~wKMt7%a!s#Q%l-3$O8BAaU3 zWXvoWl5MhG5lmbK5Q$&dCq{&~$PRMmK7rXyi(5scK-bfk8G8GUTz$vG0pimPD3m^&KyP#dxc3T^^P7V)VWL)%@TL|0;*UgPDh8i4= zmrLwSreGMgj!`iz=uA#sI(5N9Mb%Inz;;jK8b|M&s-qe~Ss9CAHajo6EPNbfkTggd zMC)3$D4A2J6ad9gy`ZirR@MIB#?D?hju-~Q!=bdh=O#e%{txKFm64opMGjMN7jS8H zY6J-2pTLi!jD{eZz;_=#H_xk7{$`>bZky!*?HY+P+#)O}vjW8a$81Sq8p)TM_=Z?4>YIBXa}H*;EhQg(6dFjHm9XdE_fW*>#(=I#Tp&*kSJ zog<`Gxllp$p$=m^G!Vvx5oitfVHdxXLY1{_y2B<|1+EM!&h;;1$MJ9<&N3+DJkOV| zULfzm-YSF&DMe&uUTs0Uq;k|bRi>hrfwYXEfh2U1)y+9!ZcWt3S@Zt`|-66qUiWj#4#WlDG z$d~(h@80k8UH?x`&Xt_(?wLJ1nVp@T`AtGTDoNu$d-)6l0|Qr92B?aGfhmH4@rd&2 zU+5C~*-kR_$3rJ^S@ow+pDwH@|Hiaetg3k z$JDa$5GTQcq$Xv!c(u|O#>LKQhU@Bpe%AjvJOi@$ZH0=U9{L8S?Qu`qzp2`=j4bHl zxW4_<0wcWlrS;%UmFEYKMM(bi17_SWSOTy&L3Ka5%Z4zUX#Q>2YqG0-X>U+dFUe^v z`G7;fAD&b_7cXc zR)kso3gfO%wdmzO;7=6>*#{7uq*O zFOr#j%<7vCLQ?DLosG@Ly;q76_aM(9^**M534AG6Ad)}RKfOI`-owix($Oz3Ep2Y7 zgqWMGJQsBETyh!Z9ZjVRYpTy`ad<16m{`B>w?HN%wSY$@{@baF-l&iwd6RF4DAuC-m zS!mvE{G1@5>)6XLEGtV7WH-YqE$-xKF}MdvIko)M`?wr?!+BZZb^OLUuUu}v$K(tC zpL-Jza{zE>%BQ~W#zVZ;!mt_Mp?$h zmAN;^+cjJDtnC;SK5U8#{4E&j4Qt8MEFz?OYW;KMHDDQG*Te>CZh9QBf;`ylWN%A| zkK2)hQ17PN4}qM)Q)3dzdes{?1a=A>%aNWCJEn1`P6@{wZCkUWY%L*&ys}&SiogZt z3%Q%P=`W=BqjYDTqf?}6Tt@KO*6zzYR{!G)*moc?0YVY_QF% z@1)JAhi?JRW!r$2podwoQ_I0Y%f#F#(oJr1v-8Wy#M?Q3Xjl)>#;t%=Iv+lg$;zJT zK|A8s>V+IxD82TGY-AHR;5V=FgJlPLvYdj#bv#)kyP2~eQ$AeOx0}IVqbhq7^*wR4 z{wBI6>_G_*b94F0ZD4#~rfW#r9`c@KSbq5uRu3FujS>^7|CbkEkTQu5b;`o;G*3sr z>2x=@88~u#CBa79MDJ%q`#|{fa<&$I&25YAz#GA(X}0YTszudMcz=|+m5QH87^GAf zo(yk_t)G9q3wPSHIyha7$6~IaKICIaWZeu7JdwN1tB6V@$kh2>4uIj6H28y!l(lKg z=aCoj-KvC5V^gZx&}8u3!9ga~#j#)_)rG3nTdk{=s`kKY|6ykCntK238E;V$xF;>0 zP#C1}_-J5KLJ^E3lw#v_d+i;ZiN;VP_t_PdR%3oZzt!`P#`kQA%L( zv}QtJV7a<}vxj%FvV5YIPDQg18%p~&U3ivq6^a*aICfusSHo5+T4HVFZkgFVf;7DJ zqdUAg%Zp(F1j|(P*p9Ql)^fEVQt6RgT^9ZQY9+HJ5F(?KOn=9^Vf)Ojp-EahIetMBj!Kj|AN%*`^8E?PEniJ z+6NASFq23Y?m=YA)cH0xwx|U?*AURbZKfhBYJ95Vog}=NO8nmq}W8yrmU?kRB zS1ZWb;02kmnO-m}1BKCcIkNTh=$(`{Xr`*s^1;9z49Q_KqrwCaunqbWNdo%@Lu8`U zFLwkg@N@J<@Hf^8C)^%IF_$R~Y-iL(YCIvKa#ks6y61dD7LY9P&m&?aeJje4oThcr zyOjfb)09*==;bL)izXy=nCf`oP+V{J_AYo_2S*xuZQud`B-~enqjAH-jjC^lKsGcc zU&MmPH>Auf-ufy(Se^zQPvK3ZK@qN_-cm7=-3+Qf<@iUMGiDv#at3UO6~{9Kwd!rC zGWSNJ*r}IHiWUe_X%RbaT!`bV9c^>%l@AodY0$vF)*Pq`jFMW-Lc9bZ6p=R-UYq`I zvPJCVkJkAjmK^CcPZ({{`R$@Fjy$`der zZUK^I`svc~)`2gbAofwCrJwx#pZ%eT30kzW(3qSt3)TC>bB+Y7Ov!1Lz8{Eu^Fc_V zPq|)~1k5L5A%Dn7SOoPXz=x5t|7*Z_ZTJm^TSmS)0>OI{fot6$Y<_Q=-Y*lz->S>u z3!4dXYEJ6vDVi&LChC@(DRQYl-z#iz$Q;q)@=nnG`YYC%iJ>VpW^V)xX>%zCm(g9E z2uFLY3YlHz-V%~~?HvtZjZrIp^iE3rUbY@u1~<<;?3o@M2ieI4kLse@O>N^9hBVSz zT=tb#1e|Ck@#bI`J(~KBsU|IE&6lJ#Xf>hfAk1fpD#j`iP5E(kq$v(fLkzpoFwp?A z{D6H{_fh=JI`ltSPewj>rTL#J$t=uTWS)?&UVoC$wh*u z;#vc(>0qU~nngbcfUe=86 zabNWY5D1tFoEWNhB`$CoQ1;ygCiAG)a-=y4LroDw*u;n7y48OZ$@|{_Y=XJm+Ep#z zC%(0_PqsD=b9?Bj$ROct*{T1J9AJ1dZr&kMPz%A+)>LZHtDZ!j5}XeA*{QNVVi0yQ zE_>+Ke0(eFo;09Kh4}^R266W%$KasxOO|6KUVT*w(7g{bNM_79DqjyULW9ei?l5tK!># zRorK>+LpZf?TB&4ob@V^=MO13zb9m&dTM=Pmg`9J!M4~v?tk6WIwk>k6*s7f_$z>D zMY%^RD@}Vr_)#y(7jK>N708k7)i-wih$Tt=oXLJuObWD=Rj6 zF8}aXg*S!Xx`I@dfLA5ig&8Y z%a@J%56$-9rrr|G9c+J0YIHd~@HpsCH3r5dNjLZpFEB6;SRo7l_JaY}n+-7dA|`70fHbXdc#@6NMNa)|_=@Y=A*66^$*3t9dM^_wMB3V5jMS_vkpVxjAUE;<7XI z1Wg8W0b|*L(+m9Y)>B_EHNnB^_+-9z=mA^2Z4zS#4;jmJ5_P1*@e8g$BixS9-?V5D z?^v+lnH7DZ{=(@I(c&)e$uKT@BGj8kLvhh>eW<$t83T_CZzHa1Izqy(=p>1d z6&V}~(aTSwpmLlLoa>&y#j{+Y+8`kSb9D_e{CPXgWx(RR&T=eyTW zT@1c8+U`!B`U=4uub?S)_`cAY*+=OlB4!9~@k0y6;bF0RvNl9ZdI{=!eAlnF7JZ2> zS)PR3XfsF_EH6|dy<4ixxoPSK;<|+J40tpK0`hk^H`dc$suk!ax?B_(*};+ob^aOO z7bPz4a&rqZPTy(IxTuM2%bN;eKRnuHI0srGBG^wwg<{-}oEp@b66H?ud^0ZRqVe=> z&%8|}E4T>>%wBM&Lrf&P0j30V&jkp&Qj;VgV_}cHs9_sNU`G1;QNH#lvX=f?`%Q7o z0*F0PknJLg$lVoUDB8}}hWaI#;`i2d=V{dPh_l|=SwJSj#p}Wc1<>CmFT zzbKX8PQ-)B(Abjy?$~OAI+LNYM#zK7_jI!iU3pWZ@*=Mr6{BIHK87Q&s1kQJr6ue0 zOmUhtFHMP^OL5FoR>hru$MNgXJunXC{?lEt2?oiBFBs_dWWXFUCWLfB~T^j{{6Eo>R@)Cs&@Wm7Rz=p^|XkPZ!HW zul8N+V$;%Yu1Sp=-U*fIUHZ4Y|JB-D+;|iFFw^J0M~ftZ#J4raD;g>CAsXs+-kZQb zg0P<^-~;!IdEFvGJbWib!GS4mQ=ii1o9%0=qpfxX1?g=3Q;E;58!XHn4iF>`zc>c( z=Oh%VBuSO-OVgS^y=hA%{$qOnkQQk0Q`eaJe1CNE%Jz5D&^J7ZPRke6*Tt~8P+{MG ztV;L2zVDYQFIp74)L*FTC>iDei|GKi-)9OiAN5hOiWueZO2n**BJKJT>#WEXJswjg z^2nYrkI-Q;2E%>ihn6PH7+%JQLCCy)7G?=TASzN)3f5z($4~=*sG}8_osjc;ab6vo zcY4ev3S7GhU9j_ohIj}YyP>bg*kXSWXo8EKU3X~@i{*-laeL`UQN#6>n*-a3(%wwP z)FUwODc$qvmiLvuceXdF#*OFa~m$z3a|rc$t}QN2krBqKDPH9itb5-(Hf+*;%e^W_tzH zSjMEJq)eB2eOP#c(r(-~Ld`o~D2$)&OyCS_s5swrl{K{~vs$mYZEQWjMintNDJ$REz3CUHv>&xR3Skw#t3idWuFCV?YfKS93+wBpNXRqum93 zt&Nk*O44lSJHg9vLMKsqIpKnKb0IfrT-xk}33g0mn?g6HJ6Ul8IF0kMp>(c08uI zxL_ohqfh;Q9caS8X2!=R4jr2iMYEiC-@izm3uDAbc>aik5nUWA(3plYu!g(;%GVPV zmr$npNBiCO5R(uOei{bGrJhPVp5zsf3d;gB{f^_qYS1rQ0*3|?wEQ#@RlQoV%3eh~ zkc56y@^#7$Syq{s#jN`evzt?m*isxY5!$+2PF7oald@@S#@nVOHXDiCM7wt(a}pF+ zLmCF)>;9A#<_F4$P!Y5-IPlCa!B)p}qY|jaW`k1EiWTO{6lnPUje#JQS8P;A0!Zh> zyq>7IBUrQdpbZ>4>1rF6;lOPyW$gRKsNW66eN=ed^cXDgp!I^&3sT6-s@- zdYkf)3$IVt*CX07!MqB@jV>wNu@FbG*$HzG_RU%ZM5tEJzM^Jm2!vJ>LP}9bD}GQn zc)KCZ(J5uR2f{624SN3ekWG)`@Kv3K*VDGEv%V&+@)%0N=J7uL8u&^Pu^t}|Z%HYS z8TnP`JRx4s@* z19BOjym5L`?svT~xj{MyPqyk7{*36r#ZM(j7MdmMhp0arS5KerbQ0T|6&7ay;>TSg z(v~uQqM2%<#FwHaq2Ikpo=2~^KKXgwaTsG^e4$|&4<8TqTEnU;w@~sGmlItkJtMQ> zAcC8bFtmq=Ay|k@o;|bas!O1W-o$o)d{B%*>nWos2?L+jB%cEqM`#xaTo?2`pyMau z90r$$+#gblmOiA0O2K0TRL343DsOZ*Cj#aKz; zNvBQv+WQ|$ahyDt*!JdAhM0e};?GGU+HoU;X{Z?5uBYb~83|E6ue_jGF2R z;SfMI(hhe15eJNIGxq1D`gPuy4dJ>2=qUbn|hwAY$tx=O$TrJl?i&ZV9?tBvA~ z1QL>YH9*a4hR_8x8{tD%tv&AHv-JTDWbn%uU$ z!ZV8k`r;gq&LjrYRAdJgCGAJ%9q(f|F?Y1ZaGE(N;N4o*Mlkwg*U=Ve>1%v)xX&DG z$BdQ;=b^Qc@pGwBWo2%Ile^S=pWm9(xOsgwU-8@wL;d~JL z5nM^o4NbVT5ME}hiu#;sKS*OdoW#INNJt>Mw%SmdO+M56;_LP$E$w)Q_SNJBw?9xY zLsE*a#r2?ZF5tAe)EPX{Q-hOsMWgjST7>s0>kztBMIXLGc!{{7oQncdy` z*ML^aA|1Wn%5wnL#7vYOYnhV5!MnE)(AP6oS-Cu%0er|~N*O^e2)attMG2))N9j1$ zk`=jMEbr11-L)0vZPxXZpKqIW(4ZwkG_Q3#hD^q+-(hC+nw-PKX@Jh*K)kYe4asHi<)$;x1UGt?fggG|;WteE zJ_1vR&*`ORc&sT(^ogSvE}g)hj|OV+#&<%*E@YQWIoa8!EvNBkXc^XJO&v%6U zy{zP9q1(8ZTmcQ6<`S9ensIZM+N>+ywFXnDYiL=1GTh@z6puOxk2^mimxYa&PcG}| zCS<7EY_9Q!!-a(f*%$%Yje0tg&EFYOoKwqvU43@B5|@*;V+q&zxl)GFfb5ur!iR*qB6+Tv$96q7$T)h?(b&Fw6-S3uo=hD;Tmap`N zodvuSLdn{{y#eeI@QApe61_c0Cc=7UL*_DtyLsX23P!Osq-ZFdzNV#0yI)^s4B7P^ z9n#`pEvp~UwTehE%c29AR@bxSWe;x5&{Hl3zxYQ>{ouxyFK=ld8SexzUPh(C#aLKb z_8+^FfFIzroIT0EQHuAdG3+H3CLG$Y<;Xb|kABx3MK`DVw#XK4qkaUIxD5{zb{)@- zizY|e)=Nvf&O4_KL-|Bbo!h&JL$=0^+yySh+%kOPk(nYp?9KYo?g!|ax}9W^R+S1* zvnOLO>#D}Y_NKqtqT_8vSc?~Zg$ry7#I^Lt@^PHE$gXKPac!~aw(gts40k7thU(j9-g7P5FroRkV(K?}yWrP%QhnRE_yfPpo~rK+t~FNnkNeU6|ELCK&sOisoC^7d$NqY>Pd) z2wYBm6(A+Z88Q^EU(Pf<3?jTbD)1zA04+g88x|z?UPQ?u_ z4N3I1uup>n0~GO_t|T`30mzSogEKL{Rk%m%RVhpEG31qYWNt%FEe%@yC1Ptf8*GzrTOmLuz!FkR}Jje~gJ;EMTtTDM|?Ky z^>277sOf)$db`OL5)8d01ihzkFiD(BKAD!U?w6U(*G!0~B#hl(p7X=PQ3r)(ZHF@1 zYPLBkbk{)jGepRa$4tmitC68SJ6m$U+s~K$yY%$u&rQh)2~?kJoP*#APxzccoj+I! z`t$0@*_%&{hn6tS(3>97G-PH=ipeNmEMuccQ#*K!8|dtD>^Pjvt$&R#CdeK#UiCFE zum|3-f?gb^pqH-qYt*Cj*pCp(bS1^*_v^6%=#^VOk!@V0pC`Hxp6BFue|dkmwRMou zh3#R!tT|YQgjLKhcb_I*ts^T+&-fVuOOuL7sBgU)s*j>Aj&RgvHSAu^=N6m3tK$zA zARAU*H0$`;Y*L!_Q@@k_OLEg0fx6^*$9;jsgis1bv3qN26`!!YfYGaXy-aLCb^~ZS z-v)lSxmzLg;zf&()c5-xn>nR5YV26X3?ZkJXR%w`$l0?h*A^W^UuM|S!2@<7)`lc6 zMcmALkm^Z%H;9Wqb?>);@AhXdt;xjA+)wGC&#xo%+RbgWE3pZ1(~o9zH**JN#qyYS zY|1yDGh#9`5MW71QM?uKqL<`y9C?_K!}y4pPG9zRnYa2yM7rpBQC+a}A1eoEauTku zt&ToztV}r3-WH(qg^jA3Q;kJ@t1$tA${hbqemBnptDRksqIf$biy^ zhnUdw(-?{+sycV11Vy1njDEAH`KDor1#;EgPdT;)LC|uSg-a(tsL6zr`Xoyt@|wbk zsJr=~>JXAxs_>Hb?Yo3Bk*17z?@O`a+#(=a(?e0686BVIA4h8N@Ngx$Jvr3Ha{}Sp zpdta8E$|B6rPMMvi-GnCjv1P(Yoapk83{y zebA~_aW4mKK+UN+F!b*QZsl2#OB(r+ro2!FT1w;#pnUMe+S#`PqQ1pS2%{SOAxcpm zvxV1SUg3};1SaC8YPLSD*-T5+f~wwj0z?T@7`_K|b~50If+&#H{%wPZ7-_HYSmu|t zRahvkhH}d`Q19=Yx39eBEoX0bmk24@ zR(nUtL|QU1u4*$Ly@H&v(GqaJ@=D?O@IhUCm&?pT=GV3woaBJZ<|k{C_FQ0q(UzB# z=y|36|NbT%l?N*wQ11c}hgPS>dOYt0g?V>Y!|I)>{cm5XY!=EzoJ;hK{Gl%s(EH{i zNEUh4oPxUYE)#8m^ylFEvi_r6sVL<2BWzmBKi1EW%(tnj?25@ceq|_Xxr+j0ir+$L zahkU#chW)IcUEJlb5qZ6zJc{+Z$mbNkW@GB{{@Kgv#^fe)tz)QUq*4vK5iI&H*!rO z)~@_cpc`%cKzP&&R@ZnRO~_dHVd;hzuk)JVEfnae>=ysaqD2U%kl_}dd9H?HR71H*$O-j25W;3 z-capV{~_7#Q<0Z@Hr+)1g8Ej!>?4k=jxi05?Lyn5SSqOBzRE&7=cXyACFDEUTws>| zkEnk^e#x$qH8gz9{I*EGRsDK`owv>K)jnaz7xDiBR2yQ^sJLRL*g<6>V)DGrE)kiDTtBhzog<;xbawt3M)4ACpp!}^-V?Kh{v3vUv6Ofb#L93 zCXx^5ygiZNho6JDG{UC5zldd~DKD|>J1>dr$D{1;A|e8DPxG=OTASeQQL zWcI5pvi+C`?=gMI>`L;HET0Em-4-3_+$Em(lDT!byigQ$a&$Gb`c}**t|8P^$(TX&32IP5X4uwCe3#o+t`ec8({b6OqQBh0XVPR~xpk;$fgxx1+id%t`~ zBq_Oqhdz;vq42+aj22%Zcl=!f3>v*2+uaK;Yhbd7K26K#>(#Ez)wJk~CZ#&3bOzBfUCe)Ot(?=WGO04SGzBD%ZV@ z`y#4LnGP3QzsuBHG@(v@bg(^XZ{Kmz%b_}0XCQgn#Ma_g!cTy^qKpr_T-}2Q{Rgyl zMfyz7z1+hWjqnQo6~e-%rK!23uiaf;Y5z3+oycM1R?3!Fx{cSbY5jdbl5hzd!r%P> z&=F^kK9Av&E>@(EVl9)y3>s~O$!^xd-Q;5_cD-o*q-^MBa_4X=aVz}TC`sJ~hNdlh zC#RlSZV|=~GyjTwKlHWG%<80l^1oZgJ)nJ_t!=#L}!?&49=6(XZHmd7x?o&YKQ*1A1 zy|KfusKxWgNM96R^kMS_Z-q3_F&QhS(Wt!YL307QlF{gChIQL4;KL-><#(?Y{gRNM zGmBm)kScKs?(wxuaB6Ov2o)B=pd)0OcJ8Ka#7nm&J zJGZH!WAt0rY-<15^rQb83FVV_v{oC{#XIMs`RXg$+&EJIb1kuPj^9gU`*aMd8*KQIx+KAb`LD(;wnl_0Dh41M8Sc zrA0_Z-Fm4*gC>-0hlBj|9gf@&&=ZX>GVmU$aGN9PjD?JzfMq-r?{OCM&}#5$-cl%;Nr zz8q4lhfmjZh#S+F+<2`zF5LKc2OE{tIg~>we9hrb!aImcI}#lpO+G!LNr*IgT$)wm zYC4Qv2KUYtY0TH!!cA6i^@EssG+ac1!LLY{uPA%Eu}EjO_&Jm*Np8c8*agIt8q~k; zVX+^e83eaeT*+t{Ie%Y*8_>NyEuq*=cg}JAu}*)9$<7?E(`!$?y3gBvJ(D(+pI~uU zbR^+J6zLIBUMA@I#z`KU#=07TwYe~Mr}JP)01u!!oy81N{yD2(Zdo}Iy4?;GJGjyj z&X4r`oFApg8XztE|g;f4sAP(uUeZLjs`2t>CIb4B*(NZH`k?r zP&0-?T|FMZNyCGsY>vn@`#?d`Wr+2+#hz--)kFRAtaISKI-=!x=MkywJ zx|h+upwGdcl5E>|ufXP}aWP6n)=0_F#bjq^8~NS2oNbSRrb|O0kl&}*xVX4gRaJ+r z$b;cje#%#`GJJ1#&@R6%{nl*8GEi{2jqqy_adZYN|92 z*?K6PF+7$dO`XnnUB(YX+;2Z@$e!|=omJH18;*3}2UE;^NnmIxa$qRO7H(8}Bg8m& z>3Wc7qZ1*}$Nc`CTh?eu-~m$W9(nA>Wf&sn6`8OcsS&h#(EZ=G*{|^%w{f4wuP!wNY_X1R~pW# z+c9}Mg$jJP_u*q_*tPQ!Ly2=!SdEF5^4b!p?XeymPxbmeKo`K6PsO_8KB0f@;&B^hRS2K?|K$+yeFOiVtq6rakQCWiyE=433QwB z5fk$i@^f`E_}1**J4Kr_-9nWV$C=a0mMv;2x6g!*ZqNrwagE(As3f1(ob=uFUeA<%pOP4hsr@@N zcEdCM@j~y&Jo_xCY5$Ry>pOPc8C65Ls^Na~=f$JMWzxGl>gKVpHWWeugj{ng#8~{V zo}$4PdWND+biDQ8BeNOqB^6t_7G!a|j|l3ec%R399K(X2y2auUduMXDTf}fweT%_t z!Yily=;Raix>y?ZK9nTXR?)D%~_f$f#^BtO}KBL*BA)#WobAC57(T} z5HW~l(Y`IuVbzd(c^$n}(!4;b%Vv1EX*jJd_X?9U7E(XaOEM|am;)Z**ek>ucFEd< zqo)+RwhPUftM9jFTUSY`?SzjED#2YPW2ZU?A0Z#3%zYy`Y@SR3qE8T4?>RLVXB_Xs(pr|d?p&7b-SMKhIw)6>)P2`v2s1I1-! ztnBQl-vRi-!op_-Q{T0Gnb5!$qaNP3(OJXGLuv0&flHL^WCqBo)2R`c8-Q50F-+Tu z))e!4sa|L^QNRIdc5>U^pbr3Jstvx~1D%T44>iCU0hXmc4v06IRa)b*pkh#qi1gvr zXj`DG#HH_j;ZN z>Vhf+*y(~P?!-fCe;uBdi&YW4yO%)bkvZwxH+?zwWpFiSuK8ig<;X1{ZO+VP0tyP4 z?B|hP{Pg6>oREw>zesGu>Bo+-Sv@@?MFXEg1hO*2PRGK;E?6V((!K*Egg4LRf1tJ; zO(3l;9nW)CO@4(RGhJPbiGq|tUBc3v3!*`G^d%{&M`?kjLChuTRIthFs_MCcmBgO` zF1J}ZM9^*A`HKeTB`{L$IIqu)UT9ekH#w;p77jbe`O*OP!8TyEfbB`okn`7bPn`Dr z3T{m+N?%**zcxvZfv`YKmRyzVXo5DGs~lJd*eKj)oSHVv?~?XPKBnXOw?^oEEs=0M z`5Tc>O840AX$w+iF=-)v+Eq=jX6amw@%?Ci{@so7P{x7ZWs1rgcnXLUogM&-O;yO_ zG5e_4V)2E{Z2P%ohCpK6Gm_X3K%B+V*uRmt%Ld7nCpX6j%cYM0uR+;v=tcy7H51&$ z9HApHv*0qZC#vT^=+=_hkQ3((kOq5N?)R=|&J;XfNFXKrq*2f819oKAvk~*l>&vQW z*sokClT8f&CKUOYEsog6Fgdx07}&OXy0bD(@p?`N2#g5U%0K7_06a{f)2tJ|>Wk{~)h zSSZ%(a@vyg9W-%A`DqPqivGpj>++nE>a5o7-kd%#5wMBqc`QCyZObYFrG-qVK{`7zfjH}<&3 z3!pCOTlrd1iz!+HS~Dt@oD%5ed<$oSOCHgJc}s9wVV8uNqx{@^f|O(d9hFs8oJ^D? zse_ZX?az|sKHQ|Xjid3tjLdVU$ZZ!xB;HT1!zF6x{ltV41I_59?6fWRqug;2kgek{ z<<$ZIvf1PFXRDF;zXw#AVm|5OGc@(7O>b>_aojo$qeM{f#+*J;;-fT}&He8NV(h3_ zH%xn;krgNzz=;vzRMHWVwAL30vpy=OX8%_pJ@T`I{t+Mb&U7MMTHMjJFV*vHDQv^W zYVLQ==Ym@Xqc3FYUJZ4zTZ{-&*RQ2#=jM&;EJ%yRBy!)C?LHZwOCIwrg zU(XOT5CL+)v7vWK+dG)@qe-e1%c=YN%Rvff*JH`*E)cvW{(N*;3Iz_=%qz`o?fVlNth;JxEnJZYm)zm@XAcL+OxOoH;2G(|v zVV%vD(e;fNU^P^J_HADin!1XeYjr^ps}Gyyilg+GST{vc2i#*0mU67wxqELFErdzL|Xgw5?Be|(r-D6 zh9~x4U5r(@l}hVIN-Q(`bN)xM)l2idp{8Sm3;#6cV7n1@vl+-}V-&SpRJWQ^?=Y?^ zd&!(y_KFZ-nsO!4mkED&){E65dtS#}F0Zqbe<`;`{hT$eSAdFnX3EqWeBx>G*-~n- z$G+^+M<8~P(~N*XBCmRys+yn}lBHg(Q~HXVg!clT1hSerJ6EmU^L~B?_tk-0>}1T? zZVc3$lr+O$VQYR%^BLX#6*28P@#72O7fm!u3??~he|0+;mgsh?$5w_g@R#ZVle6Ki z(y%WFO_Mw+Li5y0?P2u1KlnhfTP6RacFiyu6F_y(W4Z+NLwBE$0YkxJhJ3{Wk>Kbc{)lkiy3SnX+L|r`CdWza-1p)^K zSa$5dZMrUyU5~-q3|(oqWydqRt@AN&$%`@~a$P4``9u^6^K}FSLa6%Agx`ny+2+R^ z3{;B5sXd13(%jfUO&f#ob0F}8QE$Dlhvm=Q;<|Wqld+~Vgt#SqzA*@b-ht1DC%5x# z;VsvPL41ww`4j3Qc&-yS7v^H{4Jq#j@FdotKEloamBr%)J6<7l5m;ONsodgf6?@q| zj7e4hA|ZLwBmUxa_N}68-{fk^r-i_kCFi%P^&Q#LzzD2kjp=B7a^Ga!dH}y2iW9Gj zk;%waRrJ8KfIuW+`Kmsr2W_iWwP}I!o9^gf2R1(}Rlb&2Ia%OA)zvhs%(Qws5r%^; zVK56P(sD=Qf=_lruNSIQH)yzM$B$o8=I8tj*JX-Pier!qDa=Nah-7Ri!54E1ij-Jc zzke^bZ(CQ5({f%vua}_YHm_<>0O^&CWhw0$5jqXh6{xB^!`celaPBJC^397IEB0>M z{wI40r*Wnlk5|0!c>jtdpEuJSJOThn$}=mT>K?EQ-CnLw9XkS69n)cDjYRDnw@ae+ zRGuQG*XKfh%p>_&mW!r)pnF?JQmgs8|AMHbJgPlRoGvlQu-7bhH#mYo%HtiVur>xi z$z{@HCGBEgONigTIWIerE5qbwtSeBn$lmm#;Uw!`v6pi9YPntAEFc-eBSW^&b%&w! zk!kUPh$Rsu30tVQ^N88PyM&yLc}u_5CqjyD6++O;+77?T>W_kTC*%3rYt`{-KQ1vME}(jP6}S5rBQGK)+2#Hq{m0e_juA3T^ErXeNUFJVe{vt) zCz~*}Z96mu=6T+sF5=@I=C_?2ZqJubDHr8iM3jdco(FpwwZ$pIjaSHg%{m(dC4=k1 zdV(U8&cXI&{4J3>+l`Euai#CZ%`&_em!$m`lClBW^){zF(V{_=r@maB=Chy2IFjYc z0lb`Kb&76M2rTepQ;M$&Z?~$3v~hYD(Mdy{?Mr4^Z8MH`Iz!9sEMbX61PiIK3(7lu z7}u_-EO7pC_K6SA_f3sOu6#34x`KD)OU5k@ZUaWddZ!A}x)jfm~j^#BCMx9ih4kvE@BcMT>fJX_>f^D^~8 zgzmjoOx%pANrVxn<_hX6v`*s(32q+_eQqKvCpfQWxAb(u0RSj?vFf%gD*zOxlTa`` zCu4!vcU?kI2usje@afHnBxwA8sEkn^=)7MFr+3+}{@hWXSX>rS65hC=DDr?F1Hs0Q zMoQU^ih?&p&(4xU4DJseuLZfom~@@6?KF60%H}L0s`E)CnF+dvt=`0vY2d1InQ?t2YF#nVic?Rpq=}buQo3 z0-AV4Q-$xY(j{d7zKM6n*U9=@GukCcs^ZX|tgKI}aw$&HxFJy?##RybdBjin{AXc% zv!2T6t*>GJU5ozGts6tG#ZckfOoLcKrtgE*9MpxfZ9*%dk|_nNLmHF97t%LB`3+x_ zaNlL_*|j#Qo%Cm||16x|O)+FFPvF(VIi~~2k78;I`^uXal^!LO9%;&(zYXhyoq2zO zumpJ)>*}5rn1^-^o}I6`H8$cf#eZd0wRDS&DZQZkS%+9|$wmHQ zpP|aNeqz5A&JsFHDcO{UJa66N&0dxD-LFCfu1f4C;D6QSLAjWc`%xrXkHQiTG zld@cbnOzJnML#LKhhs|em#Qa}Bd3Cbnm)$V5g-;jT?>LAp2P&yofGQMypPnHoO71>#bOwF4DhJupk%UbG zyJ<|5s?HYQh3|+|``o$fTe>@y9Yv zP6$LDr)&O1)U5}%Ag5!u3sVAsNGF$If6|3?yvtAiz=Vj^E0!rk?Uahtfq0&#f2%GI z^H@I^hVenUUTVfW*Ir?Ga*~Olz;tV(O!4w1gLzY5MenN~6YlF{p@v_B19ReSH1Ch8T%5-O?PY9Ze5IqV9jnyw=< zA~kokoYGHg#dQ3^gH;UX0pT*5cPsbBJry2@M0y?;C{8g$CHQoZMKyGzc1n|^si1?j zI&S~%*B&QQPnM_)5%LWecXL&Bn*tM0&k?TwGyfHA)MdDk*vO|e%@R+%iT;-Wk+i>B z%(u@Y@h2tt6x1#iU8uRY-3N+cEX~hz$gN+4jinl+6S~Z=T3VJ1)t{)tgQ|Di8Kd~eYdk;W4kq*^mP(X<-S5Ro^68|X@=vM zF;0YMw*%QN`4p31Ij=Ij`E>$Y|1b95GOWtx3m@gRKtMzgkd|(c?r=+YcXuP*ppt@s zv>T+GO-MJWba$6@cW&|w`uhI<=gawY&bRYiUS5LxdGn%WO?nf!1a{7l(w8bK>IaazN<{9tz`GkD|x|Fn0s&jmw#@bP>o&u9iwMDsTb z;aXZqe@-LWeL;pzy0otEM63EH%7kN9na|=&wjMaUANgn)0BM7kG_KQF*o)BJ zEcwC0t17GcPt{KHW|GnP+ zaiMj_3e|-6pt70@S@r*zltwFyZ3XM^CB=>_b6glc2Y+gcKlNTZ#qQnjGFMiqjh~XN zKI1>1)U7g0VT9lK#$#XWwKsVtr4IH}EWOgeUd3)nRSozmzO%-xI5rifrmHlc!zDKVN#XVtZ{1thc*DkV%E*NDj<$0Ux9C_`= z3I53|7g5wzufeo*Sby#uKa{m|OU{yhw=SB;3!3iT&B&`lDI=LD%NJ9*&!6{ZWP(3Z zduPui{9vu5425HlR#rSuz*kmtXscl>8Z6YF#hDVklE0i6z}F+CETdGJ_ZzH`uVBL= zyh>f3@X^o>mz*=iKMp>N>#wi!GUa7dF8thm=qP0<$jEd4KEL&IW5Q#!V%j6qHJDV! z7VdcdvGCNU`bxd?u8kg&m0*O&Pz-Sd1MJvU6Jv)*ik{yiSJU*ni7H;=CeO0*a@s$a zG~QyMM!?&-;hZ>`L-^Q8;s{AiVfp?CH|R>ql_;slq{K#AZs>Kx1^9109j4QZH1r%W=)?#DezzGW;+nH)zrmHm0ek8@SN$`y}~DvhWF z&g}s@S7MfPRUo@6&RH;7XP#7wclz{saZKQGViMr&Sln~WpM;QNk#HCn^Ttb^>Aepl^S(H1>*VwddAWIcC9lee;P2MPZ0xif zohCn6@n7e0b81Xk}j!(Vd{=`iJDHa#8Wct@Xr6u_lnU2Bdz)*$*(=|4kaGMSZZ zoK%l!V!CRxMNz_QilaScjC5X`SSU$h(v0#+%{@qAZYno{`bJ3P^f}J%KYct_ zFqJLa3eBzDCRH24QN}`NmBKpNf~kBJI!&|LkPpb>3L41NQm1`=dlAhq-e6#;$_wn_ zFzLGX^PkO}F)lm64`&=zt1u0hk>Q~q>c5zMyvN$DXrSR>njp$D{5S?ZrOQaVbk1z-SF$}qFq^C-+6`OLPCsq+Qz`7?zO*$BgYELlhByirRaC? zI5-W&w#h>GevLbdPd5(6PcITi@)^bqO{Z{)8t?PY8x0-7$r+Ve<`YQ$r!D-U->s@)-oMaP@bWSW+iaH^=Q-OWoW&r{7RzPCR|c`qvp@bUFTJvj8( z>Wpvi8$1lMyR>wUmh*Y4JI-UK+0^l7lD3SW>?sxoMB0?#iSA0?*TSser-FE2PJ`PD z_)2Mb&#*)Vsoj;ipVva;gZfJYkUx?yHb+>NVTBjI8Jx9xSjD)UdEp5;N`Q1%j+jO&WFNe>W#FUq_L4rdo!hY5Ckv66FrUab)ytLH2?T!Is5yb+^V-rG7qs(N5!Tt#5lL@FJ&x+r7mSrd3Y7G9XCGUFAn~6AX56t$iDXyb1S`E zfzuQka@bwXL3LqQ{7aL0{n$5f2k$w@XeNEt*@DD)`*y^hKsS7l#@3>!&1G{{Q9H~; zsxGa$MVfJ%d%$Icy1nmf)TmNMUK*B@_E&Rw$M8+ame_O(6cipO;clKZOu`@@&<+da zfZS>~lCZYy=sk;UTNVhCyLfyt1th$pqSV1It?$14iK9$AGu717;y^$7UaKGGqn#W4 zY5p7f*9+DWyCNFHKHc$nr%9S;AJy8a8f`@{j{VzK<~e5BWXHdxxoZVzGxjs|;BZwr z7^^>{JZc(g`BabNPrd9eIWwJKSm|7>Lee}bFc0Z-uGbe0B}xrTvAxmDc#_c}nKXGYA7}Nm zkGD8$!=i+J39Q>LyAgAkt5ugRQ6%*Ap*My5IEthU(pu#$9{rp}ygp~>rZ~G2?k?oI zQZj{FOp`oJJ|idZ_L}UG60_WAr(t_c-=2P96*T`q@rL&KnkiPG3I1uMJdQtfvIM2k zqQT`M`+(@!Bnqx?61hM6qgl^Ez7!J_3#SV|xRgJ1%Fc7#Pn&*KeHs&@u6mC&cIbiM%uhiK>|yAHc= zd*+UovX_A)(|koPr~z=^)3x67Hn#05Ga4o>j(y>7um~NzP1R}=7|@V6p6j%^Y!8~-8NW(NLV~Ha8Nh( zkBR!Z*WRvPba1iWo(k92ut?jt7uJ;|A@QH%8(1iNJl7Y8O8Q)&F^@U!*Ub8F5`JZt=Cjag?8iJ@Jo zIZu5hOydi)jdA(D*tp!7ldib`-~mhCAtS4e9mUBbtFKkDl34*NJlLx%D>`*9g{Ds$ zmCGUoZ4mRPnogTBEUwCC$GvzFO^LZ_Nc^8C`?{nJSm+CH`mBhu6Zf$6GHJ|ud2yn` zKHvz3U5{w~P!-Sg|D2fnaz#$$jNLYey7s zR;6Koa)Gn96jUMWbjpGg+(ncl-cwIch#Y#`JqC~OG-0^N=03Z+&RV1J{~R+g;f(3Y zblqlj1`itaH?R9LXrDWc>Uhl5qmdPdK5~mGHZRxNcB(nv$z7OGC9TdkcoBkL7^>TJ z7=x);y;AjcGLfJZk`jP>93ay!v6q#gt%dB^_`-qCtY)wMXxiJb^D}ZlzmY?_rSqto z6*9ye0`(tQcY@s0@pf}k^-{GIea%6V384*_cGK@;#p*W6f;1OpQqa^r^fCJ$<1_5I zYn;gQgQxZe5QsmXtcICWeOWmnqK@5zLZ$}YdAcXO+84UddYOOXNGK@`c7UR)0BCml zm16QqN#k?~z4ipl<2SFFN-f=8&Wql+3$DhloSZuv2Dm%gNN6eUKvkQh?6FAQZ7b=G z4eN|BKPprANiuxA;;p>RjzOVe>i^8cD9h%%Y~fqBmG{Vw^NHD``w@NynjPYHkR}tW zI<6|d*w;;M*-$lQm;9B%b^m^~F;vEQF152Nl@&*s@rP;QjuxYSsn@e=${0in9B(0Y z&1HF1C9(0vfdsxuRJw#I=Lk(%=7hcp<9e8b)~AKM@^fY&{^_cO9zn4_#A6i8^wg@-b=9z=k%j79@v`JZhpi zj`F&+#iJMt^!g?hx90Rc zqYR!bhO5Zx4_LmNGn_4$)A`h9zINYNFW{5={AfdfG-Xvu$(7Mk(K)f|`P!N# z;p8b6<85@34(F+ve-NcD|5u-d*Y0Vbzf2w_Npvo0UcDY$H*E7zG2RzruF{g}HIJ$~ z9NpuVX{R$B2yI104X)KE9@|T=WOh6md`ZPmrhpD9`vrA&I^#5OY+;!!yDA9kPwvPg z$)#&DXG6-4S98leE6X$3BW}Y9(e&^v;(Yg+rKmS@PAjB9yH3nb`jkM}=#@9dP2;$C zql$!PlM(SjSN={nLRhP%09mw%o;LLYO>k%To-LMe$@c^XqgO~I|6oPoW_etRrOFD7 z<6)7&n3PmoRT;Hh5unC z4cwiX*+VDF1KC=_$K&MWd+vn)YN^pB3Xc_;fdD_&m~C&V6pn51p<{6myi~_l_GQ|J zD?b@M+~z8)LxBh-yT%s!;^i+48WL&Jy6fgFA{hR0@?%@EoHX5^tb*%;mYZ7H_9?^F zSG!5-is38eD+~;Bb9!d`@za5V8@P|d&=r*xJorhbK3LJlgoJh}+c9O+1bLe)AM zav;;#5i;81D&{;bB8kyL7wS}QnDZvq^W4{Y?Org4jPtpG^3K?*--+>cq zmgYb2Rw8;XFuwm3l2P$EmGJQYST_TqzC?juZu+ksW~^U<)NFl5#qn^dUEeii&0bh z=Ru3Vx3&F!BO&iU{U!s+8Fsb49G&m~?`4Jff7`|{nbLh2)0+>Tc)b5^OPZ_qr%RdJ z!U*|2$58)!gA=qrU-PCt6%CA!-8S{_PC-Z|dHK7^kKQ`kRCtc7Vuzai9qd$+S7D&D z*|1G1%RkE&gcoY~?0#D9UB@Iq7WM2k0}H+hlf2w}P zB+WOJs71p|x}M&5kOy3&Y~zQww9GGK!Ki06VNhLREi;fXZ(Fb3%pAm+i0N z$RmEPdiZWrhOqPc&}c4QuPZ_ieN^9>F|qP(Z71U1H!3FjFt?X^NBaox&@nJ(Se^Fl z+^}(f_x<IzuX+FEr>yw}DHn8T`GWfkaSS?cy-_ncl_3h{AcTIq2Yjf1|iJF(GX_ekj}3wSsRni+yy^Y{je;c zr2yG&eUo{YZM_n*$NR|n)!&ZNmj;%}Ml#>e%y0kNiJ>%{m@HfVbAVMh;;G@Kr~W$D zyQu{BqhWg^G5o*A{ECHK10f+KnNZ!P9$My0T^P|e%wm$(9^goIkj+Rls7~_D`TMfO z60a+AX<1p;pgA{pP1T<8_GFzP4`p1wzJUSJ?JG@ZEU2`qwssU0iiJg3cKbbTeI2n& zmY{dL{tFy+OmX?>69-o{Lak?CLrHmKNS8KSU zvQGnG(VAtl_gQzOT$mJo{foGkQ(5Yt8y_B1*rEe>pR6qS<9&Hb#J$*XfSDssp1>

      EJ|h#8bGzcw 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 NsyOZC|cfC4w&{Hz!TS-+#t;@5_ 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

      gKJ_SYCyjYps`3iV(bNqb%~GJ5XrRYY2+bgF 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 t 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 o8DfZJooy!czbPUZF_Kh^(q|l1BWAj-k>{YD$ul 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 Sd{}=>ntK`s>XoXFFa8AwJlSyo literal 0 HcmV?d00001 diff --git a/Screen Shots/5.png b/Screen Shots/5.png new file mode 100644 index 0000000000000000000000000000000000000000..995cfeebe491e1e0193dbda2853a25ead3e09533 GIT binary patch literal 805394 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⪳f$qdjL0;OSlUye`fzUTDPvj9RG#l? zwakgH3dp=11KBoA??rD-m(Iy8b0b{{1QC`C29?BrFdGO5nnhP3)ub&6ivLj$l*n*l z$m@z%PZ7&d#m1&a#v|6SbzZBIOD8vd%hvei&)V^zJ z)?J`fmnaCAy75yB@$ z1)JXpc=!HHMyFp&D2Y*NMU8vlo^SbGFT~4JTN4_aIy5~PnK zxi!(F|LuvEcWq^?=FLj|WXkuiwq&(+H(D|w5R|_LvKgXF0u0 z|DAMbAQ0Lf7oD2m0gB?sbqHO3`s;c$>wt{G-e=?-W+PN+40+|{kBs&K1JCqI6uqehE90TM{QimY6>&+l*KTfeTYYi zOE3L+c6K&dHmUII=5QtWsmcIP;;7N3f5ZGN8&L#5vX<68u5#5lhX3v++;` z6U}HIto|(5mXi7)`EkdZl+sEy_IJDtBHk!uziFc@Pt+)FX^R$jEAH+TDPCNIO9>F%-CG<26n86b z!4n8x+}*W!@fLS(p8vbvd)K=2DIZVH`N^Kyd-gPpf_SqS1XS3#aVkZ|z>il@J+w4O z{3;b$J(=|MlygAGur6!i{NKm%!0V-+rj93W?oaYReyEvt1W7!+;Nsk$R}LTy`Dp-_ z>|ch;6E_dNd8+BVl@BAoC>%bsNFBa+aXc1~NsLQPpD0+)?KPoxQPaUEarf_N zifvZU-mdK2UdcX&c#|%LkK4u;l#wx!*xGuzNu4#3WDn|#H`A1_6m5#)NK1{J=F1tg zvSARw(R2;-3m7xaBdVF`R&MYS$F+-{JlN}NBE=;Zvl+!+<^+XIOgm` zyRR&zcE}s7Ex&Q3zzR|-kqe&gceaH)IkKzPbbfQkq|3j;1-2+FX%IOn-4Z8mmK_z~ zg;1;#$XQQH9+~xYnjlHO_4YkEEIQvZs@|f1E&P-tcA9PCLq%GoXaA_>&GwFJqu+zv zlCi4t>|kf}-~^9KcBqB;6}@*+nDM8Z+#4crdCEq)Tm8BxGD+VjN+-^13$(I)vw!Gc z79dJ1xk1pQ;A&Rsr4RK-IAo{T%c(c_ajs|4w!1_>>nsJVexN4J2Cq(A8@57IrpxSP zWU6qufwD0PbSZ2ES%dzLr)Lchets|Uqo72PMY>*O^0ZXdkPh7Au!>)SWxl>{m&D1w zmsnL#x0>lo+DI>W{Pz<_6Wa@wWID++qitudXC6rku5$-&!u!ZJo z(2<6M%FS9{!D@7uSfRaCx-jnO!RyktIJ%m;jUBfmL9L1j#$UqWQ$}*f){O1v;#h|$ z_yNPr6CIHoA%z1oyo+HZV9fHUFkJ;X7b+}CpH0(wxq?v&X+D~i>vHlXsnDnBz!<)S z?t)$2MWK9U>yuBj187t%9r>R|Vc*4Nx~x%PE7kmo@@VcGZg2`#_NLC7rRC3* zTVPMxdlAS?%}uN=zB*f~w|`1(hS zQN2zyzK1o71S{(;lH!=-+BpF6>~QU-GsZMkH8Uqpda^768L_Y!6ol*Ov?oBxGjv04 z4a06go__riAR?<+isr7WQs|(Y4rb;|Mdw$Rnx~sj7sT@FUu?oU3%tA@>3;fmF>^68 z;zvuu%gAhKt{oMokdczE2X(hMgsbQ+r1vkx*sg3%jW);aoBFNg3ok-e1ZTgj?BXrI z+xXDv`dV}cjOEHR(f2MVff8QSJqx3x zgXL$$WH8LAE=Y2{)>mMYm7rQ<64|4)xbS{l|4=LKBF4d_ar$JiN_t@|o&UpldPpSG zlb2rT_ADH4-Ol$=*J;PsH1_dRp}OGk_nur7j>Mby1BOAE_z~G86Q@)CK4z+E=y9r> z8!)+m3HnNo>-O`;Meop0aAD;_Y|N;;WouS#Qimo-wHb?4%LaJHm~!USW8B%sAX}k5 z!mJ@ZG%|9QnVG(u&Jn=ordt)6NT*QWOKRSWu)s#OE6E_}@p-=A?9r`=`?AsYWF6=w zp{7O4zEW%}ZUj0t2- ze)>v5x87A3B@|rXd=V z(PTCjX8P0=sAh&+uH7W7lmk<}@#OJff1irFoPiUIES_8CWS}%z7-^@j(~JG-l4>WD znAyM24qK8HFoVC}?^=ROuf2Zz{u`dKfoP%P&SR&T@`z6tT^6N;!1bs~L+snHQpix* zviLgq-sXoivbOeiDvTWBXWrmNu{r2za%&gQq-VE>IEU(C|LlryD&nSFPQW@HBTT^U1A=l@jM^={QrwBGB*NchYhc?+Jv8d@ z9*ZK!qo1#hgle{IsLWh$Zc>}>$|fXDZ&}tERhyU+ol)gcQRUV52HyW$d1!6r?C^it zp6K)s@X_Zm$`mVF3dk(ucT>P+)rmnY6@}o6iWUauiXgZ@31nY+_^1&j&sfIQk!T3- zSWr>f+Dg?1CL3)Ur54)&_4H&?Vz~7M8eq<{o7&Oc?HwGHRC&3SdFP^?Srexl z2v^akwKZb)Q|8L*y>jjp&M?8Cz7ZkFo-MiciMEGeoShx5I~ zd*Zhpl~m3p@4Gl~9$2-7YsW&-dP56*#jny^7q|pf!x6RVSBp&v|4IyQ+i#TyBOS+? zeQrwX>{P$I5JdD_x0VvhQy6AfHDPKDQhxZe`jx{*ykF={=7TN`JrH0Cba*IbvaCpP z!XRi8_Y46TL&rCx3kHWWyO&oNX+~CUZFJ@tqRga$$#8c(j;h01oVv)meuh*NqLEz| z)7?H-#Ks~t8`1Q2#jaz3>O@(?M=yYNMvz=n6GE^qp^vw>_su_fCkfx1+uL(3(-%Y& z)9vC# z>*%p{kJ8Wp7m4j+7kf$VVwpSfY1w3^k&PUzcQgwO-1ykSZZ$ji1SBg6c!_>K{DEKt7j( zoSN5@wtC&&Y{fD<2Aj-yNwr*H971lL7=C?F(yT>>0&kK)#}017U726I4NW6VC@kLHDJm{t6S7VYCCW@}?Y%o=!C#%!t`Gwk}GcsxGQ7iaSb=mBGyL z*=h)-E;*Mldt?s2ii2thvP_uv2!?|C+YBHkM0ZCcGp=w0wp7lV8Z7XGekuZzf^h1> zV{j~Sd-PL5`k*R(HbRNJ$BTu&!>0%<`t9VP%k6=h4qpQ{!f^r_DP_etqvBAI<(vlF z(i@~M%#iP#NV;7+?_QF?Ttb-c+(_RVB&A<_HY3yuSD%OvMeDy71!IV*ZL~$0ru(fg!f@5 z>AcStPTN-n;TH%F^L*Gf*e)^1S@Lyga{e(SzvtxOjO9j)3M#?UYl|6jC?@ zRHm2Mlx7CzMlQB5wmhyjd)$6TXzQLXFCCdD8^U0W|Ve+J11vJX)jRk1lev zxCjmIBCW*xu84S5?0!7w5DeWt>4AxeHKI$Q^^>D-^|kW@Oe|2X7lTB{wb7SrjWuh^JrmfPKeVz#HILrCr+>=LCIU8|IE$|!PiK;+jVY{T zIgIp4Z6l{<$TT19Wu8TqUs@@37oVis&9ReFYwSuzQQ*{Je@gV|P0t8R=_}iT8}7ml zg+VT(yX>k5|1AGKws`BanV6W)9bAkYZO>?>TH0iS^hNRz1foqU{SG+}iMjawpEZ90 zzX1I&7%E2TnsG;W$K$A$h2`7g^U1 zaj5*Ch_oP&w6eU6`HN~|=~rs{W|^LN-I1(O=C|4Mp}dlt_b$y~ZwaZw`pj(;dysWd zCA*3}*4xFOkhSJg3Mykx5l21ysIqg(kz$*q%B)7$7%g5564GJ`yVL7$k!>gXmRN+8 zo^+4q^)7r*b$0SrZ5)D8Is%Z>uLZq6-mMPEHT7~Xk12+8vu-1HBM|EE z?`uNPH+(R1bcFbvM~J;iFfPm}CF7%k-*>+2@$d5S@xGDr2h`!$c65Je#s-K%c_!OB>K+%Z+E(8t1e(sIIeyb4zJC!PH2qj@4f)MFREt ztJ>&ILSFv&_TBPX>&e-IKaFcQp6c(7Tb_zeI$1^{n(1Ucs{yV8=3FeJ{>D zGpU$Ja?>2vW+{y*I#+oY=c|jixvf_L6l3XNk&O*U3y~a0<61iCN`IGuMD!Av(QM`X zHMpmjCGcZFyYZ(tG_jxM6L8GpjA`ZWtS6;)e{0&TJPL>yZ+`ank{4V0;fuQ04Xf%J z@KEUY|MLgiPtomAW8M4J5GbNHW5I7dB~nj`RaH3hw~oiWZK!FWe(beRyT>}2(oXm3 z-!Q`{;sYFUWHgu<=Y^Uj{mTLtsm8&zlc9hPl^|5!RR0Kye2QUFXj;AYs*$~MwWaaS zmc0>T(NN5u%93P%FqeO6Z72+7mx$71U?9Zpp|M~uCh7FcYWGQ69UEiAvr|5hg6UPS zD&pBy5in5yJXDaONi_JBXGNFU#$l3LxofMilTOcF4&~*JimaO_(ckNHg&K6U;oqI_ zJ_j<;n6?M8q22s-&ZG0pEq0Q~+~^zHvY7 z9B9m;nBe#shCY#tZy5?JytmiAXVbx}^%Un$GX+=r>>CtUQiDQ-e%HS#niAS%^pXg_ zNA_htP@;NOTT!%#KmIG^SS2#Q%`r05iMt?T_M|HP$KYD`d5L{$-gcYm{I7REhMRrG zX?gtG_INDfqEY7ZMh0#@xssPJkbbxQ7I{rHjV)j$3#fgCj*R1Q8i<3U9Q^I=^zUZ! z&V(EP(}StH7P!!6T)`VOsrHc{^_~A@wigS#vpVuUevMD6F)@+Z$^C@-Bn1v@rC;u< zTS^ozlT%sox%YlP%9Ui*ikb%{`8sziR&(D8n9d8>eVF%LPM1DTwRS#6OtPg;3$MDm zyDwwUDe&wop+#ORjK{Q~a9t5;df?h(FLVGXD;?P1saQhj8ElZDP^-}4P&?aJhvIeu zS~)$82I{1E1-cQ7)S(r@g8?e5hFQ8)Ss5@er6!wJvs869q2BiC&-5P~$fz(h)d4uO zYYR1K=g^gvEMj5cPsAp(i)@h5K`nQY&E1#H)vBYxp(dnp9p9}?Ay&XuNJK!Ob5Sdh z9iCloZf+5SRXn_lGoOR=$Kk-0m+=GK)MS(BWIm$ir_6pf>G9n;s2ocKIo=X}4$B z?$?rkDF(JCy}lV@9Ah|y6lyHlv%H@QcxyWnA)4$vP_XMULxQuuQ1o@KN@a1jC8*#` zPn0s`TwdbeA_**f$V0Ryj^|6Itx}i!$DKt2vASiC^*N2YfSQXS#}@_i%3F505TmA_?t0DYpe%hPFLRLyVQ%#ozdjfFuLz z9%UKT&_VpS@L*fU=A$XNi2P`OWL;tzzd|CY@5uG4e)J;vf`*6?KutiXkTmMtZE?O^ z>Bg!X@5VO*y0CXtks5F3(CH_(Q$bWBfD(5*u~3CXi+Q>VQ*m()@NV>CG`BrQ60_^R z(VF^w<++y^qjCe*e*~vvY{UNllpTMN8-QHoWYf>Ey7rO3<5zo^TJOXD9m86Vs6Kvq z~5mzD!YXWr2Di z+dAiYw{RLSnVDf3ZBzT#z^>xeIFt5bPqs8?$1C!kd*T7`L|BOCJ(|^_7Q4-Zz-I32 z2v!H`jn`}BOG)@_rNokw;P$kpm(yz2eu@ac2u4S-<8t|P#+|r*j^7Clt=DZm)q*7l z4#y`c)L|1y?!OFQ?tklpIgOS)_TLC)e8HSUrFC!~JLbeNvu&1^G`gLii3Bw{7-mkO zSwvKp4T>Fd#$ld)5JtLazS7>7vn+D(XV7j)+k32=2Amj}jY#dj=*#pH_h_Rz=Nnrh?0t&gE@vL8#2rlp2^hoH_80By;)D6P5MreRzWS|B;_B5Y5y`9ry zyMOo68bDuf}3g%fV*g~+A>KHWU`nI6XVZ=Q^{o^O;^H`_A zUPNcykD$j*@C21UJDz?WFqT%nLdAqPO+GekZ#K6f)v;>$f3Wx4I!Pb?|72}Mf1UhV zm^EAHovWp7CRtl<_@cH^i|0Haz75>n8d>{6cjq~;B-%{KnR6C3iyI-BHB!4S7A2RM zh%2Se9zr@I@RKfqFNH6Ojayk8Uv^xErQbQgUhnQNk3(Z3ELBdE2EZ~4Irq;%U>%d4 zxX92x1G9RAcsvF|hEi=Ik8l-WM*4K@7ckbUkly#0e=k>%5cr*q(HiZn;~yL9Q_}aEIQ%^fQ;oI)&eB^9aC1ldCT6mGnV-UY>}@-{;A50Wst7Xx=peG)o;E z&f?gUBhxX!(0S&{dgwT@c~J}|cM^6(f<-E#Tb=9Z?c29<%t#~RvDvvdz&ivf8)oj!jnS>u?eaNF9^8H4-x4CFr$+#t)|i+FgT)= zK*S2P!kr3+PAc9RE?KdnLSSl((}!wRE1qt~e*0_l>yDtUJt|MEhh`o}?GjIxlj-j= zt%M)SUUPnQ3=4$4J3#W?zDL8;Ej1zEz;zG3@+LH4`PB#~fE-zWb`7!H3}q&de))R2 zIQv7=$uHPV4SU$YZ^b;H-3!WI>~NJ1ok~4?)9oq09~-hVZCeSwg1LKjh06>Q^Q78K zDRe7z>oY7V*OL@8)29|`FQk^tRFgQl!;Nd(?KI

    1. 0Zt?G^*7=mM8|Q7OBo`F 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�W_ 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
      (Sr-*`NQ_U-`YHDW$Yw{_KXPfdAN$P5 zzVVG$wy@?`zVeNK6icC z9dX;buKxU=|FggIJO3=t*&V&qUwiHD80i~R7}IzE?Upj%@2xIQ3o0)19HGelr0PM0yjJzk;uSCPVg8^1z{!DW zdMX6TCe6jgW4op6QvrvLwag9EdG0V=-(BM-jwOpy`F=9rhfC}HKC9X1+lOP;_k^OC zY@yu@3(4oV%a?N(jJ$D6B1=^$06YeAH_r5POd5AV%k*`qq<|v3k7Bi4FM(iiV(m<2jpvS6+SMgOt zb>r%$5>dbEpuxg;f&#L=7%AtXNTL{VB!(`g2$dHO#CGUf`>yZd5Xl2tTuU~~V*t>f z1vjZ+mnKP8u}idu!R*i@T#4p%pxj;)g{lz9#)yfONiBXY0T7AA3sf`Fq9EJEDWoFh z?hYnLBWrAZnwj89OyqqGam9*z9a(Oo22-NK)qaR1j1GARwV=!AaM7FCGMTkRU43!-t}x9x5QYdE@zyeDsCGqh@hXIY)Kv znx=v3#l`aUnqUw+>QKJffOQ{8^;hoS4b zPM8exR-qJCPJ%>eRpG!OCJU)c5{aS2g1w>|g7;n5bzSS$-ir!{pehssm>jDDDiUJ! zg2>LjCXmYO_kz?s#S`S3bJ+_rj9DbA5sEFwv&U)s#onUvhP=y__%Ur^#Q8vxfE}43 zrAkt8h9DvmR7v2ItkeiqlX<$Aj5Nfq@;Wh)=o|QRqA(*)>P`Ht(_gQk&TPR)_Hy`Ga`BPu7;eaJzEE2lg^%d|Vmw$=W4BuopPazRnuZ2qmqY0un`K~Gb2<^@gQ|8%XYK(LA5zQ{I2Aig0k?Ate*^OmS-pf0hmXh?FhneTA?Spv6b+%Ys zk<5y|_(2)P7t+bo%Q|A{n!9W2^@;KCGc{~rk!cCD2F2{o!?(ZngMa7W`p-W9`Op0H zzyDYM)xY?;gM(%ls(K0Izy4-C)mtbZ#aDpo@BjVZrgTVerbS61_$R;r zhdZt=KmR}cgHQd)hi8h4B*d?;zjkLVrD#0j4<4NU=YQ+J|GR(pfB)&9{>%URU-}n6 z{E?S-A;8kZho}G7?|k_ee*PbP^PAt>>4oI3|BXNTlf_~qELAq)JKy=?mRxVX@z$5V z_y;>xJ&n&-q}6Kur7wPc^7H(7ot|7woUvlTr>Ey%`qJg}be*3vYe|~|fBdcQ|MD;Y z_6I-k;xykV6)?u2RMOE}TU3!$tU(aM2nFfy{_a=ac;nti(Vg=XzW((;E+?r1@p_y@ z(eM1D|NBE9deK6Wb-oqpRFnu@)y`GURRq>}%9V%*qVLOJ{-f7kyW1CSe!H?`s;VGK{fo1U;o07|CvwBzV-WG z`h(KyDIb0Di(kKS<9I`Dbar|%t9v|raQa)n`TN7)uB;dg`g7g3gBoYH+4S4r{=vWZ zZ~x5aKL6uC_0xalFYGKufB3^U{@(xc>%a6%zZt>z8Mf1MnR@N@J74w?lfs7x0Fo-bgFrD5$x2)^&4u z*ffVt==@o?h7hw7D=6!&TDuCTM|O_7a6 zRk)&>UDH${RO*8dULYa(F0>SwoFipYCL*@uy2MD{wRu7p4%S6iAz>3+5DFcB9pZWh7dfnx|$A-pMT%W zH(z++*_$`75o_hRSu9la;_TwBw;tYq>*4#~|A8O*)Tb|&%acc^&V`GM(`TQ({^ASI z0?(eGJiLCqIDJH27XTs%NQu=Pu>(X!@)VEPh(#{#1&P=kiZVx4f)Czzov*s!p%MZ_ zlttjUs$hEwJaA$)CNNPOHORu}R*<}6Eeolt7TJ44R1LMA*h+Ek73ghTEyV82OXFe% zMnsy^4o&n_-zU+hKk;L#q{>065E>OHQUQ)o5j%5eH~QnU5ScLg`I8iKAqj_}INw50 z5~Rk9WyIXA>CzmthRcq)?Qr3rtg@qW3V*V(S~JOTwGrIC&cncaTJq+@b;xA=W=^FZoBEl&86*0z`k!> zDa}SG-mmIejkFgGd$)ai_RA;6ezg@Zl^XgJ>;74P+ZmmaHq<%mm;&?$WOSxWMfQIQ z$jHt>^!6VnM#V-{aR<<3dzzg}Gy3!9SP9e2lq}ngwT_-B05nbglRx?6pZ)x2KJkeU ze)MB6Klj`-M@NT;hl{TB=V!}%_a1)x+dufmAN|Si{qEPk`Hk=OZ$?WYsvVQ2W$SHb zx1em(9-OryV?LjovyEaK5BQ-d%vj-*pZf6UKL43deey$}_{4`^{=f^z$A`zqhlhuY zw(Ty?R~O6Goj33Q$t$mY_q#v*+E>5%)vtbYza8#`+iuUb-`42mAiyy9W2OD){gh)% z7q7{1kABFbnGV{PrhELny}M>-jFN(NEPkS9F}C7M?xj)QL7_?VB<0&|MrI9R-F3^0 z<>`8T0Tt(}gTrf!=CH1hKo!&h4CQQ`#ang&6t;9!pEr%bV~e22fAtc+9hO)ibvpBO zlc0UOf<$i@L|YU~d(brX=YR6YKl|CweEbt1{OCttzV+NQ$H#{U2aB%r=jRtuihkpj zFZ|wDcG&VMt-8E`Wsqb*ZQ}MJ@f*mU6_q+CBl4`6OxGbQFwf zh5S2;gF%#|C7J4+nw(9@VWs(9>P@FIONKLb@}7O%J_8gO>{d@@+K7e5t=lsVAW`(V zK_TBJak{hI0{Vy)+5e}6YLRbCA1AvVKEXvB6!@OX9x~sgnPt*?5o*G%M3M8LM<&na zVe$SJ4PXWVpt5U?cDY(D+phJ#0}(r}n}en~sGCJyFPy8H9h9L= zsO+#@@)*|Kd67xuKXDq5CHaPtjQ-1cW{o9Zk|+Sow^T$VfRq@bL8M!)FV^i+L#GHJ zg$m$<1|>0{&^U!m(l|DBl$}-${n>xvGyl@R{F5Je`F$@ue@oDTwC0-Oyq7oMy!Yy> zuf6cX`#<%`Pp{YA+1dG5{@Fjh_tu?HfBKUj{_xA!jt~F%o8S8NU;Brz{_xJ}S*u_$ zDWIfO8DplU#TdeaeB@XWwV)J$21rsM6ar#bx%%4m>j#Tt5e))W5+Mn2Tsv1oDRpyi zH)^~O5Q(D;uba5Lph;Sj5vF|@WG%qnxE+xcMx^CvAl}nvX)#*VPgDgcfZ`H?hSEhC=;s!$I@Xe~%j>~7c z@L{XEHlJamPh0AZLM0pE19N2V?l8HH%6ScLw{o9AnvpK)!yYP4&bkrBcwC5CH-3q% zH`HNtco2Kn%HQF^m`_`}F0aLx>a_bbV#mQ6Y>JHL*;DAVv?h*-*sEnUJH)e!(avOT zvnV(9WdF{Us#R=d@2hwIPRI+AmNKnq*4YJ3G-g_ zd!TQ?KFT(8?NeBodn~}@AD(Q(l=wS*a$84s7CEK?B;y?b{7yt3shRe>CwbDr$iMcfGpeI3|ym5vv>xh%5pA)mr zZdE6~CLPS#OiKUD=mX$!X08KN5)2Gen9NG0nJ^|E+4C$V^$}NB@CT^v4wpn`h^ZC$}jhlYl0LG%PaKd1nU**5EYLo57e-Bq+X+e zI7)=|`J=&|Pu0+19PF9)8B;MQR5K#$0*Gw#o1 zkS8vjU%>l}RP<^5eRxwBV*gBLV8VKsu&Ar!!-M1FLr7p!At7?a@v^K^bJ4QYJQ@1h zR3V}f&?Pn>#261V4OZC;u(fY8qx)K{r&3p?;m>EfjWc`ckS&hrFqk%)iecawXO@VW zk%wKO2|(2pa4^1Wr{59%G9uI3{-~-FDFa|4ik^>-+11W*RXJBxH2@W5=h(UR8orI- zZ16#X^uCh@(W(%{RgN56XkCG_)4J9W07k{^DyM-|;g}T&9ZB-DXC@EWty$!-Sk&yy z6;(t+2oey;dqN9xV3$BgjzTRt4iEH^JUG#vA2DEKVXG7aKxQtCJ)Qd@9c@|_dryf& zh}3Xf4M8+?-Fm&c5Lt_O5TF6-!Ag!*f=VAQiHKMY`}Kf&52$wzhX>8|Ye%hL`p_|y zRGY>T$!dA=*4?{xwFsRom+QCgzIFfpTd)1_fY9B#^~~A%BUj=0#zA#((200e4^@Zy zXyFzWSB{-?%pw|mSUxykJvc)Ugghlj+ro&0%o2hG@hXr2FBSxXlton~NC~29oFI7$ zq~%45J-#?@F@}dyf@}@srM|dQz~!0J58y!C>jh_y4b+QgyIjx0sR#xmxC=)l9YA78x_Nry!8Tr?Yj!tR+p4Rp%aZbxH-Mz)zpuN>?E5 zj}8@8qG;Fh~L`_ z=~R06)9@0|c4S-XrZx3((>C57JlZ1TW*(IxdgfDh*XeiBCUp+xc{C=|wj&j}XFEp; zvtnZF+6fGoMjbqf6pl+M_ZjT3x%W{bRMR2(%d^xhyUa9DdKir1o;)Q1EVYi)Y80hk@8adWoZpSuA9 z?n{_%Ch9PswO|LSG~En{n5!C>6B98}#modzuc{!4aUZmFN$bha9MLZy1lts2virN@ zm08RzVnC>-m?pV*MT6Z;Hfn2+2B-B^Q`}W+PrNRvN2U^6Q1dr)z-LGO{ZHv$ zH8HeIqB||1j@2eV1H@|KQ>{@pkJ-LpZV`AotF?Twk9P@N$i?aV%&k99ElsthnzLK3n^WXAM z8mV4wW@dHPxx|hD!(;_&sA>8Nfv6&A)`)0GxS^IF-P*6tFWR>CzFV)>tMx_Kc@0Wj z-M)SMd#`+NdEOHJp$dgg-+1$lReOGZ`sm)h+t0ml^Wx&1oIdxyn~S64WeDe8w-g^L zzW%~<$2Xs8jt&+F2aBdzU#wSW7q9>E_inFW!AcfGvYCSO$amfJQH(7J$R~$PM9y>HrpBE75AHu8oH^CVLN@6QvGWTd3r`Lqa` zR3$3s_PZcGzKP#!hO|e417&&iWRIbnQ+npr?Wdgvu;rE(40X};+q4z)Z>GnaAB`WU zrE~huV|LI)vn^epAA`Y**)bNMJ0;y{!f$aL7`?bTPqb&sV=|?c^faW-6}ocsE2`Tv zOxbQ{CQ;&Xu`??Fpt9Y{-AeGzNhhDo?2M)BWP2EeS$MSy^7lEe$auwUQ5(_cD-rZ` z)2@PV_W}n!Gj?6yTE*D840GME1=^2#;}%IT5i_&P zmZ~Nsg2u}1MoeM0aXYTbGYe2MuP%9WlxKTQqvCY-_388(Xwcc-nUwuB(xlYhe%9^M zep}bg^X1^(!Wp(0?%@_j*)apx@&fm=dt_#qwD;`+;gY>hEmyg@Gl1hA%USJZW=8b! zZObD2mKUH@uQ#cZ^3x-F4rkmL%Aa{{2g#ShxKh6s6t!(2WY?r> z3JPF%CAFQeedt6yK=Gz~DTPDYf!0i#M4VjvkOe)UW7l$}6ZdH@M4&Ze=&_pyhtRBd zA|K@`lte_NB95em`Qdm5$ykDjT)M{0!pVw=1TosG%CU3IOoWK~0wNRwR4l)m6Rb@H zwt%Ii5J7qcssXAZK>~mj`9Zs`li+=*L~2mic1}bbb6wZW3}OjEM60T1W_HpvsB0&} zDiVYwp!4dzRt@S}>xRKD#GO}VX2%sNNR+*b1~Di9`c4w_Q_J zt#ehp1WHsO!Heg>2#f$GxER8P`au}*7o~Yi$Z;kjSg(;ElqjKF6tz;DX2sr4??svh zw)}^JIj=|nn|KYX9`K?b8elh?K@^hK6jj8qDu!GW$T2r{9pkJhU7RgX9zHr))Mw`> zCnqNl9z47_zhHK^U%T^z@4foy(RsV{PzJd5Ef7Ljt-5os?eVpvkA3pvN5|KWZ(M)4 zzPPtMJ?XmE(XE$XI=*$QIy|Tsi>7XtC+BAm9zA&Y5U%q3gOWkyszl1I? zr)49-J=oX#6b`^zEl#dZF~#W8Q%G;!)SnYy-L2&I6_&C0dP+88qbc>!UcZx^{BH(3 zwHf$L+cm>ol!Qg(xVDL~9#GF{#SF&{!-z~X(D>mr%{ba@$k;y^I(8P`tjTL?;FMh0 z=TozonAmcq4WsCV0O4lNK?B1jthqU(p=)Vrn~WQq1r0bx?d zCdi?5RJ9MAtXRsY{YloV)%iKO8g08431mGE2_aB~t9j@?nWhjzDlq~g#9TY45brw) z!S2J1BSxkYneVD7)K#vo>V!)P27FH$7$l%~IRwC98+;}($Puw6vH-8n@uIGonE)R` z@V@QZ&U+$q%!_8>>WY{|qzfLZq#A@=AW;%Q5G9e|)9HI6CKeWk`ry6yqIS$Zc;9th zO9baCcI+Ja&U^2jV_x#fDTUyd%Vq8A!=r;3Nfuy2T{lhLEEbD{W^u4MAf|K;6|L9n zb-T6$|8>J$aR};z_rWuxs#!Ymp$ow-#j2PqSF=-c;#7kO(6|LxwX2zVyezBuRE=F2O*aCoL5Q}d$VYuK8i`pL%*15KAg4A}L^jdP(?4pWEty^i% z&L%UVjmPen8(C&+^}ytC=95Wp6HdHcZVspzEeI%OshV<}EYreU3zJB=vC_H0ovLA3 zbIcK*DU16}Of^%=5IvYK8BjpXQAM;fM1$g4SOzhKvf14?IYTWJz1hmnDJmEeS|C1~ z2YL3vWFO-S0%7{bsK}YBcTgMVR?fYs+kH`)Wt>fV#VidQ@!8C@n@Y-ROj-00ok3AV zX`tr~DayZXRn0cROoKO4Jt?ye3a4S_X+5Qhk{%>bphv#q@yB7Vp3ZdGG6RIzJT(U< zU|;ociJB}=<;>eq@+I{a)Q;YWzYczmR8oJ5oP|^wUVK&DsYRME2#>@^uqAQ^DeRK; z*xaHQRgqk14YEjqp%j4FVRXq(XqLwuBKyyVvpZhY)iD!80alY4H}c5ps%@ znL}iRRsm-hbTV`0SQM%vN)fZ`do6877#zc8g?6rAj0f0m38aYRJFXXt%2f`k+(}0W zBHnvd@qy5J78X?>eAjiVLUvi1*zt7@!3Q6__o8A@uVZHlT?iolGj&v?A2hP30nU+^Crt z$`HhR+LRas;`y*oq)F&&oFOp|PLdl#kz1m%gMimbiSH+!0)=L;u!$_jJ0dxI?_CEX&F06s{T}<~Wl${zF7I4E@fV5+u)o7$GbFXY)ZObG#V1 z&Fe@mkorkBOj=xhKm)xXI@wc{@_XuTl?W3%QdV`O6`=yT6mldJuJKAliNZWBS5#mi zk(!M?FlZDN9{aWjpdFJNoRZ?23 zB6SRqBv~e!*I_UqAU5T6uVLA%-Ft$(Pb!tl`{NNXrwq*({7$fTALWAPHgfVm7zJwF z6iX{Vf48#t&S~@VuwUql#~jr>1S8PDRF-?wK!^O6B=hE>h#EF}mYb-}b9^~A-e=ZByOviFW9EgTwg~ zC2|g_(!tZYG|wqlpI$o@{-o2sLT%^l^O8q(_u0G=wk_Rhcc)=vapR1|?*$i*;i@4* zwv7hu3+r!IQYc5jEb&VLPz_3+0HkH1GjmDje$2sa%TOl9^%L#tvJr|`QWa-}X-IBg z#(3t(huifO){%BN2lp#!j{O)VP9mcmx*h-lprQ~>TX^Z1E|4+Y60Qj$NC?s6N>uHv zxq)CR2GXiI`KgEk8c`zT1HcBCL8QlW+(CW)`r!eQh&WihON#JcT>KbP+09pA$ILcj zG6J(H@=p$qstQ4bAY;pCcz(JlWd4g!27EVsdB!{%G3_7&&HOf{W!n$^g9I2SK|Pv~ zNz{YXyhw>b0`lIstrHO zB&<5|LAs=BT+!J1q~0j=0ob@j~6;}3oC zr4M}Y10VV5hmQ`A4i*P>T`{|E-QIcg&L95a|8x8H>yJ)Ox~>(`!-MAN@WA_^szlPZ z7Z(>x0-C0-TZ6+pmB1TrsP4YruqbzL`g*H|7TQt! zOxA^jEL@^BL*`e@sse;y5fYTi@D9n4ojGn>4Wdd+m8*`AuYL66AOG}^{^)0a;wNt1 zdX^Z>aBOiuviYX>vh{nDY|3WbGVw)p5u z_D!StM^vl?L;#rB`iU9#Uj$`i%m@Y4;`R^#uuZpgWa^Sz!8WfUBO_vn%l0qZ0@ACm zh2vPhRAF=V^Qq#hW~y9Ov#Xdn9+p7bw&}~vt5vc77Rqi(YC2aj6tr2C_a_l1sgRnx z=x&>QYzL2bNkuv3ijx(F8A|hy106__)dlK**)}e3kKX+F>1_n9_N`}E-8L6bCK&A0 zfM{MvA*wD8UQ*WHL#X{)g z&NwB`mA@}Gx-0u_O(l6xT&hh`v&SoE21nSOcF9@X^E0pv2W&uF#KDf#JeAqH7r)H& z$$s2(sX)B60Mkwf(H!Hcu^H0lDw_4V${VU0Kk49kQtna4^2@7FdHc$o=}+cbYe`u$?osuo>UP~* z+_<{z*s;kHF9@0y``Or@ELKVU^ov(Me7VmCX<8}G1hJ}=vj1JS70X(6`2N(SnIb?1 z`Z`_z@~S*h5h!bd_G+G?x$GH@O*LL^Lg}U6yNMFmHJ;0Z0_N9!8(-tu*lFoVZbm@j zSLr)dw1-tB`g$$H#27G(f!tUI!u#DnkU8+QGG|BrsYx02QsYRoTF?_rHc{p2Chi_y*NdZ(yghFT) z0W6}99kG}TT?i5sK`DSpATnrWno```nkGXD>M9%_9xV=byAsJ#H4A{gR7k;dA3QPD_y;w?muiPak+%jN0W*#jcd7(CS6WPL_61gfHr zb+K@OV?abjtYjA9&~We!kaJaCS5;kGM+XZ~fH*Ih$T@E6s&1;PVrFXFRoAs4gwXkR zwZ4D)Up< zUV9%DM9f?{f;6>TcU`+)S@$?{RaI4WO~fKf#7wTPE9SU)A`(PIZTWW6q+}!! zqyp6tf=Ea!LjE_KHpL%;`S%z&ylcO7p#ZgsXU);EM{qXEzeSy__)m%IL!1K52sy;brE-|;=zQCi!x1aT2g<4 z5&+Ge4Cze~TLdPSrBza{6!A5k$sx9{n&$kZI+{7My>}XI9O}qxbA+}&c75CN{hf+8 zf51U}p^bpvuJq2WcjHwwt229`hkMK3ZEJ2+QOZRk(lZ2X2VZ9E*oUGglM*0sc^b^J z_)AgBZbg(ekDhILFC7UR{c1g3+Sx-sF-&0RUY){CWzp$-R^+sQX>br~baT_t?G8{< zL9iRH74h=xbi)e8fN4XTdb)ZeN_!dxBQh`9Mrli*&~SQPkt20H7F$Ru>z<{nq;~%} zE4z>|Q`}bhFcU4|5@dPU%sIGx!|OWiNZmXxW$*RNLXk1zZwi1kT3x%O=mc0AGWq8; zN&3l9z^26#rsj4xpE24(1#=Fn$ zQ9K+iDx`vR?NO8viH@?T$E_YbGUK~|B8Tw-5+G=JkdlYDj)~S3n_*-e5M_~_ zRLFtcPfC0Sr4t(^MKa~4ESXbjnsZynfslNqHO?Ob(i){njZji1g{TKSK;+a_EK0;0 zf=cKVfmjqi-T`N|q+zl_q-D<5IKNn4tk$d5#o76T2MZ}J zdi}N6Uw`$7XJ=<2$hGU&j&V(V2*EEe&X>!T0IsSQi-V@BHvjqCF@9%&w|n0d})MR3-DJ77|ra@o`$DZJI1fO^B!_L9O5v zI-$@IdQX!yMo?J5{azqwLVy)Xy7g+2B3;HsF`SbHr0^QIZt^@x;ZK;s1POo&5X7(6 ztL5tA{NkLQYuD?Gi;MHqQ;YZ!f5f7JH_# zv@7>hQmBUhHznn~msp6TS#4umst%7D5e-2_y$XnGa7CgZD2wUU%#kf5UADi`=wHU!-TD^m5_wIe-1F?6?l50ZDtodoX_e>(8^J^d0!MC<~T)Dcg z8m`SS6WfWNmh`7-kalE%X|{a4^zvki;;yWgr`)*etpM)C4FA(Hf5IvH&crX64!xFE zT3S-$4q{$%NV5kDfZ~SYbk8c%j$dDF5ovQoPk#BTj;uSq_=EtAdF0|slv|fhUr$~F zI(@XYv>6;%h@4iyfVR2SyE(dro2u^iZRW0s`io1q8Xr20g}~fu@JndcnMyD2biM0 z%7)d5mWzv-Z#`H`iNN%I(z?fHh7sPnLwR#q=I7_82lEBZZ@*1{qtc$SzfWLFY+cdk z=G-=4ib>ANijkRorqPADvxy$dI7ayg)b?IL01%JHj%wOGK1wPo8c#%0nhz;rN#u3~ z5gXUXZxOYfw!jtw^S)#|P#SNsM&x@n1jpR_$iOLs6AWH0b*U6^!0KQIfKXhfq=vM{ z_=}nm3Ug+Q9g+q)FXrKiU`i;r~(;_MY{4Ug9eh6 z4bBa=TM8p^VyJ>fXQu(nDH4vW(1^;Zijt(YZ2%{lV{hu(c-NSXbwaG;1v?hVlaO#? zXa=TJ;wv{QhT1zv&!QeakMFq6duAd977 zUV1J@SFj3+$T!zy7!8tSs?(nEyENYRit}Cby(z>cTI$o^X&UfBbm5r_K z7Kn%hFQO^p1erG=16{|<^-1TKpzc|DmiR{JSE5}4XDxPY=tAecS1Txpst}Pv*Xxz{ zUM&`~1a_`+wJk^zx*&ET6>J+4if3-zc=5#-UU>e67hibMxRIIKb^GYi!?)hL_xkPI z?RqV$&M`YC5OE9{l)UvUq$W9LIM;Pu*L4yE5F&2s>ge#OX_~64R5gfHj_bMxRD!Hl zt2VSDgwxYg5xIB&-uGVlUfZ=@*ZIzOZD+V?@S&<)(=^5=5_~IRd49fHFK<3`ebH2P zUAOJhV%Ks-1c-*Zu3Y7UKV)X_gWdM#vT(8UG$KS6a92R=yRbMosOl;N-*)ZE$?3(# zs%aKgRWVUjnNM+IR)xa0btLZEh*-E@3qBwwiz8G^A_Aopm>|YOQ5AuR^bkCf25vGc z?k#2MQ%V;g$JEa;0bnv$BVSR9?V2FqL82(xMMc42#|Mjp#qq(}>g>*2Z{B|M_IkY{ zV&8cHUFSvQ=;-i;7hk%5YyRb7iUoJ}N=f|#8N7geb6VRQWa z&F5cUuXIr@{E82c{knVTAKknE;N;|Vd492IeG`(OxP_ny3b1odRYU04LWN3-@L^G2 zayS{U0f^dM(Nc^`YFJZw52+O_vS zh$uTSk+~b1KRYqQT#zH@P~2HFvfPwRoT!>tr>j+7Qk$& z@0C>QxU)~ECIkTtW(1Mo*X#CTyq~9xFg-{%-duI6*ns=fFynq{mSdk3LboGHsycNX-t=zta_ZN% z0a%%>*Zg(YMCC$RkWnBM10a1s;ZVEkn=t&ed4lXgXC`t38_xIJ4k&X;%-iN{xYxT| zcy;__fLU*B_)M+>z8`xoY@vT2w|9+~u`4o8s!1%Qin16;a12obcWrk*c?I|3_EeR@ z$zCT!(>jRw5Q1~;%;Sh%gmJRsM#Uadi6AE`X3@OIjSk)y^cYNbDQJ6H;hT9fy1kXW zqe@JL5uhp4hH`cZyl@F|I@^S81x7t1&X?H?JvyK20mwY3`hMF`M>gh4DL2u`N{b|W zUu`O_NCc*QF_E#I-PuQK&})W-Gh<4;0gIT(P|%?RS5lb_=>-V{LC6)3kE&22j&7v{ zM+P=qFWK!~nch^hT4aEVKpKK*HV_r&)2>L!h1lW#h?iI+#BLBzqy_QOEuP36GJ^L( zf?;z6jsS|pDAg7XHi(Ew!sfEjkOC=BG6MjJz{D1(w6i54-T@N<<0Ju7-x}zyc6%9t zP!Yj`6cDkZ6qWX7y8O$qGgXm*c+ZZ4SnXIolmJ&D4W9zaM9k3#$}t;$N6rgffPFyi zXu%o;P<2hsjw=x$Sp7_J8bm{gBFsTqK%x}g*v!8YoP5#z#jbM91OhXua@<^3 zi5daN^ViXBTm?k&zH`yoWOe``F|;ai3)LkRwo3`?Ai?`?y31h#Zrcph){P9wG0koS$8spI><2wQc9U55dPt8ia@s4h{|v z4-O9woO47Z45*%-ozeyF-@M*5)nc(&tu7qXV$nF~>ZYzMw`dw7R)wpow(V4v$T?<% z=9#z)J_G?mpkOEI+pZ%f#dVR;w(FCVM<=Ie&)s_A_;`V;MgviTfwY?Blb9dAz*-Vm z5)v!vS#sg0gt zp%mZASe8Pe9&oOzj;Yao;_MDnuF$mi5H6lRjB%-qiZ*BK67|@^z5_G zz4_+7M~_ZVPR{|j${|3KYplY$IpTZXqg@FCH}2s2;q{x|ua_rl#reaN3z7Q|PnKuP zcD;sI))2!PH~?f^M8xrCttfaAg|>()*b#vt>Vv_#Da>tLz-%$2w1r6h$=Y;J*%iXe z&ZoHmfF88oXDwt0+M(Zi3hX zXuGdmvjho22w6)lm`qcoxg7YCN|Z9&J%vR#{^7Awwqc0K_KWfXzrv)o9EJH9&))!L z42Z!>y*D9o_RN`7z;*@yiQ0wl(bV?=O@AuC7o22AVAO7lR_zp>Z9R8hh}F4@YI4+| z-}HT_LA588-d!A{PtJV()AU|QO|3Vs(@z^one5fu-r90mEN_Id#H6D8t#$Ucb9nk|7prhHMs9_`zxE{ zbj%em(aS8&@u+(zgQXyY(1+4ZHxBd)e2>Y*OU9yGj7lK#5`qM8_An6>J0b>H6{-GW zyJDy{YCL6Y=D|~2<=$%yuX&Qjf8I9w_o=E7g_G?J8OwpNE`#1#oXt;R@iUv*dDS8D*uQlym!}14+YRJ>I=zuuIw0Fpj%q0?_!Fwj6 zShZl=}QE@_GVp0(a7BbR83b2uEaT(1YEJcN2Vj&`E zfGQ|@z~#LK^MW$qof7KH3`El#KyVDIV)O!6F)p~9P>6A(D44Lad=o)wW>Pix^~|C^YfEOkM4ihcSKB%YOY-6*g0lu7VhZy zT4k4gB}KHZ>LB64!w0M7QbZSv#nI7`MUB08r24dU0{y zwJ|V4yIwzh_~72%d-v|%^S&cC|NN*n+VN}&b{Se=kYj%C)^pcyU2B?JL|o-UkVlVB z&Q8znym8l6?&$cauIs9<*6VfKbAVji z0H~_SUn+8XazYR$R+Ssi-e~IjU~yQv%2h51LJ(qCRaU7N5sRhU)pgS>Y=%b{VrGHX zRo&E0(=-aSUF#(%MXcYn3>FerLPQZ+0H=VeL_NfjQ{{M0KkgfAl3B^GUsY11Zgbbw zAZf3wm+^+_#~mlhSg|H&U(sUcdZ>WJU9>F55buhEw`qV7e>S&ZQp8!~7K`Tk_3PKJ zUHibxAN=^oKmPo!=WAEnPK`(q(M8i#bp-{4DpxmEQ@g4a4Iu>aA^{S>46fq#OF$=j zda_!r!gs#?{ZP@X5AWVReQ?%YbQM)MuFg+7Uu?VhUqg=P*n{Y z7d(Iv9ls^92@{}dH~96|bv_{z1x;b0$AcY!>Dow!cCp=@_3zQ&NgBYfb0a~+Y*Y+o zq4v*~uQB$M<{ONQhm78tsRw&=xjN22BFH|K%HN=%*~Yxb6!)vAZ94I2JU0}O{zfT= z5OqiOfL9H+3F|xZ)w*)EtLt=*e-D%L9Z%cY1=!e=mpAfhScy7x!`ti^wtvYe0l9(L`#22`P|gH34HOl#=;8%r zxpdXIep6y8-9T_Y8+!G$M_kVR)B>IPv_B0SIDE22nM+8ATPJJu4rxnI?AY{?1Q-;k z8y3KKgV-IW!5aRq0oS(dF^p&&S^f+0Pe?u& zeQi-wA1DQe3y_%B8brKE$PCHxI`-%m)~j=*S=6N31~ZFhyZ1?O#aKOjLTPj^VOA5~ z&ecy4kTt)GOY`(q7n!paH%rdt6EhnhJ#XozJ|7geMc8E{U?3v;wTlYoN-xay|LlTh z2XL90nJ6KX5>!HTHzWWCwTK;Vk2A->)llLLu*31}STqFhLFt}P5$kVJk)Rra5;3ug zN{FtF7BSP>7M;<|CshH1ekBAAVz*#%a)2_VL-O@8xnmVDtW!+@6dhe|)Fdr~ZR~@2 zAsHZ=ipz_d+8ymy6%uZ%svyy1*uwlHDZ4Odhf`r@fs%%}6XfjJfMyT=cw2dVOW3hF z;1Z;VIW@WsB?8F2cZn?OD5XQZs!(=phB6aXHM1ikI7e0GEP#QkfTVIYJIAgD*Kn1f zg1WAyc7<-`g;d~`0yzfk#Aue3l)G?-Zw)UpZ*CTa1nCswJ)$=*6i}`l*G4)?2q3EK zs$MvDP(XqZiK>uOuB?L{&r$H1f3Q%@(YVUp5dC?HWckSBywHI&R-adszRbe|t>x1oActDv!*{z-F@UXu5%#EA3 zZXF#SLBu(?IA~5!&+goP^R0Vl4Wjzg@kt zTCUE{&s4+*zgR4qrny)y*KKQ&az(+!Rpp2*3=t6-9ADXuVCK{sLQuq*oKOWhX5xyW zShwqwQ-$hc(OkQB{rK?k=4kAIdVn;**bp*$* zYU--0d=TG-V6v{?!ik3tKu`uLDJw}jb}x3Q!ER<`g)+rs@L9|&VlNu+F_R?6-H|j; z4!t7gHXWkZZa|E`V3?b|mp8lmMNQ*L#Uvsnh{B?CfE8+TMqvS>Y^x2VYHrz%U0qdG zRk3r-tfC?TM9xv?yLR3B5H2n*h-k4`93Nk+eG3psY*7)#s`ah+5C9@d-m8kgIB(BR zm+NKcTj`eVg>?RWdGw;Zc0hGA*|ch zdksp&HM^Q%#}$~_foh_P*#QK2s366riAT^hC?xMsdavr$LgJ_bLNGC9!50#X#dA4K zLmgT*wYTWVUP-^Sm78o3Q<-AOr=(<4a^lf^RcWe1ZGp~aZdRx$Zp!tBL4Mwom*(Mk z5u8#^P2MjcOfwF zB+}zUR_|UKN^9*(mzfPqNmoGH4Bu@o?pLeQdvAtMT3DKxg+1BEcUk zMTkA!S5?GGn1ZvV2-+Sn!SKhdNhIjWYzU2}#n8goGwIBy%k$6XrAV@la`YFGMJjU~ zg3tVttLHNx7A2wFi-|FjkSGNtMQo%jHWKD&S^z^u z;1m`Kff13#s5>Yu1TZnoFE&BZQ948th=Ay)tO`<2up$5@0V^|@$*w9A6$xJL6t<&u z1Ry5I7BxbNsIDt^&JOk~)H!DkgA&AhZ)!Z3RmG(@Egs2|?b*(A?>*=L|B#vcobfES)Ka&)#U`7qs;mSM5%&XttSoL#N@`oa zXJDC4R%IfQSR-D%cte|(oMYy!JPTk7CixURJ8%w&378E9*%LQSgWiLQs-_HqVq+M= zMg&DrKqe#IcinK{VZ4JPH6hHxm8c?+)QKKjb5)zUpCUpdu`yVrTULcEM z1T$pu9+5l~0;;4WU`)UQ@5DYv!VxS~rN@0vaL@a9~h!_CXNPh(|GfgoL+d)zyu9aQTc|gRsKYsts zx9zvzym<2DY1g%85Mo#?+{x*)jN8T(Vu~RQ<8Bys!?@eU6jYLm5IN_V90OpCLD2GB z5&#hrV&i?+b)S9q`QQEKi!ZZJ(%~myRGgrJwV3*Pv0+^uX=twtk+sZh}7;whhS-}{f$}Xs7 zndm~=&wFkK!>u1r6OckOGZhgtw4(K0_Tlp!W+_IA@6RrF+u{7j^Uc+kjGvu8^{$B_ zjKfGoK&VN;z~-`f<^)V?v-Rl} z;jPVc%{DK+X0kzMueC=n4$|J+xW~9W!2kau>48uC2^Re??rdD!(!hhq%si|)s-vo+ zl0>6v$|tb$;U?9TQcM!fWG0>YS56OYjl2KE+0UC-9zN{$aM8bbE!sXS z%OlfuKW&;+S{j@0RObc+a zwgr%KnD+vaRB9~%930Xvv-@q&{MoxQ29KDSaUaV10T*9;(A}+raC^3Q-D0y{h;rfe z2Tr$swBB~DM27{q!3>?1=Eh6m;Tr$pCmp=)17Gkltm=Coerx7GJLdR`yXKvZW&;R9_ z2$88AJImNk5sb50DFF82QD??E;&kElm;MFX{lRA1qk1o1FYt8$*X9>o_et(5oYgCF zf8}1r;_%{IK>Ryi6`{Z@m4bQ=F00d>A?)K;J}}vxf83MqJHwH+`RY1#%`=%l#188B zfh9nMa^N4)GKwe?V~Am=CV&cPhNdQpG&rmR!h3K05y$A0!{f5`dHnqa!(I93H zPS#E>`l#9UGBC~FA-MX+h=h~c!+wB}0f1FTCzt`vh8kAecJiK40f8JKWVK%-)JhMk z3$|fVHc*|mTnrTn+3|c;saro*_(xNM;=wazX;jH!bBNG+$KhuF&z~N07%W40ZIfTL^Mvo$v^>Ql6t8?2^6rK0nm&L959fBh8;Bx=hg@@q!crr z-g@$lUmdmGqG>x)Rfs?cNLnhG1PZG#W0eGeCaR!W7c<2uA_y6_Beeyw66tc;bR9Jf zg|GpOy8%NCB1tvv#vKMkf^j$QcH?f`Nu~q?KqY$my3SUwypQh zc?JLxIX{0l4C_~~!^Qiv<#O3H4KufG+i54FqLNZlO^yk>mI#SZL~q~)OPLB>c~t}66bi>?KbQ6u-(QK+oo-sChwe-u1l03UqYD~q^wI|%8oh94I2QM zcu6Ta=gQ1rmTAs8mmK*?KoN=Anc6spl#+;gAI1>IaWpd`cFuWMdUNK(Pm_e@S;@du zGXE-vOrX*{dT&VCV@t#9+y_SWAq!|??sJoI<#bILCV22$P+f_co0NvPp5 z$!#_lSz$wgj2J1RaFtUhLUyiUZipJ^TgNRDJD+ueEoDh;QgY;c>%Ak#W-6L@VoViG zOrvQkZ093wbQ?b-qt-)7$7zMqu)>rQ`deJkJ3?>fZ& zrswTHne5E{mcU;hDEymER+RRQGvQpGRX=)}WNlgI6&;Uzk6%7(YlH|x8Y%~0K z`tS5O$M4~p{*8_K2i3uJ(H?cZ|6(i1$86Y^MK=#mFtEzgF+npzh8!=|uqfDEn{DrX z>@-z8`qkzaKe*+r#EE%Wwl_1rqhzw1oNOtGGS8PSqoB4s1& zmfF4rP`E3HgG(RtVt;c3^rNH+{Jit)Dc!O8cW>q&tYNz&9HN!L0{{RM1l!t|4yqPQ$sY`1Kd$%A&|vEtWt9 zPhk4r=B{ru_^zUALWMh=#T^m= zup?$-Vnnnm!4MLpWX#~5>lVFto~nrH6gEm#BN-qzjbrB=kr}CJ7K)I}9CJnr$cCt< zDM3EWoslER%A)KLfh*#oSssDd*bx z&&*+rh<}O6&C|rictN#&O(872caGgS zh7^*D48!pL{lzfs#u%iAP$MQ)%JHUDP1G(gufF;7H&^d3|MXvf4r7QZkaH?>d3AYy zak1TQiHMjogzCt9Cj~|X%(Da{X3dNl(H;m8*(otQPYBMjnW;*WC@PK^^2Q7RFq`2R z6GbW04v}eAj?pX~Lqw&)^E63TrYGPGCNs154HGAk7-NXRfQVU4#S#H$GHX6T09O2s z$+;=8t-*xdLX~=$g)xKj^S~0B9ST2$s_HLwj+?l&d3vv^ad~;Ldi#tvXm;@5^husE zagRKe5QU&(CP|~jVKkA|a{1*KUjTrJ93LMom&-gGu;U`|T~?vGBY>Dhzkl`m+wZ>p z@$Bv9>S|C;&uNg*vS~zql^mB47>FDoA2J@_hC1NtL<=cb#-|)tw0J& zK%6IPwHzw3&O~OQnbFLL>-C=bQBAY5!(RcuTfo_R>vW3qo@D!buY{I|lMK((!ktnDp<;1RGZt@ldQCTp2>-$CH8}FPmFjI+|BxV5>h&kU>ja8dR zU#&Zev#P8c;|DPG!)Z11G~?GEd^|k>rhg`kuC(lg@lkafZ5pL@dco>8TQ$d~XW>n< zX7Og`xUkLj*$&^%uHARrTR*IuJj#dq0IlY)mu|JWuZcCzc9Le7%zhL{LA5^|yu@Cl$=KNJQ{iD-6014{AG zF7c>Z|0UReKQDc#0F|(F_~FfaaW(1J?N2#Rt&gy%)muOK+|Tvx{#j@CToSb?15N_7$bAN33Aavw_9*DUSCj5K&~U96-3r-1WMoYC!$XJB z4N=cKlg+mls*zX)x+;b>b*^HrWn?eEO+Ars#mlH-n)_SITjroBnY)pRDg-%fP(3<) zjVfwW@#bqq89Uc&a{u?w>K%WHW#G1F-1^an%5rm*-~9H@UUx4$*$fVq7V56S4fJ;Q zpxZN?8V#=>#+Z>~?s$XRiLWt!ZQAZAh$mo%DkpfgTwi<7e5yCl9FGfOQhk_})#kV@ zAsI>u+=6N-nIn#zd4?&|$%!&CS2F~WYaG!Kw4CHE1F~qQ=IStnOoSuIyDuB^@?t4cF2ri_MMA$dT-hd>@7z7bKqcNK+D+5xIzs;xzATlGu z9_6p~n!ymrItKZod?Y-@Bq9YhQ6mEHvutc;3}Qi2lvGU;I!|ru0YOECOciT)D)1;G zFy|A)U?8Rj`K<|~Iy?36~!ng}& zwj0M`7(`M^i3qbEE0~24z>GOZzJerCRQs-PyLPc`ClQI1VvKPdx3AxPAJcBJSafX{ z;wY+~8Nhr)3ur0pZV+Yxfr|@FDV>}?>HD79g%H;3HRO0l1yR!q{Q*004w=bR$K6g% zV~8;Z(Ik>miU6jn!~_Pa5@U=pI_H|EAw*_gIPaWqe7lL8VHnQdowaRyd9@(N!)}L2 znIo!R+OAus*f`&JqN*mEl14<|G@>$wakm?WVIa!#ugF9yDp^Gu%mCF)MY^_o@yRDI zKKbOuix=ZKhH*?ukm&5kcjxZBpp1pkY9Yj!Bqm|bxIcvu8}Fj?DW@2jIVC{@?;R4T zX-r`^?nK1YoO<@oDiVf7&iNSS?A^Oz82a`+rKGB^@c=lEV+aW|@X8JhGE>+&m-ien z)31>bxiCTtpLd!-iOUQG0DxqU2mnPBu_Ge29LSCg2u%%14M8zSu*pn!A|US&fY||1 zN(#tKjwlgH&YqB%opTw%@Q@tIbvq2NU;psq+c(?IdK`BtrD6jaygz^c zr~mlVDC0Kn-dvnX+&=OB$>M0KwBD@Wy?r~JuXh*Q;r$gvfwH@qS1GNY$RV;ly>FRk ztD6W|oQOS}r+!)Lyc)rC(_#-A`~)cH4sZ7`;pCz2FRF&oBaJx+CGZ>qX7Pv&W93Z( zP(?LDU__TP_wZ}0ga6=M zZxs2ycgW87!Jfq}B`Z+);nv1258tnX4@E)ezytmtJq!JfrDQf-L)kmO+R7B@#1;!BkQ!omq=EU5=-e!Jw>0I2o?fkhzJ+ z-eSF9`w*ue|A(e)faouf-~CJUzOD(O`4?# z1uuJx2WKX;)&W2PPQhk}GXbv8phzW<78;NlDtI6xR<;x^si7emFfjolfmucu^Xh4u zrEg0BE+Ph^d|W*bBP1ebM>IvZ$!9Lr%q$@>`YgeTDS?PG8)7mQPz6X`+dX~Swha@} zX0zRe&@NWw+7M;C-H8T3Y+9xn+ogt$&%;rP&^bp0m_-k(@Q|dGnQcVGj+uZNnF*0% zq72wq-;D%kV3Uil~8+h#{!=&^DxIf&j_DEbj=YCQ|{E0u6(jX%ZC`a2_Ee zNM;}@CbMK_k~E`}%o!?&B$5wbr!+DXVWvzPq9J0_cp?%_NfMY5*I?kL-nCudo*W;w zO|u(^6k`r-1t7U`*t@Q6R;xwVca9khQ_>i1j2HrhXkbEUeaDVF$31gL)BrdYNJ++! zx2M24B1e!}EoM`fLI9Bx)yTwDC5vz%nfG>l+4!satvdNaXajCEG*H)#Lm06Z4hDHjfB{Cjfln=&6J3ak5*5go<4o{xKXq-}wQbWjeb=3woGg}$rfK`Gc|u2h-*;WN+YRf@=Jl&r zNzzweeSLcRgoxJb^^a#iN)lBa!#Iv(rsb-LYTE6FtE($!7D=1UMnqCdZ{EIHUtNU| zbfQg)s!5V`dG-G4@@lnQE*487cI>*gBc#SRXT!T6et3QH{^I3#-+S+T)0~{19-kZ& zfn%phhC^3Y75iBN5kON$SGErt9JLWP+ zA~tPvd~_T_SZ~(r&3dyLa%8He?HX;f)lNiA+_o$+oxi)da#zkVAu;=|YuP(9Bc!Hn zz4MNJlBAYzb4UaPXp|4{=eZ?gN_p&Of#?iJ5~7-l3L&y%BxZFkk1JIGGhj1B%o53z z_gzEGlP5Zd-e<_%sX~b2J#$vk#VD$X=!l(j&U;mjAx06kVp6E6BsE{RUkuE&#vdz@ zaSA?aP>=o)fEa*Q@`GhC2o03V5&L>fWVVK63@J}KbMP9^*T_3FEei}SqD6Cxuq@sB^ey}G(Ozr5HC8)G%u^xG7lPs@RuzR&dQH7P4yJ{sh$QLY(>dlfOTM z1F`yta}epV=Gns|@YcL>?)ch+89lS)WTG5UCLNbO0K^)YJ2$+kh?$9jh^4%Uw|&>O z?&zppF1xmGmFoXcErgjf#!%$qNEB&85k_VA`a{#+ndD&2c6abPXH{k5pOkv zTP~P>4SJp8Oiy-9LQKzg%E%Q3;@xPigNh`)9zhbJM74Zc^|N}eo8YxyhZR)RtDKP$BpJOh0_d6#J`qEcLPTGE5&~wg%KdRZT6KNsKXvV$LT-b2xP* zDmP@~Uo$YFIZ7`Q5ptbP>d3ieO9Kzf@)$esZ#jK<5Y5ahEB@9UM%}Gr{N`nk`EuSl zvQ4o!Ebp?6zyJtw^2QE#0a0i7U7sFr%X0ED>YQ5%8T*&rJ00^o3>k?XfWgEuAlGn6Dg1Q$~ilUGd!f}jLOWC%n6CB$^`>KOr$7>k$y8eohPVgf*B z_Re|lM8vdkSpZB#Vnkx{-XReJGP4;L=~MymNIif0>9gPe;ftfAW!E-W>&?|>y9>4p zX)^>wh;cN8MS1J5@o%Oo~Xcp@HP8V9;0VD$z0Lsd(il_id zB$~1FWC|*hk4={o%}~N6sU_#hOeH0QT&ILsc(0h}3y}PALk#3v-#G7*NQ^-xi728m zQ{$a;j-B()dFKEjiL}jDB!_-s#~Dh4wr!fW>DmSnuCCU@FoY0@sA*gV)Vr=-Ec$0p zpSEptb#=KLwv#!O-EHsKd(X}@Wf4!RCk#wd0!^Ag#3ZQ-2%?&p?bJxbL^P$86<H+=WqpVpgqeYaTjeO5Lg&ICv2T)$j(o9*^$ zeFY$hV&=_ELK!4GckbEKC!f4{{`|%Bic0B*6VdjA|l&i8^V}}C5`hTZxW?#o3FqA-Irf{@$A`)latfF zU#Q4-yKUQUJ8ZYZ@Z;H!P17`Oy9?v{%lFI-23hVI5WA-B+OF|!+qU_Te%tlWn&$ZA z=-sq=nd-wnT%fG(-_T{2qj4?_|M6?~YuV4MJS#L~% zopbEWP|c|DO!KCPk%AdIc5U0JYR0L-Y_(jqZOhEd)pD^|NRpIfI}F3HBO(AwMf}46 zj0lx{;~HXQqAVTTbiMOVlZ+NLX60vO_CPLoC}hgpCs|ZL!9>z-gNTl~Z5psV9i=cvQBhUL&NoenVg|cmXQlvjbaJvH9_BFBgmDmy0h~tL1JtG>vcjcDY!sj+d+D ziW~vL)n>ijZN;Qpw$DF({_NS4_ArQNl^kZd*{0ackObu^sD1G>yIQ!nv!W^GHQ^RfFMRp5ipn`ln|d&bT2Eg`u-(t zR=@B#|7xnI8Ip(hXOJ7f_MX6``vHf|fG|Vn@62<*eKL!eGpCi^^Z@^g=*rJeAFuG& z{i1uyU{#0Pra@7^$$#zvql(IAHqF%S@_dj*nH3Ae`j>l`pOfq%T%>yC!}EOj^Z)OTIsKb)>_`F`fW-)(Hw3myRd&GLQl+x_?S_mR^>mbhwj z9lB1Fp;k|)Plzo*#+|a%qX3vl3galMpx~SbXc3Tr9D5{ItyoBwNKnlOkElp0(3Jgc z$C0YpH;?&;|Gje7bQj0gZv6R}-PL=)yQ}68I?O#qnc}D&-fZQ>*7c9?oP73#szUcr z1)bYphwk42noNY0r2z=CN0uSEtOQ!1+afGW8Mn3?f-qP0bKYfG`Jsao%-p+xTXTkqA-<01*kjcTLkaP2;?8+oo|1GKxs! zeTp&jmL2D}rK97c)oRsst(ly?{qgeh>T0`Tgtl$-p@Ft-7t8+i^hw{h`NTk;(6B(a znU%>*E}u6iBytFVs>YZ=MU$kY5>*7$RBcp&Bqm}Rf6H;3VjNRu76TALiPM~7O7ZyU zh>njI%i~X;pEkZ}yl3XCtE>O|(|^5u`Tf8A>t)mU)nd6?Etkv1lc&#?t7Y3{1h3Da zEulG=njIZAx*uSb*trwe(HfIN$gEVzEdmg%CEI z&ARP|VHd&}#_|2-<;D5=<>lqo)s-X_F(B}c`$g}aR};}p{U*;uOntxj-S2<*zy9a{ z`uy`RPL59iAcnZzZbAsJe|Wv!eSdj%*)RGaaXSoV8e>dJRFsLmcgudcTCP^h)zR_s z(Q?)GecLo$ceGse%f%wb_~y-k-(Fr`A`&5r8Y1>x4*=WE zHl?Iy2*l)*iizdL4oXNi1tc(NeA9J(3}YO}loFUWtzY!L_inLRo}QjIzF~6b7Z>l& z&tpt6rZL1ZgcyRTA^>?Jf+|xBMAY}ab3VoxlZp%_47*{s1+;F_E|-g={%E(}zIpS*`_~t5G8m`` zEdgLT@m^g$m|VS5Jy_o`*I|aXZ&gOUKiQ$}G2Qzx`|VJ5_4fP^a;p!+D(Z0X&<7=_ zN{}76V*6$#psafYSUOwAAssQP#uy_j19-5WFcBuupb6DfQdAX{giK6m0H)v>69Z*6 zA!C^L+5?~&_joiMzUkabf5aJ51Dk1>O`{B}@qJJdD_K`a-~jKNS$w55*XkK(~}_wpT=1Iq`n-@;I%tm`JqjXkAv!d4QVeI{Mdx^VD}S(3)#F@P>~el zm{LqB+bH{axPlqwC=lFD%J_?>pT#zv@AlmGGP6yEJ03IdpC3&3x=Hp+8>2}Dh zoPQ2C|G56pk3MwF9^Ayg^fA+)nC>s|-P@TH=u$4bj@i`p7qjlcq_J8iRn0z_n&eGb zE5bhYWcOUK-`+=%m{f&aIlWnJroK|fFiz_%TP9D4MZWu7$ikA5ltZk6#+BHUQ$cMOl;7xZvea@azed?zIsgDj zDaJUWpok|zBw|9!f)t99G)meH;mr^4{`6npzWw2C)426|bG6=V#<&~fFs5O*i7|kI zNJv^JRvF4+L?U2AMI%J!d~_M}xb)s5z_8;mh8UvvzVAJNB}D{7!mjDOb7B@_>;_Nl z7R#l?G;D_~^VhbG_Z|@>$#xjn@p9RNs)#hLZ@ac_yT-9M9kjQ&(+SYM~X>(L1&KekC06-GscD)^UNj0g8#IzlT z?KT*YDXQje@Vs@!0Dubl45D-F9ed{xEis8hN%Zve_>&jU|M2^-zx?70D*IS)d3k9T zpFTN`DLLmF@2}QZ+wJD{58vx6Rh72wp1*jWMB})N<2VijGZPab^ozyQXHSohj)*Xf z;p%d|8Mec)+wO*qZQ?F||J|#`J7xy6l+qZ+^?JQouSJuYg>fVxDT)ngwOqb<@#4jc z7oUIj+3M(Mxm;}4>vw1G#&LY}=I!g(ug@>uFBW~Q}}Y`+j+J(wv9ht9VJOIBt~vso8tx{ zqNonTE~93E%NF4KzvC{_wu( z`o8bGufO{0vrj)eIx312DW-9ZA;hz@cPXYYMpI*8C68Gzn*g)?3ua+ui%B(8_(Vd8 zBIf<*)U$IjNr=fCLY9oJv;k8PQ&HIsyD$cmtjG#X30@$z{$C$hih?J#_4Irf)c`U}16wsj~U^9qg3?astL=AzgMuIC^_eJH} ztg7f#jHjIB71(nNtRlR6u;X0b^}hhP3NAdS*3K3qT1e)0Z%yW2AJ z@zL?0zWLMt{?Gq7yF3REKn{pN6-0rI8}C=G1_@WYtZY?mFuN9Btk`FkV|XgnTDevu z*D%Ecw{ZF~yWo1t)Y#iRf;}d99e&D3xeB6TSY?l9r$Zmj6LeZ+0WtS7h0+Zuiwj}x zIhmplWS~hBpko6fbq*K>Evl$bgufsF03ZNKL_t)jWTj#NLny&JjnO$^0;a6QAvOs* z7y!XUy}hlr4qxWO!1iIPTN{;Y3Dc>|>{#rh80QwoDdb$fLczd_5dRdVc5b8L^zUS) zSv`GkRS_o-?P6b5Z~4Y<{tWWJ*6emW7IyIQy;XAUP}u$Z5jQ*UuQZw60@38N3uFg6 zbhGb4RFcGyVv1T!D1bd^oBN4MK2ubux7lb%m^-Mm^ox1ycH^(xGQQQV{_rISmm9!r z0|REB%{-?p7x;m^=4H6ivF|9<^%?V)yRIQ7hsFAtXULWXpRyh2BMnOQW&=}jd@KEDdZ#GLQXU|VkU=VIWh_$sY)iE zl&EA`d#^@KfoZv{FNd`l*}~h`!*%rb@tx$>%MKhBc;qDU@O1AA4v!h@b8^zYYavY3 zvGU1>vbp=KM|HA?*l1<8IXuXC?Sa>gJ)Hl)FklfT4TJq1SSYgyHQ-&2cvq>kSnr;d zc6wO;r^2=Mf=aN_>gXc~nxYygJK)CorfnKZu?wLYHniQOL3fVu=%_`rFz(Po43Tp* z8dd`{iDrVth>9#GkWZ;eR)kfftlkPJ1OTdvAPF%mTsk5mGzCOT8YPVJ{9^s`<|qQk`X~AY=ZONd*3!K5;{j)Mg()7o5mR! zNny$_mtEU-q8dVAMDP94$x#fE8M2t>YPsyX4ggY0ZR?0>wOkrlimC0}zV8-Y-?Z&G zj_i258DO_-yl>lf(f8~eIX2N0V-`{XFlO}5H;r$+1408(HAMkM6D5_#glN?^jpn7Z>l>>vc-0?-#1lG)+npV;IMQiHSLDNURo%)6*00 z{IDHTkPu>^IL2|<4Oj2iA~KG<7($YiO#nh9qPAG7{(An7=v9*;zhnx;KHJ^hD&`lmnq{tusi`iXCxXhb%4u-=~U;?-i&G_9*rDsVY$ z7RP!rqC5#%#QPTL``46vNeRp|cB z@aNaxW3t7QBknq6pEg_B1r=!*i{nq9#Lezf-=$rYQ2-Dp7qnVLh$W^$LEG{wZr26T zGJ|{1lAbTD^Iz^xx0|+eKcKin^}=GIW-rUCw`F@T>!--uf-6Q!jn`BN4GKnvmIW{X z@(4GL5=0F^ebX-bcDd*led{~}nxvFNcQGU9uA_>XfsT8-H#aC47LUOI5%>EP^Xj{9 z8da=!GLP>^lWOeXGFU1?R~}oB8P!mQ)%>Xxjy&|T)>%HWGudA`E+kTwy0sF2tR}0A zifCnxW->DZk&zMRSH=UhaC&p9pG-dZZCKc3@|w*&=R2DJz;nPks&VJVzkIs+$a|l3 zyU|=!3pitVnHfcTv0%r99HPkCq@|IkgiXk7~sZ)T6CP=}#XsCz+1~uf- zr;p;jA10kD?ZXML4bNXNeZT`Wxb4w5Se5nKsiPm@IyYUc+p@)ZIK(^Bhy2+O-EepM zNDlZ^3cKz1pPU|p(OtXm0SOO(+63AdC|Dl0k|pZ_G@taTM`SWlYKA-JSeqYd6n&(z zIpYT39zW-y>0n|6FiGPWwnhz5QzQ3Mm6)l+=615=&3^M!JHcbp%)+vA`r%qZKI*_J zg?Py0YLClCPPP>O0%iNFqz|?HU!rF~X63_yL!_E@Y|TU=iG-9wh?^7xOordR?|1JL?z-UM(pzW! z53K;#mc{9_n>XEGfExw|&JOitM{EBL%r8DLe{S`Y=DxyRR^ojHoVm_79*d=gY-U*A zodW;>5bwpoGklBn5Gp}MS^;OxZuQ-!b9gXG8cr;Wd@j3OZq<>2xsz@gK_CMWRmlpz zDiFnzg1DBtRl8hv-Ys&ha5Dju#=Ax5pFKTg!m!(2Fr>6=TK1l>$lj7UYPv22A*2{p zRGlN{Y%4?4G~P9iT!@h!n;8;2$HdMt6LXd<5LtwA7`9t>9L6}BXo{i&Kz-M{rcI&% z7{*A%tJMmDitAmVZ%Z)&SPDRd-Z|$TJMP-HY1_W*bI?Ellqd!GCIHB|EIRMmISEnK zM8zp*9flke%+ylS7?YXB7>3=>F?;7kHHLAF<8Igu?cluMjpJs$Nhu+qnMsmy94RFt z%7j|SzH9s3+Rl4IHpoi+revConaqHYy#r=ucFq-5B0?laMh1ee@16Gm=$!N3gMq46 z(mw(~<0*UosyL2mw+kXM14Qfy2~B1cL4~gG`^8cfViW^XMG;U15lBg65H++UrUt5j zWU47fFjY-NU}&mIB>wpJ?RLGsdjJ04{_WooK_wGE)j9h5tFONP>PzoEfStYl;pIy} zQ!qud6vO%X*=lvXSS*MzhB(@21{uV3%-ikOITvHxTx}8Q^!TK4o}C+aV+cXSnHe)z zjVa64e5QL>zXU}sgtXo6&d)DizI>U3#0~51#l^)KB9UvGPE5UPeABjFH--Q)nt`bf zakm@B?Pl;z+cqsZCZfe+d3S@$LF*Gwwpy_RLO1 z9CL~(q+n)5?3@!(-35fK_YA6rU`djy5+D;XJLg;yVIm|lvl!#i(a}Hu^Z#humWbN6 z0l>?v%h#`8Z#LV_)n=4n21J-)hTJ!#0FeYeG;M=uDMm18QzQT*%L*86+b$M;-}m0T zEHeuLV+=8b&DAD_#7GzC=Y8J;K#WO5P3-L5`Q_!Mq|C!lA{t`?1m`^w0vIzPQHn8% zN=mtlBVyy5J>W0_wRu3QrW8YrlxE8?~rI5M?xfKBFbSd%7%q% zhN;S0k)xaeWa_2&{`mN4xm+#!#kd>Sn++n4V~8Q7n3!DFug`BZh8R;~W?;%dRYr4i z-U_Cc)lwk;Sy%-bnzb6bZsH5x2Fes=PM8j4=X!y%>`ZH<+BECW$+m~NRnN#EBfGhj z*_PK?45oZS1CjDxVl7EsssO=MqHcA2b#=Abtk;`$zg^%Cw!4j3Ob{+E->ip=ws-8w zOc2pK|J}>)zkB=U;%XhEzCC+~_{Z%q{@efl_uM+kG=Ywguw(B0XkpZVj#Sgx*_-wH zDoN_QegUe4;N7#&Ui{{>zdL#IwCnrV-@UpxKi>`8lau4$|NU3%^UH4+|8@4=+2s!x zdFW3)s=iGA^O|+@5JPKr`v=p92y6wGt*D>P?GwD#c0Vh*+E=oNSh7}7P$SGL{KY0w zDAL$~*thNR(emhMxma}UvT%ErDZzZcMan)3AOI0?RfWpZNEPXanwVyu2Ld56dGN$!l|8%n zR5HX{)=tS1+J$MGgIp*f=i@VZql&N`@}=6sTA|gM`*W?u5dbPR7$HL#84%AFT_sIb z`*EMa1ZCdYp>6sBH>>wX!aJ`$^e_w$GoBjazN`-zwFkqreyo6Im`_a9w$B?ch*&C; zKqqCC98TJb0F7!j5$k&x7${g$4M{_ikblfMx zNgaIk>GdzHwKj{`exp`ln)LS>A9`o=5i^ziutq0Z^1%gGzo||P06rvY;%qD8+Gs6n z5#;L5Y#Xc6^I(Ua!D?UG!*;WJ%B7k2jiTLNKEPQ#L%m*OcNBZ-UHe(~+IKg?Rn|^D zBgfpRAcJ~Bf4-p18tGnjn;Q%M^)GJTbikCH+|K<|?2dvyD&c&h-uJ+%32&71Mygcr z>E&z9SN+wgZfpNk12Icx2`mB#STb`pLPH+-IMH*b2UlXjy!7|K+@q>yqDDO|*}*@v zK7Zq(xW9Db6&{TBS%a2DIJ48Bj+zV~S_ZR{Y-79vYLR-*aU_`P+>BP&sXB8^KM(p{Dw+G`2lUq8!AT zt;aT-IHzsf8biVm&}=rD+kB$N`iL2mcviZ?wJX z54IETD8)}85!{q08oG^AQ7>5 z*=1HuDoHivO?L!BBt(W=+sgK9(|p#$*|NQ#9IN?p!}^-~iS9qh=LzfFoxMsL)Ggke2tl>5>}OPuI&g?`4%vsCOolRC5vFry z^@mLXxvQmdt=nW)LK%_ufaf$WW;5vAgfOT_SZasH*;p%gV!bez1!*?lm0vWIU=Pfq z(i-z$5X)NJu+%zc~SjLx`nb{*1G%D|?I+y)?*bciK8w-iNZydKx z(_xgxr><`axoum{RK~mpnTjYOs-)=HF+0cJJMWveqy_*R-+Di?W6O|==4BZHPy|wv zlq5xwq(YWLK1x@D{KSxQ?4X$9IEF+-v&8qY_(;RdO8^vQ`NB3_e&H zH43&%F@_Mbr%B92prV>2iFof8i+;H}K0Z1oa!D-;#Gqr;lvEYtm?VuLrhu6DzYWbS zrX-S5!hA&9R7FzQjTi6E-@g5^@g50PZ5X!Bx#!QGJUKl96$A&SV1lMh&^R{7fHdyL zwi$7?L_{@BF(r|V!=3|fwi^I6F-d8;T=jkLz4y*XjCou!G0==OW6JFEs07Gvms(08 z#EXmfW^lFMzpUd0<1`gVxmdedB?QftYf_DyM_1O0GxAUh{$<{M^%V18Gs`XfGMOHlTZ!^7qfh_ z_uim^$>A}}ang>Ck4}zH`o1S3RYjtUi}!>iqA?^eAV+yJ$aZdu5mE}i@y_*K%l{u| zZ`LHqaij_AVdfr@nNTRb@%j4&q}|n?Ee2>urvEIA}ia{Jwp;C&N?$Q!rjgE z*atN;_bdQS_J)*HWkp7~o7dU@)bFY)oEQ-ieaige`Q0anT_?vM^Icd!$+U&;_KbkrKw5W==ldq`aB+uH8kWy)gojq^0s)Q|t&d9} znDqn=jB*9SMszST$k7#4RYe~k?!W!++cf3-dl-^s%oYRZkgbmo`3ey^IyEIsH;~bFxSg+5tEctzCE9x zKR>VK^z8kozxv|$|K&e_{`nWr?w*}rJpcOZuiw3U^YWwTzxli0-9LYOy;7jXjk>T=MP`qGCEHB@pAj?M+P=_o1qWjLo?Z-qfTw5o*0JB>UmnSKSuK( zvzAkQ)7=_yi4hQJ`3cx8i#ST)0E85w(N8}4ZWQ{th$-IMjZyH#FU5=B1T;dm~|_X zu$lPOBlr#N9n4;E@DgH7!;2lJHwBwU3om(mqdE9Ac4rf0AL4$^{h$uc;M2W}J!ECO zJsm(F_P;Uu%NGObIo)y3s6FElRsaYZ*u5cn#O(o+8U|0t4iJa7KtOcYZMoj(e9qG? zM$-e%h#akEA#T#Nb7XVV7+Rm6L*H`jUPlWZ9~_AfL5Ow@@4IG9R`Ws-aTndgMd^Em z#wC0E?Ey{?Ni-&KpeWtz8mrivJD=4 zQ}33R(!bYFP2Y>S%S_*WD;T+fT_gemc+}i9>EIC)L4Y3J2uEl17a1aSu&Fv6_`;z- zvv=vzBC7#-ML_}V1q*$Kjw0KK^Y>KPBO+5{WPW-&o@n?Uejy}3b~X8HqJC_s;R-tJ z%+cK!?mNx9>Kk&WZ{;5S>7p6!35GmUA+Z&cHE%LL6JaT{2>6YQyBjp}zVS}%Pi!GX z14f80*#-_Grp0V?7xxNAE<%a-)8poVIQnZl^m8}No2QHNGt>2?Ja#v_KHLvKq31t% zwSC#)k|!}1?{nWC{c!uf)dF%h_clXEg!t*DV$OIU>G)U!5eTG8DOa(J`K4-sT2rQ+ z5@CwGvZxycL?H0SboXShHcqA}$K7jB2nJZbpPi?pY%1+3#J$77&D0zccuXE4?&{|- z*Lb)EkpIYx2?A9j4}NjU4r-*Wm}#_;cs z@5yuQB99OnOQ}%ldA>mBJnVt0kB(M-m`TG5izDGNJ@#w+^tGe<4g#s zDyE7=QQdFuYU*wX$eAf8uVQM=m1qYF%w5eIQ!oHD2hz1xb?eAXqc8^ShL2;+Ona&r zo@>v9XkQ8hlMp#EgsKUs(+mJ&q9SdRse7u7NNA#F8g!}542aR2B>)eINkg=zKF9-B zK%hQiq%g7beMQgDtTA*%8w$tT$S=KAKGN)65^Z9f>%{S-CbY7Or z^g2I#c6W1k2SDalOL2faokUEf22h)FN-3!*0OV;(Q_d+F7%@s~Ym*Sb#ie1mjD!~Z zqsq2zIpv%)F(aj|sOVZn>!u7D9Lic#vXnTilz2XHPl<2Nr$9)-!PK^G6OrY*y7{`U z+g1U{-O5&xG4c?>UF8u8rK*a8)3)iG*YAf3goq+*Y#}vObwyRX#(qVFiUJ_sJrTs5 zT0b!+Y#Y)I4Z$42IWd}fbe=;3Q5P{IAhiPG=Cw+<|G|5QwUJJ=%co)f9gv5H9CceR zbhBxkJ^(jpF@}cNoK6!`Mo70e&(k!k!{epgKP+3lni_LbLe~O7bDjc>GmFjv?%=9| zfuMm$pac<3UC9`jh^Bc)gzK{W%fI}~`*&}1&Y9`$ySKHJ(>$N%Q=TRy5;acQR1x5G zI!jVD4R96^Ymri_n!0%vU6!?!x^3IKZMBqG#1XHGs{EX$`835-BBFs2*IM+OZ@&HR z+aHEAbv~c-lxrz!Am(O{1hv|-R8fnl3Qzpv#q*ahKmO$9%hTy(?nFeCzW@H!S6}^E z#MJD3zP&l$AyO4tmaB>>f|;5^RTWni0!wApQqkTc>3Zh3E_O2UOd06Qq3z-%2PU>Q%dQ}FF*UuZ+`pBUw*-fm+Sh&_dl%H zD`DjMii)O`)!L#1qPx^uYczxr6$vl|IcGvFMMGSNh6>&WQw?^Z#EA((p_YwX!oQ)r z)~Zs$-OM7FPfGJ7q*k!OW(hZ{MEvCA zPhPzED5tzF<@>*UFIC+gnSe=59TCt)W!tK$I=D!v1gljH95EW3Mh0GYaE6B-&Q9N) zhI@(klUKMOX5BB2H=7&gP3ax1hGF;(3~+e&2h_zPi+}j-KmPMS`9uZ85zKUXe7rtBTrZE$Z}0y8 zx4-}TtFI04#YZ0zbIv@?>Gt+~b9a7s56il|dHZI&UYWRc=iBYC?tFTz6=B0FO`$^o zJ%Zb$=#z}uBd~jHH+uAzyPNi*k-WQzKeFT7!p3*Q{@*c%9k}T5%uj*KfAy7s!xBDt zU&CKJ%uuhZ#+=hUoo;S!PB&-beo!p{xb{hNi?bY841wEwojFDhBZ6yex*akGY&)`f z2HstTHondn+ptB1@h40j3{fCeHmR#xHLF!N(Jgw6w);A=GE)XD$YRcnq#~*c4xz$S zRkc>Fs-?3R#e^dfs&blCFhFF&j2Jmq03IIXlN>EL zWH}8$r2lTOkHKQ!;jTTfmW z1Ff=%7Ub@40|634B1}w~FcT0EVgN_vNCR%}gA4e!NkVrp1Qpw)7!YQdk&tXeTS8(Z zQ1{2Nk$tqe30c0+hWBHH?T}lCxd-nFjtfIzfo)s{PJQCWUq1c}k>LOi6o<&Waqr-* z+G2myCg~2#-Ni^>fJ0i&@uLSYXn$j%jXfoB{G#I$j>jmN8vyp)WbeDZhbsDnjF`>g zqR;@8HnWK6PoR%@%EP`q4&)ez+jn0RA$Dj{xr0XCUP5+C97Klv6~Tg&}Lk4pP#XbVyeBb{jf)dX6r$keiM9h$^B2$1BlVh($q}MihFfe zM0FFBO2o*iJ=NZ&XrE{7E8%@f$A|tlefi`4KmLbLrr>bFHd)>+up#W?lnr5USU4ZL zy`y~Izk>k1oZvXDe(J}Z!LF>^MTc|(RoiO4s;vf_tDu<3$@1);@Cl?#HIsUh=T)$Wk4E&8o&p>FK5bw+4Po6K1 z1bR!dL~xDISW^yh0qRXd_swMOve;@kdir-9fnis9zhyj}wNJVqmJp7!a|lv>s2=;T zKH%`dAI-^_<)3_wl9H9M001BWNkl$q^X;;C>$-guiuBe(v>i7iek*N0`gI zseu5|bJRptkQF^R6DpF0n2xW}*lbbp#OSIj+qPZJs+d$MX4TyQ0V&W;LZptM9%L3A zme&s(7WR6C5e{SO3X!@i;O^!acTwoEuQ*#_6nIp7f&+%0LSh6)bU-JF1`H69X2R%$ z6m{TkjUJPj+|U$=37LWr5fQrwQEF&J^$#SUBLGsvti$95Bw(gtNbR#t z7U^1%1L;NpzzGpBWe(4o0+1#mMpKBMo5loA1W&N=5P>Yy7k4*&>E2?$J;ICGv5z?`JIN+7e??(5*@ z(JiW99GEZ)x&hndn7I|HAZ~7IwMrE+X-*diAYmUv1qU-j$CQ$~txI{LZ@Tx~^1cB8 z3n3zLyxlUILj({e=2DHYzjmL-LlCHW5ZwX>lcu(mZ4Jv&W2d^iiuLccTYKxf+P&Pd zwR=n_UO0T0Ht?ZtcUkP<0QK=qG&P>Zm8(kilsc-Rb3t)a!&JfyD@R3 zXKEu9Hw366W-cPNii!-6dziz3!BEI4WwRz0$=w}Qb-5Nb6=_YnZnkndortKB`2rCo z;zXQK%?(ry0jFtx@%+Uve(~AO%}w8T`2PKaQ~{)%@{~`3V{Y5JE~`py1+|d~?GYMJ z0AOlWE2)?{=QN*B2nZI?KqMkKc(6WqFayBAR75Mc9owznhx>;={P7P=j7TaXYEo+{ zBDFSlX#j91CT0S6M9(>eMk53!oTusT_NLUW)|y&ItGUUxEsqcHUu6cs%j5O!o44=Y zy<4|U)gm)}+p0Mb01`5@sMK0jHDWWO2Ik0&PNq;wjZN88&j|s{)x@_IC01Fblo~d? zY@2Ew(Rx5k#1UgNcQXsFk|uJaGngqE0Rj?mPP%O>5+_fqBH%RV#0lI*>Q+{Bb+GB2 z?{4pY{|~?ao%1xO#MOP% z``3?nGh0#HM8wEjs*burO<6Vr<0->T1|%wKTFthtt`AqP{{H#><^CcM+r7R4vF&ob zy}kS4`|sYqe*O5vn}zU?=DOC$SMRp#+Makf+C5OgZc%%KTpUI=!!AI^l#SPz2DhJZ zqCQx~!|JPDZoX8BZ>ksc*!g^)Z7)1{L}$;1;O8l|u4P*s#GtBg?lmfm+TL_9CpUpAfE9rWNTjN2UyX=8nz_134~oVd zlR3CmL;&ruK%dPgMu5A6V_=4DyP-L{u^}l|w#=RbP>Z{9t7SI2Ir$??Jz)$u^BkpF+zlhk+U`8Z7`r2bmZ_ep^pR5 z9LPHa)O&ojY^8v>aaepl@Z(rEYgz&jh_UYq_x2Qh>ag+Yv{edG7pXDSncSOrZBj*gEVb$Ak0ibhb2OkLa=-)W4Z3`h{bkNw%kEZ$hPH{4D8e5~W&`<}O$AtHL z4+~=VE{>WlKBx`ZYb<{|qSr=A5n?iLDhsz&7GRn(Kwv;OSMCGOt{{k z`{!T%d>nyYZ#d={*$x=}=xW1q8+sYrp`aEXIn*8mLgB;rB5-hR2V_7(KXr>IwtzRt zrSF_?E;Oa^$MQdeJ1Zwg)v|rz=eQA1~@@`ok$Kl=s+k1|DEJFNc zZCnTl)M{|N+gG%?#E1 zLqXtGLS{Mf&L!JmKO z-}KeylMM42f8xz2KmU8yY%G|K$!hWNki&`CDIozlGH7ILhHi_fkLPqMDgVsU@HyPCTWAy-yebM&hTrS8+gN=6Q~CeuyePQwIQI1}Bx; zvNaG04BY{3Vl*drafhhwE87!DFLKF^QsECO*x(C)7|YY zw+v_%)n#4RZ7sE$DkElw%$(o6?X5*q)zT?=5e$WGXQ8TBepFR64#>1u!u@PTWXP_=~3Gp@K)Hl1Wq0m@fss@ zH)AFw>?KsOY=97~wP4oZ!Cmwa(7>bnQSY5on#mB!{74Wb8M|-j;bH(0I=E@~q7Zrk z9oT3K-oFuBxEsUpl(nm==ibroV3&i7+Wq~tmakvGdVRjVJKx;as_Ryk>$0wu*<8^L zkeMiXltYD`6eWj-uH90?F$x4k4M_oxEwzBuJV8XKqVZUw#Dr)7VBTm0)gpR^h{Oa$ z$izWnfQA^tn84AJv#<^NyKcH2iV1>|qC0dg*Ao~#XIC>bb-*f?a}?GQA>}m9^XcY% zzL;P2QnpPHYu!XeL`2lVx2-J8cD-D{eVV3eI-O2uPFcmk9FbM5$Y#y>2L#M1C1T2C zCPhjWHP~jE%`BySb91X90Fj6(&oeL+qM3;*fm1IMd^?W{YqMQ;SnyHk!)bi)A>UZCLM?}#;OvTI~$+TOE!XQM>%^HIe44Y=YVJ}uQv-)7=Xsv;G!dZ{ zUDgYL6XVC9eg4ZYzx>Dl?LU9<*%x({%lpe0zxY)mKAp~6Ef34(-~RAF|NQk|!aE5L zOReHDxrRutswNg9u8|x!J9zj>-6Qbu2+an7He6iqu2etR-tE6`P&~1$pZ?Q)g>Io9 zKHfjnu6_V*{c!ab*fEd#r#_aa)*m4ewRkRcFFK=Vy7}nY7r*}17r*}USHJ%C1-2^| zMF*f0<%ERf+jUtV9?#F8)7_0fZdO)8A|Pf4aF<%8-oJbQ-M8P}{o#+6semlowk+4T zuisqXywSJ!bIRX-_3h>L{rf+EhZE=9Q@%N;JZ+c9dR?~1m5AQIdSjdF`=wmAiIQg@!CL9hXCHTQy?dwa6*dPW*t&WXFhzJoGsd3>Wf`I~6WZ~?hqOy57t1)?f zY0VIkM8v%U5IVL_6aYJ>*k}u^0~j#Yq*u6nIM;^*9k9z`b^Gy(taXf*$0C8Wisr-_ zLU#f-!ifH7zxP0C+)c!^u{VhpwHnYygS;Kh$&dvZ!@UG?QU`@J128z519bZ|R=hdO z!-woSj(`A04>m>jH?RmSe+;AlWcMXTXyQ~qCiz0^L zqEH7>6OmP|ICwXp2$2lMNX#Uwc$!k0IO+;P9SuN-kUAWpFb^Ev4HOWZz_1Ez9OFYq z;=Z`CD|)j#4+j4pZs@)p0601#y1A>j4rmx*V(2ZC+D_^sb6_St@8$`(06p5|k%|a` z&a@!CHLl|p#KVT6A_AhhwR*5l3DlOpq0ZPpOVLoHfj5oU0K3%Li#HDXqUD!?gBu~W znyt2Qjhw^GCH$*6U4%x+(31y-`P$YI%9uzg@rr0uDf|pf$6e*Kbr0UXgJWofpL#1 zhnAChkb~Y6Kl5~pE32UI#v&yUwQ;2GTi`(#QF^6Z1Q^82@sfL+|?@KcY3i~%CxK`!q5d)Nio z$_#cn3eZL3Q-#!Im-nLXKps7^K(vUiRhCw!?d~qFRkgY)5@GadfvA6hMwp;Knu>tO zhvKt7!I3gL0%zFS0EWdH%V9s7@Uc?Z*&q%!?GQ122;L-P5YYcP*!Q7T^b@ww*aK$X zwasn^4<4Q%HVZu@b*ozXmW*<94xS}!Y&=bf9-a^37|DQ9KNH0xWA5Sr`B4LOjNC`S z4G!Y(r)KcDWsfHL;iJur`rr~jXDR;p9{m9Cn+^eCKi6$rKDoet_2YlNn-fppY?t+} z1%G;{G}{1y2z@BeuveMTG9^e(?BG7QT*5}t2;&7376J$n+mSIhtqRb{Y$p z#-lZ)IZOa|2o5xNPYH+;Mae!Qf}2_0q%~Gzz3@+3lcmr@(Xgoxn8l&AFZ$1m^hZc}0a z6p@F^Y+JamJ#$s7oWwQ(IoJQOt;*3G&de-P4$ zy|o5*9>J%QCtPo8$&MkL%*;WpioAKZ-c}VcN)txJTgn=je;os4yuqm)7 zaD~oqi8nE}#+MT$XpsnyfaaiTfa-v;E)v2gjyFI=Qkatya8mLhW=KpfN-+(NC9=!<|NDpKFPc}Gas>-BV+0dU*4 zW!c`py?=OkxHUi^H$X0`wk%8CHkE3s@dPab4GxSsCkLup%>){)tT5yGG;g(PD;9*5 zxG7PDjKEBZd77u3QnS4jm^n>Js%+~T1%yPInBBq2Q89uRfhfhgo0z*9k+;L*QWXh< zsnHaW&>U23TT88qaE%UQYEHzNr)*QsIhYU#tGibaARq)$tyR3Y3JHCy7K#3zQVu%g zh@=oB5m^8erAAyWLLfNIdj!H!%HVNH^XTGkjF6bYU4mjp6*n^SnWmId&a;Y|yOb(b zLP&@PGYb~0sxsf4&d+Y{KKbb8#oea$?c;k{#l%jx=P6C|G-IJ+l2c?MyO}~u#0g-t zxr@zdG&5D#?q5UqBuCy?H(T4IH0LeUZx~EH+SO@C4p!}$(W7AzA8ZF1+&lYDH$x6S zS`$LUV?3DL&=alN+XqDE$tyU&M%HEnA;8sS*)H$yAMTz#+}%Iga<#3viWzEDpm|-E z@_2pw>J3zJ)jrs!E*Z%x)Q9Vvuf8P%V-T0(UPP`B5At}yWfj2fQf;ZeR!}W!mp6}9 z)unoBQC^9KRX9nEOvX`cImePrW`InMwOwa1j4Zuz#3J zF`UruUJN5S{`KL2A3pdq!}*z4%8AVo3Bpeat&IIOP8tG6n3EIV-rmlqIptJJQMF77 zkR!t5P7w^RRa6C$89@RzFm=;zA3`MHDw=~~lz4-vi)wXuM~gD5*zT&@f~s|^vKTlJ zhFgn7L}{8&(=>5nB*$ziVVcvjtZUuC1%ih8=!Uz4gBq$dYJ#WJc65~e@DA>II!`tb ze7FsIn=uD(?JwK%Vh4i5dJywkt#E5{8mJic$vClSG;Yjjcnp8JKxh zlTwzltx?_FjAwkZD-Mu_iEL(d*8;=N2ZWSav)Po=lzc)Ua}Sg?aB*tsTbZMR6oXnk zYWl!sL`SRzg*;9NwqDf~A_JS#4LyGQq4o*PY+!)YHc4w%?dZ_3({>C;&lBo}#QmW$ zM%SEmbnNsD4h$`|dnX_3a>A|6SoBY(;|d+~jz7?6L&{-)r{#besA#QLsut6VART({ z;>9|M>aFItZ_{Q!7yy_d9x>E?x(+xm^a1<`?~CyqVaH<$!g2QTgSVdi*P4$5(2TM+ zaXzMwyw`9*hemqTF3wsMuyv3(m}%Q&cF_tBt$-mKdV8(1lzJ_)5-4>N7gKXn2Lo~h zpkVMi%*sx-KIQ~FptLVo7x}g`Bn(m3U)|(vArorbuPxe`-$R_BW4-Mbku1;(zumn9 zpm;G|~S z4+Rl5Q|C!G!}0v#{*Z0`4;#B=47TKvTdumA_AwBatfoCi44)q z5Gdy~<D;gGZ7`ilsND~Q30@< z+uIi}UVQf1r=Pt1_U(x+czms=Ve{CP0dWyi9k_Q-*5M2Dce$OmGxSk3{XlHRZC0& zD5_@QfFf3F4Wzpz9|w;}Fe#f8Q(~@FYN-*C6>a(8-gZqhFo{Sc+R_^|h0$a$GbiRm z937#nsHq)K8ucGr==>;^qJLL&2*J$NOc4=1yh!5~?Cr_Z;aB>QJPmn80Q3>58H$P! znJJ|dZIJ?vIf*T?*vzaZ+^8NSUzj^Z} zB@X(O*ypC^hP7%bV!b@B*1D`$(dur@%uFJxs)h;3)5JtTRc03trkr|1k;dhWlfMV&4aC+1ScRAb?p zm{IB`j!ne)sVU$n?j*{K>?v=sBN1eg5ew zpSDugZGF5xiU?6uw^@XMI?`Z%%wJS@vB(|)q!Cvcz{W5`nyuSS^==Zmp&wCEZ{FR-7Q4_ylX@X7~6Wtb>Y%qSg;a9~6LFn}WWKfL{4|L?!O zef#$NAHKVk*QXV5T%pW@eZ2{!iaLeE&Lv zJ8*M@Q)crCAkhg#<;`Ozo^Ec_l!@v6oBQ(qdSH%F7X<^*CpFSTFLV>nJG=ao$MwT^ zK74hcJ%k$`-7aV%uKj#4@B%gQZqj4VD}!S@^rH{icf$vu@>qlqUBV z8#R$Ikg8}EZAqgeQxFiW;ZdSm%tOymn{`76QS~ZnP7W5PB)Exe02-EgcMtni?km=p zW4NOG6o2TA>}EOaJO6OWC;v7_)Ia=9LqdWi!XiV`07;`nwtc3r`v7e}_&cr``4X001BWNkl5%0I{(=Q)jbo{y)Z|s;dTrn78tS zaY$Pn03pm*3*5w^6@p{i&Tb}RRivtJBAdw4FXD%*^;ger4Bm`rR|-w_w%a2Rnkh&H zHLq&5fyF)&lQ44h5@${sIqWw?VgN=2PI0Ou#U!$yVnP`@654Q_{cL+{64gWoj3hGX z0Ag#d+KTf5Os&mIKpzwu$kmU$G+j3h83Yk`JCJ&|{nv)&hgCorts;qf9_B6;yC>8G z9{}zY{`LX3!H(-R4Bfobg=5blZkL zHgDe8&(#Flx$`dN)#6P{$llVrcWV)cMD)Xz`w($#wMZHcw`eT$DEy3{8)n%Jtu8vS zGjlZ65^o=Evg7i={`GNC{Wz^3My!9n_NZ^|zJ%TaEP&CIv`8%?8@K}6R@N$;yLzj6 zBC?{EMKg0EO3ax#6Ek7*J~gAR3ZNU?*#8`iX4pUUbf-L-@xCVgD~BgV-|uvM+I=4! zj?xFy;q74T&cTlduy2Z%z45^Xpbzaw!|xZ_mv=XTp8WP{-t=+Njt>DnOThsfQEKet zP@sT>3CMw1QL1aL9!W{=jf~u)+f+LML&U~4+(UUFG3OlJT$w4wFyaD%lQ`f2FS?V| zq|RZ7k9jkIXq5m4AY!EeMzx2Tn*wlP&^f0UAHVqc;}TT< zEX!4bE5ST6&WeZu5_5)$P@|)+R5gvlvM5^_xqv=R)9EyS_SuV%Uw%B#vxBY6^7#1h zaCx{q++QwB5r7TcQPr1q0|z7lsHT&(o6kT0#XL=k zsg|-_uWw$zetdX*ygaPiLtTPE5K1jobY0zTHE+D1p{Un&sSma1&muUOY0mjHKY#Y@ z{Hrg1aeH?=&(r1d`0()l#q;y^a@m$;S=M!3Ymt~708lY-5mh(K2{9)?sv{yH7v+=>7fuyLa#3zJ2#_|5(;*joeovfM7_F zX_|6MgyiO>7Tv0uAaK}fW>#z6w)OGx@$K8U%W@^cvTal5fBaAX@VnpsdfT?I|MHi= z{N*p}TFSPFl%R0cXqIm7;DPsngHd23>+9EVQp)adcYAj_otEXgEZ498{MEWGFJ3(R z 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 ?9{4H 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 z]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 z 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 z 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 Q*xLt6a_Yd!_aDFfU-Qr@(EtDd literal 0 HcmV?d00001 diff --git a/Screen Shots/6.png b/Screen Shots/6.png new file mode 100644 index 0000000000000000000000000000000000000000..21a83c2ce0209729a7983365ed133f0b4f3cf045 GIT binary patch literal 154431 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%0A-Q22TvvHTU@ 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 aX)IpN{&G-2wzAUlw8Y(7)~OR=2qm z7EI$lcg^N7cZddkcUrZu6_|ZxwQX{£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 literal 0 HcmV?d00001 diff --git a/app.js b/app.js new file mode 100644 index 0000000..7d1c430 --- /dev/null +++ b/app.js @@ -0,0 +1,41 @@ +const cool = require('cool-ascii-faces'); +var express = require("express"); +var bodyParser = require("body-parser"); +var request = require("request") +var app = express(); + +app.set("view engine","ejs"); +app.use(express.static("public")); + +const results = require("./models/Results") +const home = require("./models/Home") +const scheduleOf = require("./models/ScheduleOf") +const tournamentResults = require("./models/Tournaments/TournamentResults") +const recentTournaments = require("./models/Tournaments/RecentTournament") +const tournamentInfo = require("./models/Tournaments/TournamentInfo") +const tournamentStandings = require("./models/Tournaments/TournamentStandings") +const tournamentLeaders = require("./models/Tournaments/TournamentLeaders") +const playerInfo = require("./models/PlayerInfo") +const matchInfo = require("./models/Matches/MatchInfo") +const matchProbabilities = require("./models/Matches/MatchProbabilities") +const matchLineups = require("./models/Matches/MatchLineups") + var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb"; + +app.get("/",home) +app.get("/results",results) +app.get("/scheduleOf-:id",scheduleOf) +app.get("/playerInfo-:id",playerInfo) +app.get("/recentTournaments",recentTournaments) +app.get("/tournamentInfo-:id",tournamentInfo) +app.get("/tournamentStandings-:id",tournamentStandings) +app.get("/tournamentLeaders-:id",tournamentLeaders) +app.get("/tournamentResults-:id",tournamentResults) +app.get("/match-:id",matchInfo) +app.get("/matchProbabilities-:id",matchProbabilities) +app.get("/lineups-:id",matchLineups) + +var port = process.env.PORT || 3000 + +app.listen(port,function(){ + console.log("Cricbuzz server started for " + port) +}) diff --git a/models/Home.js b/models/Home.js new file mode 100644 index 0000000..3fa08c8 --- /dev/null +++ b/models/Home.js @@ -0,0 +1,25 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +var Dates = new Date() +var date = Dates.getDate() +var month = Dates.getMonth() + 1 +if(month < 10){ + month = "0" + month +} +if(date < 10){ + date = "0" + date +} +var year = Dates.getFullYear() +home = (req,res)=>{ + var dailySchedule = "http://api.sportradar.us/cricket-t2/en/schedules/" + year + "-" + month + "-" + date + "/schedule.json?api_key=" + apiKey + request(dailySchedule,(err,response,body)=>{ + if(!err && response.statusCode == 200){ + dataSchedule = JSON.parse(body) + res.render("home",{ schedule : dataSchedule.sport_events }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = home diff --git a/models/Matches/MatchInfo.js b/models/Matches/MatchInfo.js new file mode 100644 index 0000000..1cd0be5 --- /dev/null +++ b/models/Matches/MatchInfo.js @@ -0,0 +1,17 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +mInfo = (req,res) => { + var matchInfo = "http://api.sportradar.us/cricket-t2/en/matches/" + req.params.id + "/timeline.json?api_key=" + apiKey + request(matchInfo,function(err,response,body){ + if(!err && response.statusCode == 200){ + parsedMatchInfo = JSON.parse(body) + res.render("Matches/matchInfo", { matchInfo : parsedMatchInfo}) + } + else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = mInfo diff --git a/models/Matches/MatchLineups.js b/models/Matches/MatchLineups.js new file mode 100644 index 0000000..0b1aeef --- /dev/null +++ b/models/Matches/MatchLineups.js @@ -0,0 +1,16 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +mLineups = (req,res)=>{ + var lineups = "http://api.sportradar.us/cricket-t2/en/matches/" + req.params.id + "/lineups.json?api_key=" + apiKey + request(lineups,(err,response,body)=>{ + if(!err && response.statusCode == 200){ + parsedData = JSON.parse(body) + res.render("Matches/matchLineups",{ data : parsedData }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = mLineups diff --git a/models/Matches/MatchProbabilities.js b/models/Matches/MatchProbabilities.js new file mode 100644 index 0000000..2fa7b8a --- /dev/null +++ b/models/Matches/MatchProbabilities.js @@ -0,0 +1,16 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +mProbabilities = (req,res) => { + probabilities = "http://api.sportradar.us/cricket-t2/en/matches/" + req.params.id +"/probabilities.json?api_key=" + apiKey + request(probabilities,function(err,response,body){ + if(!err && response.statusCode === 200){ + parsedProbabilities = JSON.parse(body) + res.render("Matches/matchProbabilities",{ data : parsedProbabilities }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = mProbabilities diff --git a/models/PlayerInfo.js b/models/PlayerInfo.js new file mode 100644 index 0000000..d164e1c --- /dev/null +++ b/models/PlayerInfo.js @@ -0,0 +1,19 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +pInfo = (req,res) => { + var playerInfo = "http://api.sportradar.us/cricket-t2/en/players/"; + playerInfo += req.params.id + "/profile.json?api_key=" + apiKey; + console.log(playerInfo) + request(playerInfo,function(err,response,body){ + if(!err && response.statusCode == 200){ + parsedPlayerInfo = JSON.parse(body) + res.render("playerInfo",{ playerInfo : parsedPlayerInfo}) + } + else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = pInfo diff --git a/models/Results.js b/models/Results.js new file mode 100644 index 0000000..2703912 --- /dev/null +++ b/models/Results.js @@ -0,0 +1,27 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +var Dates = new Date() +var date = Dates.getDate() +var month = Dates.getMonth() + 1 +if(month < 10){ + month = "0" + month +} +var year = Dates.getFullYear() +var DateIs = Dates.getDate() +DateIs -= 1 +if(DateIs < 10){ + DateIs = "0" + DateIs +} +result = (req,res)=>{ + var dailyResults = "http://api.sportradar.us/cricket-t2/en/schedules/" + year + "-" + month + "-" + DateIs + "/results.json?api_key=" + apiKey + request(dailyResults,(err,response,body)=>{ + if(!err && response.statusCode == 200){ + dataResults = JSON.parse(body) + res.render("results",{ results : dataResults.results }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = result diff --git a/models/ScheduleOf.js b/models/ScheduleOf.js new file mode 100644 index 0000000..357303a --- /dev/null +++ b/models/ScheduleOf.js @@ -0,0 +1,15 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +schedule = (req,res)=>{ + schedule = "http://api.sportradar.us/cricket-t2/en/teams/" + req.params.id + "/schedule.json?api_key=" + apiKey + request(schedule,function(err,response,body){ + if(!err && response.statusCode == 200){ + data = JSON.parse(body) + res.render("schedule",{ data : data }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = schedule diff --git a/models/Tournaments/RecentTournament.js b/models/Tournaments/RecentTournament.js new file mode 100644 index 0000000..83a2840 --- /dev/null +++ b/models/Tournaments/RecentTournament.js @@ -0,0 +1,17 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +recent = (req,res)=>{ + var tournamentList = "http://api.sportradar.us/cricket-t2/en/tournaments.json?api_key=" + tournamentList += apiKey; + request(tournamentList,function(error,response,body){ + if(!error && response.statusCode == 200){ + parsedList = JSON.parse(body) + res.render("Tournaments/tournaments", { list : parsedList}) + } + else{ + console.log(error) + res.render("index") + } + }) +} +module.exports = recent diff --git a/models/Tournaments/TournamentInfo.js b/models/Tournaments/TournamentInfo.js new file mode 100644 index 0000000..5c29083 --- /dev/null +++ b/models/Tournaments/TournamentInfo.js @@ -0,0 +1,19 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +tInfo = (req,res) => { + var tournamentInfo = "http://api.sportradar.us/cricket-t2/en/tournaments/"; + tournamentInfo += req.params.id + "/schedule.json?api_key="; + tournamentInfo += apiKey + request(tournamentInfo, function(error,response,body){ + if(!error && response.statusCode == 200){ + parsedInfo = JSON.parse(body) + res.render("Tournaments/tournamentInfo", { info : parsedInfo}) + } + else{ + console.log(error) + res.render("index") + } + }) +} +module.exports = tInfo diff --git a/models/Tournaments/TournamentLeaders.js b/models/Tournaments/TournamentLeaders.js new file mode 100644 index 0000000..cddfaad --- /dev/null +++ b/models/Tournaments/TournamentLeaders.js @@ -0,0 +1,16 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +tLeaders = (req,res)=>{ + var link = "http://api.sportradar.us/cricket-t2/en/tournaments/" + req.params.id + "/leaders.json?api_key=" + apiKey + console.log(link) + request(link,(err,response,body)=>{ + if(!err && response.statusCode == 200){ + parsedData = JSON.parse(body) + res.render("Tournaments/tournamentLeaders",{ data : parsedData }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = tLeaders diff --git a/models/Tournaments/TournamentResults.js b/models/Tournaments/TournamentResults.js new file mode 100644 index 0000000..4ee2a03 --- /dev/null +++ b/models/Tournaments/TournamentResults.js @@ -0,0 +1,15 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" +tournamentResults = (req,res)=>{ + var results = "http://api.sportradar.us/cricket-t2/en/tournaments/" + req.params.id + "/results.json?api_key=" + apiKey + request(results,(err,response,body)=>{ + if(!err && response.statusCode == 200){ + var parsedData = JSON.parse(body) + res.render("Tournaments/tournamentResults",{ data : parsedData }) + }else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = tournamentResults diff --git a/models/Tournaments/TournamentStandings.js b/models/Tournaments/TournamentStandings.js new file mode 100644 index 0000000..684552a --- /dev/null +++ b/models/Tournaments/TournamentStandings.js @@ -0,0 +1,20 @@ +var request = require('request') +var apiKey = "vzgmsgqxenvnt7xcfw9qu2rb" + +tStandings = (req,res) => { + url = "http://api.sportradar.us/cricket-t2/en/tournaments/"; + url += req.params.id; + url += "/standings.json?api_key="; + url += apiKey; + request(url,function(err,response,body){ + if(!err && response.statusCode == 200){ + parsedStandings = JSON.parse(body) + res.render("Tournaments/tournamentStandings", { standings : parsedStandings}) + } + else{ + console.log(err) + res.render("index") + } + }) +} +module.exports = tStandings diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..713c612 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1608 @@ +{ + "name": "cricbuzz", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "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=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "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==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cool-ascii-faces": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/cool-ascii-faces/-/cool-ascii-faces-1.3.4.tgz", + "integrity": "sha1-8Wo6d91ZRBSBJ2ykZz5qR8ZvsLI=", + "requires": { + "stream-spigot": "~3.0.3" + } + }, + "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=" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "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=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "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", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "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.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "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.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "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==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "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-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "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.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "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", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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=" + }, + "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" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.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==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "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=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "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==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "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" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "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=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "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=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "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": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + } + } + }, + "readable-stream": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", + "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.0.1", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "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==" + } + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "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" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-spigot": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/stream-spigot/-/stream-spigot-3.0.6.tgz", + "integrity": "sha1-34faJjAiFoKxPZTx72OuVqTXzvo=", + "requires": { + "readable-stream": "~2.2.6", + "xtend": "~4.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.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=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, + "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=" + } + } + }, + "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" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "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" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..de24022 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "cricbuzz", + "version": "1.0.0", + "description": "A web application for cricket lovers as it will provide live scores and all sort of data with respect to cricket.\r FRONTEND : HTML 5, CSS 3, JS\r BACKEND : NODE-JS with EXPRESS FRAMEWORK", + "main": "app.js", + "scripts": { + "start": "node app.js" + }, + "repository": { + "type": "git", + "url": "cricbuzz" + }, + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.19.0", + "cool-ascii-faces": "^1.3.4", + "ejs": "^2.7.4", + "express": "^4.17.1", + "nodemon": "^2.0.15", + "request": "^2.88.0" + } +} diff --git a/views/Matches/matchInfo.ejs b/views/Matches/matchInfo.ejs new file mode 100644 index 0000000..05a104e --- /dev/null +++ b/views/Matches/matchInfo.ejs @@ -0,0 +1,326 @@ +<% include ../partials/header %> + +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam == 'Australia'){ %> + <% var homePic = 'images/aus.png' %> + <%}else if(homeTeam == 'Sri Lanka'){ %> + <% var homePic = 'images/sriLanka.png' %> + <%}else if(homeTeam == 'Pakistan'){ %> + <% var homePic = 'images/pak.png' %> + <%} else if(homeTeam == 'England'){ %> + <% var homePic = 'images/eng.png' %> + <%} else if(homeTeam == 'India'){ %> + <% var homePic = 'images/ind.jpeg' %> + <%} else if(homeTeam == 'South Africa'){ %> + <% var homePic = 'images/southAfrica.png' %> + <%} else if(homeTeam == 'Zimbabwe'){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam == 'West Indies'){ %> + <% var homePic = 'images/westIndies.png' %> + <%} else if(homeTeam == 'New Zealand'){ %> + <% var homePic = 'images/newz.jpeg' %> + <%} else if(homeTeam == 'Scotland'){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam == 'Afghanistan'){ %> + <% var homePic = 'images/afgan.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam == 'Australia'){ %> + <% var awayPic = 'images/aus.png' %> + <%}else if(awayTeam == 'Sri Lanka'){ %> + <% var awayPic = 'images/sriLanka.png' %> + <%}else if(awayTeam == 'Pakistan'){ %> + <% var awayPic = 'images/pak.png' %> + <%} else if(awayTeam == 'England'){ %> + <% var awayPic = 'images/eng.png' %> + <%} else if(awayTeam == 'India'){ %> + <% var awayPic = 'images/ind.jpeg' %> + <%} else if(awayTeam == 'South Africa'){ %> + <% var awayPic = 'images/southAfrica.png' %> + <%} else if(awayTeam == 'Zimbabwe'){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam == 'West Indies'){ %> + <% var awayPic = 'images/westIndies.png' %> + <%}else if(awayTeam == 'New Zealand'){ %> + <% var awayPic = 'images/newz.jpeg' %> + <%} else if(awayTeam == 'Scotland'){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam == 'Afghanistan'){ %> + <% var awayPic = 'images/afgan.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% return teamsPic %> + <%} %> + +<% if(matchInfo["sport_event"]["competitors"][0]["qualifier"] == "home"){ %> + <% var homeTeam = matchInfo["sport_event"]["competitors"][0]["name"] %> + <% var awayTeam = matchInfo["sport_event"]["competitors"][1]["name"] %> +<% } else{ %> + <% var homeTeam = matchInfo["sport_event"]["competitors"][1]["name"] %> + <% var awayTeam = matchInfo["sport_event"]["competitors"][0]["name"] %> +<% } %> + +<% if(matchInfo["sport_event_status"]["match_status"] === "ended"){ %> + <% var result = matchInfo["sport_event_status"]["match_result"] %> + <% if(matchInfo.hasOwnProperty("statistics")){ %> + <% if(matchInfo["statistics"].hasOwnProperty("man_of_the_match")){ %> + <% var MOM = matchInfo["statistics"]["man_of_the_match"][0]["name"] %> + <% } %> + <% }else{ %> + <% var MOM = null %> + <%} %> +<% }else if(matchInfo["sport_event_status"]["match_status"] === "live") { %> + <% var result = matchInfo.sport_event_status.equation %> + <%}else{ %> + <% var result = matchInfo["sport_event_status"]["match_status"] %> + <%} %> +

      +
      +
      +
      +
      +
      +
      + Game Report +

      Latest Game Result

      +
      + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> +
      +
      + <% if(matchInfo.sport_event_status.status == 'not_started'){ %> + Match <%= matchInfo.sport_event_status.status %> YET + <%} %>
      + + <%=result%> +
      + <% if(MOM != null){ %> + Man Of The Match <%=MOM%> + <% } %>
      + Venue : <%=matchInfo.sport_event.venue.name%>
      + + (<%= returnDate(matchInfo.sport_event.scheduled.slice(0,10)) %>) +
      +
      + vs +
      +
      + +
      + <% if(matchInfo['sport_event_status']['period_scores'] != undefined){ %> + <% matchInfo["sport_event_status"]["period_scores"].forEach(function(inning){ %> + <% if(inning.hasOwnProperty("home_score")){ %> + + +

      <%= inning["display_score"] %> (<%= inning["display_overs"] %>)

      + + + <% } %> + <% }) %> + <%} %> +

      <%=homeTeam%>

      +
      +
      +
      + +
      + <% if(matchInfo['sport_event_status']['period_scores'] != undefined){ %> + <% matchInfo["sport_event_status"]["period_scores"].forEach(function(inning){ %> + <% if(inning.hasOwnProperty("away_score")){ %> + + +

      + <%= inning["display_score"] %> (<%= inning["display_overs"]%>) +

      + + + <% } %> + <% }) %> + <%} %> +

      <%=awayTeam%>

      +
      +
      +
      +
      +
      +
      +
      +
      +
      + +<% if(matchInfo.hasOwnProperty("statistics")){ %> + <% if(matchInfo["statistics"].hasOwnProperty("innings")){ %> + <% matchInfo["statistics"]["innings"].forEach(function(inning){ %> +

      BATTING CARD

      + + + + + + + + + <% inning["teams"][0]["statistics"]["batting"]["players"].forEach(function(player){ %> + + + + + + + + + <% }) %> + +
      <%= inning["teams"][0]["name"] %> RUNS(B) SR 4s 6s OUT
      + <% var currentName = player['name'] %> + <% var index = currentName.indexOf(',') %> + <% start = currentName.slice(index + 2,currentName.length) %> + <% end = currentName.slice(0,index) %> + <% name = start + " " + end %> + <%= name %> + <% if(player["statistics"].hasOwnProperty("not_out")){ %> + + <% } %> + + <%= player["statistics"]["runs"] %> + <% if(player["statistics"].hasOwnProperty("duck")){ %> + 0 + <% } else if(!player["statistics"].hasOwnProperty("runs")){ %> + + <% } %> + ( <%= player["statistics"]["balls_faced"] %> + <% if(!player["statistics"].hasOwnProperty("balls_faced")){ %> + 0 + <% } %>) + + <%= player["statistics"]["strike_rate"] %> + <% if(!player["statistics"].hasOwnProperty("strike_rate")){ %> + - + <% } %> + + <%= player["statistics"]["fours"] %> + <% if(!player["statistics"].hasOwnProperty("fours")){ %> + - + <% } %> + + <%= player["statistics"]["sixes"] %> + <% if(!player["statistics"].hasOwnProperty("sixes")){ %> + - + <% } %> + + <% if(player["statistics"].hasOwnProperty("dismissal")){ %> + <%= player["statistics"]["dismissal"]["type"].toUpperCase() %> + <% } else{ %> + - + <% } %> +
      + + + + + +
      FOURS : <%= inning["teams"][0]["statistics"]["batting"]["fours"] %> SIXES : <%= inning["teams"][0]["statistics"]["batting"]["sixes"] %> RUN RATE : <%= inning["teams"][0]["statistics"]["batting"]["run_rate"] %>
      + <% if(inning["teams"][0]["statistics"]["batting"]["partnerships"] != undefined){ %> + + + + <% inning["teams"][0]["statistics"]["batting"]["partnerships"].forEach(function(wicket){ %> + + <% }) %> + +
      PARTNERSHIPS <%= wicket["runs"] %> for <%= wicket["wicket_number"] %>th wicket from <%= wicket["start"] %> to <%= wicket["end"] %> OVERS
      + <%} %> + +

      BOWLING CARD

      + + + + + + + + + + <% if(inning['teams'][1]['statistics']['bowling'] != undefined){ %> + <% inning["teams"][1]["statistics"]["bowling"]["players"].forEach(function(player){ %> + <% var currentName = player['name'] %> + <% var index = currentName.indexOf(',') %> + <% start = currentName.slice(index + 2,currentName.length) %> + <% end = currentName.slice(0,index) %> + <% name = start + " " + end %> + + + + + + + + + <% }) %> + <% } %> +
      <%= inning["teams"][1]["name"] %> OVERS RUNS WKTS E/R 0s
      <%=name %> <%= player["statistics"]["overs_bowled"] %> <%= player["statistics"]["runs_conceded"] %> + <%= player["statistics"]["wickets"] %> + <% if(!player["statistics"].hasOwnProperty("wickets")){ %> + - + <% } %> + <%= player["statistics"]["economy_rate"] %> + <%= player["statistics"]["dot_balls"] %> + <% if(!player["statistics"].hasOwnProperty("dot_balls")){ %> + - + <% } %> +
      + <% }) %> + + + <% } %> +<% } %> + + +<% if(matchInfo.hasOwnProperty("match_notes")){ %> + + + + + <% matchInfo["match_notes"].forEach(function(highlight){ %> + + + + <% }) %> +
      HIGHLIGHTS
      <%= highlight["text"] %>
      +<% } %> +
      + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Matches/matchLineups.ejs b/views/Matches/matchLineups.ejs new file mode 100644 index 0000000..a27933a --- /dev/null +++ b/views/Matches/matchLineups.ejs @@ -0,0 +1,133 @@ +<% include ../partials/header %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam.includes('Australia') ){ %> + <% var homePic = 'images/aus.png' %> + <%}else if(homeTeam.includes('Sri Lanka')){ %> + <% var homePic = 'images/sriLanka.png' %> + <%}else if(homeTeam.includes('Pakistan') ){ %> + <% var homePic = 'images/pak.png' %> + <%} else if(homeTeam.includes('England') ){ %> + <% var homePic = 'images/eng.png' %> + <%} else if(homeTeam.includes('India') ){ %> + <% var homePic = 'images/ind.jpeg' %> + <%} else if(homeTeam.includes('South Africa') ){ %> + <% var homePic = 'images/southAfrica.png' %> + <%} else if(homeTeam.includes('Zimbabwe') ){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam.includes('West Indies') ){ %> + <% var homePic = 'images/westIndies.png' %> + <%} else if(homeTeam.includes('New Zealand') ){ %> + <% var homePic = 'images/newz.jpeg' %> + <%} else if(homeTeam.includes('Scotland') ){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam.includes('Afghanistan') ){ %> + <% var homePic = 'images/afgan.png' %> + <%}else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <%} else if(homeTeam.includes('Ireland') ){ %> + <% var homePic = 'images/ireland.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam.includes('Australia')){ %> + <% var awayPic = 'images/aus.png' %> + <%}else if(awayTeam.includes('Sri Lanka')){ %> + <% var awayPic = 'images/sriLanka.png' %> + <%}else if(awayTeam.includes('Pakistan') ){ %> + <% var awayPic = 'images/pak.png' %> + <%} else if(awayTeam.includes('England') ){ %> + <% var awayPic = 'images/eng.png' %> + <%} else if(awayTeam.includes('India') ){ %> + <% var awayPic = 'images/ind.jpeg' %> + <%} else if(awayTeam.includes('South Africa') ){ %> + <% var awayPic = 'images/southAfrica.png' %> + <%} else if(awayTeam.includes('Zimbabwe') ){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam.includes('West Indies') ){ %> + <% var awayPic = 'images/westIndies.png' %> + <%}else if(awayTeam.includes('New Zealand')){ %> + <% var awayPic = 'images/newz.jpeg' %> + <%} else if(awayTeam.includes('Scotland') ){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam.includes('Afghanistan') ){ %> + <% var awayPic = 'images/afgan.png' %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <%} else if(awayTeam.includes('Ireland') ){ %> + <% var awayPic = 'images/ireland.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% return teamsPic %> + <%} %> + + +
      +
      +
      +
      +
      +

      <%=data.sport_event.tournament.name%>

      + +
      +
      +
      +
      +<% var homeTeam = data.sport_event.competitors[0].name %> +<% var awayTeam = data.sport_event.competitors[1].name %> +
      +
      +
      +
      +
      + Team Squad +

      Team Squad

      +
      +
      + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> +
      + <% var team = 0 %> +
      + <% data.lineups.forEach((eachTeam)=>{ %> + + <% team += 1 %> + <% }) %> +
      +
      +
      + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Matches/matchProbabilities.ejs b/views/Matches/matchProbabilities.ejs new file mode 100644 index 0000000..4061f87 --- /dev/null +++ b/views/Matches/matchProbabilities.ejs @@ -0,0 +1,125 @@ +<% include ../partials/header %> +<% if(data['sport_event']['competitors'][0]['qualifier'] == 'home'){ %> + <% var home = data['sport_event']['competitors'][0]['name'] %> + <% var away = data['sport_event']['competitors'][1]['name'] %> +<% }else{ %> + <% var home = data['sport_event']['competitors'][1]['name'] %> + <% var away = data['sport_event']['competitors'][0]['name'] %> +<% } %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam == 'Australia'){ %> + <% var homePic = 'images/aus.png' %> + <%}else if(homeTeam == 'Sri Lanka'){ %> + <% var homePic = 'images/sriLanka.png' %> + <%}else if(homeTeam == 'Pakistan'){ %> + <% var homePic = 'images/pak.png' %> + <%} else if(homeTeam == 'England'){ %> + <% var homePic = 'images/eng.png' %> + <%} else if(homeTeam == 'India'){ %> + <% var homePic = 'images/ind.jpeg' %> + <%} else if(homeTeam == 'South Africa'){ %> + <% var homePic = 'images/southAfrica.png' %> + <%} else if(homeTeam == 'Zimbabwe'){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam == 'West Indies'){ %> + <% var homePic = 'images/westIndies.png' %> + <%} else if(homeTeam == 'New Zealand'){ %> + <% var homePic = 'images/newz.jpeg' %> + <%} else if(homeTeam == 'Scotland'){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam == 'Afghanistan'){ %> + <% var homePic = 'images/afgan.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam == 'Australia'){ %> + <% var awayPic = 'images/aus.png' %> + <%}else if(awayTeam == 'Sri Lanka'){ %> + <% var awayPic = 'images/sriLanka.png' %> + <%}else if(awayTeam == 'Pakistan'){ %> + <% var awayPic = 'images/pak.png' %> + <%} else if(awayTeam == 'England'){ %> + <% var awayPic = 'images/eng.png' %> + <%} else if(awayTeam == 'India'){ %> + <% var awayPic = 'images/ind.jpeg' %> + <%} else if(awayTeam == 'South Africa'){ %> + <% var awayPic = 'images/southAfrica.png' %> + <%} else if(awayTeam == 'Zimbabwe'){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam == 'West Indies'){ %> + <% var awayPic = 'images/westIndies.png' %> + <%}else if(awayTeam == 'New Zealand'){ %> + <% var awayPic = 'images/newz.jpeg' %> + <%} else if(awayTeam == 'Scotland'){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam == 'Afghanistan'){ %> + <% var awayPic = 'images/afgan.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% return teamsPic %> + <%} %> +
      +
      +
      +
      +
      +

      <%= data['sport_event']['season']['name'] %>

      + +
      +
      +
      +
      +
      +
      +
      +
      +
      + Game Report +

      Result Probability

      +
      +
      +
      <%=data.sport_event.tournament.name%>
      +
      + vs +
      + <% var pics = returnHomeAndAwayPics(home,away) %> + <% data['probabilities']['markets'][0]['outcomes'].forEach(function(outcome){ %> + <% if(outcome['name'] === 'home_team_winner'){ %> +
      + +
      +

      <%= outcome['probability'] %>%

      +

      <%=home%>

      +
      +
      + <% }else if(outcome['name'] === 'away_team_winner'){ %> +
      + +
      +

      <%= outcome['probability'] %>%

      +

      <%=away%>

      +
      +
      + <% } %> + <% }) %> +
      +
      + +
      +
      +
      +
      +
      + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Tournaments/tournamentInfo.ejs b/views/Tournaments/tournamentInfo.ejs new file mode 100644 index 0000000..39c93e4 --- /dev/null +++ b/views/Tournaments/tournamentInfo.ejs @@ -0,0 +1,153 @@ +<% include ../partials/header %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam.includes('Australia') ){ %> + <% var homePic = 'images/aus.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Sri Lanka')){ %> + <% var homePic = 'images/sriLanka.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Pakistan') ){ %> + <% var homePic = 'images/pak.png' %> + <% var homeId = "sr:competitor:142704" %> + <%} else if(homeTeam.includes('England') ){ %> + <% var homePic = 'images/eng.png' %> + <% var homeId = "sr:competitor:107205" %> + <%} else if(homeTeam.includes('India') ){ %> + <% var homePic = 'images/ind.jpeg' %> + <% var homeId = "sr:competitor:107203" %> + <%} else if(homeTeam.includes('South Africa') ){ %> + <% var homePic = 'images/southAfrica.png' %> + <% var homeId = "sr:competitor:142708" %> + <%} else if(homeTeam.includes('Zimbabwe') ){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam.includes('West Indies') ){ %> + <% var homePic = 'images/westIndies.png' %> + <% var homeId = "sr:competitor:142714" %> + <%} else if(homeTeam.includes('New Zealand') ){ %> + <% var homePic = 'images/newz.jpeg' %> + <% var homeId = "sr:competitor:142702" %> + <%} else if(homeTeam.includes('Scotland') ){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam.includes('Afghanistan') ){ %> + <% var homePic = 'images/afgan.png' %> + <% var homeId = "sr:competitor:142688" %> + <%}else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <% var homeId = "sr:competitor:142692" %> + <%} else if(homeTeam.includes('Ireland') ){ %> + <% var homePic = 'images/ireland.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam.includes('Australia')){ %> + <% var awayPic = 'images/aus.png' %> + <% var awayId = "sr:competitor:142690" %> + <%}else if(awayTeam.includes('Sri Lanka')){ %> + <% var awayPic = 'images/sriLanka.png' %> + <% var awayId = "sr:competitor:142710" %> + <%}else if(awayTeam.includes('Pakistan') ){ %> + <% var awayPic = 'images/pak.png' %> + <% var awayId = "sr:competitor:142704" %> + <%} else if(awayTeam.includes('England') ){ %> + <% var awayPic = 'images/eng.png' %> + <% var awayId = "sr:competitor:107205" %> + <%} else if(awayTeam.includes('India') ){ %> + <% var awayPic = 'images/ind.jpeg' %> + <% var awayId = "sr:competitor:107203" %> + <%} else if(awayTeam.includes('South Africa') ){ %> + <% var awayPic = 'images/southAfrica.png' %> + <% var awayId = "sr:competitor:142708" %> + <%} else if(awayTeam.includes('Zimbabwe') ){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam.includes('West Indies') ){ %> + <% var awayPic = 'images/westIndies.png' %> + <% var awayId = "sr:competitor:142714" %> + <%}else if(awayTeam.includes('New Zealand')){ %> + <% var awayPic = 'images/newz.jpeg' %> + <% var awayId = "sr:competitor:142702" %> + <%} else if(awayTeam.includes('Scotland') ){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam.includes('Afghanistan') ){ %> + <% var awayPic = 'images/afgan.png' %> + <% var awayId = "sr:competitor:142688" %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <% var awayId = "sr:competitor:142692" %> + <%} else if(awayTeam.includes('Ireland') ){ %> + <% var awayPic = 'images/ireland.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% teamsPic[2] = homeId %> + <% teamsPic[3] = awayId %> + <% return teamsPic %> +<%} %> +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> + +
      +
      +
      +
      +
      +

      <%= info["tournament"]["name"] %>

      + +
      +
      +
      +
      +
      +
      +
      +
      +

      Schedule

      +
      +
      +
      +
      + <% info["sport_events"].forEach(function(match){ %> + <% var homeTeam = match["competitors"][0]["name"] %> + <% var awayTeam = match["competitors"][1]["name"] %> + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> +
      +

      + <% if(match.hasOwnProperty("venue")){ %> + <%- match["venue"]["name"] %> + <% } else{ %> + + <% } %> + - <%= returnDate(match["scheduled"].slice(0,10)) %>

      +
      + vs + + +
      + +
      + <% }) %> +
      +
      +
      +
      + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Tournaments/tournamentLeaders.ejs b/views/Tournaments/tournamentLeaders.ejs new file mode 100644 index 0000000..0b60672 --- /dev/null +++ b/views/Tournaments/tournamentLeaders.ejs @@ -0,0 +1,110 @@ +<% include ../partials/header %> +<% function returnPic(team){ %> + <% if(team.includes('Australia') ){ %> + <% var picLink = 'images/aus.png' %> + <%}else if(team.includes('Sri Lanka')){ %> + <% var picLink = 'images/sriLanka.png' %> + <%}else if(team.includes('Pakistan') ){ %> + <% var picLink = 'images/pak.png' %> + <%} else if(team.includes('England') ){ %> + <% var picLink = 'images/eng.png' %> + <%} else if(team.includes('India') ){ %> + <% var picLink = 'images/ind.jpeg' %> + <%} else if(team.includes('South Africa') ){ %> + <% var picLink = 'images/southAfrica.png' %> + <%} else if(team.includes('Zimbabwe') ){ %> + <% var picLink = 'images/zim.jpeg' %> + <%} else if(team.includes('West Indies') ){ %> + <% var picLink = 'images/westIndies.png' %> + <%} else if(team.includes('New Zealand') ){ %> + <% var picLink = 'images/newz.jpeg' %> + <%} else if(team.includes('Scotland') ){ %> + <% var picLink = 'images/scot.png' %> + <%} else if(team.includes('Afghanistan') ){ %> + <% var picLink = 'images/afgan.png' %> + <%}else if(team.includes('Bangladesh') ){ %> + <% var picLink = 'images/bangla.png' %> + <%} else if(team.includes('Ireland') ){ %> + <% var picLink = 'images/ireland.png' %> + <%} else{ %> + <% var picLink = 'images/cricket.jpeg' %> + <% } %> + <% return picLink %> +<%} %> +
      +
      +
      +
      +
      +

      <%=data.tournament.name%>

      + +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      Tournament Leaders

      +

      Batsman

      +
      +
      +
      +
      + +
      +
      +
      +
      +
      +

      Bowler

      +
      +
      +
      +
      + +
      +
      +
      + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Tournaments/tournamentResults.ejs b/views/Tournaments/tournamentResults.ejs new file mode 100644 index 0000000..2e6f422 --- /dev/null +++ b/views/Tournaments/tournamentResults.ejs @@ -0,0 +1,169 @@ +<% include ../partials/header %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam.includes('Australia') ){ %> + <% var homePic = 'images/aus.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Sri Lanka')){ %> + <% var homePic = 'images/sriLanka.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Pakistan') ){ %> + <% var homePic = 'images/pak.png' %> + <% var homeId = "sr:competitor:142704" %> + <%} else if(homeTeam.includes('England') ){ %> + <% var homePic = 'images/eng.png' %> + <% var homeId = "sr:competitor:107205" %> + <%} else if(homeTeam.includes('India') ){ %> + <% var homePic = 'images/ind.jpeg' %> + <% var homeId = "sr:competitor:107203" %> + <%} else if(homeTeam.includes('South Africa') ){ %> + <% var homePic = 'images/southAfrica.png' %> + <% var homeId = "sr:competitor:142708" %> + <%} else if(homeTeam.includes('Zimbabwe') ){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam.includes('West Indies') ){ %> + <% var homePic = 'images/westIndies.png' %> + <% var homeId = "sr:competitor:142714" %> + <%} else if(homeTeam.includes('New Zealand') ){ %> + <% var homePic = 'images/newz.jpeg' %> + <% var homeId = "sr:competitor:142702" %> + <%} else if(homeTeam.includes('Scotland') ){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam.includes('Afghanistan') ){ %> + <% var homePic = 'images/afgan.png' %> + <% var homeId = "sr:competitor:142688" %> + <%}else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <% var homeId = "sr:competitor:142692" %> + <%} else if(homeTeam.includes('Ireland') ){ %> + <% var homePic = 'images/ireland.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam.includes('Australia')){ %> + <% var awayPic = 'images/aus.png' %> + <% var awayId = "sr:competitor:142690" %> + <%}else if(awayTeam.includes('Sri Lanka')){ %> + <% var awayPic = 'images/sriLanka.png' %> + <% var awayId = "sr:competitor:142710" %> + <%}else if(awayTeam.includes('Pakistan') ){ %> + <% var awayPic = 'images/pak.png' %> + <% var awayId = "sr:competitor:142704" %> + <%} else if(awayTeam.includes('England') ){ %> + <% var awayPic = 'images/eng.png' %> + <% var awayId = "sr:competitor:107205" %> + <%} else if(awayTeam.includes('India') ){ %> + <% var awayPic = 'images/ind.jpeg' %> + <% var awayId = "sr:competitor:107203" %> + <%} else if(awayTeam.includes('South Africa') ){ %> + <% var awayPic = 'images/southAfrica.png' %> + <% var awayId = "sr:competitor:142708" %> + <%} else if(awayTeam.includes('Zimbabwe') ){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam.includes('West Indies') ){ %> + <% var awayPic = 'images/westIndies.png' %> + <% var awayId = "sr:competitor:142714" %> + <%}else if(awayTeam.includes('New Zealand')){ %> + <% var awayPic = 'images/newz.jpeg' %> + <% var awayId = "sr:competitor:142702" %> + <%} else if(awayTeam.includes('Scotland') ){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam.includes('Afghanistan') ){ %> + <% var awayPic = 'images/afgan.png' %> + <% var awayId = "sr:competitor:142688" %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <% var awayId = "sr:competitor:142692" %> + <%} else if(awayTeam.includes('Ireland') ){ %> + <% var awayPic = 'images/ireland.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% teamsPic[2] = homeId %> + <% teamsPic[3] = awayId %> + <% return teamsPic %> +<%} %> +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> +
      +
      +
      +
      +
      +

      <%=data.tournament.name%>

      + +
      +
      +
      +
      +
      +
      +
      +
      +
      + <% data.results.forEach((result)=>{ %> + <% var homeTeam = result.sport_event.competitors[0].name %> + <% var awayTeam = result.sport_event.competitors[1].name %> + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> + <% if(result.sport_event_status.hasOwnProperty('period_scores')){ %> + <% if(result.sport_event_status.period_scores[0].hasOwnProperty('home_score')){ %> + <% var homeScore = result.sport_event_status.period_scores[0].display_score %> + <% var awayScore = result.sport_event_status.period_scores[1].display_score %> + <% var homeOvers = result.sport_event_status.period_scores[0].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[1].display_overs %> + <%}else{ %> + <% var homeScore = result.sport_event_status.period_scores[1].display_score %> + <% var awayScore = result.sport_event_status.period_scores[0].display_score %> + <% var homeOvers = result.sport_event_status.period_scores[1].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[0].display_overs %> + <%} %> + <%} %> +
      +
      +
      <%=result.sport_event_status.match_result%> +
      + (<%=result.sport_event.venue.name %>,<%=result.sport_event.venue.city_name %>,<%=result.sport_event.venue.country_name %> ) +
      + (<%= returnDate(result.sport_event.scheduled.slice(0,10))%>) +
      +
      + vs +
      +
      + +
      +

      <%=homeScore%>

      + (<%=homeOvers%>) +

      <%=homeTeam%>

      +
      +
      +
      + +
      +

      <%=awayScore%>

      + (<%=awayOvers%>) +

      <%=awayTeam%>

      +
      +
      +
      +
      + +
      +
      + <%}) %> +
      +
      +
      +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Tournaments/tournamentStandings.ejs b/views/Tournaments/tournamentStandings.ejs new file mode 100644 index 0000000..f430e5b --- /dev/null +++ b/views/Tournaments/tournamentStandings.ejs @@ -0,0 +1,52 @@ +<% include ../partials/header %> + +
      +
      +
      +
      +
      +

      <%= standings["tournament"]["name"] %>

      + +
      +
      +
      +
      +
      + + + + + + + + + + + + <% standings["standings"].forEach(function(standing){ %> + <% standing["groups"].forEach(function(group){ %> + <% group["team_standings"].forEach(function(team){ %> + + + + + + + + + + + <% }) %> + <% }) %> + <% }) %> + +
      RANKNAMEMATCHESWINSLOSSNO RESULTPOINTSNET RUN RATE
      <%= team["rank"] %> <%= team["team"]["name"] %> <%= team["played"] %> <%= team["win"] %> <%= team["loss"] %> <%= team["no_result"] %> <%= team["points"] %> <%= team["net_run_rate"] %>
      +
      +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/Tournaments/tournaments.ejs b/views/Tournaments/tournaments.ejs new file mode 100644 index 0000000..591d9da --- /dev/null +++ b/views/Tournaments/tournaments.ejs @@ -0,0 +1,179 @@ +<% include ../partials/header %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam.includes('Australia') ){ %> + <% var homePic = 'images/aus.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Sri Lanka')){ %> + <% var homePic = 'images/sriLanka.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam.includes('Pakistan') ){ %> + <% var homePic = 'images/pak.png' %> + <% var homeId = "sr:competitor:142704" %> + <%} else if(homeTeam.includes('England') ){ %> + <% var homePic = 'images/eng.png' %> + <% var homeId = "sr:competitor:107205" %> + <%} else if(homeTeam.includes('India') ){ %> + <% var homePic = 'images/ind.jpeg' %> + <% var homeId = "sr:competitor:107203" %> + <%} else if(homeTeam.includes('South Africa') ){ %> + <% var homePic = 'images/southAfrica.png' %> + <% var homeId = "sr:competitor:142708" %> + <%} else if(homeTeam.includes('Zimbabwe') ){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam.includes('West Indies') ){ %> + <% var homePic = 'images/westIndies.png' %> + <% var homeId = "sr:competitor:142714" %> + <%} else if(homeTeam.includes('New Zealand') ){ %> + <% var homePic = 'images/newz.jpeg' %> + <% var homeId = "sr:competitor:142702" %> + <%} else if(homeTeam.includes('Scotland') ){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam.includes('Afghanistan') ){ %> + <% var homePic = 'images/afgan.png' %> + <% var homeId = "sr:competitor:142688" %> + <%}else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <% var homeId = "sr:competitor:142692" %> + <%} else if(homeTeam.includes('Ireland') ){ %> + <% var homePic = 'images/ireland.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam.includes('Australia')){ %> + <% var awayPic = 'images/aus.png' %> + <% var awayId = "sr:competitor:142690" %> + <%}else if(awayTeam.includes('Sri Lanka')){ %> + <% var awayPic = 'images/sriLanka.png' %> + <% var awayId = "sr:competitor:142710" %> + <%}else if(awayTeam.includes('Pakistan') ){ %> + <% var awayPic = 'images/pak.png' %> + <% var awayId = "sr:competitor:142704" %> + <%} else if(awayTeam.includes('England') ){ %> + <% var awayPic = 'images/eng.png' %> + <% var awayId = "sr:competitor:107205" %> + <%} else if(awayTeam.includes('India') ){ %> + <% var awayPic = 'images/ind.jpeg' %> + <% var awayId = "sr:competitor:107203" %> + <%} else if(awayTeam.includes('South Africa') ){ %> + <% var awayPic = 'images/southAfrica.png' %> + <% var awayId = "sr:competitor:142708" %> + <%} else if(awayTeam.includes('Zimbabwe') ){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam.includes('West Indies') ){ %> + <% var awayPic = 'images/westIndies.png' %> + <% var awayId = "sr:competitor:142714" %> + <%}else if(awayTeam.includes('New Zealand')){ %> + <% var awayPic = 'images/newz.jpeg' %> + <% var awayId = "sr:competitor:142702" %> + <%} else if(awayTeam.includes('Scotland') ){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam.includes('Afghanistan') ){ %> + <% var awayPic = 'images/afgan.png' %> + <% var awayId = "sr:competitor:142688" %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <% var awayId = "sr:competitor:142692" %> + <%} else if(awayTeam.includes('Ireland') ){ %> + <% var awayPic = 'images/ireland.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% teamsPic[2] = homeId %> + <% teamsPic[3] = awayId %> + <% return teamsPic %> +<%} %> +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> +<% date = new Date() %> +<% month = date.getMonth() + 1 %> +<% year = date.getFullYear() %> +
      +
      +
      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +

      Schedule

      +
      +
      +
      +
      + <% list["tournaments"].forEach(function(tournament){ %> + <% if(tournament['current_season']['start_date'].includes(year)){ %> +
      + + <% if(tournament.name.includes("vs")){ %> + <% var indexOfVS = tournament["name"].indexOf("vs") %> + <% var indexOfSeries = tournament['name'].indexOf("Series") %> + <% var homeTeam = tournament['name'].slice(indexOfSeries+7,indexOfVS) %> + <% var awayTeam = tournament.name.slice(indexOfVS+3,tournament.name.length) %> + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> + <%} %> +
      + vs + + +
      +
      + <% } %> + <% }) %> +
      +
      +
      +
      + + + + + + + + <% list["tournaments"].forEach(function(tournament){ %> + <% if(tournament['current_season']['start_date'].includes(year)){ %> + + + + + <% } %> + <% }) %> + +
      TOURNAMENTS NAMESTARTS FROMENDS ON
      <%= tournament["name"] %> <%= tournament["current_season"]["start_date"] %> <%= tournament["current_season"]["end_date"] %>
      + + +<% include ../partials/footer %> \ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs new file mode 100644 index 0000000..977fd4c --- /dev/null +++ b/views/home.ejs @@ -0,0 +1,357 @@ +<% include partials/header %> + +<% function checkHomeAndAwayScores(result){ %> + <% var teamsScore = [] %> + <% if(result.sport_event_status.period_scores[0].hasOwnProperty('away_score')){ %> + <% var homeScore = result.sport_event_status.period_scores[1].home_score + "/" + result.sport_event_status.period_scores[1].home_wickets %> + <% var awayScore = result.sport_event_status.period_scores[0].away_score + "/" + result.sport_event_status.period_scores[0].away_wickets %> + <% var homeOvers = result.sport_event_status.period_scores[1].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[0].display_overs %> + <%} else{ %> + <% var homeScore = result.sport_event_status.period_scores[0].home_score + "/" + result.sport_event_status.period_scores[0].home_wickets %> + <% var awayScore = result.sport_event_status.period_scores[1].away_score + "/" + result.sport_event_status.period_scores[1].away_wickets %> + <% var homeOvers = result.sport_event_status.period_scores[0].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[1].display_overs %> + <% } %> + <% teamsScore[0] = homeScore %> + <% teamsScore[1] = homeOvers %> + <% teamsScore[2] = awayScore %> + <% teamsScore[3] = awayOvers %> + <% return teamsScore %> +<%} %> +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam == 'Australia'){ %> + <% var homePic = 'images/aus.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam == 'Sri Lanka'){ %> + <% var homePic = 'images/sriLanka.png' %> + <% var homeId = "sr:competitor:142690" %> + <%}else if(homeTeam == 'Pakistan'){ %> + <% var homePic = 'images/pak.png' %> + <% var homeId = "sr:competitor:142704" %> + <%} else if(homeTeam == 'England'){ %> + <% var homePic = 'images/eng.png' %> + <% var homeId = "sr:competitor:107205" %> + <%} else if(homeTeam == 'India'){ %> + <% var homePic = 'images/ind.jpeg' %> + <% var homeId = "sr:competitor:107203" %> + <%} else if(homeTeam == 'South Africa'){ %> + <% var homePic = 'images/southAfrica.png' %> + <% var homeId = "sr:competitor:142708" %> + <%} else if(homeTeam == 'Zimbabwe'){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam == 'West Indies'){ %> + <% var homePic = 'images/westIndies.png' %> + <% var homeId = "sr:competitor:142714" %> + <%} else if(homeTeam == 'New Zealand'){ %> + <% var homePic = 'images/newz.jpeg' %> + <% var homeId = "sr:competitor:142702" %> + <%} else if(homeTeam == 'Scotland'){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam == 'Afghanistan'){ %> + <% var homePic = 'images/afgan.png' %> + <% var homeId = "sr:competitor:142688" %> + <%} else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <% var homeId = "sr:competitor:142692" %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam == 'Australia'){ %> + <% var awayPic = 'images/aus.png' %> + <% var awayId = "sr:competitor:142690" %> + <%}else if(awayTeam == 'Sri Lanka'){ %> + <% var awayPic = 'images/sriLanka.png' %> + <% var awayId = "sr:competitor:142710" %> + <%}else if(awayTeam == 'Pakistan'){ %> + <% var awayPic = 'images/pak.png' %> + <% var awayId = "sr:competitor:142704" %> + <%} else if(awayTeam == 'England'){ %> + <% var awayPic = 'images/eng.png' %> + <% var awayId = "sr:competitor:107205" %> + <%} else if(awayTeam == 'India'){ %> + <% var awayPic = 'images/ind.jpeg' %> + <% var awayId = "sr:competitor:107203" %> + <%} else if(awayTeam == 'South Africa'){ %> + <% var awayPic = 'images/southAfrica.png' %> + <% var awayId = "sr:competitor:142708" %> + <%} else if(awayTeam == 'Zimbabwe'){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam == 'West Indies'){ %> + <% var awayPic = 'images/westIndies.png' %> + <% var awayId = "sr:competitor:142714" %> + <%}else if(awayTeam == 'New Zealand'){ %> + <% var awayPic = 'images/newz.jpeg' %> + <% var awayId = "sr:competitor:142702" %> + <%} else if(awayTeam == 'Scotland'){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam == 'Afghanistan'){ %> + <% var awayPic = 'images/afgan.png' %> + <% var awayId = "sr:competitor:142688" %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <% var awayId = "sr:competitor:142692" %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% teamsPic[2] = homeId %> + <% teamsPic[3] = awayId %> + <% return teamsPic %> +<%} %> +
      +
      +
      +
      +
      +

      Run Rate

      +

      For Cricket Lovers !!

      +
      +
      +
      +
      +
      +
      +
      +
      + Today Schedule +

      Today Schedule

      +
      +
      +
      + +
      +
      +
      + +
      +
      +
      +
      +
      + Team Squad +

      Our Team Squad

      +

      Some of the best of cricketers who changed complexion of the game

      +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +
      + Great Words +

      by Iconic Players

      +
      +
      +
      +
      + +
      +
      +
      +
      +
      + + +<% include partials/footer %> \ No newline at end of file diff --git a/views/index.ejs b/views/index.ejs new file mode 100644 index 0000000..102215a --- /dev/null +++ b/views/index.ejs @@ -0,0 +1,41 @@ + + + + + + + + + + Cricket Addict + + + + + + + + + + + + + + + +
      +
      +
      +

      404

      +
      +

      The page you are looking for might have been removed had its name changed or is temporarily unavailable.

      + home page +
      +
      + + + + diff --git a/views/partials/footer.ejs b/views/partials/footer.ejs new file mode 100644 index 0000000..7c90d8e --- /dev/null +++ b/views/partials/footer.ejs @@ -0,0 +1,69 @@ + +
      +
      +
      +
      + +
      + +
      + +
      +
      +
      +
      + +

      + Copyright © All rights reserved +

      +
      +
      +
      +
      + + + + +
      + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/views/partials/header.ejs b/views/partials/header.ejs new file mode 100644 index 0000000..7bfb6c8 --- /dev/null +++ b/views/partials/header.ejs @@ -0,0 +1,51 @@ + + + + Run Rate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/views/playerInfo.ejs b/views/playerInfo.ejs new file mode 100644 index 0000000..40cc8f2 --- /dev/null +++ b/views/playerInfo.ejs @@ -0,0 +1,141 @@ +<% include partials/header %> + +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> +
      +
      +
      +
      +
      +

      <%= playerInfo["player"]["full_name"] %>

      +

      (<%= playerInfo["player"]["nationality"].toUpperCase() %>)

      + +
      +
      +
      +
      +
      + +

      PERSONAL DETAILS

      + + + + + <% if(playerInfo["player"].hasOwnProperty("batting_style")){ %> + + <% } %> + <% if(playerInfo["player"].hasOwnProperty("bowling_style")){ %> + + <% } %> + + + + + + <% if(playerInfo["player"].hasOwnProperty("batting_style")){ %> + + <% } %> + <% if(playerInfo["player"].hasOwnProperty("bowling_style")){ %> + + <% } %> + + +
      DATE OF BIRTHROLEBATTING STYLEBOWLING STYLETEAMS
      <%= returnDate(playerInfo["player"]["date_of_birth"]) %> <%= playerInfo["player"]["type"].toUpperCase() %> <%= playerInfo["player"]["batting_style"].toUpperCase() %> <%= playerInfo["player"]["bowling_style"].toUpperCase() %> <% playerInfo["teams"].forEach(function(team){ %> + <%= team["name"] %> , + <% }) %> +
      +

      BATTING STATS

      + + + + + + + + + + + + + + + + + <% playerInfo["statistics"]["tournaments"].forEach(function(stats){ %> + + + + + + + + + + + + + + + + <% }) %> +
      FORMATMATCHESINNGSRUNSAVGHSBALLSSRNOs50s100s4s6s
      <%= stats["type"].toUpperCase() %> <%= stats["batting"]["matches"] %> <%= stats["batting"]["innings"] %> <%= stats["batting"]["runs"] %> <%= stats["batting"]["average"] %> <%= stats["batting"]["highest_score"] %> <%= stats["batting"]["balls_faced"] %> <%= stats["batting"]["strike_rate"] %> <%= stats["batting"]["not_outs"] %> <%= stats["batting"]["fifties"] %> <%= stats["batting"]["hundreds"] %> <%= stats["batting"]["fours"] %> <%= stats["batting"]["sixes"] %>
      + +

      BOWLING STATS

      + + + + + + + + + + + + + + + <% playerInfo["statistics"]["tournaments"].forEach(function(stats){ %> + + + + + + + + + + + + + + <% }) %> +
      FORMATMATCHESINNGSWKTSBALLSAVGSRECO4Ws5Ws10Ws
      <%= stats["type"].toUpperCase() %> <%= stats["bowling"]["matches"] %> <%= stats["bowling"]["innings"] %> <%= stats["bowling"]["wickets"] %> <%= stats["bowling"]["balls_bowled"] %> <%= stats["bowling"]["average"] %> <%= stats["bowling"]["strike_rate"] %> <%= stats["bowling"]["economy"] %> <%= stats["bowling"]["four_wicket_hauls"] %> <%= stats["bowling"]["five_wicket_hauls"] %> <%= stats["bowling"]["ten_wicket_hauls"] %>
      + +

      FIELDING STATS

      + + + + + + + + <% playerInfo["statistics"]["tournaments"].forEach(function(stats){ %> + + + + + + <% }) %> +
      FORMATCATCHSTUMPRUNOUT
      <%= stats["type"].toUpperCase() %> <%= stats["fielding"]["catches"] %> <%= stats["fielding"]["stumpings"] %> <%= stats["fielding"]["runouts"] %>
      +
      +<% include partials/footer %> \ No newline at end of file diff --git a/views/results.ejs b/views/results.ejs new file mode 100644 index 0000000..6e45d21 --- /dev/null +++ b/views/results.ejs @@ -0,0 +1,164 @@ +<% include partials/header %> + +<% function checkHomeAndAwayScores(result){ %> + <% var teamsScore = [] %> + <% if(result.sport_event_status.period_scores[0].hasOwnProperty('away_score')){ %> + <% var home_wickets = result.sport_event_status.period_scores[1].home_wickets %> + <% if(home_wickets == undefined){%> + <% home_wickets = 0 %> + <%} %> + <% var away_wickets = result.sport_event_status.period_scores[0].away_wickets %> + <% if(away_wickets == undefined){%> + <% away_wickets = 0 %> + <%} %> + <% var homeScore = result.sport_event_status.period_scores[1].home_score + "/" + home_wickets %> + <% var awayScore = result.sport_event_status.period_scores[0].away_score + "/" + away_wickets %> + <% var homeOvers = result.sport_event_status.period_scores[1].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[0].display_overs %> + <%} else{ %> + <% var home_wickets = result.sport_event_status.period_scores[0].home_wickets %> + <% if(home_wickets == undefined){%> + <% home_wickets = 0 %> + <%} %> + <% var away_wickets = result.sport_event_status.period_scores[1].away_wickets %> + <% if(away_wickets == undefined){%> + <% away_wickets = 0 %> + <%} %> + <% var homeScore = result.sport_event_status.period_scores[0].home_score + "/" + result.sport_event_status.period_scores[0].home_wickets %> + <% var awayScore = result.sport_event_status.period_scores[1].away_score + "/" + result.sport_event_status.period_scores[1].away_wickets %> + <% var homeOvers = result.sport_event_status.period_scores[0].display_overs %> + <% var awayOvers = result.sport_event_status.period_scores[1].display_overs %> + <% } %> + <% teamsScore[0] = homeScore %> + <% teamsScore[1] = homeOvers %> + <% teamsScore[2] = awayScore %> + <% teamsScore[3] = awayOvers %> + <% return teamsScore %> +<%} %> + +<% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam == 'Australia'){ %> + <% var homePic = 'images/aus.png' %> + <%}else if(homeTeam == 'Sri Lanka'){ %> + <% var homePic = 'images/sriLanka.png' %> + <%}else if(homeTeam == 'Pakistan'){ %> + <% var homePic = 'images/pak.png' %> + <%} else if(homeTeam == 'England'){ %> + <% var homePic = 'images/eng.png' %> + <%} else if(homeTeam == 'India'){ %> + <% var homePic = 'images/ind.jpeg' %> + <%} else if(homeTeam == 'South Africa'){ %> + <% var homePic = 'images/southAfrica.png' %> + <%} else if(homeTeam == 'Zimbabwe'){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam == 'West Indies'){ %> + <% var homePic = 'images/westIndies.png' %> + <%} else if(homeTeam == 'New Zealand'){ %> + <% var homePic = 'images/new.jpeg' %> + <%} else if(homeTeam == 'Scotland'){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam == 'Afghanistan'){ %> + <% var homePic = 'images/afgan.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam == 'Australia'){ %> + <% var awayPic = 'images/aus.png' %> + <%}else if(awayTeam == 'Sri Lanka'){ %> + <% var awayPic = 'images/sriLanka.png' %> + <%}else if(awayTeam == 'Pakistan'){ %> + <% var awayPic = 'images/pak.png' %> + <%} else if(awayTeam == 'England'){ %> + <% var awayPic = 'images/eng.png' %> + <%} else if(awayTeam == 'India'){ %> + <% var awayPic = 'images/ind.jpeg' %> + <%} else if(awayTeam == 'South Africa'){ %> + <% var awayPic = 'images/southAfrica.png' %> + <%} else if(awayTeam == 'Zimbabwe'){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam == 'West Indies'){ %> + <% var awayPic = 'images/westIndies.png' %> + <%}else if(awayTeam == 'New Zealand'){ %> + <% var awayPic = 'images/newz.jpeg' %> + <%} else if(awayTeam == 'Scotland'){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam == 'Afghanistan'){ %> + <% var awayPic = 'images/afgan.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% return teamsPic %> +<%} %> +
      +
      +
      +
      +
      +

      Game Report

      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      + <% var today = new Date() %> + <% today.setDate(today.getDate() - 1); %> + Game Report +

      <%=today.toString().slice(0,15)%>

      +
      +
      + <% results.forEach((result)=>{ %> +
      +
      + <% var homeTeam = result.sport_event.competitors[0].name %> + <% var awayTeam = result.sport_event.competitors[1].name %> + <% var scores = checkHomeAndAwayScores(result) %> + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> + +

      <%= result.sport_event_status.match_result %>

      +
      + vs +
      +
      + +
      +

      <%=scores[0]%>

      +
      (<%=scores[1]%>)
      +

      <%=homeTeam%>

      +
      +
      +
      + +
      +

      <%=scores[2]%>

      +
      (<%=scores[3]%>)
      +

      <%=awayTeam%>

      +
      +
      +
      +
      +
      +

      +
      + +
      +
      + <% }) %> +
      +
      +
      +
      + +
      +<% include partials/footer %> \ No newline at end of file diff --git a/views/schedule.ejs b/views/schedule.ejs new file mode 100644 index 0000000..059536b --- /dev/null +++ b/views/schedule.ejs @@ -0,0 +1,142 @@ +<% include partials/header %> +<% date = new Date() %> +<% year = date.getFullYear() %> +<% function returnDate(reversed){ %> + <% var date = reversed.slice(reversed.length-2,reversed.length) %> + <% var month = reversed.slice(reversed.length-5,reversed.length-3) %> + <% var year = reversed.slice(reversed.length-10,reversed.length-6) %> + <% var DATE = date + "-" + month + "-" + year %> + <% return DATE %> + <%} %> + <% function returnHomeAndAwayPics(homeTeam,awayTeam){ %> + <% var teamsPic = [] %> + <% if(homeTeam.includes('Australia') ){ %> + <% var homePic = 'images/aus.png' %> + <%}else if(homeTeam.includes('Sri Lanka')){ %> + <% var homePic = 'images/sriLanka.png' %> + <%}else if(homeTeam.includes('Pakistan') ){ %> + <% var homePic = 'images/pak.png' %> + <%} else if(homeTeam.includes('England') ){ %> + <% var homePic = 'images/eng.png' %> + <%} else if(homeTeam.includes('India') ){ %> + <% var homePic = 'images/ind.jpeg' %> + <%} else if(homeTeam.includes('South Africa') ){ %> + <% var homePic = 'images/southAfrica.png' %> + <%} else if(homeTeam.includes('Zimbabwe') ){ %> + <% var homePic = 'images/zim.jpeg' %> + <%} else if(homeTeam.includes('West Indies') ){ %> + <% var homePic = 'images/westIndies.png' %> + <%} else if(homeTeam.includes('New Zealand') ){ %> + <% var homePic = 'images/newz.jpeg' %> + <%} else if(homeTeam.includes('Scotland') ){ %> + <% var homePic = 'images/scot.png' %> + <%} else if(homeTeam.includes('Afghanistan') ){ %> + <% var homePic = 'images/afgan.png' %> + <%}else if(homeTeam.includes('Bangladesh') ){ %> + <% var homePic = 'images/bangla.png' %> + <%} else if(homeTeam.includes('Ireland') ){ %> + <% var homePic = 'images/ireland.png' %> + <%} else{ %> + <% var homePic = 'images/cricket.jpeg' %> + <% } %> + <% if(awayTeam.includes('Australia')){ %> + <% var awayPic = 'images/aus.png' %> + <%}else if(awayTeam.includes('Sri Lanka')){ %> + <% var awayPic = 'images/sriLanka.png' %> + <%}else if(awayTeam.includes('Pakistan') ){ %> + <% var awayPic = 'images/pak.png' %> + <%} else if(awayTeam.includes('England') ){ %> + <% var awayPic = 'images/eng.png' %> + <%} else if(awayTeam.includes('India') ){ %> + <% var awayPic = 'images/ind.jpeg' %> + <%} else if(awayTeam.includes('South Africa') ){ %> + <% var awayPic = 'images/southAfrica.png' %> + <%} else if(awayTeam.includes('Zimbabwe') ){ %> + <% var awayPic = 'images/zim.jpeg' %> + <%} else if(awayTeam.includes('West Indies') ){ %> + <% var awayPic = 'images/westIndies.png' %> + <%}else if(awayTeam.includes('New Zealand')){ %> + <% var awayPic = 'images/newz.jpeg' %> + <%} else if(awayTeam.includes('Scotland') ){ %> + <% var awayPic = 'images/scot.png' %> + <%} else if(awayTeam.includes('Afghanistan') ){ %> + <% var awayPic = 'images/afgan.png' %> + <%} else if(awayTeam.includes('Bangladesh') ){ %> + <% var awayPic = 'images/bangla.png' %> + <%} else if(awayTeam.includes('Ireland') ){ %> + <% var awayPic = 'images/ireland.png' %> + <%} else{%> + <% var awayPic = 'images/cricket.jpeg' %> + <% } %> + <% teamsPic[0] = homePic %> + <% teamsPic[1] = awayPic %> + <% return teamsPic %> + <%} %> + +
      +
      +
      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +

      Schedule Of <%= data.team.name.toUpperCase() %>

      +
      +
      + <% data['schedule'].forEach(function(match){ %> + <% if(match['scheduled'].includes(year)){ %> + <% var homeTeam = match['competitors'][0]['name'] %> + <% var awayTeam = match['competitors'][1]['name'] %> + <% var pics = returnHomeAndAwayPics(homeTeam,awayTeam) %> +
      +
      +
      <%= match['tournament']['name'].toUpperCase() %>
      + (<%= returnDate(match['scheduled'].substring(0,10)) %>)
      + <%=match.tournament.category.name %> <%= match.tournament.gender %> <%= match.tournament.type %> MATCH +
      +
      + vs +
      +
      + + +
      +
      + + +
      +
      +
      + +
      +
      + <% } %> + <% }) %> + +
      +
      +
      +
      +
      + +<% include partials/footer %> \ No newline at end of file From cdbdae644bc0259bc4846a388e06b2f47ea02102 Mon Sep 17 00:00:00 2001 From: Shrey Nigam Date: Tue, 29 Mar 2022 18:27:14 +0530 Subject: [PATCH 3/5] update --- node_modules/.bin/cool-face | 15 + node_modules/.bin/cool-face.cmd | 17 + node_modules/.bin/cool-face.ps1 | 18 + node_modules/.bin/is-ci | 15 + node_modules/.bin/is-ci.cmd | 17 + node_modules/.bin/is-ci.ps1 | 18 + node_modules/.bin/mime | 15 + node_modules/.bin/mime.cmd | 17 + node_modules/.bin/mime.ps1 | 18 + node_modules/.bin/nodemon | 15 + node_modules/.bin/nodemon.cmd | 17 + node_modules/.bin/nodemon.ps1 | 18 + node_modules/.bin/nodetouch | 15 + node_modules/.bin/nodetouch.cmd | 17 + node_modules/.bin/nodetouch.ps1 | 18 + node_modules/.bin/nopt | 15 + node_modules/.bin/nopt.cmd | 17 + node_modules/.bin/nopt.ps1 | 18 + node_modules/.bin/rc | 15 + node_modules/.bin/rc.cmd | 17 + node_modules/.bin/rc.ps1 | 18 + node_modules/.bin/semver | 15 + node_modules/.bin/semver.cmd | 17 + node_modules/.bin/semver.ps1 | 18 + node_modules/.bin/sshpk-conv | 15 + node_modules/.bin/sshpk-conv.cmd | 17 + node_modules/.bin/sshpk-conv.ps1 | 18 + node_modules/.bin/sshpk-sign | 15 + node_modules/.bin/sshpk-sign.cmd | 17 + node_modules/.bin/sshpk-sign.ps1 | 18 + node_modules/.bin/sshpk-verify | 15 + node_modules/.bin/sshpk-verify.cmd | 17 + node_modules/.bin/sshpk-verify.ps1 | 18 + node_modules/.bin/uuid | 15 + node_modules/.bin/uuid.cmd | 17 + node_modules/.bin/uuid.ps1 | 18 + node_modules/@sindresorhus/is/dist/index.d.ts | 132 + node_modules/@sindresorhus/is/dist/index.js | 245 + .../@sindresorhus/is/dist/index.js.map | 1 + node_modules/@sindresorhus/is/license | 9 + node_modules/@sindresorhus/is/package.json | 96 + node_modules/@sindresorhus/is/readme.md | 451 + node_modules/@szmarczak/http-timer/LICENSE | 21 + node_modules/@szmarczak/http-timer/README.md | 70 + .../@szmarczak/http-timer/package.json | 75 + .../@szmarczak/http-timer/source/index.js | 99 + node_modules/abbrev/LICENSE | 46 + node_modules/abbrev/README.md | 23 + node_modules/abbrev/abbrev.js | 61 + node_modules/abbrev/package.json | 56 + node_modules/accepts/HISTORY.md | 236 + node_modules/accepts/LICENSE | 23 + node_modules/accepts/README.md | 142 + node_modules/accepts/index.js | 238 + node_modules/accepts/package.json | 89 + node_modules/ajv/.tonic_example.js | 20 + node_modules/ajv/LICENSE | 22 + node_modules/ajv/README.md | 1380 +++ node_modules/ajv/dist/ajv.bundle.js | 7163 +++++++++++ node_modules/ajv/dist/ajv.min.js | 3 + node_modules/ajv/dist/ajv.min.js.map | 1 + node_modules/ajv/lib/ajv.d.ts | 391 + node_modules/ajv/lib/ajv.js | 497 + node_modules/ajv/lib/cache.js | 26 + node_modules/ajv/lib/compile/async.js | 90 + node_modules/ajv/lib/compile/equal.js | 5 + node_modules/ajv/lib/compile/error_classes.js | 34 + node_modules/ajv/lib/compile/formats.js | 149 + node_modules/ajv/lib/compile/index.js | 387 + node_modules/ajv/lib/compile/resolve.js | 270 + node_modules/ajv/lib/compile/rules.js | 66 + node_modules/ajv/lib/compile/schema_obj.js | 9 + node_modules/ajv/lib/compile/ucs2length.js | 20 + node_modules/ajv/lib/compile/util.js | 274 + node_modules/ajv/lib/data.js | 49 + node_modules/ajv/lib/definition_schema.js | 37 + node_modules/ajv/lib/dot/_limit.jst | 104 + node_modules/ajv/lib/dot/_limitItems.jst | 10 + node_modules/ajv/lib/dot/_limitLength.jst | 10 + node_modules/ajv/lib/dot/_limitProperties.jst | 10 + node_modules/ajv/lib/dot/allOf.jst | 34 + node_modules/ajv/lib/dot/anyOf.jst | 48 + node_modules/ajv/lib/dot/coerce.def | 61 + node_modules/ajv/lib/dot/comment.jst | 9 + node_modules/ajv/lib/dot/const.jst | 11 + node_modules/ajv/lib/dot/contains.jst | 57 + node_modules/ajv/lib/dot/custom.jst | 191 + node_modules/ajv/lib/dot/defaults.def | 47 + node_modules/ajv/lib/dot/definitions.def | 201 + node_modules/ajv/lib/dot/dependencies.jst | 80 + node_modules/ajv/lib/dot/enum.jst | 30 + node_modules/ajv/lib/dot/errors.def | 194 + node_modules/ajv/lib/dot/format.jst | 106 + node_modules/ajv/lib/dot/if.jst | 75 + node_modules/ajv/lib/dot/items.jst | 100 + node_modules/ajv/lib/dot/missing.def | 39 + node_modules/ajv/lib/dot/multipleOf.jst | 20 + node_modules/ajv/lib/dot/not.jst | 43 + node_modules/ajv/lib/dot/oneOf.jst | 54 + node_modules/ajv/lib/dot/pattern.jst | 14 + node_modules/ajv/lib/dot/properties.jst | 244 + node_modules/ajv/lib/dot/propertyNames.jst | 54 + node_modules/ajv/lib/dot/ref.jst | 85 + node_modules/ajv/lib/dot/required.jst | 108 + node_modules/ajv/lib/dot/uniqueItems.jst | 62 + node_modules/ajv/lib/dot/validate.jst | 282 + node_modules/ajv/lib/dotjs/README.md | 3 + node_modules/ajv/lib/dotjs/_limit.js | 157 + node_modules/ajv/lib/dotjs/_limitItems.js | 77 + node_modules/ajv/lib/dotjs/_limitLength.js | 82 + .../ajv/lib/dotjs/_limitProperties.js | 77 + node_modules/ajv/lib/dotjs/allOf.js | 43 + node_modules/ajv/lib/dotjs/anyOf.js | 74 + node_modules/ajv/lib/dotjs/comment.js | 14 + node_modules/ajv/lib/dotjs/const.js | 56 + node_modules/ajv/lib/dotjs/contains.js | 82 + node_modules/ajv/lib/dotjs/custom.js | 228 + node_modules/ajv/lib/dotjs/dependencies.js | 168 + node_modules/ajv/lib/dotjs/enum.js | 66 + node_modules/ajv/lib/dotjs/format.js | 150 + node_modules/ajv/lib/dotjs/if.js | 104 + node_modules/ajv/lib/dotjs/index.js | 33 + node_modules/ajv/lib/dotjs/items.js | 141 + node_modules/ajv/lib/dotjs/multipleOf.js | 77 + node_modules/ajv/lib/dotjs/not.js | 84 + node_modules/ajv/lib/dotjs/oneOf.js | 73 + node_modules/ajv/lib/dotjs/pattern.js | 75 + node_modules/ajv/lib/dotjs/properties.js | 330 + node_modules/ajv/lib/dotjs/propertyNames.js | 82 + node_modules/ajv/lib/dotjs/ref.js | 124 + node_modules/ajv/lib/dotjs/required.js | 270 + node_modules/ajv/lib/dotjs/uniqueItems.js | 86 + node_modules/ajv/lib/dotjs/validate.js | 494 + node_modules/ajv/lib/keyword.js | 146 + node_modules/ajv/lib/refs/data.json | 17 + .../ajv/lib/refs/json-schema-draft-04.json | 149 + .../ajv/lib/refs/json-schema-draft-06.json | 154 + .../ajv/lib/refs/json-schema-draft-07.json | 168 + .../ajv/lib/refs/json-schema-secure.json | 94 + node_modules/ajv/package.json | 128 + node_modules/ajv/scripts/.eslintrc.yml | 3 + node_modules/ajv/scripts/bundle.js | 61 + node_modules/ajv/scripts/compile-dots.js | 73 + node_modules/ajv/scripts/info | 10 + node_modules/ajv/scripts/prepare-tests | 12 + .../ajv/scripts/publish-built-version | 32 + node_modules/ajv/scripts/travis-gh-pages | 23 + node_modules/ansi-align/CHANGELOG.md | 58 + node_modules/ansi-align/LICENSE | 13 + node_modules/ansi-align/README.md | 80 + node_modules/ansi-align/index.js | 61 + node_modules/ansi-align/package.json | 70 + node_modules/ansi-regex/index.d.ts | 37 + node_modules/ansi-regex/index.js | 10 + node_modules/ansi-regex/license | 9 + node_modules/ansi-regex/package.json | 87 + node_modules/ansi-regex/readme.md | 78 + node_modules/ansi-styles/index.d.ts | 345 + node_modules/ansi-styles/index.js | 163 + node_modules/ansi-styles/license | 9 + node_modules/ansi-styles/package.json | 89 + node_modules/ansi-styles/readme.md | 152 + node_modules/anymatch/LICENSE | 15 + node_modules/anymatch/README.md | 87 + node_modules/anymatch/index.d.ts | 19 + node_modules/anymatch/index.js | 104 + node_modules/anymatch/package.json | 76 + node_modules/array-flatten/LICENSE | 21 + node_modules/array-flatten/README.md | 43 + node_modules/array-flatten/array-flatten.js | 64 + node_modules/array-flatten/package.json | 67 + node_modules/asn1/LICENSE | 19 + node_modules/asn1/README.md | 50 + node_modules/asn1/lib/ber/errors.js | 13 + node_modules/asn1/lib/ber/index.js | 27 + node_modules/asn1/lib/ber/reader.js | 262 + node_modules/asn1/lib/ber/types.js | 36 + node_modules/asn1/lib/ber/writer.js | 317 + node_modules/asn1/lib/index.js | 20 + node_modules/asn1/package.json | 78 + node_modules/assert-plus/AUTHORS | 6 + node_modules/assert-plus/CHANGES.md | 14 + node_modules/assert-plus/README.md | 162 + node_modules/assert-plus/assert.js | 211 + node_modules/assert-plus/package.json | 90 + node_modules/asynckit/LICENSE | 21 + node_modules/asynckit/README.md | 233 + node_modules/asynckit/bench.js | 76 + node_modules/asynckit/index.js | 6 + node_modules/asynckit/lib/abort.js | 29 + node_modules/asynckit/lib/async.js | 34 + node_modules/asynckit/lib/defer.js | 26 + node_modules/asynckit/lib/iterate.js | 75 + .../asynckit/lib/readable_asynckit.js | 91 + .../asynckit/lib/readable_parallel.js | 25 + node_modules/asynckit/lib/readable_serial.js | 25 + .../asynckit/lib/readable_serial_ordered.js | 29 + node_modules/asynckit/lib/state.js | 37 + node_modules/asynckit/lib/streamify.js | 141 + node_modules/asynckit/lib/terminator.js | 29 + node_modules/asynckit/package.json | 94 + node_modules/asynckit/parallel.js | 43 + node_modules/asynckit/serial.js | 17 + node_modules/asynckit/serialOrdered.js | 75 + node_modules/asynckit/stream.js | 21 + node_modules/aws-sign2/LICENSE | 55 + node_modules/aws-sign2/README.md | 4 + node_modules/aws-sign2/index.js | 212 + node_modules/aws-sign2/package.json | 53 + node_modules/aws4/.travis.yml | 9 + node_modules/aws4/LICENSE | 19 + node_modules/aws4/README.md | 523 + node_modules/aws4/aws4.js | 345 + node_modules/aws4/lru.js | 96 + node_modules/aws4/package.json | 108 + .../balanced-match/.github/FUNDING.yml | 2 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 97 + node_modules/balanced-match/index.js | 62 + node_modules/balanced-match/package.json | 76 + node_modules/bcrypt-pbkdf/CONTRIBUTING.md | 13 + node_modules/bcrypt-pbkdf/LICENSE | 66 + node_modules/bcrypt-pbkdf/README.md | 45 + node_modules/bcrypt-pbkdf/index.js | 556 + node_modules/bcrypt-pbkdf/package.json | 47 + .../binary-extensions/binary-extensions.json | 260 + .../binary-extensions.json.d.ts | 3 + node_modules/binary-extensions/index.d.ts | 14 + node_modules/binary-extensions/index.js | 1 + node_modules/binary-extensions/license | 9 + node_modules/binary-extensions/package.json | 70 + node_modules/binary-extensions/readme.md | 41 + node_modules/body-parser/HISTORY.md | 609 + node_modules/body-parser/LICENSE | 23 + node_modules/body-parser/README.md | 443 + node_modules/body-parser/index.js | 157 + node_modules/body-parser/lib/read.js | 181 + node_modules/body-parser/lib/types/json.js | 230 + node_modules/body-parser/lib/types/raw.js | 101 + node_modules/body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 284 + node_modules/body-parser/package.json | 93 + node_modules/boxen/index.d.ts | 200 + node_modules/boxen/index.js | 279 + node_modules/boxen/license | 9 + node_modules/boxen/package.json | 83 + node_modules/boxen/readme.md | 244 + node_modules/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 129 + node_modules/brace-expansion/index.js | 201 + node_modules/brace-expansion/package.json | 75 + node_modules/braces/CHANGELOG.md | 184 + node_modules/braces/LICENSE | 21 + node_modules/braces/README.md | 593 + node_modules/braces/index.js | 170 + node_modules/braces/lib/compile.js | 57 + node_modules/braces/lib/constants.js | 57 + node_modules/braces/lib/expand.js | 113 + node_modules/braces/lib/parse.js | 333 + node_modules/braces/lib/stringify.js | 32 + node_modules/braces/lib/utils.js | 112 + node_modules/braces/package.json | 123 + node_modules/bytes/History.md | 87 + node_modules/bytes/LICENSE | 23 + node_modules/bytes/Readme.md | 126 + node_modules/bytes/index.js | 162 + node_modules/bytes/package.json | 87 + node_modules/cacheable-request/LICENSE | 21 + node_modules/cacheable-request/README.md | 206 + .../node_modules/get-stream/buffer-stream.js | 52 + .../node_modules/get-stream/index.d.ts | 108 + .../node_modules/get-stream/index.js | 60 + .../node_modules/get-stream/license | 9 + .../node_modules/get-stream/package.json | 82 + .../node_modules/get-stream/readme.md | 124 + .../node_modules/lowercase-keys/index.d.ts | 16 + .../node_modules/lowercase-keys/index.js | 10 + .../node_modules/lowercase-keys/license | 9 + .../node_modules/lowercase-keys/package.json | 70 + .../node_modules/lowercase-keys/readme.md | 32 + node_modules/cacheable-request/package.json | 94 + node_modules/cacheable-request/src/index.js | 251 + node_modules/camelcase/index.d.ts | 101 + node_modules/camelcase/index.js | 106 + node_modules/camelcase/license | 9 + node_modules/camelcase/package.json | 76 + node_modules/camelcase/readme.md | 130 + node_modules/caseless/LICENSE | 28 + node_modules/caseless/README.md | 45 + node_modules/caseless/index.js | 67 + node_modules/caseless/package.json | 59 + node_modules/caseless/test.js | 67 + node_modules/chalk/index.d.ts | 415 + node_modules/chalk/license | 9 + .../chalk/node_modules/has-flag/index.d.ts | 39 + .../chalk/node_modules/has-flag/index.js | 8 + .../chalk/node_modules/has-flag/license | 9 + .../chalk/node_modules/has-flag/package.json | 78 + .../chalk/node_modules/has-flag/readme.md | 89 + .../node_modules/supports-color/browser.js | 5 + .../node_modules/supports-color/index.js | 135 + .../chalk/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 85 + .../node_modules/supports-color/readme.md | 76 + node_modules/chalk/package.json | 101 + node_modules/chalk/readme.md | 341 + node_modules/chalk/source/index.js | 229 + node_modules/chalk/source/templates.js | 134 + node_modules/chalk/source/util.js | 39 + node_modules/chokidar/LICENSE | 21 + node_modules/chokidar/README.md | 308 + node_modules/chokidar/index.js | 973 ++ node_modules/chokidar/lib/constants.js | 65 + node_modules/chokidar/lib/fsevents-handler.js | 524 + node_modules/chokidar/lib/nodefs-handler.js | 646 + node_modules/chokidar/package.json | 112 + node_modules/chokidar/types/index.d.ts | 187 + node_modules/ci-info/CHANGELOG.md | 78 + node_modules/ci-info/LICENSE | 21 + node_modules/ci-info/README.md | 108 + node_modules/ci-info/index.js | 66 + node_modules/ci-info/package.json | 65 + node_modules/ci-info/vendors.json | 153 + node_modules/cli-boxes/boxes.json | 58 + node_modules/cli-boxes/index.d.ts | 113 + node_modules/cli-boxes/index.js | 6 + node_modules/cli-boxes/license | 9 + node_modules/cli-boxes/package.json | 74 + node_modules/cli-boxes/readme.md | 105 + node_modules/clone-response/LICENSE | 21 + node_modules/clone-response/README.md | 62 + node_modules/clone-response/package.json | 73 + node_modules/clone-response/src/index.js | 17 + node_modules/color-convert/CHANGELOG.md | 54 + node_modules/color-convert/LICENSE | 21 + node_modules/color-convert/README.md | 68 + node_modules/color-convert/conversions.js | 839 ++ node_modules/color-convert/index.js | 81 + node_modules/color-convert/package.json | 83 + node_modules/color-convert/route.js | 97 + node_modules/color-name/LICENSE | 8 + node_modules/color-name/README.md | 11 + node_modules/color-name/index.js | 152 + node_modules/color-name/package.json | 56 + node_modules/combined-stream/License | 19 + node_modules/combined-stream/Readme.md | 138 + .../combined-stream/lib/combined_stream.js | 208 + node_modules/combined-stream/package.json | 61 + node_modules/combined-stream/yarn.lock | 17 + node_modules/concat-map/.travis.yml | 4 + node_modules/concat-map/LICENSE | 18 + node_modules/concat-map/README.markdown | 62 + node_modules/concat-map/example/map.js | 6 + node_modules/concat-map/index.js | 13 + node_modules/concat-map/package.json | 88 + node_modules/concat-map/test/map.js | 39 + node_modules/configstore/index.js | 109 + node_modules/configstore/license | 25 + node_modules/configstore/package.json | 78 + node_modules/configstore/readme.md | 141 + node_modules/content-disposition/HISTORY.md | 55 + node_modules/content-disposition/LICENSE | 22 + node_modules/content-disposition/README.md | 148 + node_modules/content-disposition/index.js | 458 + node_modules/content-disposition/package.json | 82 + node_modules/content-type/HISTORY.md | 24 + node_modules/content-type/LICENSE | 22 + node_modules/content-type/README.md | 92 + node_modules/content-type/index.js | 222 + node_modules/content-type/package.json | 79 + node_modules/cookie-signature/.npmignore | 4 + node_modules/cookie-signature/History.md | 38 + node_modules/cookie-signature/Readme.md | 42 + node_modules/cookie-signature/index.js | 51 + node_modules/cookie-signature/package.json | 60 + node_modules/cookie/HISTORY.md | 123 + node_modules/cookie/LICENSE | 24 + node_modules/cookie/README.md | 253 + node_modules/cookie/index.js | 198 + node_modules/cookie/package.json | 81 + node_modules/cool-ascii-faces/.npmignore | 3 + node_modules/cool-ascii-faces/cli.js | 14 + .../cool-ascii-faces/collaborators.md | 8 + node_modules/cool-ascii-faces/index.js | 285 + node_modules/cool-ascii-faces/package.json | 53 + node_modules/cool-ascii-faces/readme.md | 209 + node_modules/cool-ascii-faces/test.js | 3 + node_modules/core-util-is/LICENSE | 19 + node_modules/core-util-is/README.md | 3 + node_modules/core-util-is/float.patch | 604 + node_modules/core-util-is/lib/util.js | 107 + node_modules/core-util-is/package.json | 65 + node_modules/core-util-is/test.js | 68 + node_modules/crypto-random-string/index.d.ts | 17 + node_modules/crypto-random-string/index.js | 10 + node_modules/crypto-random-string/license | 9 + .../crypto-random-string/package.json | 72 + node_modules/crypto-random-string/readme.md | 51 + node_modules/dashdash/CHANGES.md | 364 + node_modules/dashdash/LICENSE.txt | 24 + node_modules/dashdash/README.md | 574 + .../dashdash/etc/dashdash.bash_completion.in | 389 + node_modules/dashdash/lib/dashdash.js | 1055 ++ node_modules/dashdash/package.json | 70 + node_modules/debug/.coveralls.yml | 1 + node_modules/debug/.eslintrc | 11 + node_modules/debug/.npmignore | 9 + node_modules/debug/.travis.yml | 14 + node_modules/debug/CHANGELOG.md | 362 + node_modules/debug/LICENSE | 19 + node_modules/debug/Makefile | 50 + node_modules/debug/README.md | 312 + node_modules/debug/component.json | 19 + node_modules/debug/karma.conf.js | 70 + node_modules/debug/node.js | 1 + node_modules/debug/package.json | 94 + node_modules/debug/src/browser.js | 185 + node_modules/debug/src/debug.js | 202 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/inspector-log.js | 15 + node_modules/debug/src/node.js | 248 + node_modules/decompress-response/index.js | 29 + node_modules/decompress-response/license | 21 + node_modules/decompress-response/package.json | 85 + node_modules/decompress-response/readme.md | 31 + node_modules/deep-extend/CHANGELOG.md | 46 + node_modules/deep-extend/LICENSE | 20 + node_modules/deep-extend/README.md | 91 + node_modules/deep-extend/index.js | 1 + node_modules/deep-extend/lib/deep-extend.js | 150 + node_modules/deep-extend/package.json | 92 + node_modules/defer-to-connect/LICENSE | 21 + node_modules/defer-to-connect/README.md | 38 + node_modules/defer-to-connect/dist/index.d.ts | 10 + node_modules/defer-to-connect/dist/index.js | 45 + node_modules/defer-to-connect/package.json | 101 + node_modules/delayed-stream/.npmignore | 1 + node_modules/delayed-stream/License | 19 + node_modules/delayed-stream/Makefile | 7 + node_modules/delayed-stream/Readme.md | 141 + .../delayed-stream/lib/delayed_stream.js | 107 + node_modules/delayed-stream/package.json | 65 + node_modules/depd/History.md | 96 + node_modules/depd/LICENSE | 22 + node_modules/depd/Readme.md | 280 + node_modules/depd/index.js | 522 + node_modules/depd/lib/browser/index.js | 77 + .../depd/lib/compat/callsite-tostring.js | 103 + .../depd/lib/compat/event-listener-count.js | 22 + node_modules/depd/lib/compat/index.js | 79 + node_modules/depd/package.json | 82 + node_modules/destroy/LICENSE | 22 + node_modules/destroy/README.md | 60 + node_modules/destroy/index.js | 75 + node_modules/destroy/package.json | 74 + node_modules/dot-prop/index.d.ts | 101 + node_modules/dot-prop/index.js | 142 + node_modules/dot-prop/license | 9 + node_modules/dot-prop/package.json | 77 + node_modules/dot-prop/readme.md | 117 + node_modules/duplexer3/LICENSE.md | 26 + node_modules/duplexer3/README.md | 115 + node_modules/duplexer3/index.js | 76 + node_modules/duplexer3/package.json | 64 + node_modules/ecc-jsbn/LICENSE | 21 + node_modules/ecc-jsbn/README.md | 8 + node_modules/ecc-jsbn/index.js | 58 + node_modules/ecc-jsbn/lib/LICENSE-jsbn | 40 + node_modules/ecc-jsbn/lib/ec.js | 561 + node_modules/ecc-jsbn/lib/sec.js | 170 + node_modules/ecc-jsbn/package.json | 68 + node_modules/ecc-jsbn/test.js | 14 + node_modules/ee-first/LICENSE | 22 + node_modules/ee-first/README.md | 80 + node_modules/ee-first/index.js | 95 + node_modules/ee-first/package.json | 66 + node_modules/ejs/LICENSE | 202 + node_modules/ejs/README.md | 273 + node_modules/ejs/ejs.js | 1686 +++ node_modules/ejs/ejs.min.js | 1 + node_modules/ejs/jakefile.js | 74 + node_modules/ejs/lib/ejs.js | 980 ++ node_modules/ejs/lib/utils.js | 167 + node_modules/ejs/package.json | 69 + node_modules/ejs/postinstall.js | 17 + node_modules/emoji-regex/LICENSE-MIT.txt | 20 + node_modules/emoji-regex/README.md | 73 + node_modules/emoji-regex/es2015/index.js | 6 + node_modules/emoji-regex/es2015/text.js | 6 + node_modules/emoji-regex/index.d.ts | 23 + node_modules/emoji-regex/index.js | 6 + node_modules/emoji-regex/package.json | 77 + node_modules/emoji-regex/text.js | 6 + node_modules/encodeurl/HISTORY.md | 14 + node_modules/encodeurl/LICENSE | 22 + node_modules/encodeurl/README.md | 128 + node_modules/encodeurl/index.js | 60 + node_modules/encodeurl/package.json | 81 + node_modules/end-of-stream/LICENSE | 21 + node_modules/end-of-stream/README.md | 54 + node_modules/end-of-stream/index.js | 94 + node_modules/end-of-stream/package.json | 65 + node_modules/escape-goat/index.d.ts | 62 + node_modules/escape-goat/index.js | 33 + node_modules/escape-goat/license | 9 + node_modules/escape-goat/package.json | 77 + node_modules/escape-goat/readme.md | 76 + node_modules/escape-html/LICENSE | 24 + node_modules/escape-html/Readme.md | 43 + node_modules/escape-html/index.js | 78 + node_modules/escape-html/package.json | 62 + node_modules/etag/HISTORY.md | 83 + node_modules/etag/LICENSE | 22 + node_modules/etag/README.md | 159 + node_modules/etag/index.js | 131 + node_modules/etag/package.json | 89 + node_modules/express/History.md | 3477 ++++++ node_modules/express/LICENSE | 24 + node_modules/express/Readme.md | 155 + node_modules/express/index.js | 11 + node_modules/express/lib/application.js | 644 + node_modules/express/lib/express.js | 116 + node_modules/express/lib/middleware/init.js | 43 + node_modules/express/lib/middleware/query.js | 47 + node_modules/express/lib/request.js | 525 + node_modules/express/lib/response.js | 1142 ++ node_modules/express/lib/router/index.js | 662 + node_modules/express/lib/router/layer.js | 181 + node_modules/express/lib/router/route.js | 216 + node_modules/express/lib/utils.js | 306 + node_modules/express/lib/view.js | 182 + node_modules/express/package.json | 154 + node_modules/extend/.editorconfig | 20 + node_modules/extend/.eslintrc | 17 + node_modules/extend/.jscs.json | 175 + node_modules/extend/.travis.yml | 230 + node_modules/extend/CHANGELOG.md | 83 + node_modules/extend/LICENSE | 23 + node_modules/extend/README.md | 81 + node_modules/extend/component.json | 32 + node_modules/extend/index.js | 117 + node_modules/extend/package.json | 78 + node_modules/extsprintf/.gitmodules | 0 node_modules/extsprintf/.npmignore | 2 + node_modules/extsprintf/LICENSE | 19 + node_modules/extsprintf/Makefile | 24 + node_modules/extsprintf/Makefile.targ | 285 + node_modules/extsprintf/README.md | 46 + node_modules/extsprintf/jsl.node.conf | 137 + node_modules/extsprintf/lib/extsprintf.js | 183 + node_modules/extsprintf/package.json | 47 + node_modules/fast-deep-equal/LICENSE | 21 + node_modules/fast-deep-equal/README.md | 96 + node_modules/fast-deep-equal/es6/index.d.ts | 2 + node_modules/fast-deep-equal/es6/index.js | 72 + node_modules/fast-deep-equal/es6/react.d.ts | 2 + node_modules/fast-deep-equal/es6/react.js | 79 + node_modules/fast-deep-equal/index.d.ts | 4 + node_modules/fast-deep-equal/index.js | 46 + node_modules/fast-deep-equal/package.json | 91 + node_modules/fast-deep-equal/react.d.ts | 2 + node_modules/fast-deep-equal/react.js | 53 + .../fast-json-stable-stringify/.eslintrc.yml | 26 + .../.github/FUNDING.yml | 1 + .../fast-json-stable-stringify/.travis.yml | 8 + .../fast-json-stable-stringify/LICENSE | 21 + .../fast-json-stable-stringify/README.md | 131 + .../benchmark/index.js | 31 + .../benchmark/test.json | 137 + .../example/key_cmp.js | 7 + .../example/nested.js | 3 + .../fast-json-stable-stringify/example/str.js | 3 + .../example/value_cmp.js | 7 + .../fast-json-stable-stringify/index.d.ts | 4 + .../fast-json-stable-stringify/index.js | 59 + .../fast-json-stable-stringify/package.json | 83 + .../fast-json-stable-stringify/test/cmp.js | 13 + .../fast-json-stable-stringify/test/nested.js | 44 + .../fast-json-stable-stringify/test/str.js | 46 + .../test/to-json.js | 22 + node_modules/fill-range/LICENSE | 21 + node_modules/fill-range/README.md | 237 + node_modules/fill-range/index.js | 249 + node_modules/fill-range/package.json | 114 + node_modules/finalhandler/HISTORY.md | 187 + node_modules/finalhandler/LICENSE | 22 + node_modules/finalhandler/README.md | 148 + node_modules/finalhandler/index.js | 331 + node_modules/finalhandler/package.json | 83 + node_modules/forever-agent/LICENSE | 55 + node_modules/forever-agent/README.md | 4 + node_modules/forever-agent/index.js | 138 + node_modules/forever-agent/package.json | 53 + node_modules/form-data/License | 19 + node_modules/form-data/README.md | 234 + node_modules/form-data/README.md.bak | 234 + node_modules/form-data/lib/browser.js | 2 + node_modules/form-data/lib/form_data.js | 457 + node_modules/form-data/lib/populate.js | 10 + node_modules/form-data/package.json | 101 + node_modules/form-data/yarn.lock | 2662 ++++ node_modules/forwarded/HISTORY.md | 21 + node_modules/forwarded/LICENSE | 22 + node_modules/forwarded/README.md | 57 + node_modules/forwarded/index.js | 90 + node_modules/forwarded/package.json | 80 + node_modules/fresh/HISTORY.md | 70 + node_modules/fresh/LICENSE | 23 + node_modules/fresh/README.md | 119 + node_modules/fresh/index.js | 137 + node_modules/fresh/package.json | 93 + node_modules/get-stream/buffer-stream.js | 51 + node_modules/get-stream/index.js | 50 + node_modules/get-stream/license | 9 + node_modules/get-stream/package.json | 78 + node_modules/get-stream/readme.md | 123 + node_modules/getpass/.npmignore | 8 + node_modules/getpass/.travis.yml | 9 + node_modules/getpass/LICENSE | 18 + node_modules/getpass/README.md | 32 + node_modules/getpass/lib/index.js | 123 + node_modules/getpass/package.json | 53 + node_modules/glob-parent/CHANGELOG.md | 110 + node_modules/glob-parent/LICENSE | 15 + node_modules/glob-parent/README.md | 137 + node_modules/glob-parent/index.js | 42 + node_modules/glob-parent/package.json | 90 + node_modules/global-dirs/index.d.ts | 60 + node_modules/global-dirs/index.js | 120 + node_modules/global-dirs/license | 9 + node_modules/global-dirs/package.json | 88 + node_modules/global-dirs/readme.md | 72 + node_modules/got/license | 9 + node_modules/got/package.json | 106 + node_modules/got/readme.md | 1237 ++ node_modules/got/source/as-promise.js | 108 + node_modules/got/source/as-stream.js | 93 + node_modules/got/source/create.js | 79 + node_modules/got/source/errors.js | 107 + node_modules/got/source/get-response.js | 31 + node_modules/got/source/index.js | 60 + node_modules/got/source/known-hook-events.js | 10 + node_modules/got/source/merge.js | 73 + .../got/source/normalize-arguments.js | 265 + node_modules/got/source/progress.js | 96 + .../got/source/request-as-event-emitter.js | 312 + node_modules/got/source/utils/deep-freeze.js | 12 + .../got/source/utils/get-body-size.js | 32 + node_modules/got/source/utils/is-form-data.js | 4 + node_modules/got/source/utils/timed-out.js | 160 + .../got/source/utils/url-to-options.js | 25 + node_modules/graceful-fs/LICENSE | 15 + node_modules/graceful-fs/README.md | 143 + node_modules/graceful-fs/clone.js | 23 + node_modules/graceful-fs/graceful-fs.js | 429 + node_modules/graceful-fs/legacy-streams.js | 118 + node_modules/graceful-fs/package.json | 79 + node_modules/graceful-fs/polyfills.js | 346 + node_modules/har-schema/LICENSE | 13 + node_modules/har-schema/README.md | 49 + node_modules/har-schema/lib/afterRequest.json | 30 + .../har-schema/lib/beforeRequest.json | 30 + node_modules/har-schema/lib/browser.json | 20 + node_modules/har-schema/lib/cache.json | 21 + node_modules/har-schema/lib/content.json | 29 + node_modules/har-schema/lib/cookie.json | 36 + node_modules/har-schema/lib/creator.json | 20 + node_modules/har-schema/lib/entry.json | 53 + node_modules/har-schema/lib/har.json | 13 + node_modules/har-schema/lib/header.json | 20 + node_modules/har-schema/lib/index.js | 22 + node_modules/har-schema/lib/log.json | 36 + node_modules/har-schema/lib/page.json | 32 + node_modules/har-schema/lib/pageTimings.json | 18 + node_modules/har-schema/lib/postData.json | 43 + node_modules/har-schema/lib/query.json | 20 + node_modules/har-schema/lib/request.json | 57 + node_modules/har-schema/lib/response.json | 54 + node_modules/har-schema/lib/timings.json | 42 + node_modules/har-schema/package.json | 89 + node_modules/har-validator/LICENSE | 9 + node_modules/har-validator/README.md | 37 + node_modules/har-validator/lib/async.js | 105 + node_modules/har-validator/lib/error.js | 17 + node_modules/har-validator/lib/promise.js | 102 + node_modules/har-validator/package.json | 79 + node_modules/has-flag/index.js | 8 + node_modules/has-flag/license | 9 + node_modules/has-flag/package.json | 76 + node_modules/has-flag/readme.md | 70 + node_modules/has-yarn/index.d.ts | 16 + node_modules/has-yarn/index.js | 9 + node_modules/has-yarn/license | 9 + node_modules/has-yarn/package.json | 71 + node_modules/has-yarn/readme.md | 60 + node_modules/http-cache-semantics/LICENSE | 9 + node_modules/http-cache-semantics/README.md | 203 + node_modules/http-cache-semantics/index.js | 673 + .../http-cache-semantics/package.json | 60 + node_modules/http-errors/HISTORY.md | 149 + node_modules/http-errors/LICENSE | 23 + node_modules/http-errors/README.md | 163 + node_modules/http-errors/index.js | 266 + node_modules/http-errors/package.json | 96 + node_modules/http-signature/.dir-locals.el | 6 + node_modules/http-signature/.npmignore | 7 + node_modules/http-signature/CHANGES.md | 46 + node_modules/http-signature/LICENSE | 18 + node_modules/http-signature/README.md | 79 + node_modules/http-signature/http_signing.md | 363 + node_modules/http-signature/lib/index.js | 29 + node_modules/http-signature/lib/parser.js | 315 + node_modules/http-signature/lib/signer.js | 401 + node_modules/http-signature/lib/utils.js | 112 + node_modules/http-signature/lib/verify.js | 88 + node_modules/http-signature/package.json | 80 + node_modules/iconv-lite/Changelog.md | 162 + node_modules/iconv-lite/LICENSE | 21 + node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 + .../iconv-lite/encodings/dbcs-data.js | 176 + node_modules/iconv-lite/encodings/index.js | 22 + node_modules/iconv-lite/encodings/internal.js | 188 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 174 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + node_modules/iconv-lite/encodings/utf16.js | 177 + node_modules/iconv-lite/encodings/utf7.js | 290 + node_modules/iconv-lite/lib/bom-handling.js | 52 + node_modules/iconv-lite/lib/extend-node.js | 217 + node_modules/iconv-lite/lib/index.d.ts | 24 + node_modules/iconv-lite/lib/index.js | 153 + node_modules/iconv-lite/lib/streams.js | 121 + node_modules/iconv-lite/package.json | 80 + node_modules/ignore-by-default/LICENSE | 14 + node_modules/ignore-by-default/README.md | 26 + node_modules/ignore-by-default/index.js | 12 + node_modules/ignore-by-default/package.json | 62 + node_modules/import-lazy/index.js | 53 + node_modules/import-lazy/license | 21 + node_modules/import-lazy/package.json | 76 + node_modules/import-lazy/readme.md | 64 + node_modules/imurmurhash/README.md | 122 + node_modules/imurmurhash/imurmurhash.js | 138 + node_modules/imurmurhash/imurmurhash.min.js | 12 + node_modules/imurmurhash/package.json | 63 + node_modules/inherits/LICENSE | 16 + node_modules/inherits/README.md | 42 + node_modules/inherits/inherits.js | 7 + node_modules/inherits/inherits_browser.js | 23 + node_modules/inherits/package.json | 64 + node_modules/ini/LICENSE | 15 + node_modules/ini/README.md | 102 + node_modules/ini/ini.js | 206 + node_modules/ini/package.json | 69 + node_modules/ipaddr.js/LICENSE | 19 + node_modules/ipaddr.js/README.md | 233 + node_modules/ipaddr.js/ipaddr.min.js | 1 + node_modules/ipaddr.js/lib/ipaddr.js | 673 + node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + node_modules/ipaddr.js/package.json | 70 + node_modules/is-binary-path/index.d.ts | 17 + node_modules/is-binary-path/index.js | 7 + node_modules/is-binary-path/license | 9 + node_modules/is-binary-path/package.json | 72 + node_modules/is-binary-path/readme.md | 34 + node_modules/is-ci/CHANGELOG.md | 14 + node_modules/is-ci/LICENSE | 21 + node_modules/is-ci/README.md | 50 + node_modules/is-ci/bin.js | 4 + node_modules/is-ci/index.js | 3 + node_modules/is-ci/package.json | 69 + node_modules/is-extglob/LICENSE | 21 + node_modules/is-extglob/README.md | 107 + node_modules/is-extglob/index.js | 20 + node_modules/is-extglob/package.json | 100 + .../is-fullwidth-code-point/index.d.ts | 17 + node_modules/is-fullwidth-code-point/index.js | 50 + node_modules/is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 74 + .../is-fullwidth-code-point/readme.md | 39 + node_modules/is-glob/LICENSE | 21 + node_modules/is-glob/README.md | 206 + node_modules/is-glob/index.js | 150 + node_modules/is-glob/package.json | 122 + node_modules/is-installed-globally/index.d.ts | 19 + node_modules/is-installed-globally/index.js | 15 + node_modules/is-installed-globally/license | 9 + .../is-installed-globally/package.json | 86 + node_modules/is-installed-globally/readme.md | 31 + node_modules/is-npm/index.d.ts | 41 + node_modules/is-npm/index.js | 11 + node_modules/is-npm/license | 9 + node_modules/is-npm/package.json | 71 + node_modules/is-npm/readme.md | 60 + node_modules/is-number/LICENSE | 21 + node_modules/is-number/README.md | 187 + node_modules/is-number/index.js | 18 + node_modules/is-number/package.json | 122 + node_modules/is-obj/index.d.ts | 22 + node_modules/is-obj/index.js | 6 + node_modules/is-obj/license | 9 + node_modules/is-obj/package.json | 66 + node_modules/is-obj/readme.md | 39 + node_modules/is-path-inside/index.d.ts | 27 + node_modules/is-path-inside/index.js | 12 + node_modules/is-path-inside/license | 9 + node_modules/is-path-inside/package.json | 68 + node_modules/is-path-inside/readme.md | 63 + node_modules/is-typedarray/LICENSE.md | 18 + node_modules/is-typedarray/README.md | 16 + node_modules/is-typedarray/index.js | 41 + node_modules/is-typedarray/package.json | 62 + node_modules/is-typedarray/test.js | 34 + node_modules/is-yarn-global/.travis.yml | 4 + node_modules/is-yarn-global/LICENSE | 21 + node_modules/is-yarn-global/README.md | 28 + node_modules/is-yarn-global/index.js | 12 + node_modules/is-yarn-global/package.json | 50 + node_modules/isarray/.npmignore | 1 + node_modules/isarray/.travis.yml | 4 + node_modules/isarray/Makefile | 6 + node_modules/isarray/README.md | 60 + node_modules/isarray/component.json | 19 + node_modules/isarray/index.js | 5 + node_modules/isarray/package.json | 73 + node_modules/isarray/test.js | 20 + node_modules/isstream/.jshintrc | 59 + node_modules/isstream/.npmignore | 1 + node_modules/isstream/.travis.yml | 12 + node_modules/isstream/LICENSE.md | 11 + node_modules/isstream/README.md | 66 + node_modules/isstream/isstream.js | 27 + node_modules/isstream/package.json | 64 + node_modules/isstream/test.js | 168 + node_modules/jsbn/.npmignore | 2 + node_modules/jsbn/LICENSE | 40 + node_modules/jsbn/README.md | 175 + node_modules/jsbn/example.html | 12 + node_modules/jsbn/example.js | 3 + node_modules/jsbn/index.js | 1357 ++ node_modules/jsbn/package.json | 56 + node_modules/json-buffer/.npmignore | 3 + node_modules/json-buffer/.travis.yml | 3 + node_modules/json-buffer/LICENSE | 22 + node_modules/json-buffer/README.md | 24 + node_modules/json-buffer/index.js | 58 + node_modules/json-buffer/package.json | 66 + node_modules/json-buffer/test/index.js | 63 + .../json-schema-traverse/.eslintrc.yml | 27 + node_modules/json-schema-traverse/.travis.yml | 8 + node_modules/json-schema-traverse/LICENSE | 21 + node_modules/json-schema-traverse/README.md | 83 + node_modules/json-schema-traverse/index.js | 89 + .../json-schema-traverse/package.json | 73 + .../json-schema-traverse/spec/.eslintrc.yml | 6 + .../spec/fixtures/schema.js | 125 + .../json-schema-traverse/spec/index.spec.js | 171 + node_modules/json-schema/README.md | 5 + .../json-schema/draft-00/hyper-schema | 68 + node_modules/json-schema/draft-00/json-ref | 26 + node_modules/json-schema/draft-00/links | 33 + node_modules/json-schema/draft-00/schema | 155 + .../json-schema/draft-01/hyper-schema | 68 + node_modules/json-schema/draft-01/json-ref | 26 + node_modules/json-schema/draft-01/links | 33 + node_modules/json-schema/draft-01/schema | 155 + .../json-schema/draft-02/hyper-schema | 68 + node_modules/json-schema/draft-02/json-ref | 26 + node_modules/json-schema/draft-02/links | 35 + node_modules/json-schema/draft-02/schema | 166 + .../json-schema/draft-03/examples/address | 20 + .../json-schema/draft-03/examples/calendar | 53 + .../json-schema/draft-03/examples/card | 105 + .../json-schema/draft-03/examples/geo | 8 + .../json-schema/draft-03/examples/interfaces | 23 + .../json-schema/draft-03/hyper-schema | 60 + node_modules/json-schema/draft-03/json-ref | 26 + node_modules/json-schema/draft-03/links | 35 + node_modules/json-schema/draft-03/schema | 174 + .../json-schema/draft-04/hyper-schema | 60 + node_modules/json-schema/draft-04/links | 41 + node_modules/json-schema/draft-04/schema | 189 + .../json-schema/draft-zyp-json-schema-03.xml | 1120 ++ .../json-schema/draft-zyp-json-schema-04.xml | 1072 ++ node_modules/json-schema/lib/links.js | 66 + node_modules/json-schema/lib/validate.js | 273 + node_modules/json-schema/package.json | 74 + node_modules/json-schema/test/tests.js | 95 + node_modules/json-stringify-safe/.npmignore | 1 + node_modules/json-stringify-safe/CHANGELOG.md | 14 + node_modules/json-stringify-safe/LICENSE | 15 + node_modules/json-stringify-safe/Makefile | 35 + node_modules/json-stringify-safe/README.md | 52 + node_modules/json-stringify-safe/package.json | 69 + node_modules/json-stringify-safe/stringify.js | 27 + .../json-stringify-safe/test/mocha.opts | 2 + .../test/stringify_test.js | 246 + node_modules/jsprim/CHANGES.md | 49 + node_modules/jsprim/CONTRIBUTING.md | 19 + node_modules/jsprim/LICENSE | 19 + node_modules/jsprim/README.md | 287 + node_modules/jsprim/lib/jsprim.js | 735 ++ node_modules/jsprim/package.json | 52 + node_modules/keyv/LICENSE | 21 + node_modules/keyv/README.md | 276 + node_modules/keyv/package.json | 78 + node_modules/keyv/src/index.js | 103 + node_modules/latest-version/index.d.ts | 42 + node_modules/latest-version/index.js | 11 + node_modules/latest-version/license | 9 + node_modules/latest-version/package.json | 74 + node_modules/latest-version/readme.md | 42 + node_modules/lowercase-keys/index.js | 11 + node_modules/lowercase-keys/license | 21 + node_modules/lowercase-keys/package.json | 68 + node_modules/lowercase-keys/readme.md | 33 + node_modules/lru-cache/LICENSE | 15 + node_modules/lru-cache/README.md | 166 + node_modules/lru-cache/index.js | 334 + node_modules/lru-cache/package.json | 69 + node_modules/make-dir/index.d.ts | 66 + node_modules/make-dir/index.js | 156 + node_modules/make-dir/license | 9 + .../make-dir/node_modules/.bin/semver | 15 + .../make-dir/node_modules/.bin/semver.cmd | 17 + .../make-dir/node_modules/.bin/semver.ps1 | 18 + .../make-dir/node_modules/semver/CHANGELOG.md | 70 + .../make-dir/node_modules/semver/LICENSE | 15 + .../make-dir/node_modules/semver/README.md | 443 + .../node_modules/semver/bin/semver.js | 174 + .../make-dir/node_modules/semver/package.json | 60 + .../make-dir/node_modules/semver/range.bnf | 16 + .../make-dir/node_modules/semver/semver.js | 1596 +++ node_modules/make-dir/package.json | 91 + node_modules/make-dir/readme.md | 125 + node_modules/media-typer/HISTORY.md | 22 + node_modules/media-typer/LICENSE | 22 + node_modules/media-typer/README.md | 81 + node_modules/media-typer/index.js | 270 + node_modules/media-typer/package.json | 64 + node_modules/merge-descriptors/HISTORY.md | 21 + node_modules/merge-descriptors/LICENSE | 23 + node_modules/merge-descriptors/README.md | 48 + node_modules/merge-descriptors/index.js | 60 + node_modules/merge-descriptors/package.json | 72 + node_modules/methods/HISTORY.md | 29 + node_modules/methods/LICENSE | 24 + node_modules/methods/README.md | 51 + node_modules/methods/index.js | 69 + node_modules/methods/package.json | 82 + node_modules/mime-db/HISTORY.md | 439 + node_modules/mime-db/LICENSE | 22 + node_modules/mime-db/README.md | 100 + node_modules/mime-db/db.json | 8060 ++++++++++++ node_modules/mime-db/index.js | 11 + node_modules/mime-db/package.json | 104 + node_modules/mime-types/HISTORY.md | 325 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 113 + node_modules/mime-types/index.js | 188 + node_modules/mime-types/package.json | 92 + node_modules/mime/.npmignore | 0 node_modules/mime/CHANGELOG.md | 164 + node_modules/mime/LICENSE | 21 + node_modules/mime/README.md | 90 + node_modules/mime/cli.js | 8 + node_modules/mime/mime.js | 108 + node_modules/mime/package.json | 76 + node_modules/mime/src/build.js | 53 + node_modules/mime/src/test.js | 60 + node_modules/mime/types.json | 1 + node_modules/mimic-response/index.js | 32 + node_modules/mimic-response/license | 9 + node_modules/mimic-response/package.json | 71 + node_modules/mimic-response/readme.md | 54 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 209 + node_modules/minimatch/minimatch.js | 923 ++ node_modules/minimatch/package.json | 63 + node_modules/minimist/.travis.yml | 8 + node_modules/minimist/LICENSE | 18 + node_modules/minimist/example/parse.js | 2 + node_modules/minimist/index.js | 245 + node_modules/minimist/package.json | 73 + node_modules/minimist/readme.markdown | 95 + node_modules/minimist/test/all_bool.js | 32 + node_modules/minimist/test/bool.js | 178 + node_modules/minimist/test/dash.js | 31 + node_modules/minimist/test/default_bool.js | 35 + node_modules/minimist/test/dotted.js | 22 + node_modules/minimist/test/kv_short.js | 16 + node_modules/minimist/test/long.js | 31 + node_modules/minimist/test/num.js | 36 + node_modules/minimist/test/parse.js | 197 + node_modules/minimist/test/parse_modified.js | 9 + node_modules/minimist/test/proto.js | 44 + node_modules/minimist/test/short.js | 67 + node_modules/minimist/test/stop_early.js | 15 + node_modules/minimist/test/unknown.js | 102 + node_modules/minimist/test/whitespace.js | 8 + node_modules/ms/index.js | 152 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 72 + node_modules/ms/readme.md | 51 + node_modules/negotiator/HISTORY.md | 103 + node_modules/negotiator/LICENSE | 24 + node_modules/negotiator/README.md | 203 + node_modules/negotiator/index.js | 124 + node_modules/negotiator/lib/charset.js | 169 + node_modules/negotiator/lib/encoding.js | 184 + node_modules/negotiator/lib/language.js | 179 + node_modules/negotiator/lib/mediaType.js | 294 + node_modules/negotiator/package.json | 87 + node_modules/nodemon/.eslintrc.json | 19 + node_modules/nodemon/.jshintrc | 16 + node_modules/nodemon/.releaserc | 3 + node_modules/nodemon/.travis.yml | 17 + node_modules/nodemon/LICENSE | 21 + node_modules/nodemon/README.md | 379 + node_modules/nodemon/bin/nodemon.js | 16 + node_modules/nodemon/bin/postinstall.js | 31 + node_modules/nodemon/bin/windows-kill.exe | Bin 0 -> 80384 bytes node_modules/nodemon/commitlint.config.js | 3 + node_modules/nodemon/doc/cli/authors.txt | 8 + node_modules/nodemon/doc/cli/config.txt | 44 + node_modules/nodemon/doc/cli/help.txt | 29 + node_modules/nodemon/doc/cli/logo.txt | 20 + node_modules/nodemon/doc/cli/options.txt | 36 + node_modules/nodemon/doc/cli/topics.txt | 8 + node_modules/nodemon/doc/cli/usage.txt | 3 + node_modules/nodemon/doc/cli/whoami.txt | 9 + node_modules/nodemon/lib/cli/index.js | 49 + node_modules/nodemon/lib/cli/parse.js | 230 + node_modules/nodemon/lib/config/command.js | 43 + node_modules/nodemon/lib/config/defaults.js | 28 + node_modules/nodemon/lib/config/exec.js | 225 + node_modules/nodemon/lib/config/index.js | 93 + node_modules/nodemon/lib/config/load.js | 256 + node_modules/nodemon/lib/help/index.js | 27 + node_modules/nodemon/lib/index.js | 1 + node_modules/nodemon/lib/monitor/index.js | 4 + node_modules/nodemon/lib/monitor/match.js | 276 + node_modules/nodemon/lib/monitor/run.js | 541 + node_modules/nodemon/lib/monitor/signals.js | 34 + node_modules/nodemon/lib/monitor/watch.js | 239 + node_modules/nodemon/lib/nodemon.js | 311 + node_modules/nodemon/lib/rules/add.js | 89 + node_modules/nodemon/lib/rules/index.js | 53 + node_modules/nodemon/lib/rules/parse.js | 43 + node_modules/nodemon/lib/spawn.js | 73 + node_modules/nodemon/lib/utils/bus.js | 44 + node_modules/nodemon/lib/utils/clone.js | 40 + node_modules/nodemon/lib/utils/colour.js | 26 + node_modules/nodemon/lib/utils/index.js | 102 + node_modules/nodemon/lib/utils/log.js | 82 + node_modules/nodemon/lib/utils/merge.js | 47 + node_modules/nodemon/lib/version.js | 100 + .../nodemon/node_modules/debug/CHANGELOG.md | 395 + .../nodemon/node_modules/debug/LICENSE | 19 + .../nodemon/node_modules/debug/README.md | 437 + .../nodemon/node_modules/debug/node.js | 1 + .../nodemon/node_modules/debug/package.json | 90 + .../nodemon/node_modules/debug/src/browser.js | 180 + .../nodemon/node_modules/debug/src/common.js | 249 + .../nodemon/node_modules/debug/src/index.js | 12 + .../nodemon/node_modules/debug/src/node.js | 177 + node_modules/nodemon/node_modules/ms/index.js | 162 + .../nodemon/node_modules/ms/license.md | 21 + .../nodemon/node_modules/ms/package.json | 70 + .../nodemon/node_modules/ms/readme.md | 59 + node_modules/nodemon/package.json | 105 + node_modules/nopt/.npmignore | 0 node_modules/nopt/LICENSE | 23 + node_modules/nopt/README.md | 208 + node_modules/nopt/bin/nopt.js | 44 + node_modules/nopt/examples/my-program.js | 30 + node_modules/nopt/lib/nopt.js | 552 + node_modules/nopt/package.json | 60 + node_modules/normalize-path/LICENSE | 21 + node_modules/normalize-path/README.md | 127 + node_modules/normalize-path/index.js | 35 + node_modules/normalize-path/package.json | 115 + node_modules/normalize-url/index.d.ts | 216 + node_modules/normalize-url/index.js | 221 + node_modules/normalize-url/license | 9 + node_modules/normalize-url/package.json | 76 + node_modules/normalize-url/readme.md | 232 + node_modules/oauth-sign/LICENSE | 55 + node_modules/oauth-sign/README.md | 11 + node_modules/oauth-sign/index.js | 146 + node_modules/oauth-sign/package.json | 59 + node_modules/on-finished/HISTORY.md | 88 + node_modules/on-finished/LICENSE | 23 + node_modules/on-finished/README.md | 154 + node_modules/on-finished/index.js | 196 + node_modules/on-finished/package.json | 76 + node_modules/once/LICENSE | 15 + node_modules/once/README.md | 79 + node_modules/once/once.js | 42 + node_modules/once/package.json | 67 + node_modules/p-cancelable/index.d.ts | 168 + node_modules/p-cancelable/index.js | 103 + node_modules/p-cancelable/license | 9 + node_modules/p-cancelable/package.json | 81 + node_modules/p-cancelable/readme.md | 155 + node_modules/package-json/index.d.ts | 199 + node_modules/package-json/index.js | 115 + node_modules/package-json/license | 9 + .../package-json/node_modules/.bin/semver | 15 + .../package-json/node_modules/.bin/semver.cmd | 17 + .../package-json/node_modules/.bin/semver.ps1 | 18 + .../node_modules/semver/CHANGELOG.md | 70 + .../package-json/node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 443 + .../node_modules/semver/bin/semver.js | 174 + .../node_modules/semver/package.json | 60 + .../node_modules/semver/range.bnf | 16 + .../node_modules/semver/semver.js | 1596 +++ node_modules/package-json/package.json | 78 + node_modules/package-json/readme.md | 118 + node_modules/parseurl/HISTORY.md | 58 + node_modules/parseurl/LICENSE | 24 + node_modules/parseurl/README.md | 133 + node_modules/parseurl/index.js | 158 + node_modules/parseurl/package.json | 84 + node_modules/path-to-regexp/History.md | 36 + node_modules/path-to-regexp/LICENSE | 21 + node_modules/path-to-regexp/Readme.md | 35 + node_modules/path-to-regexp/index.js | 129 + node_modules/path-to-regexp/package.json | 62 + node_modules/performance-now/.npmignore | 1 + node_modules/performance-now/.tm_properties | 7 + node_modules/performance-now/.travis.yml | 6 + node_modules/performance-now/README.md | 30 + .../performance-now/lib/performance-now.js | 36 + .../lib/performance-now.js.map | 10 + node_modules/performance-now/license.txt | 7 + node_modules/performance-now/package.json | 68 + node_modules/performance-now/src/index.d.ts | 8 + .../src/performance-now.coffee | 17 + node_modules/performance-now/test/mocha.opts | 3 + .../test/performance-now.coffee | 43 + .../performance-now/test/scripts.coffee | 27 + .../test/scripts/delayed-call.coffee | 11 + .../test/scripts/delayed-require.coffee | 12 + .../test/scripts/difference.coffee | 6 + .../test/scripts/initial-value.coffee | 10 + node_modules/picomatch/CHANGELOG.md | 126 + node_modules/picomatch/LICENSE | 21 + node_modules/picomatch/README.md | 707 ++ node_modules/picomatch/index.js | 3 + node_modules/picomatch/lib/constants.js | 179 + node_modules/picomatch/lib/parse.js | 1084 ++ node_modules/picomatch/lib/picomatch.js | 342 + node_modules/picomatch/lib/scan.js | 391 + node_modules/picomatch/lib/utils.js | 64 + node_modules/picomatch/package.json | 113 + node_modules/prepend-http/index.js | 15 + node_modules/prepend-http/license | 9 + node_modules/prepend-http/package.json | 67 + node_modules/prepend-http/readme.md | 56 + node_modules/process-nextick-args/.travis.yml | 12 + node_modules/process-nextick-args/index.js | 43 + node_modules/process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 47 + node_modules/process-nextick-args/readme.md | 18 + node_modules/process-nextick-args/test.js | 24 + node_modules/proxy-addr/HISTORY.md | 161 + node_modules/proxy-addr/LICENSE | 22 + node_modules/proxy-addr/README.md | 139 + node_modules/proxy-addr/index.js | 327 + node_modules/proxy-addr/package.json | 82 + node_modules/psl/LICENSE | 9 + node_modules/psl/README.md | 215 + node_modules/psl/browserstack-logo.svg | 90 + node_modules/psl/data/rules.json | 8812 +++++++++++++ node_modules/psl/dist/psl.js | 9623 +++++++++++++++ node_modules/psl/dist/psl.min.js | 1 + node_modules/psl/index.js | 269 + node_modules/psl/package.json | 80 + node_modules/pstree.remy/.travis.yml | 8 + node_modules/pstree.remy/LICENSE | 7 + node_modules/pstree.remy/README.md | 26 + node_modules/pstree.remy/lib/index.js | 37 + node_modules/pstree.remy/lib/tree.js | 37 + node_modules/pstree.remy/lib/utils.js | 53 + node_modules/pstree.remy/package.json | 64 + .../pstree.remy/tests/fixtures/index.js | 13 + node_modules/pstree.remy/tests/fixtures/out1 | 10 + node_modules/pstree.remy/tests/fixtures/out2 | 29 + node_modules/pstree.remy/tests/index.test.js | 51 + node_modules/pump/.travis.yml | 5 + node_modules/pump/LICENSE | 21 + node_modules/pump/README.md | 65 + node_modules/pump/index.js | 82 + node_modules/pump/package.json | 60 + node_modules/pump/test-browser.js | 66 + node_modules/pump/test-node.js | 53 + node_modules/punycode/LICENSE-MIT.txt | 20 + node_modules/punycode/README.md | 122 + node_modules/punycode/package.json | 88 + node_modules/punycode/punycode.es6.js | 441 + node_modules/punycode/punycode.js | 440 + node_modules/pupa/index.d.ts | 32 + node_modules/pupa/index.js | 39 + node_modules/pupa/license | 9 + node_modules/pupa/package.json | 79 + node_modules/pupa/readme.md | 63 + node_modules/qs/.editorconfig | 30 + node_modules/qs/.eslintignore | 1 + node_modules/qs/.eslintrc | 21 + node_modules/qs/CHANGELOG.md | 256 + node_modules/qs/LICENSE | 28 + node_modules/qs/README.md | 570 + node_modules/qs/dist/qs.js | 782 ++ node_modules/qs/lib/formats.js | 18 + node_modules/qs/lib/index.js | 11 + node_modules/qs/lib/parse.js | 242 + node_modules/qs/lib/stringify.js | 269 + node_modules/qs/lib/utils.js | 230 + node_modules/qs/package.json | 90 + node_modules/qs/test/.eslintrc | 17 + node_modules/qs/test/index.js | 7 + node_modules/qs/test/parse.js | 676 + node_modules/qs/test/stringify.js | 679 + node_modules/qs/test/utils.js | 136 + node_modules/range-parser/HISTORY.md | 56 + node_modules/range-parser/LICENSE | 23 + node_modules/range-parser/README.md | 84 + node_modules/range-parser/index.js | 162 + node_modules/range-parser/package.json | 94 + node_modules/raw-body/HISTORY.md | 270 + node_modules/raw-body/LICENSE | 22 + node_modules/raw-body/README.md | 219 + node_modules/raw-body/index.d.ts | 87 + node_modules/raw-body/index.js | 286 + node_modules/raw-body/package.json | 93 + node_modules/rc/LICENSE.APACHE2 | 15 + node_modules/rc/LICENSE.BSD | 26 + node_modules/rc/LICENSE.MIT | 24 + node_modules/rc/README.md | 227 + node_modules/rc/browser.js | 7 + node_modules/rc/cli.js | 4 + node_modules/rc/index.js | 53 + node_modules/rc/lib/utils.js | 104 + node_modules/rc/node_modules/ini/LICENSE | 15 + node_modules/rc/node_modules/ini/README.md | 102 + node_modules/rc/node_modules/ini/ini.js | 206 + node_modules/rc/node_modules/ini/package.json | 66 + node_modules/rc/package.json | 65 + node_modules/rc/test/ini.js | 16 + node_modules/rc/test/nested-env-vars.js | 50 + node_modules/rc/test/test.js | 59 + node_modules/readable-stream/.npmignore | 9 + node_modules/readable-stream/.travis.yml | 65 + node_modules/readable-stream/CONTRIBUTING.md | 38 + node_modules/readable-stream/GOVERNANCE.md | 136 + node_modules/readable-stream/LICENSE | 47 + node_modules/readable-stream/README.md | 57 + .../doc/wg-meetings/2015-01-30.md | 60 + .../readable-stream/duplex-browser.js | 1 + node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 75 + .../lib/_stream_passthrough.js | 26 + .../readable-stream/lib/_stream_readable.js | 934 ++ .../readable-stream/lib/_stream_transform.js | 182 + .../readable-stream/lib/_stream_writable.js | 543 + .../lib/internal/streams/BufferList.js | 64 + .../lib/internal/streams/stream-browser.js | 1 + .../lib/internal/streams/stream.js | 1 + .../node_modules/safe-buffer/.travis.yml | 7 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 581 + .../node_modules/safe-buffer/browser.js | 1 + .../node_modules/safe-buffer/index.js | 58 + .../node_modules/safe-buffer/package.json | 63 + .../node_modules/safe-buffer/test.js | 99 + node_modules/readable-stream/package.json | 83 + node_modules/readable-stream/passthrough.js | 1 + .../readable-stream/readable-browser.js | 7 + node_modules/readable-stream/readable.js | 19 + node_modules/readable-stream/transform.js | 1 + .../readable-stream/writable-browser.js | 1 + node_modules/readable-stream/writable.js | 8 + node_modules/readdirp/LICENSE | 21 + node_modules/readdirp/README.md | 122 + node_modules/readdirp/index.d.ts | 43 + node_modules/readdirp/index.js | 287 + node_modules/readdirp/package.json | 158 + node_modules/registry-auth-token/CHANGELOG.md | 134 + node_modules/registry-auth-token/LICENSE | 21 + node_modules/registry-auth-token/README.md | 65 + node_modules/registry-auth-token/base64.js | 12 + node_modules/registry-auth-token/index.js | 142 + node_modules/registry-auth-token/package.json | 76 + .../registry-auth-token/registry-url.js | 5 + node_modules/registry-url/index.d.ts | 33 + node_modules/registry-url/index.js | 12 + node_modules/registry-url/license | 9 + node_modules/registry-url/package.json | 76 + node_modules/registry-url/readme.md | 50 + node_modules/request/CHANGELOG.md | 709 ++ node_modules/request/LICENSE | 55 + node_modules/request/README.md | 1097 ++ node_modules/request/index.js | 155 + node_modules/request/lib/auth.js | 167 + node_modules/request/lib/cookies.js | 38 + node_modules/request/lib/getProxyFromURI.js | 79 + node_modules/request/lib/har.js | 205 + node_modules/request/lib/hawk.js | 89 + node_modules/request/lib/helpers.js | 66 + node_modules/request/lib/multipart.js | 112 + node_modules/request/lib/oauth.js | 148 + node_modules/request/lib/querystring.js | 50 + node_modules/request/lib/redirect.js | 154 + node_modules/request/lib/tunnel.js | 175 + .../request/node_modules/qs/.editorconfig | 30 + .../request/node_modules/qs/.eslintignore | 1 + .../request/node_modules/qs/.eslintrc | 19 + .../request/node_modules/qs/CHANGELOG.md | 226 + node_modules/request/node_modules/qs/LICENSE | 28 + .../request/node_modules/qs/README.md | 475 + .../request/node_modules/qs/dist/qs.js | 638 + .../request/node_modules/qs/lib/formats.js | 18 + .../request/node_modules/qs/lib/index.js | 11 + .../request/node_modules/qs/lib/parse.js | 174 + .../request/node_modules/qs/lib/stringify.js | 210 + .../request/node_modules/qs/lib/utils.js | 213 + .../request/node_modules/qs/package.json | 83 + .../request/node_modules/qs/test/.eslintrc | 15 + .../request/node_modules/qs/test/index.js | 7 + .../request/node_modules/qs/test/parse.js | 574 + .../request/node_modules/qs/test/stringify.js | 597 + .../request/node_modules/qs/test/utils.js | 34 + node_modules/request/package.json | 118 + node_modules/request/request.js | 1551 +++ node_modules/responselike/LICENSE | 19 + node_modules/responselike/README.md | 77 + node_modules/responselike/package.json | 69 + node_modules/responselike/src/index.js | 34 + node_modules/safe-buffer/LICENSE | 21 + node_modules/safe-buffer/README.md | 584 + node_modules/safe-buffer/index.d.ts | 187 + node_modules/safe-buffer/index.js | 62 + node_modules/safe-buffer/package.json | 68 + node_modules/safer-buffer/LICENSE | 21 + node_modules/safer-buffer/Porting-Buffer.md | 268 + node_modules/safer-buffer/Readme.md | 156 + node_modules/safer-buffer/dangerous.js | 58 + node_modules/safer-buffer/package.json | 66 + node_modules/safer-buffer/safer.js | 77 + node_modules/safer-buffer/tests.js | 406 + node_modules/semver-diff/index.d.ts | 58 + node_modules/semver-diff/index.js | 13 + node_modules/semver-diff/license | 9 + .../semver-diff/node_modules/.bin/semver | 15 + .../semver-diff/node_modules/.bin/semver.cmd | 17 + .../semver-diff/node_modules/.bin/semver.ps1 | 18 + .../node_modules/semver/CHANGELOG.md | 70 + .../semver-diff/node_modules/semver/LICENSE | 15 + .../semver-diff/node_modules/semver/README.md | 443 + .../node_modules/semver/bin/semver.js | 174 + .../node_modules/semver/package.json | 60 + .../semver-diff/node_modules/semver/range.bnf | 16 + .../semver-diff/node_modules/semver/semver.js | 1596 +++ node_modules/semver-diff/package.json | 69 + node_modules/semver-diff/readme.md | 77 + node_modules/semver/CHANGELOG.md | 39 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 412 + node_modules/semver/bin/semver | 160 + node_modules/semver/package.json | 60 + node_modules/semver/range.bnf | 16 + node_modules/semver/semver.js | 1483 +++ node_modules/send/HISTORY.md | 496 + node_modules/send/LICENSE | 23 + node_modules/send/README.md | 329 + node_modules/send/index.js | 1129 ++ node_modules/send/node_modules/ms/index.js | 162 + node_modules/send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 72 + node_modules/send/node_modules/ms/readme.md | 60 + node_modules/send/package.json | 109 + node_modules/serve-static/HISTORY.md | 451 + node_modules/serve-static/LICENSE | 25 + node_modules/serve-static/README.md | 259 + node_modules/serve-static/index.js | 210 + node_modules/serve-static/package.json | 80 + node_modules/setprototypeof/LICENSE | 13 + node_modules/setprototypeof/README.md | 31 + node_modules/setprototypeof/index.d.ts | 2 + node_modules/setprototypeof/index.js | 17 + node_modules/setprototypeof/package.json | 67 + node_modules/setprototypeof/test/index.js | 24 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 39 + node_modules/signal-exit/index.js | 200 + node_modules/signal-exit/package.json | 66 + node_modules/signal-exit/signals.js | 53 + node_modules/sshpk/.npmignore | 9 + node_modules/sshpk/.travis.yml | 11 + node_modules/sshpk/LICENSE | 18 + node_modules/sshpk/README.md | 804 ++ node_modules/sshpk/bin/sshpk-conv | 243 + node_modules/sshpk/bin/sshpk-sign | 191 + node_modules/sshpk/bin/sshpk-verify | 167 + node_modules/sshpk/lib/algs.js | 168 + node_modules/sshpk/lib/certificate.js | 410 + node_modules/sshpk/lib/dhe.js | 397 + node_modules/sshpk/lib/ed-compat.js | 92 + node_modules/sshpk/lib/errors.js | 84 + node_modules/sshpk/lib/fingerprint.js | 220 + node_modules/sshpk/lib/formats/auto.js | 124 + node_modules/sshpk/lib/formats/dnssec.js | 287 + .../sshpk/lib/formats/openssh-cert.js | 352 + node_modules/sshpk/lib/formats/pem.js | 290 + node_modules/sshpk/lib/formats/pkcs1.js | 373 + node_modules/sshpk/lib/formats/pkcs8.js | 631 + node_modules/sshpk/lib/formats/putty.js | 99 + node_modules/sshpk/lib/formats/rfc4253.js | 166 + node_modules/sshpk/lib/formats/ssh-private.js | 262 + node_modules/sshpk/lib/formats/ssh.js | 115 + node_modules/sshpk/lib/formats/x509-pem.js | 88 + node_modules/sshpk/lib/formats/x509.js | 752 ++ node_modules/sshpk/lib/identity.js | 373 + node_modules/sshpk/lib/index.js | 40 + node_modules/sshpk/lib/key.js | 294 + node_modules/sshpk/lib/private-key.js | 246 + node_modules/sshpk/lib/signature.js | 314 + node_modules/sshpk/lib/ssh-buffer.js | 149 + node_modules/sshpk/lib/utils.js | 404 + node_modules/sshpk/man/man1/sshpk-conv.1 | 135 + node_modules/sshpk/man/man1/sshpk-sign.1 | 81 + node_modules/sshpk/man/man1/sshpk-verify.1 | 68 + node_modules/sshpk/package.json | 99 + node_modules/statuses/HISTORY.md | 65 + node_modules/statuses/LICENSE | 23 + node_modules/statuses/README.md | 127 + node_modules/statuses/codes.json | 66 + node_modules/statuses/index.js | 113 + node_modules/statuses/package.json | 93 + node_modules/stream-spigot/.npmignore | 2 + node_modules/stream-spigot/LICENSE | 9 + node_modules/stream-spigot/README.md | 97 + node_modules/stream-spigot/index.js | 82 + node_modules/stream-spigot/package.json | 65 + node_modules/stream-spigot/test/index.js | 185 + node_modules/string-width/index.d.ts | 29 + node_modules/string-width/index.js | 47 + node_modules/string-width/license | 9 + node_modules/string-width/package.json | 91 + node_modules/string-width/readme.md | 50 + node_modules/string_decoder/.npmignore | 2 + node_modules/string_decoder/LICENSE | 48 + node_modules/string_decoder/README.md | 28 + .../string_decoder/lib/string_decoder.js | 272 + node_modules/string_decoder/package.json | 56 + node_modules/strip-ansi/index.d.ts | 17 + node_modules/strip-ansi/index.js | 4 + node_modules/strip-ansi/license | 9 + node_modules/strip-ansi/package.json | 87 + node_modules/strip-ansi/readme.md | 46 + node_modules/strip-json-comments/index.js | 70 + node_modules/strip-json-comments/license | 21 + node_modules/strip-json-comments/package.json | 74 + node_modules/strip-json-comments/readme.md | 64 + node_modules/supports-color/browser.js | 5 + node_modules/supports-color/index.js | 131 + node_modules/supports-color/license | 9 + node_modules/supports-color/package.json | 85 + node_modules/supports-color/readme.md | 66 + node_modules/to-readable-stream/index.js | 11 + node_modules/to-readable-stream/license | 9 + node_modules/to-readable-stream/package.json | 72 + node_modules/to-readable-stream/readme.md | 42 + node_modules/to-regex-range/LICENSE | 21 + node_modules/to-regex-range/README.md | 305 + node_modules/to-regex-range/index.js | 288 + node_modules/to-regex-range/package.json | 125 + node_modules/toidentifier/LICENSE | 21 + node_modules/toidentifier/README.md | 61 + node_modules/toidentifier/index.js | 30 + node_modules/toidentifier/package.json | 79 + node_modules/touch/LICENSE | 15 + node_modules/touch/README.md | 52 + node_modules/touch/bin/nodetouch.js | 112 + node_modules/touch/index.js | 224 + node_modules/touch/package.json | 64 + node_modules/tough-cookie/LICENSE | 12 + node_modules/tough-cookie/README.md | 507 + node_modules/tough-cookie/lib/cookie.js | 1431 +++ node_modules/tough-cookie/lib/memstore.js | 176 + node_modules/tough-cookie/lib/pathMatch.js | 61 + .../tough-cookie/lib/permuteDomain.js | 56 + .../tough-cookie/lib/pubsuffix-psl.js | 38 + node_modules/tough-cookie/lib/store.js | 71 + .../node_modules/punycode/LICENSE-MIT.txt | 20 + .../node_modules/punycode/README.md | 176 + .../node_modules/punycode/package.json | 90 + .../node_modules/punycode/punycode.js | 533 + node_modules/tough-cookie/package.json | 97 + node_modules/tunnel-agent/LICENSE | 55 + node_modules/tunnel-agent/README.md | 4 + node_modules/tunnel-agent/index.js | 244 + node_modules/tunnel-agent/package.json | 58 + node_modules/tweetnacl/.npmignore | 4 + node_modules/tweetnacl/AUTHORS.md | 28 + node_modules/tweetnacl/CHANGELOG.md | 221 + node_modules/tweetnacl/LICENSE | 24 + .../tweetnacl/PULL_REQUEST_TEMPLATE.md | 20 + node_modules/tweetnacl/README.md | 459 + node_modules/tweetnacl/nacl-fast.js | 2388 ++++ node_modules/tweetnacl/nacl-fast.min.js | 2 + node_modules/tweetnacl/nacl.d.ts | 98 + node_modules/tweetnacl/nacl.js | 1175 ++ node_modules/tweetnacl/nacl.min.js | 1 + node_modules/tweetnacl/package.json | 89 + node_modules/type-fest/base.d.ts | 38 + node_modules/type-fest/index.d.ts | 2 + node_modules/type-fest/license | 9 + node_modules/type-fest/package.json | 90 + node_modules/type-fest/readme.md | 658 + .../type-fest/source/async-return-type.d.ts | 23 + node_modules/type-fest/source/asyncify.d.ts | 31 + node_modules/type-fest/source/basic.d.ts | 67 + .../type-fest/source/conditional-except.d.ts | 43 + .../type-fest/source/conditional-keys.d.ts | 43 + .../type-fest/source/conditional-pick.d.ts | 42 + node_modules/type-fest/source/entries.d.ts | 57 + node_modules/type-fest/source/entry.d.ts | 60 + node_modules/type-fest/source/except.d.ts | 22 + .../type-fest/source/fixed-length-array.d.ts | 38 + .../type-fest/source/iterable-element.d.ts | 46 + .../type-fest/source/literal-union.d.ts | 33 + .../type-fest/source/merge-exclusive.d.ts | 39 + node_modules/type-fest/source/merge.d.ts | 22 + node_modules/type-fest/source/mutable.d.ts | 22 + node_modules/type-fest/source/opaque.d.ts | 65 + .../type-fest/source/package-json.d.ts | 611 + .../type-fest/source/partial-deep.d.ts | 72 + node_modules/type-fest/source/promisable.d.ts | 23 + .../type-fest/source/promise-value.d.ts | 27 + .../type-fest/source/readonly-deep.d.ts | 59 + .../source/require-at-least-one.d.ts | 33 + .../type-fest/source/require-exactly-one.d.ts | 35 + .../type-fest/source/set-optional.d.ts | 34 + .../type-fest/source/set-required.d.ts | 34 + .../type-fest/source/set-return-type.d.ts | 29 + .../type-fest/source/stringified.d.ts | 21 + .../type-fest/source/tsconfig-json.d.ts | 870 ++ .../source/union-to-intersection.d.ts | 58 + node_modules/type-fest/source/utilities.d.ts | 3 + node_modules/type-fest/source/value-of.d.ts | 40 + node_modules/type-fest/ts41/camel-case.d.ts | 72 + .../type-fest/ts41/delimiter-case.d.ts | 85 + node_modules/type-fest/ts41/index.d.ts | 9 + node_modules/type-fest/ts41/kebab-case.d.ts | 36 + node_modules/type-fest/ts41/pascal-case.d.ts | 36 + node_modules/type-fest/ts41/snake-case.d.ts | 35 + node_modules/type-is/HISTORY.md | 259 + node_modules/type-is/LICENSE | 23 + node_modules/type-is/README.md | 170 + node_modules/type-is/index.js | 266 + node_modules/type-is/package.json | 88 + node_modules/typedarray-to-buffer/.airtap.yml | 15 + node_modules/typedarray-to-buffer/.travis.yml | 11 + node_modules/typedarray-to-buffer/LICENSE | 21 + node_modules/typedarray-to-buffer/README.md | 85 + node_modules/typedarray-to-buffer/index.js | 25 + .../typedarray-to-buffer/package.json | 75 + .../typedarray-to-buffer/test/basic.js | 50 + .../undefsafe/.github/workflows/release.yml | 25 + node_modules/undefsafe/.jscsrc | 13 + node_modules/undefsafe/.jshintrc | 16 + node_modules/undefsafe/.travis.yml | 18 + node_modules/undefsafe/LICENSE | 22 + node_modules/undefsafe/README.md | 63 + node_modules/undefsafe/example.js | 14 + node_modules/undefsafe/lib/undefsafe.js | 125 + node_modules/undefsafe/package.json | 65 + node_modules/unique-string/index.d.ts | 16 + node_modules/unique-string/index.js | 4 + node_modules/unique-string/license | 9 + node_modules/unique-string/package.json | 72 + node_modules/unique-string/readme.md | 32 + node_modules/unpipe/HISTORY.md | 4 + node_modules/unpipe/LICENSE | 22 + node_modules/unpipe/README.md | 43 + node_modules/unpipe/index.js | 69 + node_modules/unpipe/package.json | 66 + node_modules/update-notifier/check.js | 28 + node_modules/update-notifier/index.js | 188 + node_modules/update-notifier/license | 9 + .../update-notifier/node_modules/.bin/semver | 15 + .../node_modules/.bin/semver.cmd | 17 + .../node_modules/.bin/semver.ps1 | 18 + .../node_modules/semver/CHANGELOG.md | 111 + .../node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 566 + .../node_modules/semver/bin/semver.js | 173 + .../node_modules/semver/classes/comparator.js | 135 + .../node_modules/semver/classes/index.js | 5 + .../node_modules/semver/classes/range.js | 510 + .../node_modules/semver/classes/semver.js | 287 + .../node_modules/semver/functions/clean.js | 6 + .../node_modules/semver/functions/cmp.js | 48 + .../node_modules/semver/functions/coerce.js | 51 + .../semver/functions/compare-build.js | 7 + .../semver/functions/compare-loose.js | 3 + .../node_modules/semver/functions/compare.js | 5 + .../node_modules/semver/functions/diff.js | 23 + .../node_modules/semver/functions/eq.js | 3 + .../node_modules/semver/functions/gt.js | 3 + .../node_modules/semver/functions/gte.js | 3 + .../node_modules/semver/functions/inc.js | 15 + .../node_modules/semver/functions/lt.js | 3 + .../node_modules/semver/functions/lte.js | 3 + .../node_modules/semver/functions/major.js | 3 + .../node_modules/semver/functions/minor.js | 3 + .../node_modules/semver/functions/neq.js | 3 + .../node_modules/semver/functions/parse.js | 33 + .../node_modules/semver/functions/patch.js | 3 + .../semver/functions/prerelease.js | 6 + .../node_modules/semver/functions/rcompare.js | 3 + .../node_modules/semver/functions/rsort.js | 3 + .../semver/functions/satisfies.js | 10 + .../node_modules/semver/functions/sort.js | 3 + .../node_modules/semver/functions/valid.js | 6 + .../node_modules/semver/index.js | 48 + .../node_modules/semver/internal/constants.js | 17 + .../node_modules/semver/internal/debug.js | 9 + .../semver/internal/identifiers.js | 23 + .../semver/internal/parse-options.js | 11 + .../node_modules/semver/internal/re.js | 182 + .../node_modules/semver/package.json | 73 + .../node_modules/semver/preload.js | 2 + .../node_modules/semver/range.bnf | 16 + .../node_modules/semver/ranges/gtr.js | 4 + .../node_modules/semver/ranges/intersects.js | 7 + .../node_modules/semver/ranges/ltr.js | 4 + .../semver/ranges/max-satisfying.js | 25 + .../semver/ranges/min-satisfying.js | 24 + .../node_modules/semver/ranges/min-version.js | 60 + .../node_modules/semver/ranges/outside.js | 80 + .../node_modules/semver/ranges/simplify.js | 44 + .../node_modules/semver/ranges/subset.js | 222 + .../semver/ranges/to-comparators.js | 8 + .../node_modules/semver/ranges/valid.js | 11 + node_modules/update-notifier/package.json | 94 + node_modules/update-notifier/readme.md | 223 + node_modules/uri-js/README.md | 199 + node_modules/uri-js/bower.json | 47 + node_modules/uri-js/dist/es5/uri.all.d.ts | 59 + node_modules/uri-js/dist/es5/uri.all.js | 1389 +++ node_modules/uri-js/dist/es5/uri.all.js.map | 1 + node_modules/uri-js/dist/es5/uri.all.min.d.ts | 59 + node_modules/uri-js/dist/es5/uri.all.min.js | 3 + .../uri-js/dist/es5/uri.all.min.js.map | 1 + node_modules/uri-js/dist/esnext/index.d.ts | 1 + node_modules/uri-js/dist/esnext/index.js | 13 + node_modules/uri-js/dist/esnext/index.js.map | 1 + .../uri-js/dist/esnext/regexps-iri.d.ts | 3 + .../uri-js/dist/esnext/regexps-iri.js | 3 + .../uri-js/dist/esnext/regexps-iri.js.map | 1 + .../uri-js/dist/esnext/regexps-uri.d.ts | 4 + .../uri-js/dist/esnext/regexps-uri.js | 42 + .../uri-js/dist/esnext/regexps-uri.js.map | 1 + .../uri-js/dist/esnext/schemes/http.d.ts | 3 + .../uri-js/dist/esnext/schemes/http.js | 27 + .../uri-js/dist/esnext/schemes/http.js.map | 1 + .../uri-js/dist/esnext/schemes/https.d.ts | 3 + .../uri-js/dist/esnext/schemes/https.js | 9 + .../uri-js/dist/esnext/schemes/https.js.map | 1 + .../uri-js/dist/esnext/schemes/mailto.d.ts | 12 + .../uri-js/dist/esnext/schemes/mailto.js | 148 + .../uri-js/dist/esnext/schemes/mailto.js.map | 1 + .../uri-js/dist/esnext/schemes/urn-uuid.d.ts | 7 + .../uri-js/dist/esnext/schemes/urn-uuid.js | 23 + .../dist/esnext/schemes/urn-uuid.js.map | 1 + .../uri-js/dist/esnext/schemes/urn.d.ts | 10 + .../uri-js/dist/esnext/schemes/urn.js | 49 + .../uri-js/dist/esnext/schemes/urn.js.map | 1 + node_modules/uri-js/dist/esnext/uri.d.ts | 59 + node_modules/uri-js/dist/esnext/uri.js | 480 + node_modules/uri-js/dist/esnext/uri.js.map | 1 + node_modules/uri-js/dist/esnext/util.d.ts | 6 + node_modules/uri-js/dist/esnext/util.js | 36 + node_modules/uri-js/dist/esnext/util.js.map | 1 + node_modules/uri-js/package.json | 96 + node_modules/uri-js/rollup.config.js | 32 + node_modules/uri-js/src/index.ts | 18 + node_modules/uri-js/src/punycode.d.ts | 24 + node_modules/uri-js/src/regexps-iri.ts | 4 + node_modules/uri-js/src/regexps-uri.ts | 89 + node_modules/uri-js/src/schemes/http.ts | 36 + node_modules/uri-js/src/schemes/https.ts | 11 + node_modules/uri-js/src/schemes/mailto.ts | 182 + node_modules/uri-js/src/schemes/urn-uuid.ts | 36 + node_modules/uri-js/src/schemes/urn.ts | 69 + node_modules/uri-js/src/uri.ts | 556 + node_modules/uri-js/src/util.ts | 40 + node_modules/uri-js/tests/qunit.css | 118 + node_modules/uri-js/tests/qunit.js | 1042 ++ node_modules/uri-js/tests/test-es5-min.html | 17 + node_modules/uri-js/tests/test-es5.html | 17 + node_modules/uri-js/tests/tests.js | 774 ++ node_modules/uri-js/tsconfig.json | 20 + node_modules/uri-js/yarn.lock | 1902 +++ node_modules/url-parse-lax/index.js | 12 + node_modules/url-parse-lax/license | 9 + node_modules/url-parse-lax/package.json | 74 + node_modules/url-parse-lax/readme.md | 127 + node_modules/util-deprecate/History.md | 16 + node_modules/util-deprecate/LICENSE | 24 + node_modules/util-deprecate/README.md | 53 + node_modules/util-deprecate/browser.js | 67 + node_modules/util-deprecate/node.js | 6 + node_modules/util-deprecate/package.json | 56 + node_modules/utils-merge/.npmignore | 9 + node_modules/utils-merge/LICENSE | 20 + node_modules/utils-merge/README.md | 34 + node_modules/utils-merge/index.js | 23 + node_modules/utils-merge/package.json | 69 + node_modules/uuid/AUTHORS | 5 + node_modules/uuid/CHANGELOG.md | 119 + node_modules/uuid/LICENSE.md | 21 + node_modules/uuid/README.md | 276 + node_modules/uuid/bin/uuid | 65 + node_modules/uuid/index.js | 8 + node_modules/uuid/lib/bytesToUuid.js | 26 + node_modules/uuid/lib/md5-browser.js | 216 + node_modules/uuid/lib/md5.js | 25 + node_modules/uuid/lib/rng-browser.js | 34 + node_modules/uuid/lib/rng.js | 8 + node_modules/uuid/lib/sha1-browser.js | 89 + node_modules/uuid/lib/sha1.js | 25 + node_modules/uuid/lib/v35.js | 57 + node_modules/uuid/package.json | 103 + node_modules/uuid/v1.js | 109 + node_modules/uuid/v3.js | 4 + node_modules/uuid/v4.js | 29 + node_modules/uuid/v5.js | 3 + node_modules/vary/HISTORY.md | 39 + node_modules/vary/LICENSE | 22 + node_modules/vary/README.md | 101 + node_modules/vary/index.js | 149 + node_modules/vary/package.json | 81 + node_modules/verror/.npmignore | 9 + node_modules/verror/CHANGES.md | 28 + node_modules/verror/CONTRIBUTING.md | 19 + node_modules/verror/LICENSE | 19 + node_modules/verror/README.md | 528 + node_modules/verror/lib/verror.js | 451 + node_modules/verror/package.json | 54 + node_modules/widest-line/index.d.ts | 21 + node_modules/widest-line/index.js | 16 + node_modules/widest-line/license | 9 + node_modules/widest-line/package.json | 86 + node_modules/widest-line/readme.md | 34 + node_modules/wrap-ansi/index.js | 216 + node_modules/wrap-ansi/license | 9 + node_modules/wrap-ansi/package.json | 94 + node_modules/wrap-ansi/readme.md | 91 + node_modules/wrappy/LICENSE | 15 + node_modules/wrappy/README.md | 36 + node_modules/wrappy/package.json | 58 + node_modules/wrappy/wrappy.js | 33 + node_modules/write-file-atomic/CHANGELOG.md | 32 + node_modules/write-file-atomic/LICENSE | 6 + node_modules/write-file-atomic/README.md | 72 + node_modules/write-file-atomic/index.js | 259 + node_modules/write-file-atomic/package.json | 77 + node_modules/xdg-basedir/index.d.ts | 81 + node_modules/xdg-basedir/index.js | 28 + node_modules/xdg-basedir/license | 9 + node_modules/xdg-basedir/package.json | 74 + node_modules/xdg-basedir/readme.md | 60 + node_modules/xtend/.jshintrc | 30 + node_modules/xtend/LICENSE | 20 + node_modules/xtend/README.md | 32 + node_modules/xtend/immutable.js | 19 + node_modules/xtend/mutable.js | 17 + node_modules/xtend/package.json | 86 + node_modules/xtend/test.js | 103 + node_modules/yallist/LICENSE | 15 + node_modules/yallist/README.md | 204 + node_modules/yallist/iterator.js | 8 + node_modules/yallist/package.json | 62 + node_modules/yallist/yallist.js | 426 + public/animation.css | 44 + public/app.js | 4 + public/backgroundSlider.js | 18 + public/css/.DS_Store | Bin 0 -> 8196 bytes public/css/ajax-loader.gif | Bin 0 -> 3208 bytes public/css/animate.css | 3377 +++++ public/css/aos.css | 2 + public/css/bootstrap-datepicker.css | 512 + public/css/bootstrap.min.css | 7 + public/css/bootstrap/.DS_Store | Bin 0 -> 6148 bytes public/css/bootstrap/bootstrap-grid.css | 1708 +++ public/css/bootstrap/bootstrap-reboot.css | 263 + public/css/css/.DS_Store | Bin 0 -> 6148 bytes public/css/css/bootstrap-reboot.css | 272 + public/css/css/mixins/_text-hide.css | 0 public/css/flaticon.css | 42 + public/css/icomoon.css | 4919 ++++++++ public/css/ionicons.min.css | 11 + public/css/jquery.timepicker.css | 72 + public/css/magnific-popup.css | 351 + public/css/open-iconic-bootstrap.min.css | 1 + public/css/owl.carousel.min.css | 6 + public/css/owl.theme.default.min.css | 15 + public/css/style.css | 9941 +++++++++++++++ public/fonts/.DS_Store | Bin 0 -> 6148 bytes public/fonts/flaticon/.DS_Store | Bin 0 -> 6148 bytes public/fonts/flaticon/backup.txt | 1 + public/fonts/flaticon/font/.DS_Store | Bin 0 -> 6148 bytes public/fonts/flaticon/font/Flaticon.eot | Bin 0 -> 3894 bytes public/fonts/flaticon/font/Flaticon.svg | 113 + public/fonts/flaticon/font/Flaticon.ttf | Bin 0 -> 3716 bytes public/fonts/flaticon/font/Flaticon.woff | Bin 0 -> 2512 bytes public/fonts/flaticon/font/Flaticon.woff2 | Bin 0 -> 1952 bytes public/fonts/flaticon/font/_flaticon.scss | 48 + public/fonts/flaticon/font/flaticon.css | 36 + public/fonts/flaticon/font/flaticon.html | 475 + public/fonts/flaticon/license/.DS_Store | Bin 0 -> 6148 bytes public/fonts/flaticon/license/license.pdf | Bin 0 -> 36473 bytes public/fonts/icomoon/icomoon.eot | Bin 0 -> 307332 bytes public/fonts/icomoon/icomoon.svg | 1530 +++ public/fonts/icomoon/icomoon.ttf | Bin 0 -> 307168 bytes public/fonts/icomoon/icomoon.woff | Bin 0 -> 307244 bytes public/fonts/ionicons/css/_ionicons.scss | 1480 +++ public/fonts/ionicons/css/ionicons.min.css | 11 + public/fonts/ionicons/fonts/.DS_Store | Bin 0 -> 6148 bytes public/fonts/ionicons/fonts/ionicons.eot | Bin 0 -> 112826 bytes public/fonts/ionicons/fonts/ionicons.svg | 2094 ++++ public/fonts/ionicons/fonts/ionicons.ttf | Bin 0 -> 112648 bytes public/fonts/ionicons/fonts/ionicons.woff | Bin 0 -> 66024 bytes public/fonts/ionicons/fonts/ionicons.woff2 | Bin 0 -> 50592 bytes public/fonts/open-iconic/open-iconic.eot | Bin 0 -> 28196 bytes public/fonts/open-iconic/open-iconic.otf | Bin 0 -> 20996 bytes public/fonts/open-iconic/open-iconic.svg | 543 + public/fonts/open-iconic/open-iconic.ttf | Bin 0 -> 28028 bytes public/fonts/open-iconic/open-iconic.woff | Bin 0 -> 14984 bytes public/icons/144x144.png | Bin 0 -> 3775 bytes public/icons/192x192.png | Bin 0 -> 5211 bytes public/icons/256x256.png | Bin 0 -> 7097 bytes public/icons/384x384.png | Bin 0 -> 11814 bytes public/icons/48x48.png | Bin 0 -> 1242 bytes public/icons/512x512.png | Bin 0 -> 7551 bytes public/icons/96x96.png | Bin 0 -> 2525 bytes public/images/.DS_Store | Bin 0 -> 6148 bytes public/images/Glenn.jpg | Bin 0 -> 49519 bytes public/images/abd.jpeg | Bin 0 -> 17583 bytes public/images/about-1.jpg | Bin 0 -> 536843 bytes public/images/about.jpg | Bin 0 -> 130389 bytes public/images/afgan.png | Bin 0 -> 39800 bytes public/images/aus.png | Bin 0 -> 24886 bytes public/images/bangla.png | Bin 0 -> 3396 bytes public/images/bg_1.jpg | Bin 0 -> 999725 bytes public/images/bg_2.jpg | Bin 0 -> 357397 bytes public/images/bg_3.jpg | Bin 0 -> 457096 bytes public/images/cricket.jpeg | Bin 0 -> 8560 bytes public/images/dravid.jpeg | Bin 0 -> 19438 bytes public/images/eng.png | Bin 0 -> 1315 bytes public/images/gilly.jpeg | Bin 0 -> 20246 bytes public/images/image_1.jpg | Bin 0 -> 118516 bytes public/images/image_2.jpg | Bin 0 -> 85966 bytes public/images/image_3.jpg | Bin 0 -> 120481 bytes public/images/image_4.jpg | Bin 0 -> 104171 bytes public/images/image_5.jpg | Bin 0 -> 101224 bytes public/images/image_6.jpg | Bin 0 -> 387862 bytes public/images/image_7.jpg | Bin 0 -> 237521 bytes public/images/image_8.jpg | Bin 0 -> 198397 bytes public/images/ind.jpeg | Bin 0 -> 20405 bytes public/images/ireland.png | Bin 0 -> 1961 bytes public/images/jai.jpeg | Bin 0 -> 28836 bytes public/images/kallis.jpg | Bin 0 -> 54791 bytes public/images/loc.png | Bin 0 -> 1967 bytes public/images/msd.jpeg | Bin 0 -> 28911 bytes public/images/murli.jpg | Bin 0 -> 30494 bytes public/images/new.png | Bin 0 -> 6400 bytes public/images/newz.jpeg | Bin 0 -> 50844 bytes public/images/pak.png | Bin 0 -> 6949 bytes public/images/person_1.jpg | Bin 0 -> 36090 bytes public/images/person_2.jpg | Bin 0 -> 47939 bytes public/images/person_3.jpg | Bin 0 -> 35096 bytes public/images/person_4.jpg | Bin 0 -> 25350 bytes public/images/ponting.jpeg | Bin 0 -> 27856 bytes public/images/sachin.jpeg | Bin 0 -> 20879 bytes public/images/scot.png | Bin 0 -> 16965 bytes public/images/shane.jpg | Bin 0 -> 90977 bytes public/images/sourav.jpg | Bin 0 -> 36116 bytes public/images/southAfrica.png | Bin 0 -> 7470 bytes public/images/sriLanka.png | Bin 0 -> 19402 bytes public/images/staff-1.jpg | Bin 0 -> 18016 bytes public/images/staff-2.jpg | Bin 0 -> 135477 bytes public/images/staff-3.jpg | Bin 0 -> 89027 bytes public/images/staff-4.jpg | Bin 0 -> 63558 bytes public/images/staff-5.jpg | Bin 0 -> 128078 bytes public/images/staff-6.jpg | Bin 0 -> 338260 bytes public/images/staff-7.jpg | Bin 0 -> 101035 bytes public/images/staff-8.jpg | Bin 0 -> 103015 bytes public/images/team-1.jpg | Bin 0 -> 318120 bytes public/images/team-2.jpg | Bin 0 -> 162880 bytes public/images/team-3.jpg | Bin 0 -> 70405 bytes public/images/team-4.jpg | Bin 0 -> 77843 bytes public/images/team-5.jpg | Bin 0 -> 138776 bytes public/images/team-6.jpg | Bin 0 -> 49184 bytes public/images/victory.jpg | Bin 0 -> 101275 bytes public/images/virat.jpg | Bin 0 -> 101786 bytes public/images/viv.jpeg | Bin 0 -> 22404 bytes public/images/wasim.jpeg | Bin 0 -> 110673 bytes public/images/waugh.jpeg | Bin 0 -> 29734 bytes public/images/westIndies.png | Bin 0 -> 7193 bytes public/images/yuvraj.jpeg | Bin 0 -> 11473 bytes public/images/zim.jpeg | Bin 0 -> 31154 bytes public/js/.DS_Store | Bin 0 -> 8196 bytes public/js/aos.js | 2 + public/js/bootstrap-datepicker.js | 1671 +++ public/js/bootstrap.min.js | 7 + public/js/google-map.js | 62 + public/js/jquery-3.2.1.min.js | 4 + public/js/jquery-migrate-3.0.1.min.js | 215 + public/js/jquery.animateNumber.min.js | 8 + public/js/jquery.easing.1.3.js | 205 + public/js/jquery.magnific-popup.min.js | 4 + public/js/jquery.min.js | 10253 ++++++++++++++++ public/js/jquery.stellar.min.js | 2 + public/js/jquery.waypoints.min.js | 7 + public/js/main.js | 361 + public/js/owl.carousel.min.js | 7 + public/js/popper.min.js | 5 + public/js/scrollax.min.js | 32 + public/manifest.json | 50 + public/scss/.DS_Store | Bin 0 -> 6148 bytes public/scss/bootstrap/.DS_Store | Bin 0 -> 10244 bytes public/scss/bootstrap/_alert.scss | 51 + public/scss/bootstrap/_badge.scss | 53 + public/scss/bootstrap/_breadcrumb.scss | 41 + public/scss/bootstrap/_button-group.scss | 163 + public/scss/bootstrap/_buttons.scss | 140 + public/scss/bootstrap/_card.scss | 310 + public/scss/bootstrap/_carousel.scss | 198 + public/scss/bootstrap/_close.scss | 44 + public/scss/bootstrap/_code.scss | 48 + public/scss/bootstrap/_custom-forms.scss | 507 + public/scss/bootstrap/_dropdown.scss | 191 + public/scss/bootstrap/_forms.scss | 334 + public/scss/bootstrap/_functions.scss | 86 + public/scss/bootstrap/_grid.scss | 52 + public/scss/bootstrap/_images.scss | 42 + public/scss/bootstrap/_input-group.scss | 193 + public/scss/bootstrap/_jumbotron.scss | 16 + public/scss/bootstrap/_list-group.scss | 121 + public/scss/bootstrap/_media.scss | 8 + public/scss/bootstrap/_mixins.scss | 41 + public/scss/bootstrap/_modal.scss | 186 + public/scss/bootstrap/_nav.scss | 120 + public/scss/bootstrap/_navbar.scss | 299 + public/scss/bootstrap/_pagination.scss | 78 + public/scss/bootstrap/_popover.scss | 183 + public/scss/bootstrap/_print.scss | 141 + public/scss/bootstrap/_progress.scss | 34 + public/scss/bootstrap/_reboot.scss | 462 + public/scss/bootstrap/_root.scss | 19 + public/scss/bootstrap/_spinners.scss | 53 + public/scss/bootstrap/_tables.scss | 187 + public/scss/bootstrap/_toasts.scss | 43 + public/scss/bootstrap/_tooltip.scss | 115 + public/scss/bootstrap/_transitions.scss | 22 + public/scss/bootstrap/_type.scss | 125 + public/scss/bootstrap/_utilities.scss | 16 + public/scss/bootstrap/_variables.scss | 1091 ++ public/scss/bootstrap/bootstrap-grid.scss | 29 + public/scss/bootstrap/bootstrap-reboot.scss | 12 + public/scss/bootstrap/bootstrap.scss | 44 + public/scss/bootstrap/mixins/_alert.scss | 13 + .../bootstrap/mixins/_background-variant.scss | 21 + public/scss/bootstrap/mixins/_badge.scss | 11 + .../scss/bootstrap/mixins/_border-radius.scss | 35 + public/scss/bootstrap/mixins/_box-shadow.scss | 5 + .../scss/bootstrap/mixins/_breakpoints.scss | 123 + public/scss/bootstrap/mixins/_buttons.scss | 111 + public/scss/bootstrap/mixins/_caret.scss | 62 + public/scss/bootstrap/mixins/_clearfix.scss | 7 + public/scss/bootstrap/mixins/_float.scss | 11 + public/scss/bootstrap/mixins/_forms.scss | 198 + public/scss/bootstrap/mixins/_gradients.scss | 45 + .../bootstrap/mixins/_grid-framework.scss | 66 + public/scss/bootstrap/mixins/_grid.scss | 51 + public/scss/bootstrap/mixins/_hover.scss | 37 + public/scss/bootstrap/mixins/_image.scss | 36 + public/scss/bootstrap/mixins/_list-group.scss | 21 + public/scss/bootstrap/mixins/_lists.scss | 7 + .../scss/bootstrap/mixins/_nav-divider.scss | 10 + public/scss/bootstrap/mixins/_pagination.scss | 22 + public/scss/bootstrap/mixins/_reset-text.scss | 17 + public/scss/bootstrap/mixins/_resize.scss | 6 + .../scss/bootstrap/mixins/_screen-reader.scss | 33 + public/scss/bootstrap/mixins/_size.scss | 6 + public/scss/bootstrap/mixins/_table-row.scss | 39 + .../scss/bootstrap/mixins/_text-emphasis.scss | 14 + public/scss/bootstrap/mixins/_text-hide.scss | 13 + .../scss/bootstrap/mixins/_text-truncate.scss | 8 + public/scss/bootstrap/mixins/_transition.scss | 16 + public/scss/bootstrap/mixins/_visibility.scss | 7 + public/scss/bootstrap/utilities/_align.scss | 8 + .../scss/bootstrap/utilities/_background.scss | 19 + public/scss/bootstrap/utilities/_borders.scss | 63 + .../scss/bootstrap/utilities/_clearfix.scss | 3 + public/scss/bootstrap/utilities/_display.scss | 38 + public/scss/bootstrap/utilities/_embed.scss | 39 + public/scss/bootstrap/utilities/_flex.scss | 51 + public/scss/bootstrap/utilities/_float.scss | 9 + .../scss/bootstrap/utilities/_overflow.scss | 5 + .../scss/bootstrap/utilities/_position.scss | 32 + .../bootstrap/utilities/_screenreaders.scss | 11 + public/scss/bootstrap/utilities/_shadows.scss | 6 + public/scss/bootstrap/utilities/_sizing.scss | 20 + public/scss/bootstrap/utilities/_spacing.scss | 73 + public/scss/bootstrap/utilities/_text.scss | 67 + .../scss/bootstrap/utilities/_visibility.scss | 11 + public/scss/style.scss | 2404 ++++ public/style.css | 90 + public/sw.js | 13 + 2035 files changed, 287132 insertions(+) create mode 100644 node_modules/.bin/cool-face create mode 100644 node_modules/.bin/cool-face.cmd create mode 100644 node_modules/.bin/cool-face.ps1 create mode 100644 node_modules/.bin/is-ci create mode 100644 node_modules/.bin/is-ci.cmd create mode 100644 node_modules/.bin/is-ci.ps1 create mode 100644 node_modules/.bin/mime create mode 100644 node_modules/.bin/mime.cmd create mode 100644 node_modules/.bin/mime.ps1 create mode 100644 node_modules/.bin/nodemon create mode 100644 node_modules/.bin/nodemon.cmd create mode 100644 node_modules/.bin/nodemon.ps1 create mode 100644 node_modules/.bin/nodetouch create mode 100644 node_modules/.bin/nodetouch.cmd create mode 100644 node_modules/.bin/nodetouch.ps1 create mode 100644 node_modules/.bin/nopt create mode 100644 node_modules/.bin/nopt.cmd create mode 100644 node_modules/.bin/nopt.ps1 create mode 100644 node_modules/.bin/rc create mode 100644 node_modules/.bin/rc.cmd create mode 100644 node_modules/.bin/rc.ps1 create mode 100644 node_modules/.bin/semver create mode 100644 node_modules/.bin/semver.cmd create mode 100644 node_modules/.bin/semver.ps1 create mode 100644 node_modules/.bin/sshpk-conv create mode 100644 node_modules/.bin/sshpk-conv.cmd create mode 100644 node_modules/.bin/sshpk-conv.ps1 create mode 100644 node_modules/.bin/sshpk-sign create mode 100644 node_modules/.bin/sshpk-sign.cmd create mode 100644 node_modules/.bin/sshpk-sign.ps1 create mode 100644 node_modules/.bin/sshpk-verify create mode 100644 node_modules/.bin/sshpk-verify.cmd create mode 100644 node_modules/.bin/sshpk-verify.ps1 create mode 100644 node_modules/.bin/uuid create mode 100644 node_modules/.bin/uuid.cmd create mode 100644 node_modules/.bin/uuid.ps1 create mode 100644 node_modules/@sindresorhus/is/dist/index.d.ts create mode 100644 node_modules/@sindresorhus/is/dist/index.js create mode 100644 node_modules/@sindresorhus/is/dist/index.js.map create mode 100644 node_modules/@sindresorhus/is/license create mode 100644 node_modules/@sindresorhus/is/package.json create mode 100644 node_modules/@sindresorhus/is/readme.md create mode 100644 node_modules/@szmarczak/http-timer/LICENSE create mode 100644 node_modules/@szmarczak/http-timer/README.md create mode 100644 node_modules/@szmarczak/http-timer/package.json create mode 100644 node_modules/@szmarczak/http-timer/source/index.js create mode 100644 node_modules/abbrev/LICENSE create mode 100644 node_modules/abbrev/README.md create mode 100644 node_modules/abbrev/abbrev.js create mode 100644 node_modules/abbrev/package.json create mode 100644 node_modules/accepts/HISTORY.md create mode 100644 node_modules/accepts/LICENSE create mode 100644 node_modules/accepts/README.md create mode 100644 node_modules/accepts/index.js create mode 100644 node_modules/accepts/package.json create mode 100644 node_modules/ajv/.tonic_example.js create mode 100644 node_modules/ajv/LICENSE create mode 100644 node_modules/ajv/README.md create mode 100644 node_modules/ajv/dist/ajv.bundle.js create mode 100644 node_modules/ajv/dist/ajv.min.js create mode 100644 node_modules/ajv/dist/ajv.min.js.map create mode 100644 node_modules/ajv/lib/ajv.d.ts create mode 100644 node_modules/ajv/lib/ajv.js create mode 100644 node_modules/ajv/lib/cache.js create mode 100644 node_modules/ajv/lib/compile/async.js create mode 100644 node_modules/ajv/lib/compile/equal.js create mode 100644 node_modules/ajv/lib/compile/error_classes.js create mode 100644 node_modules/ajv/lib/compile/formats.js create mode 100644 node_modules/ajv/lib/compile/index.js create mode 100644 node_modules/ajv/lib/compile/resolve.js create mode 100644 node_modules/ajv/lib/compile/rules.js create mode 100644 node_modules/ajv/lib/compile/schema_obj.js create mode 100644 node_modules/ajv/lib/compile/ucs2length.js create mode 100644 node_modules/ajv/lib/compile/util.js create mode 100644 node_modules/ajv/lib/data.js create mode 100644 node_modules/ajv/lib/definition_schema.js create mode 100644 node_modules/ajv/lib/dot/_limit.jst create mode 100644 node_modules/ajv/lib/dot/_limitItems.jst create mode 100644 node_modules/ajv/lib/dot/_limitLength.jst create mode 100644 node_modules/ajv/lib/dot/_limitProperties.jst create mode 100644 node_modules/ajv/lib/dot/allOf.jst create mode 100644 node_modules/ajv/lib/dot/anyOf.jst create mode 100644 node_modules/ajv/lib/dot/coerce.def create mode 100644 node_modules/ajv/lib/dot/comment.jst create mode 100644 node_modules/ajv/lib/dot/const.jst create mode 100644 node_modules/ajv/lib/dot/contains.jst create mode 100644 node_modules/ajv/lib/dot/custom.jst create mode 100644 node_modules/ajv/lib/dot/defaults.def create mode 100644 node_modules/ajv/lib/dot/definitions.def create mode 100644 node_modules/ajv/lib/dot/dependencies.jst create mode 100644 node_modules/ajv/lib/dot/enum.jst create mode 100644 node_modules/ajv/lib/dot/errors.def create mode 100644 node_modules/ajv/lib/dot/format.jst create mode 100644 node_modules/ajv/lib/dot/if.jst create mode 100644 node_modules/ajv/lib/dot/items.jst create mode 100644 node_modules/ajv/lib/dot/missing.def create mode 100644 node_modules/ajv/lib/dot/multipleOf.jst create mode 100644 node_modules/ajv/lib/dot/not.jst create mode 100644 node_modules/ajv/lib/dot/oneOf.jst create mode 100644 node_modules/ajv/lib/dot/pattern.jst create mode 100644 node_modules/ajv/lib/dot/properties.jst create mode 100644 node_modules/ajv/lib/dot/propertyNames.jst create mode 100644 node_modules/ajv/lib/dot/ref.jst create mode 100644 node_modules/ajv/lib/dot/required.jst create mode 100644 node_modules/ajv/lib/dot/uniqueItems.jst create mode 100644 node_modules/ajv/lib/dot/validate.jst create mode 100644 node_modules/ajv/lib/dotjs/README.md create mode 100644 node_modules/ajv/lib/dotjs/_limit.js create mode 100644 node_modules/ajv/lib/dotjs/_limitItems.js create mode 100644 node_modules/ajv/lib/dotjs/_limitLength.js create mode 100644 node_modules/ajv/lib/dotjs/_limitProperties.js create mode 100644 node_modules/ajv/lib/dotjs/allOf.js create mode 100644 node_modules/ajv/lib/dotjs/anyOf.js create mode 100644 node_modules/ajv/lib/dotjs/comment.js create mode 100644 node_modules/ajv/lib/dotjs/const.js create mode 100644 node_modules/ajv/lib/dotjs/contains.js create mode 100644 node_modules/ajv/lib/dotjs/custom.js create mode 100644 node_modules/ajv/lib/dotjs/dependencies.js create mode 100644 node_modules/ajv/lib/dotjs/enum.js create mode 100644 node_modules/ajv/lib/dotjs/format.js create mode 100644 node_modules/ajv/lib/dotjs/if.js create mode 100644 node_modules/ajv/lib/dotjs/index.js create mode 100644 node_modules/ajv/lib/dotjs/items.js create mode 100644 node_modules/ajv/lib/dotjs/multipleOf.js create mode 100644 node_modules/ajv/lib/dotjs/not.js create mode 100644 node_modules/ajv/lib/dotjs/oneOf.js create mode 100644 node_modules/ajv/lib/dotjs/pattern.js create mode 100644 node_modules/ajv/lib/dotjs/properties.js create mode 100644 node_modules/ajv/lib/dotjs/propertyNames.js create mode 100644 node_modules/ajv/lib/dotjs/ref.js create mode 100644 node_modules/ajv/lib/dotjs/required.js create mode 100644 node_modules/ajv/lib/dotjs/uniqueItems.js create mode 100644 node_modules/ajv/lib/dotjs/validate.js create mode 100644 node_modules/ajv/lib/keyword.js create mode 100644 node_modules/ajv/lib/refs/data.json create mode 100644 node_modules/ajv/lib/refs/json-schema-draft-04.json create mode 100644 node_modules/ajv/lib/refs/json-schema-draft-06.json create mode 100644 node_modules/ajv/lib/refs/json-schema-draft-07.json create mode 100644 node_modules/ajv/lib/refs/json-schema-secure.json create mode 100644 node_modules/ajv/package.json create mode 100644 node_modules/ajv/scripts/.eslintrc.yml create mode 100644 node_modules/ajv/scripts/bundle.js create mode 100644 node_modules/ajv/scripts/compile-dots.js create mode 100644 node_modules/ajv/scripts/info create mode 100644 node_modules/ajv/scripts/prepare-tests create mode 100644 node_modules/ajv/scripts/publish-built-version create mode 100644 node_modules/ajv/scripts/travis-gh-pages create mode 100644 node_modules/ansi-align/CHANGELOG.md create mode 100644 node_modules/ansi-align/LICENSE create mode 100644 node_modules/ansi-align/README.md create mode 100644 node_modules/ansi-align/index.js create mode 100644 node_modules/ansi-align/package.json create mode 100644 node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/ansi-styles/index.js create mode 100644 node_modules/ansi-styles/license create mode 100644 node_modules/ansi-styles/package.json create mode 100644 node_modules/ansi-styles/readme.md create mode 100644 node_modules/anymatch/LICENSE create mode 100644 node_modules/anymatch/README.md create mode 100644 node_modules/anymatch/index.d.ts create mode 100644 node_modules/anymatch/index.js create mode 100644 node_modules/anymatch/package.json create mode 100644 node_modules/array-flatten/LICENSE create mode 100644 node_modules/array-flatten/README.md create mode 100644 node_modules/array-flatten/array-flatten.js create mode 100644 node_modules/array-flatten/package.json create mode 100644 node_modules/asn1/LICENSE create mode 100644 node_modules/asn1/README.md create mode 100644 node_modules/asn1/lib/ber/errors.js create mode 100644 node_modules/asn1/lib/ber/index.js create mode 100644 node_modules/asn1/lib/ber/reader.js create mode 100644 node_modules/asn1/lib/ber/types.js create mode 100644 node_modules/asn1/lib/ber/writer.js create mode 100644 node_modules/asn1/lib/index.js create mode 100644 node_modules/asn1/package.json create mode 100644 node_modules/assert-plus/AUTHORS create mode 100644 node_modules/assert-plus/CHANGES.md create mode 100644 node_modules/assert-plus/README.md create mode 100644 node_modules/assert-plus/assert.js create mode 100644 node_modules/assert-plus/package.json create mode 100644 node_modules/asynckit/LICENSE create mode 100644 node_modules/asynckit/README.md create mode 100644 node_modules/asynckit/bench.js create mode 100644 node_modules/asynckit/index.js create mode 100644 node_modules/asynckit/lib/abort.js create mode 100644 node_modules/asynckit/lib/async.js create mode 100644 node_modules/asynckit/lib/defer.js create mode 100644 node_modules/asynckit/lib/iterate.js create mode 100644 node_modules/asynckit/lib/readable_asynckit.js create mode 100644 node_modules/asynckit/lib/readable_parallel.js create mode 100644 node_modules/asynckit/lib/readable_serial.js create mode 100644 node_modules/asynckit/lib/readable_serial_ordered.js create mode 100644 node_modules/asynckit/lib/state.js create mode 100644 node_modules/asynckit/lib/streamify.js create mode 100644 node_modules/asynckit/lib/terminator.js create mode 100644 node_modules/asynckit/package.json create mode 100644 node_modules/asynckit/parallel.js create mode 100644 node_modules/asynckit/serial.js create mode 100644 node_modules/asynckit/serialOrdered.js create mode 100644 node_modules/asynckit/stream.js create mode 100644 node_modules/aws-sign2/LICENSE create mode 100644 node_modules/aws-sign2/README.md create mode 100644 node_modules/aws-sign2/index.js create mode 100644 node_modules/aws-sign2/package.json create mode 100644 node_modules/aws4/.travis.yml create mode 100644 node_modules/aws4/LICENSE create mode 100644 node_modules/aws4/README.md create mode 100644 node_modules/aws4/aws4.js create mode 100644 node_modules/aws4/lru.js create mode 100644 node_modules/aws4/package.json create mode 100644 node_modules/balanced-match/.github/FUNDING.yml create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/bcrypt-pbkdf/CONTRIBUTING.md create mode 100644 node_modules/bcrypt-pbkdf/LICENSE create mode 100644 node_modules/bcrypt-pbkdf/README.md create mode 100644 node_modules/bcrypt-pbkdf/index.js create mode 100644 node_modules/bcrypt-pbkdf/package.json create mode 100644 node_modules/binary-extensions/binary-extensions.json create mode 100644 node_modules/binary-extensions/binary-extensions.json.d.ts create mode 100644 node_modules/binary-extensions/index.d.ts create mode 100644 node_modules/binary-extensions/index.js create mode 100644 node_modules/binary-extensions/license create mode 100644 node_modules/binary-extensions/package.json create mode 100644 node_modules/binary-extensions/readme.md create mode 100644 node_modules/body-parser/HISTORY.md create mode 100644 node_modules/body-parser/LICENSE create mode 100644 node_modules/body-parser/README.md create mode 100644 node_modules/body-parser/index.js create mode 100644 node_modules/body-parser/lib/read.js create mode 100644 node_modules/body-parser/lib/types/json.js create mode 100644 node_modules/body-parser/lib/types/raw.js create mode 100644 node_modules/body-parser/lib/types/text.js create mode 100644 node_modules/body-parser/lib/types/urlencoded.js create mode 100644 node_modules/body-parser/package.json create mode 100644 node_modules/boxen/index.d.ts create mode 100644 node_modules/boxen/index.js create mode 100644 node_modules/boxen/license create mode 100644 node_modules/boxen/package.json create mode 100644 node_modules/boxen/readme.md create mode 100644 node_modules/brace-expansion/LICENSE create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/braces/CHANGELOG.md create mode 100644 node_modules/braces/LICENSE create mode 100644 node_modules/braces/README.md create mode 100644 node_modules/braces/index.js create mode 100644 node_modules/braces/lib/compile.js create mode 100644 node_modules/braces/lib/constants.js create mode 100644 node_modules/braces/lib/expand.js create mode 100644 node_modules/braces/lib/parse.js create mode 100644 node_modules/braces/lib/stringify.js create mode 100644 node_modules/braces/lib/utils.js create mode 100644 node_modules/braces/package.json create mode 100644 node_modules/bytes/History.md create mode 100644 node_modules/bytes/LICENSE create mode 100644 node_modules/bytes/Readme.md create mode 100644 node_modules/bytes/index.js create mode 100644 node_modules/bytes/package.json create mode 100644 node_modules/cacheable-request/LICENSE create mode 100644 node_modules/cacheable-request/README.md create mode 100644 node_modules/cacheable-request/node_modules/get-stream/buffer-stream.js create mode 100644 node_modules/cacheable-request/node_modules/get-stream/index.d.ts create mode 100644 node_modules/cacheable-request/node_modules/get-stream/index.js create mode 100644 node_modules/cacheable-request/node_modules/get-stream/license create mode 100644 node_modules/cacheable-request/node_modules/get-stream/package.json create mode 100644 node_modules/cacheable-request/node_modules/get-stream/readme.md create mode 100644 node_modules/cacheable-request/node_modules/lowercase-keys/index.d.ts create mode 100644 node_modules/cacheable-request/node_modules/lowercase-keys/index.js create mode 100644 node_modules/cacheable-request/node_modules/lowercase-keys/license create mode 100644 node_modules/cacheable-request/node_modules/lowercase-keys/package.json create mode 100644 node_modules/cacheable-request/node_modules/lowercase-keys/readme.md create mode 100644 node_modules/cacheable-request/package.json create mode 100644 node_modules/cacheable-request/src/index.js create mode 100644 node_modules/camelcase/index.d.ts create mode 100644 node_modules/camelcase/index.js create mode 100644 node_modules/camelcase/license create mode 100644 node_modules/camelcase/package.json create mode 100644 node_modules/camelcase/readme.md create mode 100644 node_modules/caseless/LICENSE create mode 100644 node_modules/caseless/README.md create mode 100644 node_modules/caseless/index.js create mode 100644 node_modules/caseless/package.json create mode 100644 node_modules/caseless/test.js create mode 100644 node_modules/chalk/index.d.ts create mode 100644 node_modules/chalk/license create mode 100644 node_modules/chalk/node_modules/has-flag/index.d.ts create mode 100644 node_modules/chalk/node_modules/has-flag/index.js create mode 100644 node_modules/chalk/node_modules/has-flag/license create mode 100644 node_modules/chalk/node_modules/has-flag/package.json create mode 100644 node_modules/chalk/node_modules/has-flag/readme.md create mode 100644 node_modules/chalk/node_modules/supports-color/browser.js create mode 100644 node_modules/chalk/node_modules/supports-color/index.js create mode 100644 node_modules/chalk/node_modules/supports-color/license create mode 100644 node_modules/chalk/node_modules/supports-color/package.json create mode 100644 node_modules/chalk/node_modules/supports-color/readme.md create mode 100644 node_modules/chalk/package.json create mode 100644 node_modules/chalk/readme.md create mode 100644 node_modules/chalk/source/index.js create mode 100644 node_modules/chalk/source/templates.js create mode 100644 node_modules/chalk/source/util.js create mode 100644 node_modules/chokidar/LICENSE create mode 100644 node_modules/chokidar/README.md create mode 100644 node_modules/chokidar/index.js create mode 100644 node_modules/chokidar/lib/constants.js create mode 100644 node_modules/chokidar/lib/fsevents-handler.js create mode 100644 node_modules/chokidar/lib/nodefs-handler.js create mode 100644 node_modules/chokidar/package.json create mode 100644 node_modules/chokidar/types/index.d.ts create mode 100644 node_modules/ci-info/CHANGELOG.md create mode 100644 node_modules/ci-info/LICENSE create mode 100644 node_modules/ci-info/README.md create mode 100644 node_modules/ci-info/index.js create mode 100644 node_modules/ci-info/package.json create mode 100644 node_modules/ci-info/vendors.json create mode 100644 node_modules/cli-boxes/boxes.json create mode 100644 node_modules/cli-boxes/index.d.ts create mode 100644 node_modules/cli-boxes/index.js create mode 100644 node_modules/cli-boxes/license create mode 100644 node_modules/cli-boxes/package.json create mode 100644 node_modules/cli-boxes/readme.md create mode 100644 node_modules/clone-response/LICENSE create mode 100644 node_modules/clone-response/README.md create mode 100644 node_modules/clone-response/package.json create mode 100644 node_modules/clone-response/src/index.js create mode 100644 node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/color-convert/LICENSE create mode 100644 node_modules/color-convert/README.md create mode 100644 node_modules/color-convert/conversions.js create mode 100644 node_modules/color-convert/index.js create mode 100644 node_modules/color-convert/package.json create mode 100644 node_modules/color-convert/route.js create mode 100644 node_modules/color-name/LICENSE create mode 100644 node_modules/color-name/README.md create mode 100644 node_modules/color-name/index.js create mode 100644 node_modules/color-name/package.json create mode 100644 node_modules/combined-stream/License create mode 100644 node_modules/combined-stream/Readme.md create mode 100644 node_modules/combined-stream/lib/combined_stream.js create mode 100644 node_modules/combined-stream/package.json create mode 100644 node_modules/combined-stream/yarn.lock create mode 100644 node_modules/concat-map/.travis.yml create mode 100644 node_modules/concat-map/LICENSE create mode 100644 node_modules/concat-map/README.markdown create mode 100644 node_modules/concat-map/example/map.js create mode 100644 node_modules/concat-map/index.js create mode 100644 node_modules/concat-map/package.json create mode 100644 node_modules/concat-map/test/map.js create mode 100644 node_modules/configstore/index.js create mode 100644 node_modules/configstore/license create mode 100644 node_modules/configstore/package.json create mode 100644 node_modules/configstore/readme.md create mode 100644 node_modules/content-disposition/HISTORY.md create mode 100644 node_modules/content-disposition/LICENSE create mode 100644 node_modules/content-disposition/README.md create mode 100644 node_modules/content-disposition/index.js create mode 100644 node_modules/content-disposition/package.json create mode 100644 node_modules/content-type/HISTORY.md create mode 100644 node_modules/content-type/LICENSE create mode 100644 node_modules/content-type/README.md create mode 100644 node_modules/content-type/index.js create mode 100644 node_modules/content-type/package.json create mode 100644 node_modules/cookie-signature/.npmignore create mode 100644 node_modules/cookie-signature/History.md create mode 100644 node_modules/cookie-signature/Readme.md create mode 100644 node_modules/cookie-signature/index.js create mode 100644 node_modules/cookie-signature/package.json create mode 100644 node_modules/cookie/HISTORY.md create mode 100644 node_modules/cookie/LICENSE create mode 100644 node_modules/cookie/README.md create mode 100644 node_modules/cookie/index.js create mode 100644 node_modules/cookie/package.json create mode 100644 node_modules/cool-ascii-faces/.npmignore create mode 100644 node_modules/cool-ascii-faces/cli.js create mode 100644 node_modules/cool-ascii-faces/collaborators.md create mode 100644 node_modules/cool-ascii-faces/index.js create mode 100644 node_modules/cool-ascii-faces/package.json create mode 100644 node_modules/cool-ascii-faces/readme.md create mode 100644 node_modules/cool-ascii-faces/test.js create mode 100644 node_modules/core-util-is/LICENSE create mode 100644 node_modules/core-util-is/README.md create mode 100644 node_modules/core-util-is/float.patch create mode 100644 node_modules/core-util-is/lib/util.js create mode 100644 node_modules/core-util-is/package.json create mode 100644 node_modules/core-util-is/test.js create mode 100644 node_modules/crypto-random-string/index.d.ts create mode 100644 node_modules/crypto-random-string/index.js create mode 100644 node_modules/crypto-random-string/license create mode 100644 node_modules/crypto-random-string/package.json create mode 100644 node_modules/crypto-random-string/readme.md create mode 100644 node_modules/dashdash/CHANGES.md create mode 100644 node_modules/dashdash/LICENSE.txt create mode 100644 node_modules/dashdash/README.md create mode 100644 node_modules/dashdash/etc/dashdash.bash_completion.in create mode 100644 node_modules/dashdash/lib/dashdash.js create mode 100644 node_modules/dashdash/package.json create mode 100644 node_modules/debug/.coveralls.yml create mode 100644 node_modules/debug/.eslintrc create mode 100644 node_modules/debug/.npmignore create mode 100644 node_modules/debug/.travis.yml create mode 100644 node_modules/debug/CHANGELOG.md create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/Makefile create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/component.json create mode 100644 node_modules/debug/karma.conf.js create mode 100644 node_modules/debug/node.js create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/debug.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/inspector-log.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/decompress-response/index.js create mode 100644 node_modules/decompress-response/license create mode 100644 node_modules/decompress-response/package.json create mode 100644 node_modules/decompress-response/readme.md create mode 100644 node_modules/deep-extend/CHANGELOG.md create mode 100644 node_modules/deep-extend/LICENSE create mode 100644 node_modules/deep-extend/README.md create mode 100644 node_modules/deep-extend/index.js create mode 100644 node_modules/deep-extend/lib/deep-extend.js create mode 100644 node_modules/deep-extend/package.json create mode 100644 node_modules/defer-to-connect/LICENSE create mode 100644 node_modules/defer-to-connect/README.md create mode 100644 node_modules/defer-to-connect/dist/index.d.ts create mode 100644 node_modules/defer-to-connect/dist/index.js create mode 100644 node_modules/defer-to-connect/package.json create mode 100644 node_modules/delayed-stream/.npmignore create mode 100644 node_modules/delayed-stream/License create mode 100644 node_modules/delayed-stream/Makefile create mode 100644 node_modules/delayed-stream/Readme.md create mode 100644 node_modules/delayed-stream/lib/delayed_stream.js create mode 100644 node_modules/delayed-stream/package.json create mode 100644 node_modules/depd/History.md create mode 100644 node_modules/depd/LICENSE create mode 100644 node_modules/depd/Readme.md create mode 100644 node_modules/depd/index.js create mode 100644 node_modules/depd/lib/browser/index.js create mode 100644 node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 node_modules/depd/lib/compat/event-listener-count.js create mode 100644 node_modules/depd/lib/compat/index.js create mode 100644 node_modules/depd/package.json create mode 100644 node_modules/destroy/LICENSE create mode 100644 node_modules/destroy/README.md create mode 100644 node_modules/destroy/index.js create mode 100644 node_modules/destroy/package.json create mode 100644 node_modules/dot-prop/index.d.ts create mode 100644 node_modules/dot-prop/index.js create mode 100644 node_modules/dot-prop/license create mode 100644 node_modules/dot-prop/package.json create mode 100644 node_modules/dot-prop/readme.md create mode 100644 node_modules/duplexer3/LICENSE.md create mode 100644 node_modules/duplexer3/README.md create mode 100644 node_modules/duplexer3/index.js create mode 100644 node_modules/duplexer3/package.json create mode 100644 node_modules/ecc-jsbn/LICENSE create mode 100644 node_modules/ecc-jsbn/README.md create mode 100644 node_modules/ecc-jsbn/index.js create mode 100644 node_modules/ecc-jsbn/lib/LICENSE-jsbn create mode 100644 node_modules/ecc-jsbn/lib/ec.js create mode 100644 node_modules/ecc-jsbn/lib/sec.js create mode 100644 node_modules/ecc-jsbn/package.json create mode 100644 node_modules/ecc-jsbn/test.js create mode 100644 node_modules/ee-first/LICENSE create mode 100644 node_modules/ee-first/README.md create mode 100644 node_modules/ee-first/index.js create mode 100644 node_modules/ee-first/package.json create mode 100644 node_modules/ejs/LICENSE create mode 100644 node_modules/ejs/README.md create mode 100644 node_modules/ejs/ejs.js create mode 100644 node_modules/ejs/ejs.min.js create mode 100644 node_modules/ejs/jakefile.js create mode 100644 node_modules/ejs/lib/ejs.js create mode 100644 node_modules/ejs/lib/utils.js create mode 100644 node_modules/ejs/package.json create mode 100644 node_modules/ejs/postinstall.js create mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/emoji-regex/README.md create mode 100644 node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/emoji-regex/index.js create mode 100644 node_modules/emoji-regex/package.json create mode 100644 node_modules/emoji-regex/text.js create mode 100644 node_modules/encodeurl/HISTORY.md create mode 100644 node_modules/encodeurl/LICENSE create mode 100644 node_modules/encodeurl/README.md create mode 100644 node_modules/encodeurl/index.js create mode 100644 node_modules/encodeurl/package.json create mode 100644 node_modules/end-of-stream/LICENSE create mode 100644 node_modules/end-of-stream/README.md create mode 100644 node_modules/end-of-stream/index.js create mode 100644 node_modules/end-of-stream/package.json create mode 100644 node_modules/escape-goat/index.d.ts create mode 100644 node_modules/escape-goat/index.js create mode 100644 node_modules/escape-goat/license create mode 100644 node_modules/escape-goat/package.json create mode 100644 node_modules/escape-goat/readme.md create mode 100644 node_modules/escape-html/LICENSE create mode 100644 node_modules/escape-html/Readme.md create mode 100644 node_modules/escape-html/index.js create mode 100644 node_modules/escape-html/package.json create mode 100644 node_modules/etag/HISTORY.md create mode 100644 node_modules/etag/LICENSE create mode 100644 node_modules/etag/README.md create mode 100644 node_modules/etag/index.js create mode 100644 node_modules/etag/package.json create mode 100644 node_modules/express/History.md create mode 100644 node_modules/express/LICENSE create mode 100644 node_modules/express/Readme.md create mode 100644 node_modules/express/index.js create mode 100644 node_modules/express/lib/application.js create mode 100644 node_modules/express/lib/express.js create mode 100644 node_modules/express/lib/middleware/init.js create mode 100644 node_modules/express/lib/middleware/query.js create mode 100644 node_modules/express/lib/request.js create mode 100644 node_modules/express/lib/response.js create mode 100644 node_modules/express/lib/router/index.js create mode 100644 node_modules/express/lib/router/layer.js create mode 100644 node_modules/express/lib/router/route.js create mode 100644 node_modules/express/lib/utils.js create mode 100644 node_modules/express/lib/view.js create mode 100644 node_modules/express/package.json create mode 100644 node_modules/extend/.editorconfig create mode 100644 node_modules/extend/.eslintrc create mode 100644 node_modules/extend/.jscs.json create mode 100644 node_modules/extend/.travis.yml create mode 100644 node_modules/extend/CHANGELOG.md create mode 100644 node_modules/extend/LICENSE create mode 100644 node_modules/extend/README.md create mode 100644 node_modules/extend/component.json create mode 100644 node_modules/extend/index.js create mode 100644 node_modules/extend/package.json create mode 100644 node_modules/extsprintf/.gitmodules create mode 100644 node_modules/extsprintf/.npmignore create mode 100644 node_modules/extsprintf/LICENSE create mode 100644 node_modules/extsprintf/Makefile create mode 100644 node_modules/extsprintf/Makefile.targ create mode 100644 node_modules/extsprintf/README.md create mode 100644 node_modules/extsprintf/jsl.node.conf create mode 100644 node_modules/extsprintf/lib/extsprintf.js create mode 100644 node_modules/extsprintf/package.json create mode 100644 node_modules/fast-deep-equal/LICENSE create mode 100644 node_modules/fast-deep-equal/README.md create mode 100644 node_modules/fast-deep-equal/es6/index.d.ts create mode 100644 node_modules/fast-deep-equal/es6/index.js create mode 100644 node_modules/fast-deep-equal/es6/react.d.ts create mode 100644 node_modules/fast-deep-equal/es6/react.js create mode 100644 node_modules/fast-deep-equal/index.d.ts create mode 100644 node_modules/fast-deep-equal/index.js create mode 100644 node_modules/fast-deep-equal/package.json create mode 100644 node_modules/fast-deep-equal/react.d.ts create mode 100644 node_modules/fast-deep-equal/react.js create mode 100644 node_modules/fast-json-stable-stringify/.eslintrc.yml create mode 100644 node_modules/fast-json-stable-stringify/.github/FUNDING.yml create mode 100644 node_modules/fast-json-stable-stringify/.travis.yml create mode 100644 node_modules/fast-json-stable-stringify/LICENSE create mode 100644 node_modules/fast-json-stable-stringify/README.md create mode 100644 node_modules/fast-json-stable-stringify/benchmark/index.js create mode 100644 node_modules/fast-json-stable-stringify/benchmark/test.json create mode 100644 node_modules/fast-json-stable-stringify/example/key_cmp.js create mode 100644 node_modules/fast-json-stable-stringify/example/nested.js create mode 100644 node_modules/fast-json-stable-stringify/example/str.js create mode 100644 node_modules/fast-json-stable-stringify/example/value_cmp.js create mode 100644 node_modules/fast-json-stable-stringify/index.d.ts create mode 100644 node_modules/fast-json-stable-stringify/index.js create mode 100644 node_modules/fast-json-stable-stringify/package.json create mode 100644 node_modules/fast-json-stable-stringify/test/cmp.js create mode 100644 node_modules/fast-json-stable-stringify/test/nested.js create mode 100644 node_modules/fast-json-stable-stringify/test/str.js create mode 100644 node_modules/fast-json-stable-stringify/test/to-json.js create mode 100644 node_modules/fill-range/LICENSE create mode 100644 node_modules/fill-range/README.md create mode 100644 node_modules/fill-range/index.js create mode 100644 node_modules/fill-range/package.json create mode 100644 node_modules/finalhandler/HISTORY.md create mode 100644 node_modules/finalhandler/LICENSE create mode 100644 node_modules/finalhandler/README.md create mode 100644 node_modules/finalhandler/index.js create mode 100644 node_modules/finalhandler/package.json create mode 100644 node_modules/forever-agent/LICENSE create mode 100644 node_modules/forever-agent/README.md create mode 100644 node_modules/forever-agent/index.js create mode 100644 node_modules/forever-agent/package.json create mode 100644 node_modules/form-data/License create mode 100644 node_modules/form-data/README.md create mode 100644 node_modules/form-data/README.md.bak create mode 100644 node_modules/form-data/lib/browser.js create mode 100644 node_modules/form-data/lib/form_data.js create mode 100644 node_modules/form-data/lib/populate.js create mode 100644 node_modules/form-data/package.json create mode 100644 node_modules/form-data/yarn.lock create mode 100644 node_modules/forwarded/HISTORY.md create mode 100644 node_modules/forwarded/LICENSE create mode 100644 node_modules/forwarded/README.md create mode 100644 node_modules/forwarded/index.js create mode 100644 node_modules/forwarded/package.json create mode 100644 node_modules/fresh/HISTORY.md create mode 100644 node_modules/fresh/LICENSE create mode 100644 node_modules/fresh/README.md create mode 100644 node_modules/fresh/index.js create mode 100644 node_modules/fresh/package.json create mode 100644 node_modules/get-stream/buffer-stream.js create mode 100644 node_modules/get-stream/index.js create mode 100644 node_modules/get-stream/license create mode 100644 node_modules/get-stream/package.json create mode 100644 node_modules/get-stream/readme.md create mode 100644 node_modules/getpass/.npmignore create mode 100644 node_modules/getpass/.travis.yml create mode 100644 node_modules/getpass/LICENSE create mode 100644 node_modules/getpass/README.md create mode 100644 node_modules/getpass/lib/index.js create mode 100644 node_modules/getpass/package.json create mode 100644 node_modules/glob-parent/CHANGELOG.md create mode 100644 node_modules/glob-parent/LICENSE create mode 100644 node_modules/glob-parent/README.md create mode 100644 node_modules/glob-parent/index.js create mode 100644 node_modules/glob-parent/package.json create mode 100644 node_modules/global-dirs/index.d.ts create mode 100644 node_modules/global-dirs/index.js create mode 100644 node_modules/global-dirs/license create mode 100644 node_modules/global-dirs/package.json create mode 100644 node_modules/global-dirs/readme.md create mode 100644 node_modules/got/license create mode 100644 node_modules/got/package.json create mode 100644 node_modules/got/readme.md create mode 100644 node_modules/got/source/as-promise.js create mode 100644 node_modules/got/source/as-stream.js create mode 100644 node_modules/got/source/create.js create mode 100644 node_modules/got/source/errors.js create mode 100644 node_modules/got/source/get-response.js create mode 100644 node_modules/got/source/index.js create mode 100644 node_modules/got/source/known-hook-events.js create mode 100644 node_modules/got/source/merge.js create mode 100644 node_modules/got/source/normalize-arguments.js create mode 100644 node_modules/got/source/progress.js create mode 100644 node_modules/got/source/request-as-event-emitter.js create mode 100644 node_modules/got/source/utils/deep-freeze.js create mode 100644 node_modules/got/source/utils/get-body-size.js create mode 100644 node_modules/got/source/utils/is-form-data.js create mode 100644 node_modules/got/source/utils/timed-out.js create mode 100644 node_modules/got/source/utils/url-to-options.js create mode 100644 node_modules/graceful-fs/LICENSE create mode 100644 node_modules/graceful-fs/README.md create mode 100644 node_modules/graceful-fs/clone.js create mode 100644 node_modules/graceful-fs/graceful-fs.js create mode 100644 node_modules/graceful-fs/legacy-streams.js create mode 100644 node_modules/graceful-fs/package.json create mode 100644 node_modules/graceful-fs/polyfills.js create mode 100644 node_modules/har-schema/LICENSE create mode 100644 node_modules/har-schema/README.md create mode 100644 node_modules/har-schema/lib/afterRequest.json create mode 100644 node_modules/har-schema/lib/beforeRequest.json create mode 100644 node_modules/har-schema/lib/browser.json create mode 100644 node_modules/har-schema/lib/cache.json create mode 100644 node_modules/har-schema/lib/content.json create mode 100644 node_modules/har-schema/lib/cookie.json create mode 100644 node_modules/har-schema/lib/creator.json create mode 100644 node_modules/har-schema/lib/entry.json create mode 100644 node_modules/har-schema/lib/har.json create mode 100644 node_modules/har-schema/lib/header.json create mode 100644 node_modules/har-schema/lib/index.js create mode 100644 node_modules/har-schema/lib/log.json create mode 100644 node_modules/har-schema/lib/page.json create mode 100644 node_modules/har-schema/lib/pageTimings.json create mode 100644 node_modules/har-schema/lib/postData.json create mode 100644 node_modules/har-schema/lib/query.json create mode 100644 node_modules/har-schema/lib/request.json create mode 100644 node_modules/har-schema/lib/response.json create mode 100644 node_modules/har-schema/lib/timings.json create mode 100644 node_modules/har-schema/package.json create mode 100644 node_modules/har-validator/LICENSE create mode 100644 node_modules/har-validator/README.md create mode 100644 node_modules/har-validator/lib/async.js create mode 100644 node_modules/har-validator/lib/error.js create mode 100644 node_modules/har-validator/lib/promise.js create mode 100644 node_modules/har-validator/package.json create mode 100644 node_modules/has-flag/index.js create mode 100644 node_modules/has-flag/license create mode 100644 node_modules/has-flag/package.json create mode 100644 node_modules/has-flag/readme.md create mode 100644 node_modules/has-yarn/index.d.ts create mode 100644 node_modules/has-yarn/index.js create mode 100644 node_modules/has-yarn/license create mode 100644 node_modules/has-yarn/package.json create mode 100644 node_modules/has-yarn/readme.md create mode 100644 node_modules/http-cache-semantics/LICENSE create mode 100644 node_modules/http-cache-semantics/README.md create mode 100644 node_modules/http-cache-semantics/index.js create mode 100644 node_modules/http-cache-semantics/package.json create mode 100644 node_modules/http-errors/HISTORY.md create mode 100644 node_modules/http-errors/LICENSE create mode 100644 node_modules/http-errors/README.md create mode 100644 node_modules/http-errors/index.js create mode 100644 node_modules/http-errors/package.json create mode 100644 node_modules/http-signature/.dir-locals.el create mode 100644 node_modules/http-signature/.npmignore create mode 100644 node_modules/http-signature/CHANGES.md create mode 100644 node_modules/http-signature/LICENSE create mode 100644 node_modules/http-signature/README.md create mode 100644 node_modules/http-signature/http_signing.md create mode 100644 node_modules/http-signature/lib/index.js create mode 100644 node_modules/http-signature/lib/parser.js create mode 100644 node_modules/http-signature/lib/signer.js create mode 100644 node_modules/http-signature/lib/utils.js create mode 100644 node_modules/http-signature/lib/verify.js create mode 100644 node_modules/http-signature/package.json create mode 100644 node_modules/iconv-lite/Changelog.md create mode 100644 node_modules/iconv-lite/LICENSE create mode 100644 node_modules/iconv-lite/README.md create mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/index.js create mode 100644 node_modules/iconv-lite/encodings/internal.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 node_modules/iconv-lite/encodings/utf16.js create mode 100644 node_modules/iconv-lite/encodings/utf7.js create mode 100644 node_modules/iconv-lite/lib/bom-handling.js create mode 100644 node_modules/iconv-lite/lib/extend-node.js create mode 100644 node_modules/iconv-lite/lib/index.d.ts create mode 100644 node_modules/iconv-lite/lib/index.js create mode 100644 node_modules/iconv-lite/lib/streams.js create mode 100644 node_modules/iconv-lite/package.json create mode 100644 node_modules/ignore-by-default/LICENSE create mode 100644 node_modules/ignore-by-default/README.md create mode 100644 node_modules/ignore-by-default/index.js create mode 100644 node_modules/ignore-by-default/package.json create mode 100644 node_modules/import-lazy/index.js create mode 100644 node_modules/import-lazy/license create mode 100644 node_modules/import-lazy/package.json create mode 100644 node_modules/import-lazy/readme.md create mode 100644 node_modules/imurmurhash/README.md create mode 100644 node_modules/imurmurhash/imurmurhash.js create mode 100644 node_modules/imurmurhash/imurmurhash.min.js create mode 100644 node_modules/imurmurhash/package.json create mode 100644 node_modules/inherits/LICENSE create mode 100644 node_modules/inherits/README.md create mode 100644 node_modules/inherits/inherits.js create mode 100644 node_modules/inherits/inherits_browser.js create mode 100644 node_modules/inherits/package.json create mode 100644 node_modules/ini/LICENSE create mode 100644 node_modules/ini/README.md create mode 100644 node_modules/ini/ini.js create mode 100644 node_modules/ini/package.json create mode 100644 node_modules/ipaddr.js/LICENSE create mode 100644 node_modules/ipaddr.js/README.md create mode 100644 node_modules/ipaddr.js/ipaddr.min.js create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 node_modules/ipaddr.js/package.json create mode 100644 node_modules/is-binary-path/index.d.ts create mode 100644 node_modules/is-binary-path/index.js create mode 100644 node_modules/is-binary-path/license create mode 100644 node_modules/is-binary-path/package.json create mode 100644 node_modules/is-binary-path/readme.md create mode 100644 node_modules/is-ci/CHANGELOG.md create mode 100644 node_modules/is-ci/LICENSE create mode 100644 node_modules/is-ci/README.md create mode 100644 node_modules/is-ci/bin.js create mode 100644 node_modules/is-ci/index.js create mode 100644 node_modules/is-ci/package.json create mode 100644 node_modules/is-extglob/LICENSE create mode 100644 node_modules/is-extglob/README.md create mode 100644 node_modules/is-extglob/index.js create mode 100644 node_modules/is-extglob/package.json create mode 100644 node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/is-glob/LICENSE create mode 100644 node_modules/is-glob/README.md create mode 100644 node_modules/is-glob/index.js create mode 100644 node_modules/is-glob/package.json create mode 100644 node_modules/is-installed-globally/index.d.ts create mode 100644 node_modules/is-installed-globally/index.js create mode 100644 node_modules/is-installed-globally/license create mode 100644 node_modules/is-installed-globally/package.json create mode 100644 node_modules/is-installed-globally/readme.md create mode 100644 node_modules/is-npm/index.d.ts create mode 100644 node_modules/is-npm/index.js create mode 100644 node_modules/is-npm/license create mode 100644 node_modules/is-npm/package.json create mode 100644 node_modules/is-npm/readme.md create mode 100644 node_modules/is-number/LICENSE create mode 100644 node_modules/is-number/README.md create mode 100644 node_modules/is-number/index.js create mode 100644 node_modules/is-number/package.json create mode 100644 node_modules/is-obj/index.d.ts create mode 100644 node_modules/is-obj/index.js create mode 100644 node_modules/is-obj/license create mode 100644 node_modules/is-obj/package.json create mode 100644 node_modules/is-obj/readme.md create mode 100644 node_modules/is-path-inside/index.d.ts create mode 100644 node_modules/is-path-inside/index.js create mode 100644 node_modules/is-path-inside/license create mode 100644 node_modules/is-path-inside/package.json create mode 100644 node_modules/is-path-inside/readme.md create mode 100644 node_modules/is-typedarray/LICENSE.md create mode 100644 node_modules/is-typedarray/README.md create mode 100644 node_modules/is-typedarray/index.js create mode 100644 node_modules/is-typedarray/package.json create mode 100644 node_modules/is-typedarray/test.js create mode 100644 node_modules/is-yarn-global/.travis.yml create mode 100644 node_modules/is-yarn-global/LICENSE create mode 100644 node_modules/is-yarn-global/README.md create mode 100644 node_modules/is-yarn-global/index.js create mode 100644 node_modules/is-yarn-global/package.json create mode 100644 node_modules/isarray/.npmignore create mode 100644 node_modules/isarray/.travis.yml create mode 100644 node_modules/isarray/Makefile create mode 100644 node_modules/isarray/README.md create mode 100644 node_modules/isarray/component.json create mode 100644 node_modules/isarray/index.js create mode 100644 node_modules/isarray/package.json create mode 100644 node_modules/isarray/test.js create mode 100644 node_modules/isstream/.jshintrc create mode 100644 node_modules/isstream/.npmignore create mode 100644 node_modules/isstream/.travis.yml create mode 100644 node_modules/isstream/LICENSE.md create mode 100644 node_modules/isstream/README.md create mode 100644 node_modules/isstream/isstream.js create mode 100644 node_modules/isstream/package.json create mode 100644 node_modules/isstream/test.js create mode 100644 node_modules/jsbn/.npmignore create mode 100644 node_modules/jsbn/LICENSE create mode 100644 node_modules/jsbn/README.md create mode 100644 node_modules/jsbn/example.html create mode 100644 node_modules/jsbn/example.js create mode 100644 node_modules/jsbn/index.js create mode 100644 node_modules/jsbn/package.json create mode 100644 node_modules/json-buffer/.npmignore create mode 100644 node_modules/json-buffer/.travis.yml create mode 100644 node_modules/json-buffer/LICENSE create mode 100644 node_modules/json-buffer/README.md create mode 100644 node_modules/json-buffer/index.js create mode 100644 node_modules/json-buffer/package.json create mode 100644 node_modules/json-buffer/test/index.js create mode 100644 node_modules/json-schema-traverse/.eslintrc.yml create mode 100644 node_modules/json-schema-traverse/.travis.yml create mode 100644 node_modules/json-schema-traverse/LICENSE create mode 100644 node_modules/json-schema-traverse/README.md create mode 100644 node_modules/json-schema-traverse/index.js create mode 100644 node_modules/json-schema-traverse/package.json create mode 100644 node_modules/json-schema-traverse/spec/.eslintrc.yml create mode 100644 node_modules/json-schema-traverse/spec/fixtures/schema.js create mode 100644 node_modules/json-schema-traverse/spec/index.spec.js create mode 100644 node_modules/json-schema/README.md create mode 100644 node_modules/json-schema/draft-00/hyper-schema create mode 100644 node_modules/json-schema/draft-00/json-ref create mode 100644 node_modules/json-schema/draft-00/links create mode 100644 node_modules/json-schema/draft-00/schema create mode 100644 node_modules/json-schema/draft-01/hyper-schema create mode 100644 node_modules/json-schema/draft-01/json-ref create mode 100644 node_modules/json-schema/draft-01/links create mode 100644 node_modules/json-schema/draft-01/schema create mode 100644 node_modules/json-schema/draft-02/hyper-schema create mode 100644 node_modules/json-schema/draft-02/json-ref create mode 100644 node_modules/json-schema/draft-02/links create mode 100644 node_modules/json-schema/draft-02/schema create mode 100644 node_modules/json-schema/draft-03/examples/address create mode 100644 node_modules/json-schema/draft-03/examples/calendar create mode 100644 node_modules/json-schema/draft-03/examples/card create mode 100644 node_modules/json-schema/draft-03/examples/geo create mode 100644 node_modules/json-schema/draft-03/examples/interfaces create mode 100644 node_modules/json-schema/draft-03/hyper-schema create mode 100644 node_modules/json-schema/draft-03/json-ref create mode 100644 node_modules/json-schema/draft-03/links create mode 100644 node_modules/json-schema/draft-03/schema create mode 100644 node_modules/json-schema/draft-04/hyper-schema create mode 100644 node_modules/json-schema/draft-04/links create mode 100644 node_modules/json-schema/draft-04/schema create mode 100644 node_modules/json-schema/draft-zyp-json-schema-03.xml create mode 100644 node_modules/json-schema/draft-zyp-json-schema-04.xml create mode 100644 node_modules/json-schema/lib/links.js create mode 100644 node_modules/json-schema/lib/validate.js create mode 100644 node_modules/json-schema/package.json create mode 100644 node_modules/json-schema/test/tests.js create mode 100644 node_modules/json-stringify-safe/.npmignore create mode 100644 node_modules/json-stringify-safe/CHANGELOG.md create mode 100644 node_modules/json-stringify-safe/LICENSE create mode 100644 node_modules/json-stringify-safe/Makefile create mode 100644 node_modules/json-stringify-safe/README.md create mode 100644 node_modules/json-stringify-safe/package.json create mode 100644 node_modules/json-stringify-safe/stringify.js create mode 100644 node_modules/json-stringify-safe/test/mocha.opts create mode 100644 node_modules/json-stringify-safe/test/stringify_test.js create mode 100644 node_modules/jsprim/CHANGES.md create mode 100644 node_modules/jsprim/CONTRIBUTING.md create mode 100644 node_modules/jsprim/LICENSE create mode 100644 node_modules/jsprim/README.md create mode 100644 node_modules/jsprim/lib/jsprim.js create mode 100644 node_modules/jsprim/package.json create mode 100644 node_modules/keyv/LICENSE create mode 100644 node_modules/keyv/README.md create mode 100644 node_modules/keyv/package.json create mode 100644 node_modules/keyv/src/index.js create mode 100644 node_modules/latest-version/index.d.ts create mode 100644 node_modules/latest-version/index.js create mode 100644 node_modules/latest-version/license create mode 100644 node_modules/latest-version/package.json create mode 100644 node_modules/latest-version/readme.md create mode 100644 node_modules/lowercase-keys/index.js create mode 100644 node_modules/lowercase-keys/license create mode 100644 node_modules/lowercase-keys/package.json create mode 100644 node_modules/lowercase-keys/readme.md create mode 100644 node_modules/lru-cache/LICENSE create mode 100644 node_modules/lru-cache/README.md create mode 100644 node_modules/lru-cache/index.js create mode 100644 node_modules/lru-cache/package.json create mode 100644 node_modules/make-dir/index.d.ts create mode 100644 node_modules/make-dir/index.js create mode 100644 node_modules/make-dir/license create mode 100644 node_modules/make-dir/node_modules/.bin/semver create mode 100644 node_modules/make-dir/node_modules/.bin/semver.cmd create mode 100644 node_modules/make-dir/node_modules/.bin/semver.ps1 create mode 100644 node_modules/make-dir/node_modules/semver/CHANGELOG.md create mode 100644 node_modules/make-dir/node_modules/semver/LICENSE create mode 100644 node_modules/make-dir/node_modules/semver/README.md create mode 100644 node_modules/make-dir/node_modules/semver/bin/semver.js create mode 100644 node_modules/make-dir/node_modules/semver/package.json create mode 100644 node_modules/make-dir/node_modules/semver/range.bnf create mode 100644 node_modules/make-dir/node_modules/semver/semver.js create mode 100644 node_modules/make-dir/package.json create mode 100644 node_modules/make-dir/readme.md create mode 100644 node_modules/media-typer/HISTORY.md create mode 100644 node_modules/media-typer/LICENSE create mode 100644 node_modules/media-typer/README.md create mode 100644 node_modules/media-typer/index.js create mode 100644 node_modules/media-typer/package.json create mode 100644 node_modules/merge-descriptors/HISTORY.md create mode 100644 node_modules/merge-descriptors/LICENSE create mode 100644 node_modules/merge-descriptors/README.md create mode 100644 node_modules/merge-descriptors/index.js create mode 100644 node_modules/merge-descriptors/package.json create mode 100644 node_modules/methods/HISTORY.md create mode 100644 node_modules/methods/LICENSE create mode 100644 node_modules/methods/README.md create mode 100644 node_modules/methods/index.js create mode 100644 node_modules/methods/package.json create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/mime/.npmignore create mode 100644 node_modules/mime/CHANGELOG.md create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/cli.js create mode 100644 node_modules/mime/mime.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/src/build.js create mode 100644 node_modules/mime/src/test.js create mode 100644 node_modules/mime/types.json create mode 100644 node_modules/mimic-response/index.js create mode 100644 node_modules/mimic-response/license create mode 100644 node_modules/mimic-response/package.json create mode 100644 node_modules/mimic-response/readme.md create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/minimatch.js create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minimist/.travis.yml create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/readme.markdown create mode 100644 node_modules/minimist/test/all_bool.js create mode 100644 node_modules/minimist/test/bool.js create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/kv_short.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/num.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/proto.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/stop_early.js create mode 100644 node_modules/minimist/test/unknown.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/negotiator/HISTORY.md create mode 100644 node_modules/negotiator/LICENSE create mode 100644 node_modules/negotiator/README.md create mode 100644 node_modules/negotiator/index.js create mode 100644 node_modules/negotiator/lib/charset.js create mode 100644 node_modules/negotiator/lib/encoding.js create mode 100644 node_modules/negotiator/lib/language.js create mode 100644 node_modules/negotiator/lib/mediaType.js create mode 100644 node_modules/negotiator/package.json create mode 100644 node_modules/nodemon/.eslintrc.json create mode 100644 node_modules/nodemon/.jshintrc create mode 100644 node_modules/nodemon/.releaserc create mode 100644 node_modules/nodemon/.travis.yml create mode 100644 node_modules/nodemon/LICENSE create mode 100644 node_modules/nodemon/README.md create mode 100644 node_modules/nodemon/bin/nodemon.js create mode 100644 node_modules/nodemon/bin/postinstall.js create mode 100644 node_modules/nodemon/bin/windows-kill.exe create mode 100644 node_modules/nodemon/commitlint.config.js create mode 100644 node_modules/nodemon/doc/cli/authors.txt create mode 100644 node_modules/nodemon/doc/cli/config.txt create mode 100644 node_modules/nodemon/doc/cli/help.txt create mode 100644 node_modules/nodemon/doc/cli/logo.txt create mode 100644 node_modules/nodemon/doc/cli/options.txt create mode 100644 node_modules/nodemon/doc/cli/topics.txt create mode 100644 node_modules/nodemon/doc/cli/usage.txt create mode 100644 node_modules/nodemon/doc/cli/whoami.txt create mode 100644 node_modules/nodemon/lib/cli/index.js create mode 100644 node_modules/nodemon/lib/cli/parse.js create mode 100644 node_modules/nodemon/lib/config/command.js create mode 100644 node_modules/nodemon/lib/config/defaults.js create mode 100644 node_modules/nodemon/lib/config/exec.js create mode 100644 node_modules/nodemon/lib/config/index.js create mode 100644 node_modules/nodemon/lib/config/load.js create mode 100644 node_modules/nodemon/lib/help/index.js create mode 100644 node_modules/nodemon/lib/index.js create mode 100644 node_modules/nodemon/lib/monitor/index.js create mode 100644 node_modules/nodemon/lib/monitor/match.js create mode 100644 node_modules/nodemon/lib/monitor/run.js create mode 100644 node_modules/nodemon/lib/monitor/signals.js create mode 100644 node_modules/nodemon/lib/monitor/watch.js create mode 100644 node_modules/nodemon/lib/nodemon.js create mode 100644 node_modules/nodemon/lib/rules/add.js create mode 100644 node_modules/nodemon/lib/rules/index.js create mode 100644 node_modules/nodemon/lib/rules/parse.js create mode 100644 node_modules/nodemon/lib/spawn.js create mode 100644 node_modules/nodemon/lib/utils/bus.js create mode 100644 node_modules/nodemon/lib/utils/clone.js create mode 100644 node_modules/nodemon/lib/utils/colour.js create mode 100644 node_modules/nodemon/lib/utils/index.js create mode 100644 node_modules/nodemon/lib/utils/log.js create mode 100644 node_modules/nodemon/lib/utils/merge.js create mode 100644 node_modules/nodemon/lib/version.js create mode 100644 node_modules/nodemon/node_modules/debug/CHANGELOG.md create mode 100644 node_modules/nodemon/node_modules/debug/LICENSE create mode 100644 node_modules/nodemon/node_modules/debug/README.md create mode 100644 node_modules/nodemon/node_modules/debug/node.js create mode 100644 node_modules/nodemon/node_modules/debug/package.json create mode 100644 node_modules/nodemon/node_modules/debug/src/browser.js create mode 100644 node_modules/nodemon/node_modules/debug/src/common.js create mode 100644 node_modules/nodemon/node_modules/debug/src/index.js create mode 100644 node_modules/nodemon/node_modules/debug/src/node.js create mode 100644 node_modules/nodemon/node_modules/ms/index.js create mode 100644 node_modules/nodemon/node_modules/ms/license.md create mode 100644 node_modules/nodemon/node_modules/ms/package.json create mode 100644 node_modules/nodemon/node_modules/ms/readme.md create mode 100644 node_modules/nodemon/package.json create mode 100644 node_modules/nopt/.npmignore create mode 100644 node_modules/nopt/LICENSE create mode 100644 node_modules/nopt/README.md create mode 100644 node_modules/nopt/bin/nopt.js create mode 100644 node_modules/nopt/examples/my-program.js create mode 100644 node_modules/nopt/lib/nopt.js create mode 100644 node_modules/nopt/package.json create mode 100644 node_modules/normalize-path/LICENSE create mode 100644 node_modules/normalize-path/README.md create mode 100644 node_modules/normalize-path/index.js create mode 100644 node_modules/normalize-path/package.json create mode 100644 node_modules/normalize-url/index.d.ts create mode 100644 node_modules/normalize-url/index.js create mode 100644 node_modules/normalize-url/license create mode 100644 node_modules/normalize-url/package.json create mode 100644 node_modules/normalize-url/readme.md create mode 100644 node_modules/oauth-sign/LICENSE create mode 100644 node_modules/oauth-sign/README.md create mode 100644 node_modules/oauth-sign/index.js create mode 100644 node_modules/oauth-sign/package.json create mode 100644 node_modules/on-finished/HISTORY.md create mode 100644 node_modules/on-finished/LICENSE create mode 100644 node_modules/on-finished/README.md create mode 100644 node_modules/on-finished/index.js create mode 100644 node_modules/on-finished/package.json create mode 100644 node_modules/once/LICENSE create mode 100644 node_modules/once/README.md create mode 100644 node_modules/once/once.js create mode 100644 node_modules/once/package.json create mode 100644 node_modules/p-cancelable/index.d.ts create mode 100644 node_modules/p-cancelable/index.js create mode 100644 node_modules/p-cancelable/license create mode 100644 node_modules/p-cancelable/package.json create mode 100644 node_modules/p-cancelable/readme.md create mode 100644 node_modules/package-json/index.d.ts create mode 100644 node_modules/package-json/index.js create mode 100644 node_modules/package-json/license create mode 100644 node_modules/package-json/node_modules/.bin/semver create mode 100644 node_modules/package-json/node_modules/.bin/semver.cmd create mode 100644 node_modules/package-json/node_modules/.bin/semver.ps1 create mode 100644 node_modules/package-json/node_modules/semver/CHANGELOG.md create mode 100644 node_modules/package-json/node_modules/semver/LICENSE create mode 100644 node_modules/package-json/node_modules/semver/README.md create mode 100644 node_modules/package-json/node_modules/semver/bin/semver.js create mode 100644 node_modules/package-json/node_modules/semver/package.json create mode 100644 node_modules/package-json/node_modules/semver/range.bnf create mode 100644 node_modules/package-json/node_modules/semver/semver.js create mode 100644 node_modules/package-json/package.json create mode 100644 node_modules/package-json/readme.md create mode 100644 node_modules/parseurl/HISTORY.md create mode 100644 node_modules/parseurl/LICENSE create mode 100644 node_modules/parseurl/README.md create mode 100644 node_modules/parseurl/index.js create mode 100644 node_modules/parseurl/package.json create mode 100644 node_modules/path-to-regexp/History.md create mode 100644 node_modules/path-to-regexp/LICENSE create mode 100644 node_modules/path-to-regexp/Readme.md create mode 100644 node_modules/path-to-regexp/index.js create mode 100644 node_modules/path-to-regexp/package.json create mode 100644 node_modules/performance-now/.npmignore create mode 100644 node_modules/performance-now/.tm_properties create mode 100644 node_modules/performance-now/.travis.yml create mode 100644 node_modules/performance-now/README.md create mode 100644 node_modules/performance-now/lib/performance-now.js create mode 100644 node_modules/performance-now/lib/performance-now.js.map create mode 100644 node_modules/performance-now/license.txt create mode 100644 node_modules/performance-now/package.json create mode 100644 node_modules/performance-now/src/index.d.ts create mode 100644 node_modules/performance-now/src/performance-now.coffee create mode 100644 node_modules/performance-now/test/mocha.opts create mode 100644 node_modules/performance-now/test/performance-now.coffee create mode 100644 node_modules/performance-now/test/scripts.coffee create mode 100644 node_modules/performance-now/test/scripts/delayed-call.coffee create mode 100644 node_modules/performance-now/test/scripts/delayed-require.coffee create mode 100644 node_modules/performance-now/test/scripts/difference.coffee create mode 100644 node_modules/performance-now/test/scripts/initial-value.coffee create mode 100644 node_modules/picomatch/CHANGELOG.md create mode 100644 node_modules/picomatch/LICENSE create mode 100644 node_modules/picomatch/README.md create mode 100644 node_modules/picomatch/index.js create mode 100644 node_modules/picomatch/lib/constants.js create mode 100644 node_modules/picomatch/lib/parse.js create mode 100644 node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/picomatch/lib/scan.js create mode 100644 node_modules/picomatch/lib/utils.js create mode 100644 node_modules/picomatch/package.json create mode 100644 node_modules/prepend-http/index.js create mode 100644 node_modules/prepend-http/license create mode 100644 node_modules/prepend-http/package.json create mode 100644 node_modules/prepend-http/readme.md create mode 100644 node_modules/process-nextick-args/.travis.yml create mode 100644 node_modules/process-nextick-args/index.js create mode 100644 node_modules/process-nextick-args/license.md create mode 100644 node_modules/process-nextick-args/package.json create mode 100644 node_modules/process-nextick-args/readme.md create mode 100644 node_modules/process-nextick-args/test.js create mode 100644 node_modules/proxy-addr/HISTORY.md create mode 100644 node_modules/proxy-addr/LICENSE create mode 100644 node_modules/proxy-addr/README.md create mode 100644 node_modules/proxy-addr/index.js create mode 100644 node_modules/proxy-addr/package.json create mode 100644 node_modules/psl/LICENSE create mode 100644 node_modules/psl/README.md create mode 100644 node_modules/psl/browserstack-logo.svg create mode 100644 node_modules/psl/data/rules.json create mode 100644 node_modules/psl/dist/psl.js create mode 100644 node_modules/psl/dist/psl.min.js create mode 100644 node_modules/psl/index.js create mode 100644 node_modules/psl/package.json create mode 100644 node_modules/pstree.remy/.travis.yml create mode 100644 node_modules/pstree.remy/LICENSE create mode 100644 node_modules/pstree.remy/README.md create mode 100644 node_modules/pstree.remy/lib/index.js create mode 100644 node_modules/pstree.remy/lib/tree.js create mode 100644 node_modules/pstree.remy/lib/utils.js create mode 100644 node_modules/pstree.remy/package.json create mode 100644 node_modules/pstree.remy/tests/fixtures/index.js create mode 100644 node_modules/pstree.remy/tests/fixtures/out1 create mode 100644 node_modules/pstree.remy/tests/fixtures/out2 create mode 100644 node_modules/pstree.remy/tests/index.test.js create mode 100644 node_modules/pump/.travis.yml create mode 100644 node_modules/pump/LICENSE create mode 100644 node_modules/pump/README.md create mode 100644 node_modules/pump/index.js create mode 100644 node_modules/pump/package.json create mode 100644 node_modules/pump/test-browser.js create mode 100644 node_modules/pump/test-node.js create mode 100644 node_modules/punycode/LICENSE-MIT.txt create mode 100644 node_modules/punycode/README.md create mode 100644 node_modules/punycode/package.json create mode 100644 node_modules/punycode/punycode.es6.js create mode 100644 node_modules/punycode/punycode.js create mode 100644 node_modules/pupa/index.d.ts create mode 100644 node_modules/pupa/index.js create mode 100644 node_modules/pupa/license create mode 100644 node_modules/pupa/package.json create mode 100644 node_modules/pupa/readme.md create mode 100644 node_modules/qs/.editorconfig create mode 100644 node_modules/qs/.eslintignore create mode 100644 node_modules/qs/.eslintrc create mode 100644 node_modules/qs/CHANGELOG.md create mode 100644 node_modules/qs/LICENSE create mode 100644 node_modules/qs/README.md create mode 100644 node_modules/qs/dist/qs.js create mode 100644 node_modules/qs/lib/formats.js create mode 100644 node_modules/qs/lib/index.js create mode 100644 node_modules/qs/lib/parse.js create mode 100644 node_modules/qs/lib/stringify.js create mode 100644 node_modules/qs/lib/utils.js create mode 100644 node_modules/qs/package.json create mode 100644 node_modules/qs/test/.eslintrc create mode 100644 node_modules/qs/test/index.js create mode 100644 node_modules/qs/test/parse.js create mode 100644 node_modules/qs/test/stringify.js create mode 100644 node_modules/qs/test/utils.js create mode 100644 node_modules/range-parser/HISTORY.md create mode 100644 node_modules/range-parser/LICENSE create mode 100644 node_modules/range-parser/README.md create mode 100644 node_modules/range-parser/index.js create mode 100644 node_modules/range-parser/package.json create mode 100644 node_modules/raw-body/HISTORY.md create mode 100644 node_modules/raw-body/LICENSE create mode 100644 node_modules/raw-body/README.md create mode 100644 node_modules/raw-body/index.d.ts create mode 100644 node_modules/raw-body/index.js create mode 100644 node_modules/raw-body/package.json create mode 100644 node_modules/rc/LICENSE.APACHE2 create mode 100644 node_modules/rc/LICENSE.BSD create mode 100644 node_modules/rc/LICENSE.MIT create mode 100644 node_modules/rc/README.md create mode 100644 node_modules/rc/browser.js create mode 100644 node_modules/rc/cli.js create mode 100644 node_modules/rc/index.js create mode 100644 node_modules/rc/lib/utils.js create mode 100644 node_modules/rc/node_modules/ini/LICENSE create mode 100644 node_modules/rc/node_modules/ini/README.md create mode 100644 node_modules/rc/node_modules/ini/ini.js create mode 100644 node_modules/rc/node_modules/ini/package.json create mode 100644 node_modules/rc/package.json create mode 100644 node_modules/rc/test/ini.js create mode 100644 node_modules/rc/test/nested-env-vars.js create mode 100644 node_modules/rc/test/test.js create mode 100644 node_modules/readable-stream/.npmignore create mode 100644 node_modules/readable-stream/.travis.yml create mode 100644 node_modules/readable-stream/CONTRIBUTING.md create mode 100644 node_modules/readable-stream/GOVERNANCE.md create mode 100644 node_modules/readable-stream/LICENSE create mode 100644 node_modules/readable-stream/README.md create mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 node_modules/readable-stream/duplex-browser.js create mode 100644 node_modules/readable-stream/duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream-browser.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream.js create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/.travis.yml create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/LICENSE create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/README.md create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/browser.js create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/index.js create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/package.json create mode 100644 node_modules/readable-stream/node_modules/safe-buffer/test.js create mode 100644 node_modules/readable-stream/package.json create mode 100644 node_modules/readable-stream/passthrough.js create mode 100644 node_modules/readable-stream/readable-browser.js create mode 100644 node_modules/readable-stream/readable.js create mode 100644 node_modules/readable-stream/transform.js create mode 100644 node_modules/readable-stream/writable-browser.js create mode 100644 node_modules/readable-stream/writable.js create mode 100644 node_modules/readdirp/LICENSE create mode 100644 node_modules/readdirp/README.md create mode 100644 node_modules/readdirp/index.d.ts create mode 100644 node_modules/readdirp/index.js create mode 100644 node_modules/readdirp/package.json create mode 100644 node_modules/registry-auth-token/CHANGELOG.md create mode 100644 node_modules/registry-auth-token/LICENSE create mode 100644 node_modules/registry-auth-token/README.md create mode 100644 node_modules/registry-auth-token/base64.js create mode 100644 node_modules/registry-auth-token/index.js create mode 100644 node_modules/registry-auth-token/package.json create mode 100644 node_modules/registry-auth-token/registry-url.js create mode 100644 node_modules/registry-url/index.d.ts create mode 100644 node_modules/registry-url/index.js create mode 100644 node_modules/registry-url/license create mode 100644 node_modules/registry-url/package.json create mode 100644 node_modules/registry-url/readme.md create mode 100644 node_modules/request/CHANGELOG.md create mode 100644 node_modules/request/LICENSE create mode 100644 node_modules/request/README.md create mode 100644 node_modules/request/index.js create mode 100644 node_modules/request/lib/auth.js create mode 100644 node_modules/request/lib/cookies.js create mode 100644 node_modules/request/lib/getProxyFromURI.js create mode 100644 node_modules/request/lib/har.js create mode 100644 node_modules/request/lib/hawk.js create mode 100644 node_modules/request/lib/helpers.js create mode 100644 node_modules/request/lib/multipart.js create mode 100644 node_modules/request/lib/oauth.js create mode 100644 node_modules/request/lib/querystring.js create mode 100644 node_modules/request/lib/redirect.js create mode 100644 node_modules/request/lib/tunnel.js create mode 100644 node_modules/request/node_modules/qs/.editorconfig create mode 100644 node_modules/request/node_modules/qs/.eslintignore create mode 100644 node_modules/request/node_modules/qs/.eslintrc create mode 100644 node_modules/request/node_modules/qs/CHANGELOG.md create mode 100644 node_modules/request/node_modules/qs/LICENSE create mode 100644 node_modules/request/node_modules/qs/README.md create mode 100644 node_modules/request/node_modules/qs/dist/qs.js create mode 100644 node_modules/request/node_modules/qs/lib/formats.js create mode 100644 node_modules/request/node_modules/qs/lib/index.js create mode 100644 node_modules/request/node_modules/qs/lib/parse.js create mode 100644 node_modules/request/node_modules/qs/lib/stringify.js create mode 100644 node_modules/request/node_modules/qs/lib/utils.js create mode 100644 node_modules/request/node_modules/qs/package.json create mode 100644 node_modules/request/node_modules/qs/test/.eslintrc create mode 100644 node_modules/request/node_modules/qs/test/index.js create mode 100644 node_modules/request/node_modules/qs/test/parse.js create mode 100644 node_modules/request/node_modules/qs/test/stringify.js create mode 100644 node_modules/request/node_modules/qs/test/utils.js create mode 100644 node_modules/request/package.json create mode 100644 node_modules/request/request.js create mode 100644 node_modules/responselike/LICENSE create mode 100644 node_modules/responselike/README.md create mode 100644 node_modules/responselike/package.json create mode 100644 node_modules/responselike/src/index.js create mode 100644 node_modules/safe-buffer/LICENSE create mode 100644 node_modules/safe-buffer/README.md create mode 100644 node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/safe-buffer/index.js create mode 100644 node_modules/safe-buffer/package.json create mode 100644 node_modules/safer-buffer/LICENSE create mode 100644 node_modules/safer-buffer/Porting-Buffer.md create mode 100644 node_modules/safer-buffer/Readme.md create mode 100644 node_modules/safer-buffer/dangerous.js create mode 100644 node_modules/safer-buffer/package.json create mode 100644 node_modules/safer-buffer/safer.js create mode 100644 node_modules/safer-buffer/tests.js create mode 100644 node_modules/semver-diff/index.d.ts create mode 100644 node_modules/semver-diff/index.js create mode 100644 node_modules/semver-diff/license create mode 100644 node_modules/semver-diff/node_modules/.bin/semver create mode 100644 node_modules/semver-diff/node_modules/.bin/semver.cmd create mode 100644 node_modules/semver-diff/node_modules/.bin/semver.ps1 create mode 100644 node_modules/semver-diff/node_modules/semver/CHANGELOG.md create mode 100644 node_modules/semver-diff/node_modules/semver/LICENSE create mode 100644 node_modules/semver-diff/node_modules/semver/README.md create mode 100644 node_modules/semver-diff/node_modules/semver/bin/semver.js create mode 100644 node_modules/semver-diff/node_modules/semver/package.json create mode 100644 node_modules/semver-diff/node_modules/semver/range.bnf create mode 100644 node_modules/semver-diff/node_modules/semver/semver.js create mode 100644 node_modules/semver-diff/package.json create mode 100644 node_modules/semver-diff/readme.md create mode 100644 node_modules/semver/CHANGELOG.md create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100644 node_modules/semver/bin/semver create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/semver.js create mode 100644 node_modules/send/HISTORY.md create mode 100644 node_modules/send/LICENSE create mode 100644 node_modules/send/README.md create mode 100644 node_modules/send/index.js create mode 100644 node_modules/send/node_modules/ms/index.js create mode 100644 node_modules/send/node_modules/ms/license.md create mode 100644 node_modules/send/node_modules/ms/package.json create mode 100644 node_modules/send/node_modules/ms/readme.md create mode 100644 node_modules/send/package.json create mode 100644 node_modules/serve-static/HISTORY.md create mode 100644 node_modules/serve-static/LICENSE create mode 100644 node_modules/serve-static/README.md create mode 100644 node_modules/serve-static/index.js create mode 100644 node_modules/serve-static/package.json create mode 100644 node_modules/setprototypeof/LICENSE create mode 100644 node_modules/setprototypeof/README.md create mode 100644 node_modules/setprototypeof/index.d.ts create mode 100644 node_modules/setprototypeof/index.js create mode 100644 node_modules/setprototypeof/package.json create mode 100644 node_modules/setprototypeof/test/index.js create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/index.js create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/signal-exit/signals.js create mode 100644 node_modules/sshpk/.npmignore create mode 100644 node_modules/sshpk/.travis.yml create mode 100644 node_modules/sshpk/LICENSE create mode 100644 node_modules/sshpk/README.md create mode 100644 node_modules/sshpk/bin/sshpk-conv create mode 100644 node_modules/sshpk/bin/sshpk-sign create mode 100644 node_modules/sshpk/bin/sshpk-verify create mode 100644 node_modules/sshpk/lib/algs.js create mode 100644 node_modules/sshpk/lib/certificate.js create mode 100644 node_modules/sshpk/lib/dhe.js create mode 100644 node_modules/sshpk/lib/ed-compat.js create mode 100644 node_modules/sshpk/lib/errors.js create mode 100644 node_modules/sshpk/lib/fingerprint.js create mode 100644 node_modules/sshpk/lib/formats/auto.js create mode 100644 node_modules/sshpk/lib/formats/dnssec.js create mode 100644 node_modules/sshpk/lib/formats/openssh-cert.js create mode 100644 node_modules/sshpk/lib/formats/pem.js create mode 100644 node_modules/sshpk/lib/formats/pkcs1.js create mode 100644 node_modules/sshpk/lib/formats/pkcs8.js create mode 100644 node_modules/sshpk/lib/formats/putty.js create mode 100644 node_modules/sshpk/lib/formats/rfc4253.js create mode 100644 node_modules/sshpk/lib/formats/ssh-private.js create mode 100644 node_modules/sshpk/lib/formats/ssh.js create mode 100644 node_modules/sshpk/lib/formats/x509-pem.js create mode 100644 node_modules/sshpk/lib/formats/x509.js create mode 100644 node_modules/sshpk/lib/identity.js create mode 100644 node_modules/sshpk/lib/index.js create mode 100644 node_modules/sshpk/lib/key.js create mode 100644 node_modules/sshpk/lib/private-key.js create mode 100644 node_modules/sshpk/lib/signature.js create mode 100644 node_modules/sshpk/lib/ssh-buffer.js create mode 100644 node_modules/sshpk/lib/utils.js create mode 100644 node_modules/sshpk/man/man1/sshpk-conv.1 create mode 100644 node_modules/sshpk/man/man1/sshpk-sign.1 create mode 100644 node_modules/sshpk/man/man1/sshpk-verify.1 create mode 100644 node_modules/sshpk/package.json create mode 100644 node_modules/statuses/HISTORY.md create mode 100644 node_modules/statuses/LICENSE create mode 100644 node_modules/statuses/README.md create mode 100644 node_modules/statuses/codes.json create mode 100644 node_modules/statuses/index.js create mode 100644 node_modules/statuses/package.json create mode 100644 node_modules/stream-spigot/.npmignore create mode 100644 node_modules/stream-spigot/LICENSE create mode 100644 node_modules/stream-spigot/README.md create mode 100644 node_modules/stream-spigot/index.js create mode 100644 node_modules/stream-spigot/package.json create mode 100644 node_modules/stream-spigot/test/index.js create mode 100644 node_modules/string-width/index.d.ts create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/string_decoder/.npmignore create mode 100644 node_modules/string_decoder/LICENSE create mode 100644 node_modules/string_decoder/README.md create mode 100644 node_modules/string_decoder/lib/string_decoder.js create mode 100644 node_modules/string_decoder/package.json create mode 100644 node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/strip-json-comments/index.js create mode 100644 node_modules/strip-json-comments/license create mode 100644 node_modules/strip-json-comments/package.json create mode 100644 node_modules/strip-json-comments/readme.md create mode 100644 node_modules/supports-color/browser.js create mode 100644 node_modules/supports-color/index.js create mode 100644 node_modules/supports-color/license create mode 100644 node_modules/supports-color/package.json create mode 100644 node_modules/supports-color/readme.md create mode 100644 node_modules/to-readable-stream/index.js create mode 100644 node_modules/to-readable-stream/license create mode 100644 node_modules/to-readable-stream/package.json create mode 100644 node_modules/to-readable-stream/readme.md create mode 100644 node_modules/to-regex-range/LICENSE create mode 100644 node_modules/to-regex-range/README.md create mode 100644 node_modules/to-regex-range/index.js create mode 100644 node_modules/to-regex-range/package.json create mode 100644 node_modules/toidentifier/LICENSE create mode 100644 node_modules/toidentifier/README.md create mode 100644 node_modules/toidentifier/index.js create mode 100644 node_modules/toidentifier/package.json create mode 100644 node_modules/touch/LICENSE create mode 100644 node_modules/touch/README.md create mode 100644 node_modules/touch/bin/nodetouch.js create mode 100644 node_modules/touch/index.js create mode 100644 node_modules/touch/package.json create mode 100644 node_modules/tough-cookie/LICENSE create mode 100644 node_modules/tough-cookie/README.md create mode 100644 node_modules/tough-cookie/lib/cookie.js create mode 100644 node_modules/tough-cookie/lib/memstore.js create mode 100644 node_modules/tough-cookie/lib/pathMatch.js create mode 100644 node_modules/tough-cookie/lib/permuteDomain.js create mode 100644 node_modules/tough-cookie/lib/pubsuffix-psl.js create mode 100644 node_modules/tough-cookie/lib/store.js create mode 100644 node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt create mode 100644 node_modules/tough-cookie/node_modules/punycode/README.md create mode 100644 node_modules/tough-cookie/node_modules/punycode/package.json create mode 100644 node_modules/tough-cookie/node_modules/punycode/punycode.js create mode 100644 node_modules/tough-cookie/package.json create mode 100644 node_modules/tunnel-agent/LICENSE create mode 100644 node_modules/tunnel-agent/README.md create mode 100644 node_modules/tunnel-agent/index.js create mode 100644 node_modules/tunnel-agent/package.json create mode 100644 node_modules/tweetnacl/.npmignore create mode 100644 node_modules/tweetnacl/AUTHORS.md create mode 100644 node_modules/tweetnacl/CHANGELOG.md create mode 100644 node_modules/tweetnacl/LICENSE create mode 100644 node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md create mode 100644 node_modules/tweetnacl/README.md create mode 100644 node_modules/tweetnacl/nacl-fast.js create mode 100644 node_modules/tweetnacl/nacl-fast.min.js create mode 100644 node_modules/tweetnacl/nacl.d.ts create mode 100644 node_modules/tweetnacl/nacl.js create mode 100644 node_modules/tweetnacl/nacl.min.js create mode 100644 node_modules/tweetnacl/package.json create mode 100644 node_modules/type-fest/base.d.ts create mode 100644 node_modules/type-fest/index.d.ts create mode 100644 node_modules/type-fest/license create mode 100644 node_modules/type-fest/package.json create mode 100644 node_modules/type-fest/readme.md create mode 100644 node_modules/type-fest/source/async-return-type.d.ts create mode 100644 node_modules/type-fest/source/asyncify.d.ts create mode 100644 node_modules/type-fest/source/basic.d.ts create mode 100644 node_modules/type-fest/source/conditional-except.d.ts create mode 100644 node_modules/type-fest/source/conditional-keys.d.ts create mode 100644 node_modules/type-fest/source/conditional-pick.d.ts create mode 100644 node_modules/type-fest/source/entries.d.ts create mode 100644 node_modules/type-fest/source/entry.d.ts create mode 100644 node_modules/type-fest/source/except.d.ts create mode 100644 node_modules/type-fest/source/fixed-length-array.d.ts create mode 100644 node_modules/type-fest/source/iterable-element.d.ts create mode 100644 node_modules/type-fest/source/literal-union.d.ts create mode 100644 node_modules/type-fest/source/merge-exclusive.d.ts create mode 100644 node_modules/type-fest/source/merge.d.ts create mode 100644 node_modules/type-fest/source/mutable.d.ts create mode 100644 node_modules/type-fest/source/opaque.d.ts create mode 100644 node_modules/type-fest/source/package-json.d.ts create mode 100644 node_modules/type-fest/source/partial-deep.d.ts create mode 100644 node_modules/type-fest/source/promisable.d.ts create mode 100644 node_modules/type-fest/source/promise-value.d.ts create mode 100644 node_modules/type-fest/source/readonly-deep.d.ts create mode 100644 node_modules/type-fest/source/require-at-least-one.d.ts create mode 100644 node_modules/type-fest/source/require-exactly-one.d.ts create mode 100644 node_modules/type-fest/source/set-optional.d.ts create mode 100644 node_modules/type-fest/source/set-required.d.ts create mode 100644 node_modules/type-fest/source/set-return-type.d.ts create mode 100644 node_modules/type-fest/source/stringified.d.ts create mode 100644 node_modules/type-fest/source/tsconfig-json.d.ts create mode 100644 node_modules/type-fest/source/union-to-intersection.d.ts create mode 100644 node_modules/type-fest/source/utilities.d.ts create mode 100644 node_modules/type-fest/source/value-of.d.ts create mode 100644 node_modules/type-fest/ts41/camel-case.d.ts create mode 100644 node_modules/type-fest/ts41/delimiter-case.d.ts create mode 100644 node_modules/type-fest/ts41/index.d.ts create mode 100644 node_modules/type-fest/ts41/kebab-case.d.ts create mode 100644 node_modules/type-fest/ts41/pascal-case.d.ts create mode 100644 node_modules/type-fest/ts41/snake-case.d.ts create mode 100644 node_modules/type-is/HISTORY.md create mode 100644 node_modules/type-is/LICENSE create mode 100644 node_modules/type-is/README.md create mode 100644 node_modules/type-is/index.js create mode 100644 node_modules/type-is/package.json create mode 100644 node_modules/typedarray-to-buffer/.airtap.yml create mode 100644 node_modules/typedarray-to-buffer/.travis.yml create mode 100644 node_modules/typedarray-to-buffer/LICENSE create mode 100644 node_modules/typedarray-to-buffer/README.md create mode 100644 node_modules/typedarray-to-buffer/index.js create mode 100644 node_modules/typedarray-to-buffer/package.json create mode 100644 node_modules/typedarray-to-buffer/test/basic.js create mode 100644 node_modules/undefsafe/.github/workflows/release.yml create mode 100644 node_modules/undefsafe/.jscsrc create mode 100644 node_modules/undefsafe/.jshintrc create mode 100644 node_modules/undefsafe/.travis.yml create mode 100644 node_modules/undefsafe/LICENSE create mode 100644 node_modules/undefsafe/README.md create mode 100644 node_modules/undefsafe/example.js create mode 100644 node_modules/undefsafe/lib/undefsafe.js create mode 100644 node_modules/undefsafe/package.json create mode 100644 node_modules/unique-string/index.d.ts create mode 100644 node_modules/unique-string/index.js create mode 100644 node_modules/unique-string/license create mode 100644 node_modules/unique-string/package.json create mode 100644 node_modules/unique-string/readme.md create mode 100644 node_modules/unpipe/HISTORY.md create mode 100644 node_modules/unpipe/LICENSE create mode 100644 node_modules/unpipe/README.md create mode 100644 node_modules/unpipe/index.js create mode 100644 node_modules/unpipe/package.json create mode 100644 node_modules/update-notifier/check.js create mode 100644 node_modules/update-notifier/index.js create mode 100644 node_modules/update-notifier/license create mode 100644 node_modules/update-notifier/node_modules/.bin/semver create mode 100644 node_modules/update-notifier/node_modules/.bin/semver.cmd create mode 100644 node_modules/update-notifier/node_modules/.bin/semver.ps1 create mode 100644 node_modules/update-notifier/node_modules/semver/CHANGELOG.md create mode 100644 node_modules/update-notifier/node_modules/semver/LICENSE create mode 100644 node_modules/update-notifier/node_modules/semver/README.md create mode 100644 node_modules/update-notifier/node_modules/semver/bin/semver.js create mode 100644 node_modules/update-notifier/node_modules/semver/classes/comparator.js create mode 100644 node_modules/update-notifier/node_modules/semver/classes/index.js create mode 100644 node_modules/update-notifier/node_modules/semver/classes/range.js create mode 100644 node_modules/update-notifier/node_modules/semver/classes/semver.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/clean.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/cmp.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/coerce.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/compare-build.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/compare-loose.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/compare.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/diff.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/eq.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/gt.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/gte.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/inc.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/lt.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/lte.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/major.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/minor.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/neq.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/parse.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/patch.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/prerelease.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/rcompare.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/rsort.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/satisfies.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/sort.js create mode 100644 node_modules/update-notifier/node_modules/semver/functions/valid.js create mode 100644 node_modules/update-notifier/node_modules/semver/index.js create mode 100644 node_modules/update-notifier/node_modules/semver/internal/constants.js create mode 100644 node_modules/update-notifier/node_modules/semver/internal/debug.js create mode 100644 node_modules/update-notifier/node_modules/semver/internal/identifiers.js create mode 100644 node_modules/update-notifier/node_modules/semver/internal/parse-options.js create mode 100644 node_modules/update-notifier/node_modules/semver/internal/re.js create mode 100644 node_modules/update-notifier/node_modules/semver/package.json create mode 100644 node_modules/update-notifier/node_modules/semver/preload.js create mode 100644 node_modules/update-notifier/node_modules/semver/range.bnf create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/gtr.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/intersects.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/ltr.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/max-satisfying.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/min-satisfying.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/min-version.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/outside.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/simplify.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/subset.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/to-comparators.js create mode 100644 node_modules/update-notifier/node_modules/semver/ranges/valid.js create mode 100644 node_modules/update-notifier/package.json create mode 100644 node_modules/update-notifier/readme.md create mode 100644 node_modules/uri-js/README.md create mode 100644 node_modules/uri-js/bower.json create mode 100644 node_modules/uri-js/dist/es5/uri.all.d.ts create mode 100644 node_modules/uri-js/dist/es5/uri.all.js create mode 100644 node_modules/uri-js/dist/es5/uri.all.js.map create mode 100644 node_modules/uri-js/dist/es5/uri.all.min.d.ts create mode 100644 node_modules/uri-js/dist/es5/uri.all.min.js create mode 100644 node_modules/uri-js/dist/es5/uri.all.min.js.map create mode 100644 node_modules/uri-js/dist/esnext/index.d.ts create mode 100644 node_modules/uri-js/dist/esnext/index.js create mode 100644 node_modules/uri-js/dist/esnext/index.js.map create mode 100644 node_modules/uri-js/dist/esnext/regexps-iri.d.ts create mode 100644 node_modules/uri-js/dist/esnext/regexps-iri.js create mode 100644 node_modules/uri-js/dist/esnext/regexps-iri.js.map create mode 100644 node_modules/uri-js/dist/esnext/regexps-uri.d.ts create mode 100644 node_modules/uri-js/dist/esnext/regexps-uri.js create mode 100644 node_modules/uri-js/dist/esnext/regexps-uri.js.map create mode 100644 node_modules/uri-js/dist/esnext/schemes/http.d.ts create mode 100644 node_modules/uri-js/dist/esnext/schemes/http.js create mode 100644 node_modules/uri-js/dist/esnext/schemes/http.js.map create mode 100644 node_modules/uri-js/dist/esnext/schemes/https.d.ts create mode 100644 node_modules/uri-js/dist/esnext/schemes/https.js create mode 100644 node_modules/uri-js/dist/esnext/schemes/https.js.map create mode 100644 node_modules/uri-js/dist/esnext/schemes/mailto.d.ts create mode 100644 node_modules/uri-js/dist/esnext/schemes/mailto.js create mode 100644 node_modules/uri-js/dist/esnext/schemes/mailto.js.map create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn-uuid.js create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn.d.ts create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn.js create mode 100644 node_modules/uri-js/dist/esnext/schemes/urn.js.map create mode 100644 node_modules/uri-js/dist/esnext/uri.d.ts create mode 100644 node_modules/uri-js/dist/esnext/uri.js create mode 100644 node_modules/uri-js/dist/esnext/uri.js.map create mode 100644 node_modules/uri-js/dist/esnext/util.d.ts create mode 100644 node_modules/uri-js/dist/esnext/util.js create mode 100644 node_modules/uri-js/dist/esnext/util.js.map create mode 100644 node_modules/uri-js/package.json create mode 100644 node_modules/uri-js/rollup.config.js create mode 100644 node_modules/uri-js/src/index.ts create mode 100644 node_modules/uri-js/src/punycode.d.ts create mode 100644 node_modules/uri-js/src/regexps-iri.ts create mode 100644 node_modules/uri-js/src/regexps-uri.ts create mode 100644 node_modules/uri-js/src/schemes/http.ts create mode 100644 node_modules/uri-js/src/schemes/https.ts create mode 100644 node_modules/uri-js/src/schemes/mailto.ts create mode 100644 node_modules/uri-js/src/schemes/urn-uuid.ts create mode 100644 node_modules/uri-js/src/schemes/urn.ts create mode 100644 node_modules/uri-js/src/uri.ts create mode 100644 node_modules/uri-js/src/util.ts create mode 100644 node_modules/uri-js/tests/qunit.css create mode 100644 node_modules/uri-js/tests/qunit.js create mode 100644 node_modules/uri-js/tests/test-es5-min.html create mode 100644 node_modules/uri-js/tests/test-es5.html create mode 100644 node_modules/uri-js/tests/tests.js create mode 100644 node_modules/uri-js/tsconfig.json create mode 100644 node_modules/uri-js/yarn.lock create mode 100644 node_modules/url-parse-lax/index.js create mode 100644 node_modules/url-parse-lax/license create mode 100644 node_modules/url-parse-lax/package.json create mode 100644 node_modules/url-parse-lax/readme.md create mode 100644 node_modules/util-deprecate/History.md create mode 100644 node_modules/util-deprecate/LICENSE create mode 100644 node_modules/util-deprecate/README.md create mode 100644 node_modules/util-deprecate/browser.js create mode 100644 node_modules/util-deprecate/node.js create mode 100644 node_modules/util-deprecate/package.json create mode 100644 node_modules/utils-merge/.npmignore create mode 100644 node_modules/utils-merge/LICENSE create mode 100644 node_modules/utils-merge/README.md create mode 100644 node_modules/utils-merge/index.js create mode 100644 node_modules/utils-merge/package.json create mode 100644 node_modules/uuid/AUTHORS create mode 100644 node_modules/uuid/CHANGELOG.md create mode 100644 node_modules/uuid/LICENSE.md create mode 100644 node_modules/uuid/README.md create mode 100644 node_modules/uuid/bin/uuid create mode 100644 node_modules/uuid/index.js create mode 100644 node_modules/uuid/lib/bytesToUuid.js create mode 100644 node_modules/uuid/lib/md5-browser.js create mode 100644 node_modules/uuid/lib/md5.js create mode 100644 node_modules/uuid/lib/rng-browser.js create mode 100644 node_modules/uuid/lib/rng.js create mode 100644 node_modules/uuid/lib/sha1-browser.js create mode 100644 node_modules/uuid/lib/sha1.js create mode 100644 node_modules/uuid/lib/v35.js create mode 100644 node_modules/uuid/package.json create mode 100644 node_modules/uuid/v1.js create mode 100644 node_modules/uuid/v3.js create mode 100644 node_modules/uuid/v4.js create mode 100644 node_modules/uuid/v5.js create mode 100644 node_modules/vary/HISTORY.md create mode 100644 node_modules/vary/LICENSE create mode 100644 node_modules/vary/README.md create mode 100644 node_modules/vary/index.js create mode 100644 node_modules/vary/package.json create mode 100644 node_modules/verror/.npmignore create mode 100644 node_modules/verror/CHANGES.md create mode 100644 node_modules/verror/CONTRIBUTING.md create mode 100644 node_modules/verror/LICENSE create mode 100644 node_modules/verror/README.md create mode 100644 node_modules/verror/lib/verror.js create mode 100644 node_modules/verror/package.json create mode 100644 node_modules/widest-line/index.d.ts create mode 100644 node_modules/widest-line/index.js create mode 100644 node_modules/widest-line/license create mode 100644 node_modules/widest-line/package.json create mode 100644 node_modules/widest-line/readme.md create mode 100644 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md create mode 100644 node_modules/wrappy/LICENSE create mode 100644 node_modules/wrappy/README.md create mode 100644 node_modules/wrappy/package.json create mode 100644 node_modules/wrappy/wrappy.js create mode 100644 node_modules/write-file-atomic/CHANGELOG.md create mode 100644 node_modules/write-file-atomic/LICENSE create mode 100644 node_modules/write-file-atomic/README.md create mode 100644 node_modules/write-file-atomic/index.js create mode 100644 node_modules/write-file-atomic/package.json create mode 100644 node_modules/xdg-basedir/index.d.ts create mode 100644 node_modules/xdg-basedir/index.js create mode 100644 node_modules/xdg-basedir/license create mode 100644 node_modules/xdg-basedir/package.json create mode 100644 node_modules/xdg-basedir/readme.md create mode 100644 node_modules/xtend/.jshintrc create mode 100644 node_modules/xtend/LICENSE create mode 100644 node_modules/xtend/README.md create mode 100644 node_modules/xtend/immutable.js create mode 100644 node_modules/xtend/mutable.js create mode 100644 node_modules/xtend/package.json create mode 100644 node_modules/xtend/test.js create mode 100644 node_modules/yallist/LICENSE create mode 100644 node_modules/yallist/README.md create mode 100644 node_modules/yallist/iterator.js create mode 100644 node_modules/yallist/package.json create mode 100644 node_modules/yallist/yallist.js create mode 100644 public/animation.css create mode 100644 public/app.js create mode 100644 public/backgroundSlider.js create mode 100644 public/css/.DS_Store create mode 100644 public/css/ajax-loader.gif create mode 100644 public/css/animate.css create mode 100644 public/css/aos.css create mode 100644 public/css/bootstrap-datepicker.css create mode 100644 public/css/bootstrap.min.css create mode 100644 public/css/bootstrap/.DS_Store create mode 100644 public/css/bootstrap/bootstrap-grid.css create mode 100644 public/css/bootstrap/bootstrap-reboot.css create mode 100644 public/css/css/.DS_Store create mode 100644 public/css/css/bootstrap-reboot.css create mode 100644 public/css/css/mixins/_text-hide.css create mode 100644 public/css/flaticon.css create mode 100644 public/css/icomoon.css create mode 100644 public/css/ionicons.min.css create mode 100644 public/css/jquery.timepicker.css create mode 100644 public/css/magnific-popup.css create mode 100644 public/css/open-iconic-bootstrap.min.css create mode 100644 public/css/owl.carousel.min.css create mode 100644 public/css/owl.theme.default.min.css create mode 100644 public/css/style.css create mode 100644 public/fonts/.DS_Store create mode 100644 public/fonts/flaticon/.DS_Store create mode 100644 public/fonts/flaticon/backup.txt create mode 100644 public/fonts/flaticon/font/.DS_Store create mode 100644 public/fonts/flaticon/font/Flaticon.eot create mode 100644 public/fonts/flaticon/font/Flaticon.svg create mode 100644 public/fonts/flaticon/font/Flaticon.ttf create mode 100644 public/fonts/flaticon/font/Flaticon.woff create mode 100644 public/fonts/flaticon/font/Flaticon.woff2 create mode 100644 public/fonts/flaticon/font/_flaticon.scss create mode 100644 public/fonts/flaticon/font/flaticon.css create mode 100644 public/fonts/flaticon/font/flaticon.html create mode 100644 public/fonts/flaticon/license/.DS_Store create mode 100644 public/fonts/flaticon/license/license.pdf create mode 100644 public/fonts/icomoon/icomoon.eot create mode 100644 public/fonts/icomoon/icomoon.svg create mode 100644 public/fonts/icomoon/icomoon.ttf create mode 100644 public/fonts/icomoon/icomoon.woff create mode 100644 public/fonts/ionicons/css/_ionicons.scss create mode 100644 public/fonts/ionicons/css/ionicons.min.css create mode 100644 public/fonts/ionicons/fonts/.DS_Store create mode 100644 public/fonts/ionicons/fonts/ionicons.eot create mode 100644 public/fonts/ionicons/fonts/ionicons.svg create mode 100644 public/fonts/ionicons/fonts/ionicons.ttf create mode 100644 public/fonts/ionicons/fonts/ionicons.woff create mode 100644 public/fonts/ionicons/fonts/ionicons.woff2 create mode 100644 public/fonts/open-iconic/open-iconic.eot create mode 100644 public/fonts/open-iconic/open-iconic.otf create mode 100644 public/fonts/open-iconic/open-iconic.svg create mode 100644 public/fonts/open-iconic/open-iconic.ttf create mode 100644 public/fonts/open-iconic/open-iconic.woff create mode 100644 public/icons/144x144.png create mode 100644 public/icons/192x192.png create mode 100644 public/icons/256x256.png create mode 100644 public/icons/384x384.png create mode 100644 public/icons/48x48.png create mode 100644 public/icons/512x512.png create mode 100644 public/icons/96x96.png create mode 100644 public/images/.DS_Store create mode 100644 public/images/Glenn.jpg create mode 100644 public/images/abd.jpeg create mode 100644 public/images/about-1.jpg create mode 100644 public/images/about.jpg create mode 100644 public/images/afgan.png create mode 100644 public/images/aus.png create mode 100644 public/images/bangla.png create mode 100644 public/images/bg_1.jpg create mode 100644 public/images/bg_2.jpg create mode 100644 public/images/bg_3.jpg create mode 100644 public/images/cricket.jpeg create mode 100644 public/images/dravid.jpeg create mode 100644 public/images/eng.png create mode 100644 public/images/gilly.jpeg create mode 100644 public/images/image_1.jpg create mode 100644 public/images/image_2.jpg create mode 100644 public/images/image_3.jpg create mode 100644 public/images/image_4.jpg create mode 100644 public/images/image_5.jpg create mode 100644 public/images/image_6.jpg create mode 100644 public/images/image_7.jpg create mode 100644 public/images/image_8.jpg create mode 100644 public/images/ind.jpeg create mode 100644 public/images/ireland.png create mode 100644 public/images/jai.jpeg create mode 100644 public/images/kallis.jpg create mode 100644 public/images/loc.png create mode 100644 public/images/msd.jpeg create mode 100644 public/images/murli.jpg create mode 100644 public/images/new.png create mode 100644 public/images/newz.jpeg create mode 100644 public/images/pak.png create mode 100644 public/images/person_1.jpg create mode 100644 public/images/person_2.jpg create mode 100644 public/images/person_3.jpg create mode 100644 public/images/person_4.jpg create mode 100644 public/images/ponting.jpeg create mode 100644 public/images/sachin.jpeg create mode 100644 public/images/scot.png create mode 100644 public/images/shane.jpg create mode 100644 public/images/sourav.jpg create mode 100644 public/images/southAfrica.png create mode 100644 public/images/sriLanka.png create mode 100644 public/images/staff-1.jpg create mode 100644 public/images/staff-2.jpg create mode 100644 public/images/staff-3.jpg create mode 100644 public/images/staff-4.jpg create mode 100644 public/images/staff-5.jpg create mode 100644 public/images/staff-6.jpg create mode 100644 public/images/staff-7.jpg create mode 100644 public/images/staff-8.jpg create mode 100644 public/images/team-1.jpg create mode 100644 public/images/team-2.jpg create mode 100644 public/images/team-3.jpg create mode 100644 public/images/team-4.jpg create mode 100644 public/images/team-5.jpg create mode 100644 public/images/team-6.jpg create mode 100644 public/images/victory.jpg create mode 100644 public/images/virat.jpg create mode 100644 public/images/viv.jpeg create mode 100644 public/images/wasim.jpeg create mode 100644 public/images/waugh.jpeg create mode 100644 public/images/westIndies.png create mode 100644 public/images/yuvraj.jpeg create mode 100644 public/images/zim.jpeg create mode 100644 public/js/.DS_Store create mode 100644 public/js/aos.js create mode 100644 public/js/bootstrap-datepicker.js create mode 100644 public/js/bootstrap.min.js create mode 100644 public/js/google-map.js create mode 100644 public/js/jquery-3.2.1.min.js create mode 100644 public/js/jquery-migrate-3.0.1.min.js create mode 100644 public/js/jquery.animateNumber.min.js create mode 100644 public/js/jquery.easing.1.3.js create mode 100644 public/js/jquery.magnific-popup.min.js create mode 100644 public/js/jquery.min.js create mode 100644 public/js/jquery.stellar.min.js create mode 100644 public/js/jquery.waypoints.min.js create mode 100644 public/js/main.js create mode 100644 public/js/owl.carousel.min.js create mode 100644 public/js/popper.min.js create mode 100644 public/js/scrollax.min.js create mode 100644 public/manifest.json create mode 100644 public/scss/.DS_Store create mode 100644 public/scss/bootstrap/.DS_Store create mode 100644 public/scss/bootstrap/_alert.scss create mode 100644 public/scss/bootstrap/_badge.scss create mode 100644 public/scss/bootstrap/_breadcrumb.scss create mode 100644 public/scss/bootstrap/_button-group.scss create mode 100644 public/scss/bootstrap/_buttons.scss create mode 100644 public/scss/bootstrap/_card.scss create mode 100644 public/scss/bootstrap/_carousel.scss create mode 100644 public/scss/bootstrap/_close.scss create mode 100644 public/scss/bootstrap/_code.scss create mode 100644 public/scss/bootstrap/_custom-forms.scss create mode 100644 public/scss/bootstrap/_dropdown.scss create mode 100644 public/scss/bootstrap/_forms.scss create mode 100644 public/scss/bootstrap/_functions.scss create mode 100644 public/scss/bootstrap/_grid.scss create mode 100644 public/scss/bootstrap/_images.scss create mode 100644 public/scss/bootstrap/_input-group.scss create mode 100644 public/scss/bootstrap/_jumbotron.scss create mode 100644 public/scss/bootstrap/_list-group.scss create mode 100644 public/scss/bootstrap/_media.scss create mode 100644 public/scss/bootstrap/_mixins.scss create mode 100644 public/scss/bootstrap/_modal.scss create mode 100644 public/scss/bootstrap/_nav.scss create mode 100644 public/scss/bootstrap/_navbar.scss create mode 100644 public/scss/bootstrap/_pagination.scss create mode 100644 public/scss/bootstrap/_popover.scss create mode 100644 public/scss/bootstrap/_print.scss create mode 100644 public/scss/bootstrap/_progress.scss create mode 100644 public/scss/bootstrap/_reboot.scss create mode 100644 public/scss/bootstrap/_root.scss create mode 100644 public/scss/bootstrap/_spinners.scss create mode 100644 public/scss/bootstrap/_tables.scss create mode 100644 public/scss/bootstrap/_toasts.scss create mode 100644 public/scss/bootstrap/_tooltip.scss create mode 100644 public/scss/bootstrap/_transitions.scss create mode 100644 public/scss/bootstrap/_type.scss create mode 100644 public/scss/bootstrap/_utilities.scss create mode 100644 public/scss/bootstrap/_variables.scss create mode 100644 public/scss/bootstrap/bootstrap-grid.scss create mode 100644 public/scss/bootstrap/bootstrap-reboot.scss create mode 100644 public/scss/bootstrap/bootstrap.scss create mode 100644 public/scss/bootstrap/mixins/_alert.scss create mode 100644 public/scss/bootstrap/mixins/_background-variant.scss create mode 100644 public/scss/bootstrap/mixins/_badge.scss create mode 100644 public/scss/bootstrap/mixins/_border-radius.scss create mode 100644 public/scss/bootstrap/mixins/_box-shadow.scss create mode 100644 public/scss/bootstrap/mixins/_breakpoints.scss create mode 100644 public/scss/bootstrap/mixins/_buttons.scss create mode 100644 public/scss/bootstrap/mixins/_caret.scss create mode 100644 public/scss/bootstrap/mixins/_clearfix.scss create mode 100644 public/scss/bootstrap/mixins/_float.scss create mode 100644 public/scss/bootstrap/mixins/_forms.scss create mode 100644 public/scss/bootstrap/mixins/_gradients.scss create mode 100644 public/scss/bootstrap/mixins/_grid-framework.scss create mode 100644 public/scss/bootstrap/mixins/_grid.scss create mode 100644 public/scss/bootstrap/mixins/_hover.scss create mode 100644 public/scss/bootstrap/mixins/_image.scss create mode 100644 public/scss/bootstrap/mixins/_list-group.scss create mode 100644 public/scss/bootstrap/mixins/_lists.scss create mode 100644 public/scss/bootstrap/mixins/_nav-divider.scss create mode 100644 public/scss/bootstrap/mixins/_pagination.scss create mode 100644 public/scss/bootstrap/mixins/_reset-text.scss create mode 100644 public/scss/bootstrap/mixins/_resize.scss create mode 100644 public/scss/bootstrap/mixins/_screen-reader.scss create mode 100644 public/scss/bootstrap/mixins/_size.scss create mode 100644 public/scss/bootstrap/mixins/_table-row.scss create mode 100644 public/scss/bootstrap/mixins/_text-emphasis.scss create mode 100644 public/scss/bootstrap/mixins/_text-hide.scss create mode 100644 public/scss/bootstrap/mixins/_text-truncate.scss create mode 100644 public/scss/bootstrap/mixins/_transition.scss create mode 100644 public/scss/bootstrap/mixins/_visibility.scss create mode 100644 public/scss/bootstrap/utilities/_align.scss create mode 100644 public/scss/bootstrap/utilities/_background.scss create mode 100644 public/scss/bootstrap/utilities/_borders.scss create mode 100644 public/scss/bootstrap/utilities/_clearfix.scss create mode 100644 public/scss/bootstrap/utilities/_display.scss create mode 100644 public/scss/bootstrap/utilities/_embed.scss create mode 100644 public/scss/bootstrap/utilities/_flex.scss create mode 100644 public/scss/bootstrap/utilities/_float.scss create mode 100644 public/scss/bootstrap/utilities/_overflow.scss create mode 100644 public/scss/bootstrap/utilities/_position.scss create mode 100644 public/scss/bootstrap/utilities/_screenreaders.scss create mode 100644 public/scss/bootstrap/utilities/_shadows.scss create mode 100644 public/scss/bootstrap/utilities/_sizing.scss create mode 100644 public/scss/bootstrap/utilities/_spacing.scss create mode 100644 public/scss/bootstrap/utilities/_text.scss create mode 100644 public/scss/bootstrap/utilities/_visibility.scss create mode 100644 public/scss/style.scss create mode 100644 public/style.css create mode 100644 public/sw.js diff --git a/node_modules/.bin/cool-face b/node_modules/.bin/cool-face new file mode 100644 index 0000000..24cdb73 --- /dev/null +++ b/node_modules/.bin/cool-face @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../cool-ascii-faces/cli.js" "$@" + ret=$? +else + node "$basedir/../cool-ascii-faces/cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/cool-face.cmd b/node_modules/.bin/cool-face.cmd new file mode 100644 index 0000000..826f782 --- /dev/null +++ b/node_modules/.bin/cool-face.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\cool-ascii-faces\cli.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/cool-face.ps1 b/node_modules/.bin/cool-face.ps1 new file mode 100644 index 0000000..edc3574 --- /dev/null +++ b/node_modules/.bin/cool-face.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../cool-ascii-faces/cli.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../cool-ascii-faces/cli.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/is-ci b/node_modules/.bin/is-ci new file mode 100644 index 0000000..e79342f --- /dev/null +++ b/node_modules/.bin/is-ci @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../is-ci/bin.js" "$@" + ret=$? +else + node "$basedir/../is-ci/bin.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/is-ci.cmd b/node_modules/.bin/is-ci.cmd new file mode 100644 index 0000000..e3276c0 --- /dev/null +++ b/node_modules/.bin/is-ci.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\is-ci\bin.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/is-ci.ps1 b/node_modules/.bin/is-ci.ps1 new file mode 100644 index 0000000..3fe2340 --- /dev/null +++ b/node_modules/.bin/is-ci.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../is-ci/bin.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../is-ci/bin.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 100644 index 0000000..91e5e16 --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../mime/cli.js" "$@" + ret=$? +else + node "$basedir/../mime/cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd new file mode 100644 index 0000000..746a279 --- /dev/null +++ b/node_modules/.bin/mime.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\mime\cli.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 new file mode 100644 index 0000000..a6f6f47 --- /dev/null +++ b/node_modules/.bin/mime.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../mime/cli.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/nodemon b/node_modules/.bin/nodemon new file mode 100644 index 0000000..439386d --- /dev/null +++ b/node_modules/.bin/nodemon @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../nodemon/bin/nodemon.js" "$@" + ret=$? +else + node "$basedir/../nodemon/bin/nodemon.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/nodemon.cmd b/node_modules/.bin/nodemon.cmd new file mode 100644 index 0000000..2ef2888 --- /dev/null +++ b/node_modules/.bin/nodemon.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\nodemon\bin\nodemon.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/nodemon.ps1 b/node_modules/.bin/nodemon.ps1 new file mode 100644 index 0000000..413e5cb --- /dev/null +++ b/node_modules/.bin/nodemon.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/nodetouch b/node_modules/.bin/nodetouch new file mode 100644 index 0000000..1f7f001 --- /dev/null +++ b/node_modules/.bin/nodetouch @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../touch/bin/nodetouch.js" "$@" + ret=$? +else + node "$basedir/../touch/bin/nodetouch.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/nodetouch.cmd b/node_modules/.bin/nodetouch.cmd new file mode 100644 index 0000000..1f78c68 --- /dev/null +++ b/node_modules/.bin/nodetouch.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\touch\bin\nodetouch.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/nodetouch.ps1 b/node_modules/.bin/nodetouch.ps1 new file mode 100644 index 0000000..236659c --- /dev/null +++ b/node_modules/.bin/nodetouch.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt new file mode 100644 index 0000000..e658aac --- /dev/null +++ b/node_modules/.bin/nopt @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../nopt/bin/nopt.js" "$@" + ret=$? +else + node "$basedir/../nopt/bin/nopt.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/nopt.cmd b/node_modules/.bin/nopt.cmd new file mode 100644 index 0000000..c92ec03 --- /dev/null +++ b/node_modules/.bin/nopt.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\nopt\bin\nopt.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/nopt.ps1 b/node_modules/.bin/nopt.ps1 new file mode 100644 index 0000000..68c40bf --- /dev/null +++ b/node_modules/.bin/nopt.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../nopt/bin/nopt.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/rc b/node_modules/.bin/rc new file mode 100644 index 0000000..9e01626 --- /dev/null +++ b/node_modules/.bin/rc @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../rc/cli.js" "$@" + ret=$? +else + node "$basedir/../rc/cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/rc.cmd b/node_modules/.bin/rc.cmd new file mode 100644 index 0000000..aedece9 --- /dev/null +++ b/node_modules/.bin/rc.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\rc\cli.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/rc.ps1 b/node_modules/.bin/rc.ps1 new file mode 100644 index 0000000..ac2cd2a --- /dev/null +++ b/node_modules/.bin/rc.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../rc/cli.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../rc/cli.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 100644 index 0000000..10497aa --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../semver/bin/semver" "$@" + ret=$? +else + node "$basedir/../semver/bin/semver" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/semver.cmd b/node_modules/.bin/semver.cmd new file mode 100644 index 0000000..eb3aaa1 --- /dev/null +++ b/node_modules/.bin/semver.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\semver\bin\semver" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/semver.ps1 b/node_modules/.bin/semver.ps1 new file mode 100644 index 0000000..a3315ff --- /dev/null +++ b/node_modules/.bin/semver.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../semver/bin/semver" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv new file mode 100644 index 0000000..91957fa --- /dev/null +++ b/node_modules/.bin/sshpk-conv @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../sshpk/bin/sshpk-conv" "$@" + ret=$? +else + node "$basedir/../sshpk/bin/sshpk-conv" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/sshpk-conv.cmd b/node_modules/.bin/sshpk-conv.cmd new file mode 100644 index 0000000..42f9ce4 --- /dev/null +++ b/node_modules/.bin/sshpk-conv.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-conv" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-conv.ps1 b/node_modules/.bin/sshpk-conv.ps1 new file mode 100644 index 0000000..d27c311 --- /dev/null +++ b/node_modules/.bin/sshpk-conv.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign new file mode 100644 index 0000000..0dd7644 --- /dev/null +++ b/node_modules/.bin/sshpk-sign @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../sshpk/bin/sshpk-sign" "$@" + ret=$? +else + node "$basedir/../sshpk/bin/sshpk-sign" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/sshpk-sign.cmd b/node_modules/.bin/sshpk-sign.cmd new file mode 100644 index 0000000..17f60de --- /dev/null +++ b/node_modules/.bin/sshpk-sign.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-sign" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-sign.ps1 b/node_modules/.bin/sshpk-sign.ps1 new file mode 100644 index 0000000..10d9186 --- /dev/null +++ b/node_modules/.bin/sshpk-sign.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify new file mode 100644 index 0000000..04f5d05 --- /dev/null +++ b/node_modules/.bin/sshpk-verify @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../sshpk/bin/sshpk-verify" "$@" + ret=$? +else + node "$basedir/../sshpk/bin/sshpk-verify" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/sshpk-verify.cmd b/node_modules/.bin/sshpk-verify.cmd new file mode 100644 index 0000000..4b81f35 --- /dev/null +++ b/node_modules/.bin/sshpk-verify.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-verify" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-verify.ps1 b/node_modules/.bin/sshpk-verify.ps1 new file mode 100644 index 0000000..d5a23e2 --- /dev/null +++ b/node_modules/.bin/sshpk-verify.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 100644 index 0000000..9af3844 --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../uuid/bin/uuid" "$@" + ret=$? +else + node "$basedir/../uuid/bin/uuid" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/uuid.cmd b/node_modules/.bin/uuid.cmd new file mode 100644 index 0000000..8154f4e --- /dev/null +++ b/node_modules/.bin/uuid.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\uuid\bin\uuid" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/uuid.ps1 b/node_modules/.bin/uuid.ps1 new file mode 100644 index 0000000..3fcb264 --- /dev/null +++ b/node_modules/.bin/uuid.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../uuid/bin/uuid" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../uuid/bin/uuid" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/@sindresorhus/is/dist/index.d.ts b/node_modules/@sindresorhus/is/dist/index.d.ts new file mode 100644 index 0000000..e94d30b --- /dev/null +++ b/node_modules/@sindresorhus/is/dist/index.d.ts @@ -0,0 +1,132 @@ +/// +/// +/// +/// +/// +declare type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; +declare type Primitive = null | undefined | string | number | boolean | Symbol; +export interface ArrayLike { + length: number; +} +export interface Class { + new (...args: any[]): T; +} +declare type DomElement = object & { + nodeType: 1; + nodeName: string; +}; +declare type NodeStream = object & { + pipe: Function; +}; +export declare const enum TypeName { + null = "null", + boolean = "boolean", + undefined = "undefined", + string = "string", + number = "number", + symbol = "symbol", + Function = "Function", + GeneratorFunction = "GeneratorFunction", + AsyncFunction = "AsyncFunction", + Observable = "Observable", + Array = "Array", + Buffer = "Buffer", + Object = "Object", + RegExp = "RegExp", + Date = "Date", + Error = "Error", + Map = "Map", + Set = "Set", + WeakMap = "WeakMap", + WeakSet = "WeakSet", + Int8Array = "Int8Array", + Uint8Array = "Uint8Array", + Uint8ClampedArray = "Uint8ClampedArray", + Int16Array = "Int16Array", + Uint16Array = "Uint16Array", + Int32Array = "Int32Array", + Uint32Array = "Uint32Array", + Float32Array = "Float32Array", + Float64Array = "Float64Array", + ArrayBuffer = "ArrayBuffer", + SharedArrayBuffer = "SharedArrayBuffer", + DataView = "DataView", + Promise = "Promise", + URL = "URL" +} +declare function is(value: unknown): TypeName; +declare namespace is { + const undefined: (value: unknown) => value is undefined; + const string: (value: unknown) => value is string; + const number: (value: unknown) => value is number; + const function_: (value: unknown) => value is Function; + const null_: (value: unknown) => value is null; + const class_: (value: unknown) => value is Class; + const boolean: (value: unknown) => value is boolean; + const symbol: (value: unknown) => value is Symbol; + const numericString: (value: unknown) => boolean; + const array: (arg: any) => arg is any[]; + const buffer: (input: unknown) => input is Buffer; + const nullOrUndefined: (value: unknown) => value is null | undefined; + const object: (value: unknown) => value is object; + const iterable: (value: unknown) => value is IterableIterator; + const asyncIterable: (value: unknown) => value is AsyncIterableIterator; + const generator: (value: unknown) => value is Generator; + const nativePromise: (value: unknown) => value is Promise; + const promise: (value: unknown) => value is Promise; + const generatorFunction: (value: unknown) => value is GeneratorFunction; + const asyncFunction: (value: unknown) => value is Function; + const boundFunction: (value: unknown) => value is Function; + const regExp: (value: unknown) => value is RegExp; + const date: (value: unknown) => value is Date; + const error: (value: unknown) => value is Error; + const map: (value: unknown) => value is Map; + const set: (value: unknown) => value is Set; + const weakMap: (value: unknown) => value is WeakMap; + const weakSet: (value: unknown) => value is WeakSet; + const int8Array: (value: unknown) => value is Int8Array; + const uint8Array: (value: unknown) => value is Uint8Array; + const uint8ClampedArray: (value: unknown) => value is Uint8ClampedArray; + const int16Array: (value: unknown) => value is Int16Array; + const uint16Array: (value: unknown) => value is Uint16Array; + const int32Array: (value: unknown) => value is Int32Array; + const uint32Array: (value: unknown) => value is Uint32Array; + const float32Array: (value: unknown) => value is Float32Array; + const float64Array: (value: unknown) => value is Float64Array; + const arrayBuffer: (value: unknown) => value is ArrayBuffer; + const sharedArrayBuffer: (value: unknown) => value is SharedArrayBuffer; + const dataView: (value: unknown) => value is DataView; + const directInstanceOf: (instance: unknown, klass: Class) => instance is T; + const urlInstance: (value: unknown) => value is URL; + const urlString: (value: unknown) => boolean; + const truthy: (value: unknown) => boolean; + const falsy: (value: unknown) => boolean; + const nan: (value: unknown) => boolean; + const primitive: (value: unknown) => value is Primitive; + const integer: (value: unknown) => value is number; + const safeInteger: (value: unknown) => value is number; + const plainObject: (value: unknown) => boolean; + const typedArray: (value: unknown) => value is TypedArray; + const arrayLike: (value: unknown) => value is ArrayLike; + const inRange: (value: number, range: number | number[]) => boolean; + const domElement: (value: unknown) => value is DomElement; + const observable: (value: unknown) => boolean; + const nodeStream: (value: unknown) => value is NodeStream; + const infinite: (value: unknown) => boolean; + const even: (value: number) => boolean; + const odd: (value: number) => boolean; + const emptyArray: (value: unknown) => boolean; + const nonEmptyArray: (value: unknown) => boolean; + const emptyString: (value: unknown) => boolean; + const nonEmptyString: (value: unknown) => boolean; + const emptyStringOrWhitespace: (value: unknown) => boolean; + const emptyObject: (value: unknown) => boolean; + const nonEmptyObject: (value: unknown) => boolean; + const emptySet: (value: unknown) => boolean; + const nonEmptySet: (value: unknown) => boolean; + const emptyMap: (value: unknown) => boolean; + const nonEmptyMap: (value: unknown) => boolean; + const any: (predicate: unknown, ...values: unknown[]) => boolean; + const all: (predicate: unknown, ...values: unknown[]) => boolean; +} +export default is; diff --git a/node_modules/@sindresorhus/is/dist/index.js b/node_modules/@sindresorhus/is/dist/index.js new file mode 100644 index 0000000..3cbafae --- /dev/null +++ b/node_modules/@sindresorhus/is/dist/index.js @@ -0,0 +1,245 @@ +"use strict"; +/// +/// +/// +/// +Object.defineProperty(exports, "__esModule", { value: true }); +// TODO: Use the `URL` global when targeting Node.js 10 +// tslint:disable-next-line +const URLGlobal = typeof URL === 'undefined' ? require('url').URL : URL; +const toString = Object.prototype.toString; +const isOfType = (type) => (value) => typeof value === type; +const isBuffer = (input) => !is.nullOrUndefined(input) && !is.nullOrUndefined(input.constructor) && is.function_(input.constructor.isBuffer) && input.constructor.isBuffer(input); +const getObjectType = (value) => { + const objectName = toString.call(value).slice(8, -1); + if (objectName) { + return objectName; + } + return null; +}; +const isObjectOfType = (type) => (value) => getObjectType(value) === type; +function is(value) { + switch (value) { + case null: + return "null" /* null */; + case true: + case false: + return "boolean" /* boolean */; + default: + } + switch (typeof value) { + case 'undefined': + return "undefined" /* undefined */; + case 'string': + return "string" /* string */; + case 'number': + return "number" /* number */; + case 'symbol': + return "symbol" /* symbol */; + default: + } + if (is.function_(value)) { + return "Function" /* Function */; + } + if (is.observable(value)) { + return "Observable" /* Observable */; + } + if (Array.isArray(value)) { + return "Array" /* Array */; + } + if (isBuffer(value)) { + return "Buffer" /* Buffer */; + } + const tagType = getObjectType(value); + if (tagType) { + return tagType; + } + if (value instanceof String || value instanceof Boolean || value instanceof Number) { + throw new TypeError('Please don\'t use object wrappers for primitive types'); + } + return "Object" /* Object */; +} +(function (is) { + // tslint:disable-next-line:strict-type-predicates + const isObject = (value) => typeof value === 'object'; + // tslint:disable:variable-name + is.undefined = isOfType('undefined'); + is.string = isOfType('string'); + is.number = isOfType('number'); + is.function_ = isOfType('function'); + // tslint:disable-next-line:strict-type-predicates + is.null_ = (value) => value === null; + is.class_ = (value) => is.function_(value) && value.toString().startsWith('class '); + is.boolean = (value) => value === true || value === false; + is.symbol = isOfType('symbol'); + // tslint:enable:variable-name + is.numericString = (value) => is.string(value) && value.length > 0 && !Number.isNaN(Number(value)); + is.array = Array.isArray; + is.buffer = isBuffer; + is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); + is.object = (value) => !is.nullOrUndefined(value) && (is.function_(value) || isObject(value)); + is.iterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.iterator]); + is.asyncIterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.asyncIterator]); + is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw); + is.nativePromise = (value) => isObjectOfType("Promise" /* Promise */)(value); + const hasPromiseAPI = (value) => !is.null_(value) && + isObject(value) && + is.function_(value.then) && + is.function_(value.catch); + is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value); + is.generatorFunction = isObjectOfType("GeneratorFunction" /* GeneratorFunction */); + is.asyncFunction = isObjectOfType("AsyncFunction" /* AsyncFunction */); + is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype'); + is.regExp = isObjectOfType("RegExp" /* RegExp */); + is.date = isObjectOfType("Date" /* Date */); + is.error = isObjectOfType("Error" /* Error */); + is.map = (value) => isObjectOfType("Map" /* Map */)(value); + is.set = (value) => isObjectOfType("Set" /* Set */)(value); + is.weakMap = (value) => isObjectOfType("WeakMap" /* WeakMap */)(value); + is.weakSet = (value) => isObjectOfType("WeakSet" /* WeakSet */)(value); + is.int8Array = isObjectOfType("Int8Array" /* Int8Array */); + is.uint8Array = isObjectOfType("Uint8Array" /* Uint8Array */); + is.uint8ClampedArray = isObjectOfType("Uint8ClampedArray" /* Uint8ClampedArray */); + is.int16Array = isObjectOfType("Int16Array" /* Int16Array */); + is.uint16Array = isObjectOfType("Uint16Array" /* Uint16Array */); + is.int32Array = isObjectOfType("Int32Array" /* Int32Array */); + is.uint32Array = isObjectOfType("Uint32Array" /* Uint32Array */); + is.float32Array = isObjectOfType("Float32Array" /* Float32Array */); + is.float64Array = isObjectOfType("Float64Array" /* Float64Array */); + is.arrayBuffer = isObjectOfType("ArrayBuffer" /* ArrayBuffer */); + is.sharedArrayBuffer = isObjectOfType("SharedArrayBuffer" /* SharedArrayBuffer */); + is.dataView = isObjectOfType("DataView" /* DataView */); + is.directInstanceOf = (instance, klass) => Object.getPrototypeOf(instance) === klass.prototype; + is.urlInstance = (value) => isObjectOfType("URL" /* URL */)(value); + is.urlString = (value) => { + if (!is.string(value)) { + return false; + } + try { + new URLGlobal(value); // tslint:disable-line no-unused-expression + return true; + } + catch (_a) { + return false; + } + }; + is.truthy = (value) => Boolean(value); + is.falsy = (value) => !value; + is.nan = (value) => Number.isNaN(value); + const primitiveTypes = new Set([ + 'undefined', + 'string', + 'number', + 'boolean', + 'symbol' + ]); + is.primitive = (value) => is.null_(value) || primitiveTypes.has(typeof value); + is.integer = (value) => Number.isInteger(value); + is.safeInteger = (value) => Number.isSafeInteger(value); + is.plainObject = (value) => { + // From: https://github.com/sindresorhus/is-plain-obj/blob/master/index.js + let prototype; + return getObjectType(value) === "Object" /* Object */ && + (prototype = Object.getPrototypeOf(value), prototype === null || // tslint:disable-line:ban-comma-operator + prototype === Object.getPrototypeOf({})); + }; + const typedArrayTypes = new Set([ + "Int8Array" /* Int8Array */, + "Uint8Array" /* Uint8Array */, + "Uint8ClampedArray" /* Uint8ClampedArray */, + "Int16Array" /* Int16Array */, + "Uint16Array" /* Uint16Array */, + "Int32Array" /* Int32Array */, + "Uint32Array" /* Uint32Array */, + "Float32Array" /* Float32Array */, + "Float64Array" /* Float64Array */ + ]); + is.typedArray = (value) => { + const objectType = getObjectType(value); + if (objectType === null) { + return false; + } + return typedArrayTypes.has(objectType); + }; + const isValidLength = (value) => is.safeInteger(value) && value > -1; + is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length); + is.inRange = (value, range) => { + if (is.number(range)) { + return value >= Math.min(0, range) && value <= Math.max(range, 0); + } + if (is.array(range) && range.length === 2) { + return value >= Math.min(...range) && value <= Math.max(...range); + } + throw new TypeError(`Invalid range: ${JSON.stringify(range)}`); + }; + const NODE_TYPE_ELEMENT = 1; + const DOM_PROPERTIES_TO_CHECK = [ + 'innerHTML', + 'ownerDocument', + 'style', + 'attributes', + 'nodeValue' + ]; + is.domElement = (value) => is.object(value) && value.nodeType === NODE_TYPE_ELEMENT && is.string(value.nodeName) && + !is.plainObject(value) && DOM_PROPERTIES_TO_CHECK.every(property => property in value); + is.observable = (value) => { + if (!value) { + return false; + } + if (value[Symbol.observable] && value === value[Symbol.observable]()) { + return true; + } + if (value['@@observable'] && value === value['@@observable']()) { + return true; + } + return false; + }; + is.nodeStream = (value) => !is.nullOrUndefined(value) && isObject(value) && is.function_(value.pipe) && !is.observable(value); + is.infinite = (value) => value === Infinity || value === -Infinity; + const isAbsoluteMod2 = (rem) => (value) => is.integer(value) && Math.abs(value % 2) === rem; + is.even = isAbsoluteMod2(0); + is.odd = isAbsoluteMod2(1); + const isWhiteSpaceString = (value) => is.string(value) && /\S/.test(value) === false; + is.emptyArray = (value) => is.array(value) && value.length === 0; + is.nonEmptyArray = (value) => is.array(value) && value.length > 0; + is.emptyString = (value) => is.string(value) && value.length === 0; + is.nonEmptyString = (value) => is.string(value) && value.length > 0; + is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value); + is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0; + is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0; + is.emptySet = (value) => is.set(value) && value.size === 0; + is.nonEmptySet = (value) => is.set(value) && value.size > 0; + is.emptyMap = (value) => is.map(value) && value.size === 0; + is.nonEmptyMap = (value) => is.map(value) && value.size > 0; + const predicateOnArray = (method, predicate, values) => { + if (is.function_(predicate) === false) { + throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`); + } + if (values.length === 0) { + throw new TypeError('Invalid number of values'); + } + return method.call(values, predicate); + }; + // tslint:disable variable-name + is.any = (predicate, ...values) => predicateOnArray(Array.prototype.some, predicate, values); + is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values); + // tslint:enable variable-name +})(is || (is = {})); +// Some few keywords are reserved, but we'll populate them for Node.js users +// See https://github.com/Microsoft/TypeScript/issues/2536 +Object.defineProperties(is, { + class: { + value: is.class_ + }, + function: { + value: is.function_ + }, + null: { + value: is.null_ + } +}); +exports.default = is; +// For CommonJS default export support +module.exports = is; +module.exports.default = is; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@sindresorhus/is/dist/index.js.map b/node_modules/@sindresorhus/is/dist/index.js.map new file mode 100644 index 0000000..cd827fc --- /dev/null +++ b/node_modules/@sindresorhus/is/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@sindresorhus/is/license b/node_modules/@sindresorhus/is/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/@sindresorhus/is/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@sindresorhus/is/package.json b/node_modules/@sindresorhus/is/package.json new file mode 100644 index 0000000..64ad096 --- /dev/null +++ b/node_modules/@sindresorhus/is/package.json @@ -0,0 +1,96 @@ +{ + "_from": "@sindresorhus/is@^0.14.0", + "_id": "@sindresorhus/is@0.14.0", + "_inBundle": false, + "_integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "_location": "/@sindresorhus/is", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@sindresorhus/is@^0.14.0", + "name": "@sindresorhus/is", + "escapedName": "@sindresorhus%2fis", + "scope": "@sindresorhus", + "rawSpec": "^0.14.0", + "saveSpec": null, + "fetchSpec": "^0.14.0" + }, + "_requiredBy": [ + "/got" + ], + "_resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "_shasum": "9fb3a3cf3132328151f353de4632e01e52102bea", + "_spec": "@sindresorhus/is@^0.14.0", + "_where": "D:\\Cricbuzzz\\node_modules\\got", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Type check values: `is.string('🦄') //=> true`", + "devDependencies": { + "@sindresorhus/tsconfig": "^0.1.0", + "@types/jsdom": "^11.12.0", + "@types/node": "^10.12.10", + "@types/tempy": "^0.2.0", + "@types/zen-observable": "^0.8.0", + "ava": "^0.25.0", + "del-cli": "^1.1.0", + "jsdom": "^11.6.2", + "rxjs": "^6.3.3", + "tempy": "^0.2.1", + "tslint": "^5.9.1", + "tslint-xo": "^0.10.0", + "typescript": "^3.2.1", + "zen-observable": "^0.8.8" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "dist" + ], + "homepage": "https://github.com/sindresorhus/is#readme", + "keywords": [ + "type", + "types", + "is", + "check", + "checking", + "validate", + "validation", + "utility", + "util", + "typeof", + "instanceof", + "object", + "assert", + "assertion", + "test", + "kind", + "primitive", + "verify", + "compare" + ], + "license": "MIT", + "main": "dist/index.js", + "name": "@sindresorhus/is", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is.git" + }, + "scripts": { + "build": "del dist && tsc", + "lint": "tslint --format stylish --project .", + "prepublish": "npm run build && del dist/tests", + "test": "npm run lint && npm run build && ava dist/tests" + }, + "types": "dist/index.d.ts", + "version": "0.14.0" +} diff --git a/node_modules/@sindresorhus/is/readme.md b/node_modules/@sindresorhus/is/readme.md new file mode 100644 index 0000000..97c023b --- /dev/null +++ b/node_modules/@sindresorhus/is/readme.md @@ -0,0 +1,451 @@ +# is [![Build Status](https://travis-ci.org/sindresorhus/is.svg?branch=master)](https://travis-ci.org/sindresorhus/is) + +> Type check values: `is.string('🦄') //=> true` + + + + +## Install + +``` +$ npm install @sindresorhus/is +``` + + +## Usage + +```js +const is = require('@sindresorhus/is'); + +is('🦄'); +//=> 'string' + +is(new Map()); +//=> 'Map' + +is.number(6); +//=> true +``` + +When using `is` together with TypeScript, [type guards](http://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types) are being used to infer the correct type inside if-else statements. + +```ts +import is from '@sindresorhus/is'; + +const padLeft = (value: string, padding: string | number) => { + if (is.number(padding)) { + // `padding` is typed as `number` + return Array(padding + 1).join(' ') + value; + } + + if (is.string(padding)) { + // `padding` is typed as `string` + return padding + value; + } + + throw new TypeError(`Expected 'padding' to be of type 'string' or 'number', got '${is(padding)}'.`); +} + +padLeft('🦄', 3); +//=> ' 🦄' + +padLeft('🦄', '🌈'); +//=> '🌈🦄' +``` + + +## API + +### is(value) + +Returns the type of `value`. + +Primitives are lowercase and object types are camelcase. + +Example: + +- `'undefined'` +- `'null'` +- `'string'` +- `'symbol'` +- `'Array'` +- `'Function'` +- `'Object'` + +Note: It will throw an error if you try to feed it object-wrapped primitives, as that's a bad practice. For example `new String('foo')`. + +### is.{method} + +All the below methods accept a value and returns a boolean for whether the value is of the desired type. + +#### Primitives + +##### .undefined(value) +##### .null(value) +##### .string(value) +##### .number(value) +##### .boolean(value) +##### .symbol(value) + +#### Built-in types + +##### .array(value) +##### .function(value) +##### .buffer(value) +##### .object(value) + +Keep in mind that [functions are objects too](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions). + +##### .numericString(value) + +Returns `true` for a string that represents a number. For example, `'42'` and `'-8'`. + +Note: `'NaN'` returns `false`, but `'Infinity'` and `'-Infinity'` return `true`. + +##### .regExp(value) +##### .date(value) +##### .error(value) +##### .nativePromise(value) +##### .promise(value) + +Returns `true` for any object with a `.then()` and `.catch()` method. Prefer this one over `.nativePromise()` as you usually want to allow userland promise implementations too. + +##### .generator(value) + +Returns `true` for any object that implements its own `.next()` and `.throw()` methods and has a function definition for `Symbol.iterator`. + +##### .generatorFunction(value) + +##### .asyncFunction(value) + +Returns `true` for any `async` function that can be called with the `await` operator. + +```js +is.asyncFunction(async () => {}); +// => true + +is.asyncFunction(() => {}); +// => false +``` + +##### .boundFunction(value) + +Returns `true` for any `bound` function. + +```js +is.boundFunction(() => {}); +// => true + +is.boundFunction(function () {}.bind(null)); +// => true + +is.boundFunction(function () {}); +// => false +``` + +##### .map(value) +##### .set(value) +##### .weakMap(value) +##### .weakSet(value) + +#### Typed arrays + +##### .int8Array(value) +##### .uint8Array(value) +##### .uint8ClampedArray(value) +##### .int16Array(value) +##### .uint16Array(value) +##### .int32Array(value) +##### .uint32Array(value) +##### .float32Array(value) +##### .float64Array(value) + +#### Structured data + +##### .arrayBuffer(value) +##### .sharedArrayBuffer(value) +##### .dataView(value) + +#### Emptiness + +##### .emptyString(value) + +Returns `true` if the value is a `string` and the `.length` is 0. + +##### .nonEmptyString(value) + +Returns `true` if the value is a `string` and the `.length` is more than 0. + +##### .emptyStringOrWhitespace(value) + +Returns `true` if `is.emptyString(value)` or if it's a `string` that is all whitespace. + +##### .emptyArray(value) + +Returns `true` if the value is an `Array` and the `.length` is 0. + +##### .nonEmptyArray(value) + +Returns `true` if the value is an `Array` and the `.length` is more than 0. + +##### .emptyObject(value) + +Returns `true` if the value is an `Object` and `Object.keys(value).length` is 0. + +Please note that `Object.keys` returns only own enumerable properties. Hence something like this can happen: + +```js +const object1 = {}; + +Object.defineProperty(object1, 'property1', { + value: 42, + writable: true, + enumerable: false, + configurable: true +}); + +is.emptyObject(object1); +// => true +``` + +##### .nonEmptyObject(value) + +Returns `true` if the value is an `Object` and `Object.keys(value).length` is more than 0. + +##### .emptySet(value) + +Returns `true` if the value is a `Set` and the `.size` is 0. + +##### .nonEmptySet(Value) + +Returns `true` if the value is a `Set` and the `.size` is more than 0. + +##### .emptyMap(value) + +Returns `true` if the value is a `Map` and the `.size` is 0. + +##### .nonEmptyMap(value) + +Returns `true` if the value is a `Map` and the `.size` is more than 0. + +#### Miscellaneous + +##### .directInstanceOf(value, class) + +Returns `true` if `value` is a direct instance of `class`. + +```js +is.directInstanceOf(new Error(), Error); +//=> true + +class UnicornError extends Error {} + +is.directInstanceOf(new UnicornError(), Error); +//=> false +``` + +##### .urlInstance(value) + +Returns `true` if `value` is an instance of the [`URL` class](https://developer.mozilla.org/en-US/docs/Web/API/URL). + +```js +const url = new URL('https://example.com'); + +is.urlInstance(url); +//=> true +``` + +### .url(value) + +Returns `true` if `value` is a URL string. + +Note: this only does basic checking using the [`URL` class](https://developer.mozilla.org/en-US/docs/Web/API/URL) constructor. + +```js +const url = 'https://example.com'; + +is.url(url); +//=> true + +is.url(new URL(url)); +//=> false +``` + +##### .truthy(value) + +Returns `true` for all values that evaluate to true in a boolean context: + +```js +is.truthy('🦄'); +//=> true + +is.truthy(undefined); +//=> false +``` + +##### .falsy(value) + +Returns `true` if `value` is one of: `false`, `0`, `''`, `null`, `undefined`, `NaN`. + +##### .nan(value) +##### .nullOrUndefined(value) +##### .primitive(value) + +JavaScript primitives are as follows: `null`, `undefined`, `string`, `number`, `boolean`, `symbol`. + +##### .integer(value) + +##### .safeInteger(value) + +Returns `true` if `value` is a [safe integer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger). + +##### .plainObject(value) + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +##### .iterable(value) +##### .asyncIterable(value) +##### .class(value) + +Returns `true` for instances created by a class. + +##### .typedArray(value) + +##### .arrayLike(value) + +A `value` is array-like if it is not a function and has a `value.length` that is a safe integer greater than or equal to 0. + +```js +is.arrayLike(document.forms); +//=> true + +function foo() { + is.arrayLike(arguments); + //=> true +} +foo(); +``` + +##### .inRange(value, range) + +Check if `value` (number) is in the given `range`. The range is an array of two values, lower bound and upper bound, in no specific order. + +```js +is.inRange(3, [0, 5]); +is.inRange(3, [5, 0]); +is.inRange(0, [-2, 2]); +``` + +##### .inRange(value, upperBound) + +Check if `value` (number) is in the range of `0` to `upperBound`. + +```js +is.inRange(3, 10); +``` + +##### .domElement(value) + +Returns `true` if `value` is a DOM Element. + +##### .nodeStream(value) + +Returns `true` if `value` is a Node.js [stream](https://nodejs.org/api/stream.html). + +```js +const fs = require('fs'); + +is.nodeStream(fs.createReadStream('unicorn.png')); +//=> true +``` + +##### .observable(value) + +Returns `true` if `value` is an `Observable`. + +```js +const {Observable} = require('rxjs'); + +is.observable(new Observable()); +//=> true +``` + +##### .infinite(value) + +Check if `value` is `Infinity` or `-Infinity`. + +##### .even(value) + +Returns `true` if `value` is an even integer. + +##### .odd(value) + +Returns `true` if `value` is an odd integer. + +##### .any(predicate, ...values) + +Returns `true` if **any** of the input `values` returns true in the `predicate`: + +```js +is.any(is.string, {}, true, '🦄'); +//=> true + +is.any(is.boolean, 'unicorns', [], new Map()); +//=> false +``` + +##### .all(predicate, ...values) + +Returns `true` if **all** of the input `values` returns true in the `predicate`: + +```js +is.all(is.object, {}, new Map(), new Set()); +//=> true + +is.all(is.string, '🦄', [], 'unicorns'); +//=> false +``` + + +## FAQ + +### Why yet another type checking module? + +There are hundreds of type checking modules on npm, unfortunately, I couldn't find any that fit my needs: + +- Includes both type methods and ability to get the type +- Types of primitives returned as lowercase and object types as camelcase +- Covers all built-ins +- Unsurprising behavior +- Well-maintained +- Comprehensive test suite + +For the ones I found, pick 3 of these. + +The most common mistakes I noticed in these modules was using `instanceof` for type checking, forgetting that functions are objects, and omitting `symbol` as a primitive. + + +## Related + +- [ow](https://github.com/sindresorhus/ow) - Function argument validation for humans +- [is-stream](https://github.com/sindresorhus/is-stream) - Check if something is a Node.js stream +- [is-observable](https://github.com/sindresorhus/is-observable) - Check if a value is an Observable +- [file-type](https://github.com/sindresorhus/file-type) - Detect the file type of a Buffer/Uint8Array +- [is-ip](https://github.com/sindresorhus/is-ip) - Check if a string is an IP address +- [is-array-sorted](https://github.com/sindresorhus/is-array-sorted) - Check if an Array is sorted +- [is-error-constructor](https://github.com/sindresorhus/is-error-constructor) - Check if a value is an error constructor +- [is-empty-iterable](https://github.com/sindresorhus/is-empty-iterable) - Check if an Iterable is empty +- [is-blob](https://github.com/sindresorhus/is-blob) - Check if a value is a Blob - File-like object of immutable, raw data +- [has-emoji](https://github.com/sindresorhus/has-emoji) - Check whether a string has any emoji + + +## Created by + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Giora Guttsait](https://github.com/gioragutt) +- [Brandon Smith](https://github.com/brandon93s) + + +## License + +MIT diff --git a/node_modules/@szmarczak/http-timer/LICENSE b/node_modules/@szmarczak/http-timer/LICENSE new file mode 100644 index 0000000..15ad2e8 --- /dev/null +++ b/node_modules/@szmarczak/http-timer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Szymon Marczak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@szmarczak/http-timer/README.md b/node_modules/@szmarczak/http-timer/README.md new file mode 100644 index 0000000..13279ed --- /dev/null +++ b/node_modules/@szmarczak/http-timer/README.md @@ -0,0 +1,70 @@ +# http-timer +> Timings for HTTP requests + +[![Build Status](https://travis-ci.org/szmarczak/http-timer.svg?branch=master)](https://travis-ci.org/szmarczak/http-timer) +[![Coverage Status](https://coveralls.io/repos/github/szmarczak/http-timer/badge.svg?branch=master)](https://coveralls.io/github/szmarczak/http-timer?branch=master) +[![install size](https://packagephobia.now.sh/badge?p=@szmarczak/http-timer)](https://packagephobia.now.sh/result?p=@szmarczak/http-timer) + +Inspired by the [`request` package](https://github.com/request/request). + +## Usage +```js +'use strict'; +const https = require('https'); +const timer = require('@szmarczak/http-timer'); + +const request = https.get('https://httpbin.org/anything'); +const timings = timer(request); + +request.on('response', response => { + response.on('data', () => {}); // Consume the data somehow + response.on('end', () => { + console.log(timings); + }); +}); + +// { start: 1535708511443, +// socket: 1535708511444, +// lookup: 1535708511444, +// connect: 1535708511582, +// upload: 1535708511887, +// response: 1535708512037, +// end: 1535708512040, +// phases: +// { wait: 1, +// dns: 0, +// tcp: 138, +// request: 305, +// firstByte: 150, +// download: 3, +// total: 597 } } +``` + +## API + +### timer(request) + +Returns: `Object` + +- `start` - Time when the request started. +- `socket` - Time when a socket was assigned to the request. +- `lookup` - Time when the DNS lookup finished. +- `connect` - Time when the socket successfully connected. +- `upload` - Time when the request finished uploading. +- `response` - Time when the request fired the `response` event. +- `end` - Time when the response fired the `end` event. +- `error` - Time when the request fired the `error` event. +- `phases` + - `wait` - `timings.socket - timings.start` + - `dns` - `timings.lookup - timings.socket` + - `tcp` - `timings.connect - timings.lookup` + - `request` - `timings.upload - timings.connect` + - `firstByte` - `timings.response - timings.upload` + - `download` - `timings.end - timings.response` + - `total` - `timings.end - timings.start` or `timings.error - timings.start` + +**Note**: The time is a `number` representing the milliseconds elapsed since the UNIX epoch. + +## License + +MIT diff --git a/node_modules/@szmarczak/http-timer/package.json b/node_modules/@szmarczak/http-timer/package.json new file mode 100644 index 0000000..a11c3f8 --- /dev/null +++ b/node_modules/@szmarczak/http-timer/package.json @@ -0,0 +1,75 @@ +{ + "_from": "@szmarczak/http-timer@^1.1.2", + "_id": "@szmarczak/http-timer@1.1.2", + "_inBundle": false, + "_integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "_location": "/@szmarczak/http-timer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@szmarczak/http-timer@^1.1.2", + "name": "@szmarczak/http-timer", + "escapedName": "@szmarczak%2fhttp-timer", + "scope": "@szmarczak", + "rawSpec": "^1.1.2", + "saveSpec": null, + "fetchSpec": "^1.1.2" + }, + "_requiredBy": [ + "/got" + ], + "_resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "_shasum": "b1665e2c461a2cd92f4c1bbf50d5454de0d4b421", + "_spec": "@szmarczak/http-timer@^1.1.2", + "_where": "D:\\Cricbuzzz\\node_modules\\got", + "author": { + "name": "Szymon Marczak" + }, + "bugs": { + "url": "https://github.com/szmarczak/http-timer/issues" + }, + "bundleDependencies": false, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "deprecated": false, + "description": "Timings for HTTP requests", + "devDependencies": { + "ava": "^0.25.0", + "coveralls": "^3.0.2", + "nyc": "^12.0.2", + "p-event": "^2.1.0", + "xo": "^0.22.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "source" + ], + "homepage": "https://github.com/szmarczak/http-timer#readme", + "keywords": [ + "http", + "https", + "timer", + "timings" + ], + "license": "MIT", + "main": "source", + "name": "@szmarczak/http-timer", + "repository": { + "type": "git", + "url": "git+https://github.com/szmarczak/http-timer.git" + }, + "scripts": { + "coveralls": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc ava" + }, + "version": "1.1.2", + "xo": { + "rules": { + "unicorn/filename-case": "camelCase" + } + } +} diff --git a/node_modules/@szmarczak/http-timer/source/index.js b/node_modules/@szmarczak/http-timer/source/index.js new file mode 100644 index 0000000..e294580 --- /dev/null +++ b/node_modules/@szmarczak/http-timer/source/index.js @@ -0,0 +1,99 @@ +'use strict'; +const deferToConnect = require('defer-to-connect'); + +module.exports = request => { + const timings = { + start: Date.now(), + socket: null, + lookup: null, + connect: null, + upload: null, + response: null, + end: null, + error: null, + phases: { + wait: null, + dns: null, + tcp: null, + request: null, + firstByte: null, + download: null, + total: null + } + }; + + const handleError = origin => { + const emit = origin.emit.bind(origin); + origin.emit = (event, ...args) => { + // Catches the `error` event + if (event === 'error') { + timings.error = Date.now(); + timings.phases.total = timings.error - timings.start; + + origin.emit = emit; + } + + // Saves the original behavior + return emit(event, ...args); + }; + }; + + let uploadFinished = false; + const onUpload = () => { + timings.upload = Date.now(); + timings.phases.request = timings.upload - timings.connect; + }; + + handleError(request); + + request.once('socket', socket => { + timings.socket = Date.now(); + timings.phases.wait = timings.socket - timings.start; + + const lookupListener = () => { + timings.lookup = Date.now(); + timings.phases.dns = timings.lookup - timings.socket; + }; + + socket.once('lookup', lookupListener); + + deferToConnect(socket, () => { + timings.connect = Date.now(); + + if (timings.lookup === null) { + socket.removeListener('lookup', lookupListener); + timings.lookup = timings.connect; + timings.phases.dns = timings.lookup - timings.socket; + } + + timings.phases.tcp = timings.connect - timings.lookup; + + if (uploadFinished && !timings.upload) { + onUpload(); + } + }); + }); + + request.once('finish', () => { + uploadFinished = true; + + if (timings.connect) { + onUpload(); + } + }); + + request.once('response', response => { + timings.response = Date.now(); + timings.phases.firstByte = timings.response - timings.upload; + + handleError(response); + + response.once('end', () => { + timings.end = Date.now(); + timings.phases.download = timings.end - timings.response; + timings.phases.total = timings.end - timings.start; + }); + }); + + return timings; +}; diff --git a/node_modules/abbrev/LICENSE b/node_modules/abbrev/LICENSE new file mode 100644 index 0000000..9bcfa9d --- /dev/null +++ b/node_modules/abbrev/LICENSE @@ -0,0 +1,46 @@ +This software is dual-licensed under the ISC and MIT licenses. +You may use this software under EITHER of the following licenses. + +---------- + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------- + +Copyright Isaac Z. Schlueter and Contributors +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/abbrev/README.md b/node_modules/abbrev/README.md new file mode 100644 index 0000000..99746fe --- /dev/null +++ b/node_modules/abbrev/README.md @@ -0,0 +1,23 @@ +# abbrev-js + +Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). + +Usage: + + var abbrev = require("abbrev"); + abbrev("foo", "fool", "folding", "flop"); + + // returns: + { fl: 'flop' + , flo: 'flop' + , flop: 'flop' + , fol: 'folding' + , fold: 'folding' + , foldi: 'folding' + , foldin: 'folding' + , folding: 'folding' + , foo: 'foo' + , fool: 'fool' + } + +This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. diff --git a/node_modules/abbrev/abbrev.js b/node_modules/abbrev/abbrev.js new file mode 100644 index 0000000..7b1dc5d --- /dev/null +++ b/node_modules/abbrev/abbrev.js @@ -0,0 +1,61 @@ +module.exports = exports = abbrev.abbrev = abbrev + +abbrev.monkeyPatch = monkeyPatch + +function monkeyPatch () { + Object.defineProperty(Array.prototype, 'abbrev', { + value: function () { return abbrev(this) }, + enumerable: false, configurable: true, writable: true + }) + + Object.defineProperty(Object.prototype, 'abbrev', { + value: function () { return abbrev(Object.keys(this)) }, + enumerable: false, configurable: true, writable: true + }) +} + +function abbrev (list) { + if (arguments.length !== 1 || !Array.isArray(list)) { + list = Array.prototype.slice.call(arguments, 0) + } + for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { + args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) + } + + // sort them lexicographically, so that they're next to their nearest kin + args = args.sort(lexSort) + + // walk through each, seeing how much it has in common with the next and previous + var abbrevs = {} + , prev = "" + for (var i = 0, l = args.length ; i < l ; i ++) { + var current = args[i] + , next = args[i + 1] || "" + , nextMatches = true + , prevMatches = true + if (current === next) continue + for (var j = 0, cl = current.length ; j < cl ; j ++) { + var curChar = current.charAt(j) + nextMatches = nextMatches && curChar === next.charAt(j) + prevMatches = prevMatches && curChar === prev.charAt(j) + if (!nextMatches && !prevMatches) { + j ++ + break + } + } + prev = current + if (j === cl) { + abbrevs[current] = current + continue + } + for (var a = current.substr(0, j) ; j <= cl ; j ++) { + abbrevs[a] = current + a += current.charAt(j) + } + } + return abbrevs +} + +function lexSort (a, b) { + return a === b ? 0 : a > b ? 1 : -1 +} diff --git a/node_modules/abbrev/package.json b/node_modules/abbrev/package.json new file mode 100644 index 0000000..b849b64 --- /dev/null +++ b/node_modules/abbrev/package.json @@ -0,0 +1,56 @@ +{ + "_from": "abbrev@1", + "_id": "abbrev@1.1.1", + "_inBundle": false, + "_integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "_location": "/abbrev", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "abbrev@1", + "name": "abbrev", + "escapedName": "abbrev", + "rawSpec": "1", + "saveSpec": null, + "fetchSpec": "1" + }, + "_requiredBy": [ + "/nopt" + ], + "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "_shasum": "f8f2c887ad10bf67f634f005b6987fed3179aac8", + "_spec": "abbrev@1", + "_where": "D:\\Cricbuzzz\\node_modules\\nopt", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/abbrev-js/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Like ruby's abbrev module, but in js", + "devDependencies": { + "tap": "^10.1" + }, + "files": [ + "abbrev.js" + ], + "homepage": "https://github.com/isaacs/abbrev-js#readme", + "license": "ISC", + "main": "abbrev.js", + "name": "abbrev", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test.js --100" + }, + "version": "1.1.1" +} diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md new file mode 100644 index 0000000..0bf0417 --- /dev/null +++ b/node_modules/accepts/HISTORY.md @@ -0,0 +1,236 @@ +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + +1.3.3 / 2016-05-02 +================== + + * deps: mime-types@~2.1.11 + - deps: mime-db@~1.23.0 + * deps: negotiator@0.6.1 + - perf: improve `Accept` parsing speed + - perf: improve `Accept-Charset` parsing speed + - perf: improve `Accept-Encoding` parsing speed + - perf: improve `Accept-Language` parsing speed + +1.3.2 / 2016-03-08 +================== + + * deps: mime-types@~2.1.10 + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + - deps: mime-db@~1.22.0 + +1.3.1 / 2016-01-19 +================== + + * deps: mime-types@~2.1.9 + - deps: mime-db@~1.21.0 + +1.3.0 / 2015-09-29 +================== + + * deps: mime-types@~2.1.7 + - deps: mime-db@~1.19.0 + * deps: negotiator@0.6.0 + - Fix including type extensions in parameters in `Accept` parsing + - Fix parsing `Accept` parameters with quoted equals + - Fix parsing `Accept` parameters with quoted semicolons + - Lazy-load modules from main entry point + - perf: delay type concatenation until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove closures getting spec properties + - perf: remove a closure from media type parsing + - perf: remove property delete from media type parsing + +1.2.13 / 2015-09-06 +=================== + + * deps: mime-types@~2.1.6 + - deps: mime-db@~1.18.0 + +1.2.12 / 2015-07-30 +=================== + + * deps: mime-types@~2.1.4 + - deps: mime-db@~1.16.0 + +1.2.11 / 2015-07-16 +=================== + + * deps: mime-types@~2.1.3 + - deps: mime-db@~1.15.0 + +1.2.10 / 2015-07-01 +=================== + + * deps: mime-types@~2.1.2 + - deps: mime-db@~1.14.0 + +1.2.9 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - perf: fix deopt during mapping + +1.2.8 / 2015-06-07 +================== + + * deps: mime-types@~2.1.0 + - deps: mime-db@~1.13.0 + * perf: avoid argument reassignment & argument slice + * perf: avoid negotiator recursive construction + * perf: enable strict mode + * perf: remove unnecessary bitwise operator + +1.2.7 / 2015-05-10 +================== + + * deps: negotiator@0.5.3 + - Fix media type parameter matching to be case-insensitive + +1.2.6 / 2015-05-07 +================== + + * deps: mime-types@~2.0.11 + - deps: mime-db@~1.9.1 + * deps: negotiator@0.5.2 + - Fix comparing media types with quoted values + - Fix splitting media types with quoted commas + +1.2.5 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - deps: mime-db@~1.8.0 + +1.2.4 / 2015-02-14 +================== + + * Support Node.js 0.6 + * deps: mime-types@~2.0.9 + - deps: mime-db@~1.7.0 + * deps: negotiator@0.5.1 + - Fix preference sorting to be stable for long acceptable lists + +1.2.3 / 2015-01-31 +================== + + * deps: mime-types@~2.0.8 + - deps: mime-db@~1.6.0 + +1.2.2 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - deps: mime-db@~1.5.0 + +1.2.1 / 2014-12-30 +================== + + * deps: mime-types@~2.0.5 + - deps: mime-db@~1.3.1 + +1.2.0 / 2014-12-19 +================== + + * deps: negotiator@0.5.0 + - Fix list return order when large accepted list + - Fix missing identity encoding when q=0 exists + - Remove dynamic building of Negotiator class + +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/node_modules/accepts/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/accepts/README.md b/node_modules/accepts/README.md new file mode 100644 index 0000000..66a2f54 --- /dev/null +++ b/node_modules/accepts/README.md @@ -0,0 +1,142 @@ +# accepts + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). +Extracted from [koa](https://www.npmjs.com/package/koa) for general use. + +In addition to negotiator, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` + as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install accepts +``` + +## API + + + +```js +var accepts = require('accepts') +``` + +### accepts(req) + +Create a new `Accepts` object for the given `req`. + +#### .charset(charsets) + +Return the first accepted charset. If nothing in `charsets` is accepted, +then `false` is returned. + +#### .charsets() + +Return the charsets that the request accepts, in the order of the client's +preference (most preferred first). + +#### .encoding(encodings) + +Return the first accepted encoding. If nothing in `encodings` is accepted, +then `false` is returned. + +#### .encodings() + +Return the encodings that the request accepts, in the order of the client's +preference (most preferred first). + +#### .language(languages) + +Return the first accepted language. If nothing in `languages` is accepted, +then `false` is returned. + +#### .languages() + +Return the languages that the request accepts, in the order of the client's +preference (most preferred first). + +#### .type(types) + +Return the first accepted type (and it is returned as the same text as what +appears in the `types` array). If nothing in `types` is accepted, then `false` +is returned. + +The `types` array can contain full MIME types or file extensions. Any value +that is not a full MIME types is passed to `require('mime-types').lookup`. + +#### .types() + +Return the types that the request accepts, in the order of the client's +preference (most preferred first). + +## Examples + +### Simple type negotiation + +This simple example shows how to use `accepts` to return a different typed +respond body based on what the client wants to accept. The server lists it's +preferences in order and will get back the best match between the client and +server. + +```js +var accepts = require('accepts') +var http = require('http') + +function app (req, res) { + var accept = accepts(req) + + // the order of this list is significant; should be server preferred order + switch (accept.type(['json', 'html'])) { + case 'json': + res.setHeader('Content-Type', 'application/json') + res.write('{"hello":"world!"}') + break + case 'html': + res.setHeader('Content-Type', 'text/html') + res.write('hello, world!') + break + default: + // the fallback is text/plain, so no need to specify it above + res.setHeader('Content-Type', 'text/plain') + res.write('hello, world!') + break + } + + res.end() +} + +http.createServer(app).listen(3000) +``` + +You can test this out with the cURL program: +```sh +curl -I -H'Accept: text/html' http://localhost:3000/ +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master +[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master +[node-version-image]: https://badgen.net/npm/node/accepts +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/accepts +[npm-url]: https://npmjs.org/package/accepts +[npm-version-image]: https://badgen.net/npm/v/accepts +[travis-image]: https://badgen.net/travis/jshttp/accepts/master +[travis-url]: https://travis-ci.org/jshttp/accepts diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js new file mode 100644 index 0000000..e9b2f63 --- /dev/null +++ b/node_modules/accepts/index.js @@ -0,0 +1,238 @@ +/*! + * accepts + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var Negotiator = require('negotiator') +var mime = require('mime-types') + +/** + * Module exports. + * @public + */ + +module.exports = Accepts + +/** + * Create a new Accepts object for the given req. + * + * @param {object} req + * @public + */ + +function Accepts (req) { + if (!(this instanceof Accepts)) { + return new Accepts(req) + } + + this.headers = req.headers + this.negotiator = new Negotiator(req) +} + +/** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json" or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} types... + * @return {String|Array|Boolean} + * @public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types_) { + var types = types_ + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i] + } + } + + // no types, return all requested types + if (!types || types.length === 0) { + return this.negotiator.mediaTypes() + } + + // no accept header, return first given type + if (!this.headers.accept) { + return types[0] + } + + var mimes = types.map(extToMime) + var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) + var first = accepts[0] + + return first + ? types[mimes.indexOf(first)] + : false +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encodings... + * @return {String|Array} + * @public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings_) { + var encodings = encodings_ + + // support flattened arguments + if (encodings && !Array.isArray(encodings)) { + encodings = new Array(arguments.length) + for (var i = 0; i < encodings.length; i++) { + encodings[i] = arguments[i] + } + } + + // no encodings, return all requested encodings + if (!encodings || encodings.length === 0) { + return this.negotiator.encodings() + } + + return this.negotiator.encodings(encodings)[0] || false +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charsets... + * @return {String|Array} + * @public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets_) { + var charsets = charsets_ + + // support flattened arguments + if (charsets && !Array.isArray(charsets)) { + charsets = new Array(arguments.length) + for (var i = 0; i < charsets.length; i++) { + charsets[i] = arguments[i] + } + } + + // no charsets, return all requested charsets + if (!charsets || charsets.length === 0) { + return this.negotiator.charsets() + } + + return this.negotiator.charsets(charsets)[0] || false +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} langs... + * @return {Array|String} + * @public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (languages_) { + var languages = languages_ + + // support flattened arguments + if (languages && !Array.isArray(languages)) { + languages = new Array(arguments.length) + for (var i = 0; i < languages.length; i++) { + languages[i] = arguments[i] + } + } + + // no languages, return all requested languages + if (!languages || languages.length === 0) { + return this.negotiator.languages() + } + + return this.negotiator.languages(languages)[0] || false +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @private + */ + +function extToMime (type) { + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @private + */ + +function validMime (type) { + return typeof type === 'string' +} diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json new file mode 100644 index 0000000..36f18ea --- /dev/null +++ b/node_modules/accepts/package.json @@ -0,0 +1,89 @@ +{ + "_args": [ + [ + "accepts@1.3.7", + "D:\\Cricbuzzz" + ] + ], + "_from": "accepts@1.3.7", + "_id": "accepts@1.3.7", + "_inBundle": false, + "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "_location": "/accepts", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "accepts@1.3.7", + "name": "accepts", + "escapedName": "accepts", + "rawSpec": "1.3.7", + "saveSpec": null, + "fetchSpec": "1.3.7" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "_spec": "1.3.7", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/jshttp/accepts/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "description": "Higher-level content negotiation", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/accepts#readme", + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ], + "license": "MIT", + "name": "accepts", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/accepts.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "1.3.7" +} diff --git a/node_modules/ajv/.tonic_example.js b/node_modules/ajv/.tonic_example.js new file mode 100644 index 0000000..aa11812 --- /dev/null +++ b/node_modules/ajv/.tonic_example.js @@ -0,0 +1,20 @@ +var Ajv = require('ajv'); +var ajv = new Ajv({allErrors: true}); + +var schema = { + "properties": { + "foo": { "type": "string" }, + "bar": { "type": "number", "maximum": 3 } + } +}; + +var validate = ajv.compile(schema); + +test({"foo": "abc", "bar": 2}); +test({"foo": 2, "bar": 4}); + +function test(data) { + var valid = validate(data); + if (valid) console.log('Valid!'); + else console.log('Invalid: ' + ajv.errorsText(validate.errors)); +} \ No newline at end of file diff --git a/node_modules/ajv/LICENSE b/node_modules/ajv/LICENSE new file mode 100644 index 0000000..96ee719 --- /dev/null +++ b/node_modules/ajv/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/ajv/README.md b/node_modules/ajv/README.md new file mode 100644 index 0000000..d645c3f --- /dev/null +++ b/node_modules/ajv/README.md @@ -0,0 +1,1380 @@ +Ajv logo + +# Ajv: Another JSON Schema Validator + +The fastest JSON Schema validator for Node.js and browser. Supports draft-04/06/07. + +[![Build Status](https://travis-ci.org/epoberezkin/ajv.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv) +[![npm](https://img.shields.io/npm/v/ajv.svg)](https://www.npmjs.com/package/ajv) +[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv) +[![Coverage Status](https://coveralls.io/repos/epoberezkin/ajv/badge.svg?branch=master&service=github)](https://coveralls.io/github/epoberezkin/ajv?branch=master) +[![Greenkeeper badge](https://badges.greenkeeper.io/epoberezkin/ajv.svg)](https://greenkeeper.io/) +[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv) + + +## Using version 6 + +[JSON Schema draft-07](http://json-schema.org/latest/json-schema-validation.html) is published. + +[Ajv version 6.0.0](https://github.com/epoberezkin/ajv/releases/tag/v6.0.0) that supports draft-07 is released. It may require either migrating your schemas or updating your code (to continue using draft-04 and v5 schemas, draft-06 schemas will be supported without changes). + +__Please note__: To use Ajv with draft-06 schemas you need to explicitly add the meta-schema to the validator instance: + +```javascript +ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')); +``` + +To use Ajv with draft-04 schemas in addition to explicitly adding meta-schema you also need to use option schemaId: + +```javascript +var ajv = new Ajv({schemaId: 'id'}); +// If you want to use both draft-04 and draft-06/07 schemas: +// var ajv = new Ajv({schemaId: 'auto'}); +ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json')); +``` + + +## Contents + +- [Performance](#performance) +- [Features](#features) +- [Getting started](#getting-started) +- [Frequently Asked Questions](https://github.com/epoberezkin/ajv/blob/master/FAQ.md) +- [Using in browser](#using-in-browser) +- [Command line interface](#command-line-interface) +- Validation + - [Keywords](#validation-keywords) + - [Annotation keywords](#annotation-keywords) + - [Formats](#formats) + - [Combining schemas with $ref](#ref) + - [$data reference](#data-reference) + - NEW: [$merge and $patch keywords](#merge-and-patch-keywords) + - [Defining custom keywords](#defining-custom-keywords) + - [Asynchronous schema compilation](#asynchronous-schema-compilation) + - [Asynchronous validation](#asynchronous-validation) +- [Security considerations](#security-considerations) + - [Security contact](#security-contact) + - [Untrusted schemas](#untrusted-schemas) + - [Circular references in objects](#circular-references-in-javascript-objects) + - [Trusted schemas](#security-risks-of-trusted-schemas) + - [ReDoS attack](#redos-attack) +- Modifying data during validation + - [Filtering data](#filtering-data) + - [Assigning defaults](#assigning-defaults) + - [Coercing data types](#coercing-data-types) +- API + - [Methods](#api) + - [Options](#options) + - [Validation errors](#validation-errors) +- [Plugins](#plugins) +- [Related packages](#related-packages) +- [Some packages using Ajv](#some-packages-using-ajv) +- [Tests, Contributing, History, Support, License](#tests) + + +## Performance + +Ajv generates code using [doT templates](https://github.com/olado/doT) to turn JSON Schemas into super-fast validation functions that are efficient for v8 optimization. + +Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks: + +- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place +- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster +- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html) +- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html) + + +Performance of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark): + +[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=32,4,1&chs=600x416&chxl=-1:|djv|ajv|json-schema-validator-generator|jsen|is-my-json-valid|themis|z-schema|jsck|skeemas|json-schema-library|tv4&chd=t:100,98,72.1,66.8,50.1,15.1,6.1,3.8,1.2,0.7,0.2)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance) + + +## Features + +- Ajv implements full JSON Schema [draft-06/07](http://json-schema.org/) and draft-04 standards: + - all validation keywords (see [JSON Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md)) + - full support of remote refs (remote schemas have to be added with `addSchema` or compiled to be available) + - support of circular references between schemas + - correct string lengths for strings with unicode pairs (can be turned off) + - [formats](#formats) defined by JSON Schema draft-07 standard and custom formats (can be turned off) + - [validates schemas against meta-schema](#api-validateschema) +- supports [browsers](#using-in-browser) and Node.js 0.10-8.x +- [asynchronous loading](#asynchronous-schema-compilation) of referenced schemas during compilation +- "All errors" validation mode with [option allErrors](#options) +- [error messages with parameters](#validation-errors) describing error reasons to allow creating custom error messages +- i18n error messages support with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package +- [filtering data](#filtering-data) from additional properties +- [assigning defaults](#assigning-defaults) to missing properties and items +- [coercing data](#coercing-data-types) to the types specified in `type` keywords +- [custom keywords](#defining-custom-keywords) +- draft-06/07 keywords `const`, `contains`, `propertyNames` and `if/then/else` +- draft-06 boolean schemas (`true`/`false` as a schema to always pass/fail). +- keywords `switch`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) with [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package +- [$data reference](#data-reference) to use values from the validated data as values for the schema keywords +- [asynchronous validation](#asynchronous-validation) of custom formats and keywords + +Currently Ajv is the only validator that passes all the tests from [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite) (according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), apart from the test that requires that `1.0` is not an integer that is impossible to satisfy in JavaScript). + + +## Install + +``` +npm install ajv +``` + + +## Getting started + +Try it in the Node.js REPL: https://tonicdev.com/npm/ajv + + +The fastest validation call: + +```javascript +var Ajv = require('ajv'); +var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} +var validate = ajv.compile(schema); +var valid = validate(data); +if (!valid) console.log(validate.errors); +``` + +or with less code + +```javascript +// ... +var valid = ajv.validate(schema, data); +if (!valid) console.log(ajv.errors); +// ... +``` + +or + +```javascript +// ... +var valid = ajv.addSchema(schema, 'mySchema') + .validate('mySchema', data); +if (!valid) console.log(ajv.errorsText()); +// ... +``` + +See [API](#api) and [Options](#options) for more details. + +Ajv compiles schemas to functions and caches them in all cases (using schema serialized with [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) or a custom function as a key), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again. + +The best performance is achieved when using compiled functions returned by `compile` or `getSchema` methods (there is no additional function call). + +__Please note__: every time a validation function or `ajv.validate` are called `errors` property is overwritten. You need to copy `errors` array reference to another variable if you want to use it later (e.g., in the callback). See [Validation errors](#validation-errors) + + +## Using in browser + +You can require Ajv directly from the code you browserify - in this case Ajv will be a part of your bundle. + +If you need to use Ajv in several bundles you can create a separate UMD bundle using `npm run bundle` script (thanks to [siddo420](https://github.com/siddo420)). + +Then you need to load Ajv in the browser: +```html + +``` + +This bundle can be used with different module systems; it creates global `Ajv` if no module system is found. + +The browser bundle is available on [cdnjs](https://cdnjs.com/libraries/ajv). + +Ajv is tested with these browsers: + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/epoberezkin.svg)](https://saucelabs.com/u/epoberezkin) + +__Please note__: some frameworks, e.g. Dojo, may redefine global require in such way that is not compatible with CommonJS module format. In such case Ajv bundle has to be loaded before the framework and then you can use global Ajv (see issue [#234](https://github.com/epoberezkin/ajv/issues/234)). + + +## Command line interface + +CLI is available as a separate npm package [ajv-cli](https://github.com/jessedc/ajv-cli). It supports: + +- compiling JSON Schemas to test their validity +- BETA: generating standalone module exporting a validation function to be used without Ajv (using [ajv-pack](https://github.com/epoberezkin/ajv-pack)) +- migrate schemas to draft-07 (using [json-schema-migrate](https://github.com/epoberezkin/json-schema-migrate)) +- validating data file(s) against JSON Schema +- testing expected validity of data against JSON Schema +- referenced schemas +- custom meta-schemas +- files in JSON and JavaScript format +- all Ajv options +- reporting changes in data after validation in [JSON-patch](https://tools.ietf.org/html/rfc6902) format + + +## Validation keywords + +Ajv supports all validation keywords from draft-07 of JSON Schema standard: + +- [type](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#type) +- [for numbers](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-numbers) - maximum, minimum, exclusiveMaximum, exclusiveMinimum, multipleOf +- [for strings](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-strings) - maxLength, minLength, pattern, format +- [for arrays](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-arrays) - maxItems, minItems, uniqueItems, items, additionalItems, [contains](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#contains) +- [for objects](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-objects) - maxProperties, minProperties, required, properties, patternProperties, additionalProperties, dependencies, [propertyNames](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#propertynames) +- [for all types](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-all-types) - enum, [const](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#const) +- [compound keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#compound-keywords) - not, oneOf, anyOf, allOf, [if/then/else](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#ifthenelse) + +With [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package Ajv also supports validation keywords from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) for JSON Schema standard: + +- [patternRequired](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#patternrequired-proposed) - like `required` but with patterns that some property should match. +- [formatMaximum, formatMinimum, formatExclusiveMaximum, formatExclusiveMinimum](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#formatmaximum--formatminimum-and-exclusiveformatmaximum--exclusiveformatminimum-proposed) - setting limits for date, time, etc. + +See [JSON Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md) for more details. + + +## Annotation keywords + +JSON Schema specification defines several annotation keywords that describe schema itself but do not perform any validation. + +- `title` and `description`: information about the data represented by that schema +- `$comment` (NEW in draft-07): information for developers. With option `$comment` Ajv logs or passes the comment string to the user-supplied function. See [Options](#options). +- `default`: a default value of the data instance, see [Assigning defaults](#assigning-defaults). +- `examples` (NEW in draft-06): an array of data instances. Ajv does not check the validity of these instances against the schema. +- `readOnly` and `writeOnly` (NEW in draft-07): marks data-instance as read-only or write-only in relation to the source of the data (database, api, etc.). +- `contentEncoding`: [RFC 2045](https://tools.ietf.org/html/rfc2045#section-6.1 ), e.g., "base64". +- `contentMediaType`: [RFC 2046](https://tools.ietf.org/html/rfc2046), e.g., "image/png". + +__Please note__: Ajv does not implement validation of the keywords `examples`, `contentEncoding` and `contentMediaType` but it reserves them. If you want to create a plugin that implements some of them, it should remove these keywords from the instance. + + +## Formats + +Ajv implements formats defined by JSON Schema specification and several other formats. It is recommended NOT to use "format" keyword implementations with untrusted data, as they use potentially unsafe regular expressions - see [ReDoS attack](#redos-attack). + +__Please note__: if you need to use "format" keyword to validate untrusted data, you MUST assess their suitability and safety for your validation scenarios. + +The following formats are implemented for string validation with "format" keyword: + +- _date_: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6). +- _time_: time with optional time-zone. +- _date-time_: date-time from the same source (time-zone is mandatory). `date`, `time` and `date-time` validate ranges in `full` mode and only regexp in `fast` mode (see [options](#options)). +- _uri_: full URI. +- _uri-reference_: URI reference, including full and relative URIs. +- _uri-template_: URI template according to [RFC6570](https://tools.ietf.org/html/rfc6570) +- _url_ (deprecated): [URL record](https://url.spec.whatwg.org/#concept-url). +- _email_: email address. +- _hostname_: host name according to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5). +- _ipv4_: IP address v4. +- _ipv6_: IP address v6. +- _regex_: tests whether a string is a valid regular expression by passing it to RegExp constructor. +- _uuid_: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122). +- _json-pointer_: JSON-pointer according to [RFC6901](https://tools.ietf.org/html/rfc6901). +- _relative-json-pointer_: relative JSON-pointer according to [this draft](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00). + +__Please note__: JSON Schema draft-07 also defines formats `iri`, `iri-reference`, `idn-hostname` and `idn-email` for URLs, hostnames and emails with international characters. Ajv does not implement these formats. If you create Ajv plugin that implements them please make a PR to mention this plugin here. + +There are two modes of format validation: `fast` and `full`. This mode affects formats `date`, `time`, `date-time`, `uri`, `uri-reference`, `email`, and `hostname`. See [Options](#options) for details. + +You can add additional formats and replace any of the formats above using [addFormat](#api-addformat) method. + +The option `unknownFormats` allows changing the default behaviour when an unknown format is encountered. In this case Ajv can either fail schema compilation (default) or ignore it (default in versions before 5.0.0). You also can whitelist specific format(s) to be ignored. See [Options](#options) for details. + +You can find regular expressions used for format validation and the sources that were used in [formats.js](https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js). + + +## Combining schemas with $ref + +You can structure your validation logic across multiple schema files and have schemas reference each other using `$ref` keyword. + +Example: + +```javascript +var schema = { + "$id": "http://example.com/schemas/schema.json", + "type": "object", + "properties": { + "foo": { "$ref": "defs.json#/definitions/int" }, + "bar": { "$ref": "defs.json#/definitions/str" } + } +}; + +var defsSchema = { + "$id": "http://example.com/schemas/defs.json", + "definitions": { + "int": { "type": "integer" }, + "str": { "type": "string" } + } +}; +``` + +Now to compile your schema you can either pass all schemas to Ajv instance: + +```javascript +var ajv = new Ajv({schemas: [schema, defsSchema]}); +var validate = ajv.getSchema('http://example.com/schemas/schema.json'); +``` + +or use `addSchema` method: + +```javascript +var ajv = new Ajv; +var validate = ajv.addSchema(defsSchema) + .compile(schema); +``` + +See [Options](#options) and [addSchema](#api) method. + +__Please note__: +- `$ref` is resolved as the uri-reference using schema $id as the base URI (see the example). +- References can be recursive (and mutually recursive) to implement the schemas for different data structures (such as linked lists, trees, graphs, etc.). +- You don't have to host your schema files at the URIs that you use as schema $id. These URIs are only used to identify the schemas, and according to JSON Schema specification validators should not expect to be able to download the schemas from these URIs. +- The actual location of the schema file in the file system is not used. +- You can pass the identifier of the schema as the second parameter of `addSchema` method or as a property name in `schemas` option. This identifier can be used instead of (or in addition to) schema $id. +- You cannot have the same $id (or the schema identifier) used for more than one schema - the exception will be thrown. +- You can implement dynamic resolution of the referenced schemas using `compileAsync` method. In this way you can store schemas in any system (files, web, database, etc.) and reference them without explicitly adding to Ajv instance. See [Asynchronous schema compilation](#asynchronous-schema-compilation). + + +## $data reference + +With `$data` option you can use values from the validated data as the values for the schema keywords. See [proposal](https://github.com/json-schema/json-schema/wiki/$data-(v5-proposal)) for more information about how it works. + +`$data` reference is supported in the keywords: const, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties, formatMaximum / formatMinimum, formatExclusiveMaximum / formatExclusiveMinimum, multipleOf, pattern, required, uniqueItems. + +The value of "$data" should be a [JSON-pointer](https://tools.ietf.org/html/rfc6901) to the data (the root is always the top level data object, even if the $data reference is inside a referenced subschema) or a [relative JSON-pointer](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00) (it is relative to the current point in data; if the $data reference is inside a referenced subschema it cannot point to the data outside of the root level for this subschema). + +Examples. + +This schema requires that the value in property `smaller` is less or equal than the value in the property larger: + +```javascript +var ajv = new Ajv({$data: true}); + +var schema = { + "properties": { + "smaller": { + "type": "number", + "maximum": { "$data": "1/larger" } + }, + "larger": { "type": "number" } + } +}; + +var validData = { + smaller: 5, + larger: 7 +}; + +ajv.validate(schema, validData); // true +``` + +This schema requires that the properties have the same format as their field names: + +```javascript +var schema = { + "additionalProperties": { + "type": "string", + "format": { "$data": "0#" } + } +}; + +var validData = { + 'date-time': '1963-06-19T08:30:06.283185Z', + email: 'joe.bloggs@example.com' +} +``` + +`$data` reference is resolved safely - it won't throw even if some property is undefined. If `$data` resolves to `undefined` the validation succeeds (with the exclusion of `const` keyword). If `$data` resolves to incorrect type (e.g. not "number" for maximum keyword) the validation fails. + + +## $merge and $patch keywords + +With the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) you can use the keywords `$merge` and `$patch` that allow extending JSON Schemas with patches using formats [JSON Merge Patch (RFC 7396)](https://tools.ietf.org/html/rfc7396) and [JSON Patch (RFC 6902)](https://tools.ietf.org/html/rfc6902). + +To add keywords `$merge` and `$patch` to Ajv instance use this code: + +```javascript +require('ajv-merge-patch')(ajv); +``` + +Examples. + +Using `$merge`: + +```json +{ + "$merge": { + "source": { + "type": "object", + "properties": { "p": { "type": "string" } }, + "additionalProperties": false + }, + "with": { + "properties": { "q": { "type": "number" } } + } + } +} +``` + +Using `$patch`: + +```json +{ + "$patch": { + "source": { + "type": "object", + "properties": { "p": { "type": "string" } }, + "additionalProperties": false + }, + "with": [ + { "op": "add", "path": "/properties/q", "value": { "type": "number" } } + ] + } +} +``` + +The schemas above are equivalent to this schema: + +```json +{ + "type": "object", + "properties": { + "p": { "type": "string" }, + "q": { "type": "number" } + }, + "additionalProperties": false +} +``` + +The properties `source` and `with` in the keywords `$merge` and `$patch` can use absolute or relative `$ref` to point to other schemas previously added to the Ajv instance or to the fragments of the current schema. + +See the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) for more information. + + +## Defining custom keywords + +The advantages of using custom keywords are: + +- allow creating validation scenarios that cannot be expressed using JSON Schema +- simplify your schemas +- help bringing a bigger part of the validation logic to your schemas +- make your schemas more expressive, less verbose and closer to your application domain +- implement custom data processors that modify your data (`modifying` option MUST be used in keyword definition) and/or create side effects while the data is being validated + +If a keyword is used only for side-effects and its validation result is pre-defined, use option `valid: true/false` in keyword definition to simplify both generated code (no error handling in case of `valid: true`) and your keyword functions (no need to return any validation result). + +The concerns you have to be aware of when extending JSON Schema standard with custom keywords are the portability and understanding of your schemas. You will have to support these custom keywords on other platforms and to properly document these keywords so that everybody can understand them in your schemas. + +You can define custom keywords with [addKeyword](#api-addkeyword) method. Keywords are defined on the `ajv` instance level - new instances will not have previously defined keywords. + +Ajv allows defining keywords with: +- validation function +- compilation function +- macro function +- inline compilation function that should return code (as string) that will be inlined in the currently compiled schema. + +Example. `range` and `exclusiveRange` keywords using compiled schema: + +```javascript +ajv.addKeyword('range', { + type: 'number', + compile: function (sch, parentSchema) { + var min = sch[0]; + var max = sch[1]; + + return parentSchema.exclusiveRange === true + ? function (data) { return data > min && data < max; } + : function (data) { return data >= min && data <= max; } + } +}); + +var schema = { "range": [2, 4], "exclusiveRange": true }; +var validate = ajv.compile(schema); +console.log(validate(2.01)); // true +console.log(validate(3.99)); // true +console.log(validate(2)); // false +console.log(validate(4)); // false +``` + +Several custom keywords (typeof, instanceof, range and propertyNames) are defined in [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package - they can be used for your schemas and as a starting point for your own custom keywords. + +See [Defining custom keywords](https://github.com/epoberezkin/ajv/blob/master/CUSTOM.md) for more details. + + +## Asynchronous schema compilation + +During asynchronous compilation remote references are loaded using supplied function. See `compileAsync` [method](#api-compileAsync) and `loadSchema` [option](#options). + +Example: + +```javascript +var ajv = new Ajv({ loadSchema: loadSchema }); + +ajv.compileAsync(schema).then(function (validate) { + var valid = validate(data); + // ... +}); + +function loadSchema(uri) { + return request.json(uri).then(function (res) { + if (res.statusCode >= 400) + throw new Error('Loading error: ' + res.statusCode); + return res.body; + }); +} +``` + +__Please note__: [Option](#options) `missingRefs` should NOT be set to `"ignore"` or `"fail"` for asynchronous compilation to work. + + +## Asynchronous validation + +Example in Node.js REPL: https://tonicdev.com/esp/ajv-asynchronous-validation + +You can define custom formats and keywords that perform validation asynchronously by accessing database or some other service. You should add `async: true` in the keyword or format definition (see [addFormat](#api-addformat), [addKeyword](#api-addkeyword) and [Defining custom keywords](#defining-custom-keywords)). + +If your schema uses asynchronous formats/keywords or refers to some schema that contains them it should have `"$async": true` keyword so that Ajv can compile it correctly. If asynchronous format/keyword or reference to asynchronous schema is used in the schema without `$async` keyword Ajv will throw an exception during schema compilation. + +__Please note__: all asynchronous subschemas that are referenced from the current or other schemas should have `"$async": true` keyword as well, otherwise the schema compilation will fail. + +Validation function for an asynchronous custom format/keyword should return a promise that resolves with `true` or `false` (or rejects with `new Ajv.ValidationError(errors)` if you want to return custom errors from the keyword function). + +Ajv compiles asynchronous schemas to [es7 async functions](http://tc39.github.io/ecmascript-asyncawait/) that can optionally be transpiled with [nodent](https://github.com/MatAtBread/nodent). Async functions are supported in Node.js 7+ and all modern browsers. You can also supply any other transpiler as a function via `processCode` option. See [Options](#options). + +The compiled validation function has `$async: true` property (if the schema is asynchronous), so you can differentiate these functions if you are using both synchronous and asynchronous schemas. + +Validation result will be a promise that resolves with validated data or rejects with an exception `Ajv.ValidationError` that contains the array of validation errors in `errors` property. + + +Example: + +```javascript +var ajv = new Ajv; +// require('ajv-async')(ajv); + +ajv.addKeyword('idExists', { + async: true, + type: 'number', + validate: checkIdExists +}); + + +function checkIdExists(schema, data) { + return knex(schema.table) + .select('id') + .where('id', data) + .then(function (rows) { + return !!rows.length; // true if record is found + }); +} + +var schema = { + "$async": true, + "properties": { + "userId": { + "type": "integer", + "idExists": { "table": "users" } + }, + "postId": { + "type": "integer", + "idExists": { "table": "posts" } + } + } +}; + +var validate = ajv.compile(schema); + +validate({ userId: 1, postId: 19 }) +.then(function (data) { + console.log('Data is valid', data); // { userId: 1, postId: 19 } +}) +.catch(function (err) { + if (!(err instanceof Ajv.ValidationError)) throw err; + // data is invalid + console.log('Validation errors:', err.errors); +}); +``` + +### Using transpilers with asynchronous validation functions. + +[ajv-async](https://github.com/epoberezkin/ajv-async) uses [nodent](https://github.com/MatAtBread/nodent) to transpile async functions. To use another transpiler you should separately install it (or load its bundle in the browser). + + +#### Using nodent + +```javascript +var ajv = new Ajv; +require('ajv-async')(ajv); +// in the browser if you want to load ajv-async bundle separately you can: +// window.ajvAsync(ajv); +var validate = ajv.compile(schema); // transpiled es7 async function +validate(data).then(successFunc).catch(errorFunc); +``` + + +#### Using other transpilers + +```javascript +var ajv = new Ajv({ processCode: transpileFunc }); +var validate = ajv.compile(schema); // transpiled es7 async function +validate(data).then(successFunc).catch(errorFunc); +``` + +See [Options](#options). + + +## Security considerations + +JSON Schema, if properly used, can replace data sanitisation. It doesn't replace other API security considerations. It also introduces additional security aspects to consider. + + +##### Security contact + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerabilities via GitHub issues. + + +##### Untrusted schemas + +Ajv treats JSON schemas as trusted as your application code. This security model is based on the most common use case, when the schemas are static and bundled together with the application. + +If your schemas are received from untrusted sources (or generated from untrusted data) there are several scenarios you need to prevent: +- compiling schemas can cause stack overflow (if they are too deep) +- compiling schemas can be slow (e.g. [#557](https://github.com/epoberezkin/ajv/issues/557)) +- validating certain data can be slow + +It is difficult to predict all the scenarios, but at the very least it may help to limit the size of untrusted schemas (e.g. limit JSON string length) and also the maximum schema object depth (that can be high for relatively small JSON strings). You also may want to mitigate slow regular expressions in `pattern` and `patternProperties` keywords. + +Regardless the measures you take, using untrusted schemas increases security risks. + + +##### Circular references in JavaScript objects + +Ajv does not support schemas and validated data that have circular references in objects. See [issue #802](https://github.com/epoberezkin/ajv/issues/802). + +An attempt to compile such schemas or validate such data would cause stack overflow (or will not complete in case of asynchronous validation). Depending on the parser you use, untrusted data can lead to circular references. + + +##### Security risks of trusted schemas + +Some keywords in JSON Schemas can lead to very slow validation for certain data. These keywords include (but may be not limited to): + +- `pattern` and `format` for large strings - in some cases using `maxLength` can help mitigate it, but certain regular expressions can lead to exponential validation time even with relatively short strings (see [ReDoS attack](#redos-attack)). +- `patternProperties` for large property names - use `propertyNames` to mitigate, but some regular expressions can have exponential evaluation time as well. +- `uniqueItems` for large non-scalar arrays - use `maxItems` to mitigate + +__Please note__: The suggestions above to prevent slow validation would only work if you do NOT use `allErrors: true` in production code (using it would continue validation after validation errors). + +You can validate your JSON schemas against [this meta-schema](https://github.com/epoberezkin/ajv/blob/master/lib/refs/json-schema-secure.json) to check that these recommendations are followed: + +```javascript +const isSchemaSecure = ajv.compile(require('ajv/lib/refs/json-schema-secure.json')); + +const schema1 = {format: 'email'}; +isSchemaSecure(schema1); // false + +const schema2 = {format: 'email', maxLength: MAX_LENGTH}; +isSchemaSecure(schema2); // true +``` + +__Please note__: following all these recommendation is not a guarantee that validation of untrusted data is safe - it can still lead to some undesirable results. + + +## ReDoS attack + +Certain regular expressions can lead to the exponential evaluation time even with relatively short strings. + +Please assess the regular expressions you use in the schemas on their vulnerability to this attack - see [safe-regex](https://github.com/substack/safe-regex), for example. + +__Please note__: some formats that Ajv implements use [regular expressions](https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js) that can be vulnerable to ReDoS attack, so if you use Ajv to validate data from untrusted sources __it is strongly recommended__ to consider the following: + +- making assessment of "format" implementations in Ajv. +- using `format: 'fast'` option that simplifies some of the regular expressions (although it does not guarantee that they are safe). +- replacing format implementations provided by Ajv with your own implementations of "format" keyword that either uses different regular expressions or another approach to format validation. Please see [addFormat](#api-addformat) method. +- disabling format validation by ignoring "format" keyword with option `format: false` + +Whatever mitigation you choose, please assume all formats provided by Ajv as potentially unsafe and make your own assessment of their suitability for your validation scenarios. + + +## Filtering data + +With [option `removeAdditional`](#options) (added by [andyscott](https://github.com/andyscott)) you can filter data during the validation. + +This option modifies original data. + +Example: + +```javascript +var ajv = new Ajv({ removeAdditional: true }); +var schema = { + "additionalProperties": false, + "properties": { + "foo": { "type": "number" }, + "bar": { + "additionalProperties": { "type": "number" }, + "properties": { + "baz": { "type": "string" } + } + } + } +} + +var data = { + "foo": 0, + "additional1": 1, // will be removed; `additionalProperties` == false + "bar": { + "baz": "abc", + "additional2": 2 // will NOT be removed; `additionalProperties` != false + }, +} + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 0, "bar": { "baz": "abc", "additional2": 2 } +``` + +If `removeAdditional` option in the example above were `"all"` then both `additional1` and `additional2` properties would have been removed. + +If the option were `"failing"` then property `additional1` would have been removed regardless of its value and property `additional2` would have been removed only if its value were failing the schema in the inner `additionalProperties` (so in the example above it would have stayed because it passes the schema, but any non-number would have been removed). + +__Please note__: If you use `removeAdditional` option with `additionalProperties` keyword inside `anyOf`/`oneOf` keywords your validation can fail with this schema, for example: + +```json +{ + "type": "object", + "oneOf": [ + { + "properties": { + "foo": { "type": "string" } + }, + "required": [ "foo" ], + "additionalProperties": false + }, + { + "properties": { + "bar": { "type": "integer" } + }, + "required": [ "bar" ], + "additionalProperties": false + } + ] +} +``` + +The intention of the schema above is to allow objects with either the string property "foo" or the integer property "bar", but not with both and not with any other properties. + +With the option `removeAdditional: true` the validation will pass for the object `{ "foo": "abc"}` but will fail for the object `{"bar": 1}`. It happens because while the first subschema in `oneOf` is validated, the property `bar` is removed because it is an additional property according to the standard (because it is not included in `properties` keyword in the same schema). + +While this behaviour is unexpected (issues [#129](https://github.com/epoberezkin/ajv/issues/129), [#134](https://github.com/epoberezkin/ajv/issues/134)), it is correct. To have the expected behaviour (both objects are allowed and additional properties are removed) the schema has to be refactored in this way: + +```json +{ + "type": "object", + "properties": { + "foo": { "type": "string" }, + "bar": { "type": "integer" } + }, + "additionalProperties": false, + "oneOf": [ + { "required": [ "foo" ] }, + { "required": [ "bar" ] } + ] +} +``` + +The schema above is also more efficient - it will compile into a faster function. + + +## Assigning defaults + +With [option `useDefaults`](#options) Ajv will assign values from `default` keyword in the schemas of `properties` and `items` (when it is the array of schemas) to the missing properties and items. + +With the option value `"empty"` properties and items equal to `null` or `""` (empty string) will be considered missing and assigned defaults. + +This option modifies original data. + +__Please note__: the default value is inserted in the generated validation code as a literal, so the value inserted in the data will be the deep clone of the default in the schema. + + +Example 1 (`default` in `properties`): + +```javascript +var ajv = new Ajv({ useDefaults: true }); +var schema = { + "type": "object", + "properties": { + "foo": { "type": "number" }, + "bar": { "type": "string", "default": "baz" } + }, + "required": [ "foo", "bar" ] +}; + +var data = { "foo": 1 }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 1, "bar": "baz" } +``` + +Example 2 (`default` in `items`): + +```javascript +var schema = { + "type": "array", + "items": [ + { "type": "number" }, + { "type": "string", "default": "foo" } + ] +} + +var data = [ 1 ]; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // [ 1, "foo" ] +``` + +`default` keywords in other cases are ignored: + +- not in `properties` or `items` subschemas +- in schemas inside `anyOf`, `oneOf` and `not` (see [#42](https://github.com/epoberezkin/ajv/issues/42)) +- in `if` subschema of `switch` keyword +- in schemas generated by custom macro keywords + +The [`strictDefaults` option](#options) customizes Ajv's behavior for the defaults that Ajv ignores (`true` raises an error, and `"log"` outputs a warning). + + +## Coercing data types + +When you are validating user inputs all your data properties are usually strings. The option `coerceTypes` allows you to have your data types coerced to the types specified in your schema `type` keywords, both to pass the validation and to use the correctly typed data afterwards. + +This option modifies original data. + +__Please note__: if you pass a scalar value to the validating function its type will be coerced and it will pass the validation, but the value of the variable you pass won't be updated because scalars are passed by value. + + +Example 1: + +```javascript +var ajv = new Ajv({ coerceTypes: true }); +var schema = { + "type": "object", + "properties": { + "foo": { "type": "number" }, + "bar": { "type": "boolean" } + }, + "required": [ "foo", "bar" ] +}; + +var data = { "foo": "1", "bar": "false" }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 1, "bar": false } +``` + +Example 2 (array coercions): + +```javascript +var ajv = new Ajv({ coerceTypes: 'array' }); +var schema = { + "properties": { + "foo": { "type": "array", "items": { "type": "number" } }, + "bar": { "type": "boolean" } + } +}; + +var data = { "foo": "1", "bar": ["false"] }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": [1], "bar": false } +``` + +The coercion rules, as you can see from the example, are different from JavaScript both to validate user input as expected and to have the coercion reversible (to correctly validate cases where different types are defined in subschemas of "anyOf" and other compound keywords). + +See [Coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md) for details. + + +## API + +##### new Ajv(Object options) -> Object + +Create Ajv instance. + + +##### .compile(Object schema) -> Function<Object data> + +Generate validating function and cache the compiled schema for future use. + +Validating function returns a boolean value. This function has properties `errors` and `schema`. Errors encountered during the last validation are assigned to `errors` property (it is assigned `null` if there was no errors). `schema` property contains the reference to the original schema. + +The schema passed to this method will be validated against meta-schema unless `validateSchema` option is false. If schema is invalid, an error will be thrown. See [options](#options). + + +##### .compileAsync(Object schema [, Boolean meta] [, Function callback]) -> Promise + +Asynchronous version of `compile` method that loads missing remote schemas using asynchronous function in `options.loadSchema`. This function returns a Promise that resolves to a validation function. An optional callback passed to `compileAsync` will be called with 2 parameters: error (or null) and validating function. The returned promise will reject (and the callback will be called with an error) when: + +- missing schema can't be loaded (`loadSchema` returns a Promise that rejects). +- a schema containing a missing reference is loaded, but the reference cannot be resolved. +- schema (or some loaded/referenced schema) is invalid. + +The function compiles schema and loads the first missing schema (or meta-schema) until all missing schemas are loaded. + +You can asynchronously compile meta-schema by passing `true` as the second parameter. + +See example in [Asynchronous compilation](#asynchronous-schema-compilation). + + +##### .validate(Object schema|String key|String ref, data) -> Boolean + +Validate data using passed schema (it will be compiled and cached). + +Instead of the schema you can use the key that was previously passed to `addSchema`, the schema id if it was present in the schema or any previously resolved reference. + +Validation errors will be available in the `errors` property of Ajv instance (`null` if there were no errors). + +__Please note__: every time this method is called the errors are overwritten so you need to copy them to another variable if you want to use them later. + +If the schema is asynchronous (has `$async` keyword on the top level) this method returns a Promise. See [Asynchronous validation](#asynchronous-validation). + + +##### .addSchema(Array<Object>|Object schema [, String key]) -> Ajv + +Add schema(s) to validator instance. This method does not compile schemas (but it still validates them). Because of that dependencies can be added in any order and circular dependencies are supported. It also prevents unnecessary compilation of schemas that are containers for other schemas but not used as a whole. + +Array of schemas can be passed (schemas should have ids), the second parameter will be ignored. + +Key can be passed that can be used to reference the schema and will be used as the schema id if there is no id inside the schema. If the key is not passed, the schema id will be used as the key. + + +Once the schema is added, it (and all the references inside it) can be referenced in other schemas and used to validate data. + +Although `addSchema` does not compile schemas, explicit compilation is not required - the schema will be compiled when it is used first time. + +By default the schema is validated against meta-schema before it is added, and if the schema does not pass validation the exception is thrown. This behaviour is controlled by `validateSchema` option. + +__Please note__: Ajv uses the [method chaining syntax](https://en.wikipedia.org/wiki/Method_chaining) for all methods with the prefix `add*` and `remove*`. +This allows you to do nice things like the following. + +```javascript +var validate = new Ajv().addSchema(schema).addFormat(name, regex).getSchema(uri); +``` + +##### .addMetaSchema(Array<Object>|Object schema [, String key]) -> Ajv + +Adds meta schema(s) that can be used to validate other schemas. That function should be used instead of `addSchema` because there may be instance options that would compile a meta schema incorrectly (at the moment it is `removeAdditional` option). + +There is no need to explicitly add draft-07 meta schema (http://json-schema.org/draft-07/schema) - it is added by default, unless option `meta` is set to `false`. You only need to use it if you have a changed meta-schema that you want to use to validate your schemas. See `validateSchema`. + + +##### .validateSchema(Object schema) -> Boolean + +Validates schema. This method should be used to validate schemas rather than `validate` due to the inconsistency of `uri` format in JSON Schema standard. + +By default this method is called automatically when the schema is added, so you rarely need to use it directly. + +If schema doesn't have `$schema` property, it is validated against draft 6 meta-schema (option `meta` should not be false). + +If schema has `$schema` property, then the schema with this id (that should be previously added) is used to validate passed schema. + +Errors will be available at `ajv.errors`. + + +##### .getSchema(String key) -> Function<Object data> + +Retrieve compiled schema previously added with `addSchema` by the key passed to `addSchema` or by its full reference (id). The returned validating function has `schema` property with the reference to the original schema. + + +##### .removeSchema([Object schema|String key|String ref|RegExp pattern]) -> Ajv + +Remove added/cached schema. Even if schema is referenced by other schemas it can be safely removed as dependent schemas have local references. + +Schema can be removed using: +- key passed to `addSchema` +- it's full reference (id) +- RegExp that should match schema id or key (meta-schemas won't be removed) +- actual schema object that will be stable-stringified to remove schema from cache + +If no parameter is passed all schemas but meta-schemas will be removed and the cache will be cleared. + + +##### .addFormat(String name, String|RegExp|Function|Object format) -> Ajv + +Add custom format to validate strings or numbers. It can also be used to replace pre-defined formats for Ajv instance. + +Strings are converted to RegExp. + +Function should return validation result as `true` or `false`. + +If object is passed it should have properties `validate`, `compare` and `async`: + +- _validate_: a string, RegExp or a function as described above. +- _compare_: an optional comparison function that accepts two strings and compares them according to the format meaning. This function is used with keywords `formatMaximum`/`formatMinimum` (defined in [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package). It should return `1` if the first value is bigger than the second value, `-1` if it is smaller and `0` if it is equal. +- _async_: an optional `true` value if `validate` is an asynchronous function; in this case it should return a promise that resolves with a value `true` or `false`. +- _type_: an optional type of data that the format applies to. It can be `"string"` (default) or `"number"` (see https://github.com/epoberezkin/ajv/issues/291#issuecomment-259923858). If the type of data is different, the validation will pass. + +Custom formats can be also added via `formats` option. + + +##### .addKeyword(String keyword, Object definition) -> Ajv + +Add custom validation keyword to Ajv instance. + +Keyword should be different from all standard JSON Schema keywords and different from previously defined keywords. There is no way to redefine keywords or to remove keyword definition from the instance. + +Keyword must start with a letter, `_` or `$`, and may continue with letters, numbers, `_`, `$`, or `-`. +It is recommended to use an application-specific prefix for keywords to avoid current and future name collisions. + +Example Keywords: +- `"xyz-example"`: valid, and uses prefix for the xyz project to avoid name collisions. +- `"example"`: valid, but not recommended as it could collide with future versions of JSON Schema etc. +- `"3-example"`: invalid as numbers are not allowed to be the first character in a keyword + +Keyword definition is an object with the following properties: + +- _type_: optional string or array of strings with data type(s) that the keyword applies to. If not present, the keyword will apply to all types. +- _validate_: validating function +- _compile_: compiling function +- _macro_: macro function +- _inline_: compiling function that returns code (as string) +- _schema_: an optional `false` value used with "validate" keyword to not pass schema +- _metaSchema_: an optional meta-schema for keyword schema +- _dependencies_: an optional list of properties that must be present in the parent schema - it will be checked during schema compilation +- _modifying_: `true` MUST be passed if keyword modifies data +- _statements_: `true` can be passed in case inline keyword generates statements (as opposed to expression) +- _valid_: pass `true`/`false` to pre-define validation result, the result returned from validation function will be ignored. This option cannot be used with macro keywords. +- _$data_: an optional `true` value to support [$data reference](#data-reference) as the value of custom keyword. The reference will be resolved at validation time. If the keyword has meta-schema it would be extended to allow $data and it will be used to validate the resolved value. Supporting $data reference requires that keyword has validating function (as the only option or in addition to compile, macro or inline function). +- _async_: an optional `true` value if the validation function is asynchronous (whether it is compiled or passed in _validate_ property); in this case it should return a promise that resolves with a value `true` or `false`. This option is ignored in case of "macro" and "inline" keywords. +- _errors_: an optional boolean or string `"full"` indicating whether keyword returns errors. If this property is not set Ajv will determine if the errors were set in case of failed validation. + +_compile_, _macro_ and _inline_ are mutually exclusive, only one should be used at a time. _validate_ can be used separately or in addition to them to support $data reference. + +__Please note__: If the keyword is validating data type that is different from the type(s) in its definition, the validation function will not be called (and expanded macro will not be used), so there is no need to check for data type inside validation function or inside schema returned by macro function (unless you want to enforce a specific type and for some reason do not want to use a separate `type` keyword for that). In the same way as standard keywords work, if the keyword does not apply to the data type being validated, the validation of this keyword will succeed. + +See [Defining custom keywords](#defining-custom-keywords) for more details. + + +##### .getKeyword(String keyword) -> Object|Boolean + +Returns custom keyword definition, `true` for pre-defined keywords and `false` if the keyword is unknown. + + +##### .removeKeyword(String keyword) -> Ajv + +Removes custom or pre-defined keyword so you can redefine them. + +While this method can be used to extend pre-defined keywords, it can also be used to completely change their meaning - it may lead to unexpected results. + +__Please note__: schemas compiled before the keyword is removed will continue to work without changes. To recompile schemas use `removeSchema` method and compile them again. + + +##### .errorsText([Array<Object> errors [, Object options]]) -> String + +Returns the text with all errors in a String. + +Options can have properties `separator` (string used to separate errors, ", " by default) and `dataVar` (the variable name that dataPaths are prefixed with, "data" by default). + + +## Options + +Defaults: + +```javascript +{ + // validation and reporting options: + $data: false, + allErrors: false, + verbose: false, + $comment: false, // NEW in Ajv version 6.0 + jsonPointers: false, + uniqueItems: true, + unicode: true, + nullable: false, + format: 'fast', + formats: {}, + unknownFormats: true, + schemas: {}, + logger: undefined, + // referenced schema options: + schemaId: '$id', + missingRefs: true, + extendRefs: 'ignore', // recommended 'fail' + loadSchema: undefined, // function(uri: string): Promise {} + // options to modify validated data: + removeAdditional: false, + useDefaults: false, + coerceTypes: false, + // strict mode options + strictDefaults: false, + strictKeywords: false, + // asynchronous validation options: + transpile: undefined, // requires ajv-async package + // advanced options: + meta: true, + validateSchema: true, + addUsedSchema: true, + inlineRefs: true, + passContext: false, + loopRequired: Infinity, + ownProperties: false, + multipleOfPrecision: false, + errorDataPath: 'object', // deprecated + messages: true, + sourceCode: false, + processCode: undefined, // function (str: string): string {} + cache: new Cache, + serialize: undefined +} +``` + +##### Validation and reporting options + +- _$data_: support [$data references](#data-reference). Draft 6 meta-schema that is added by default will be extended to allow them. If you want to use another meta-schema you need to use $dataMetaSchema method to add support for $data reference. See [API](#api). +- _allErrors_: check all rules collecting all errors. Default is to return after the first error. +- _verbose_: include the reference to the part of the schema (`schema` and `parentSchema`) and validated data in errors (false by default). +- _$comment_ (NEW in Ajv version 6.0): log or pass the value of `$comment` keyword to a function. Option values: + - `false` (default): ignore $comment keyword. + - `true`: log the keyword value to console. + - function: pass the keyword value, its schema path and root schema to the specified function +- _jsonPointers_: set `dataPath` property of errors using [JSON Pointers](https://tools.ietf.org/html/rfc6901) instead of JavaScript property access notation. +- _uniqueItems_: validate `uniqueItems` keyword (true by default). +- _unicode_: calculate correct length of strings with unicode pairs (true by default). Pass `false` to use `.length` of strings that is faster, but gives "incorrect" lengths of strings with unicode pairs - each unicode pair is counted as two characters. +- _nullable_: support keyword "nullable" from [Open API 3 specification](https://swagger.io/docs/specification/data-models/data-types/). +- _format_: formats validation mode. Option values: + - `"fast"` (default) - simplified and fast validation (see [Formats](#formats) for details of which formats are available and affected by this option). + - `"full"` - more restrictive and slow validation. E.g., 25:00:00 and 2015/14/33 will be invalid time and date in 'full' mode but it will be valid in 'fast' mode. + - `false` - ignore all format keywords. +- _formats_: an object with custom formats. Keys and values will be passed to `addFormat` method. +- _unknownFormats_: handling of unknown formats. Option values: + - `true` (default) - if an unknown format is encountered the exception is thrown during schema compilation. If `format` keyword value is [$data reference](#data-reference) and it is unknown the validation will fail. + - `[String]` - an array of unknown format names that will be ignored. This option can be used to allow usage of third party schemas with format(s) for which you don't have definitions, but still fail if another unknown format is used. If `format` keyword value is [$data reference](#data-reference) and it is not in this array the validation will fail. + - `"ignore"` - to log warning during schema compilation and always pass validation (the default behaviour in versions before 5.0.0). This option is not recommended, as it allows to mistype format name and it won't be validated without any error message. This behaviour is required by JSON Schema specification. +- _schemas_: an array or object of schemas that will be added to the instance. In case you pass the array the schemas must have IDs in them. When the object is passed the method `addSchema(value, key)` will be called for each schema in this object. +- _logger_: sets the logging method. Default is the global `console` object that should have methods `log`, `warn` and `error`. Option values: + - custom logger - it should have methods `log`, `warn` and `error`. If any of these methods is missing an exception will be thrown. + - `false` - logging is disabled. + + +##### Referenced schema options + +- _schemaId_: this option defines which keywords are used as schema URI. Option value: + - `"$id"` (default) - only use `$id` keyword as schema URI (as specified in JSON Schema draft-06/07), ignore `id` keyword (if it is present a warning will be logged). + - `"id"` - only use `id` keyword as schema URI (as specified in JSON Schema draft-04), ignore `$id` keyword (if it is present a warning will be logged). + - `"auto"` - use both `$id` and `id` keywords as schema URI. If both are present (in the same schema object) and different the exception will be thrown during schema compilation. +- _missingRefs_: handling of missing referenced schemas. Option values: + - `true` (default) - if the reference cannot be resolved during compilation the exception is thrown. The thrown error has properties `missingRef` (with hash fragment) and `missingSchema` (without it). Both properties are resolved relative to the current base id (usually schema id, unless it was substituted). + - `"ignore"` - to log error during compilation and always pass validation. + - `"fail"` - to log error and successfully compile schema but fail validation if this rule is checked. +- _extendRefs_: validation of other keywords when `$ref` is present in the schema. Option values: + - `"ignore"` (default) - when `$ref` is used other keywords are ignored (as per [JSON Reference](https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3) standard). A warning will be logged during the schema compilation. + - `"fail"` (recommended) - if other validation keywords are used together with `$ref` the exception will be thrown when the schema is compiled. This option is recommended to make sure schema has no keywords that are ignored, which can be confusing. + - `true` - validate all keywords in the schemas with `$ref` (the default behaviour in versions before 5.0.0). +- _loadSchema_: asynchronous function that will be used to load remote schemas when `compileAsync` [method](#api-compileAsync) is used and some reference is missing (option `missingRefs` should NOT be 'fail' or 'ignore'). This function should accept remote schema uri as a parameter and return a Promise that resolves to a schema. See example in [Asynchronous compilation](#asynchronous-schema-compilation). + + +##### Options to modify validated data + +- _removeAdditional_: remove additional properties - see example in [Filtering data](#filtering-data). This option is not used if schema is added with `addMetaSchema` method. Option values: + - `false` (default) - not to remove additional properties + - `"all"` - all additional properties are removed, regardless of `additionalProperties` keyword in schema (and no validation is made for them). + - `true` - only additional properties with `additionalProperties` keyword equal to `false` are removed. + - `"failing"` - additional properties that fail schema validation will be removed (where `additionalProperties` keyword is `false` or schema). +- _useDefaults_: replace missing or undefined properties and items with the values from corresponding `default` keywords. Default behaviour is to ignore `default` keywords. This option is not used if schema is added with `addMetaSchema` method. See examples in [Assigning defaults](#assigning-defaults). Option values: + - `false` (default) - do not use defaults + - `true` - insert defaults by value (object literal is used). + - `"empty"` - in addition to missing or undefined, use defaults for properties and items that are equal to `null` or `""` (an empty string). + - `"shared"` (deprecated) - insert defaults by reference. If the default is an object, it will be shared by all instances of validated data. If you modify the inserted default in the validated data, it will be modified in the schema as well. +- _coerceTypes_: change data type of data to match `type` keyword. See the example in [Coercing data types](#coercing-data-types) and [coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md). Option values: + - `false` (default) - no type coercion. + - `true` - coerce scalar data types. + - `"array"` - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema). + + +##### Strict mode options + +- _strictDefaults_: report ignored `default` keywords in schemas. Option values: + - `false` (default) - ignored defaults are not reported + - `true` - if an ignored default is present, throw an error + - `"log"` - if an ignored default is present, log warning +- _strictKeywords_: report unknown keywords in schemas. Option values: + - `false` (default) - unknown keywords are not reported + - `true` - if an unknown keyword is present, throw an error + - `"log"` - if an unknown keyword is present, log warning + + +##### Asynchronous validation options + +- _transpile_: Requires [ajv-async](https://github.com/epoberezkin/ajv-async) package. It determines whether Ajv transpiles compiled asynchronous validation function. Option values: + - `undefined` (default) - transpile with [nodent](https://github.com/MatAtBread/nodent) if async functions are not supported. + - `true` - always transpile with nodent. + - `false` - do not transpile; if async functions are not supported an exception will be thrown. + + +##### Advanced options + +- _meta_: add [meta-schema](http://json-schema.org/documentation.html) so it can be used by other schemas (true by default). If an object is passed, it will be used as the default meta-schema for schemas that have no `$schema` keyword. This default meta-schema MUST have `$schema` keyword. +- _validateSchema_: validate added/compiled schemas against meta-schema (true by default). `$schema` property in the schema can be http://json-schema.org/draft-07/schema or absent (draft-07 meta-schema will be used) or can be a reference to the schema previously added with `addMetaSchema` method. Option values: + - `true` (default) - if the validation fails, throw the exception. + - `"log"` - if the validation fails, log error. + - `false` - skip schema validation. +- _addUsedSchema_: by default methods `compile` and `validate` add schemas to the instance if they have `$id` (or `id`) property that doesn't start with "#". If `$id` is present and it is not unique the exception will be thrown. Set this option to `false` to skip adding schemas to the instance and the `$id` uniqueness check when these methods are used. This option does not affect `addSchema` method. +- _inlineRefs_: Affects compilation of referenced schemas. Option values: + - `true` (default) - the referenced schemas that don't have refs in them are inlined, regardless of their size - that substantially improves performance at the cost of the bigger size of compiled schema functions. + - `false` - to not inline referenced schemas (they will be compiled as separate functions). + - integer number - to limit the maximum number of keywords of the schema that will be inlined. +- _passContext_: pass validation context to custom keyword functions. If this option is `true` and you pass some context to the compiled validation function with `validate.call(context, data)`, the `context` will be available as `this` in your custom keywords. By default `this` is Ajv instance. +- _loopRequired_: by default `required` keyword is compiled into a single expression (or a sequence of statements in `allErrors` mode). In case of a very large number of properties in this keyword it may result in a very big validation function. Pass integer to set the number of properties above which `required` keyword will be validated in a loop - smaller validation function size but also worse performance. +- _ownProperties_: by default Ajv iterates over all enumerable object properties; when this option is `true` only own enumerable object properties (i.e. found directly on the object rather than on its prototype) are iterated. Contributed by @mbroadst. +- _multipleOfPrecision_: by default `multipleOf` keyword is validated by comparing the result of division with parseInt() of that result. It works for dividers that are bigger than 1. For small dividers such as 0.01 the result of the division is usually not integer (even when it should be integer, see issue [#84](https://github.com/epoberezkin/ajv/issues/84)). If you need to use fractional dividers set this option to some positive integer N to have `multipleOf` validated using this formula: `Math.abs(Math.round(division) - division) < 1e-N` (it is slower but allows for float arithmetics deviations). +- _errorDataPath_ (deprecated): set `dataPath` to point to 'object' (default) or to 'property' when validating keywords `required`, `additionalProperties` and `dependencies`. +- _messages_: Include human-readable messages in errors. `true` by default. `false` can be passed when custom messages are used (e.g. with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n)). +- _sourceCode_: add `sourceCode` property to validating function (for debugging; this code can be different from the result of toString call). +- _processCode_: an optional function to process generated code before it is passed to Function constructor. It can be used to either beautify (the validating function is generated without line-breaks) or to transpile code. Starting from version 5.0.0 this option replaced options: + - `beautify` that formatted the generated function using [js-beautify](https://github.com/beautify-web/js-beautify). If you want to beautify the generated code pass `require('js-beautify').js_beautify`. + - `transpile` that transpiled asynchronous validation function. You can still use `transpile` option with [ajv-async](https://github.com/epoberezkin/ajv-async) package. See [Asynchronous validation](#asynchronous-validation) for more information. +- _cache_: an optional instance of cache to store compiled schemas using stable-stringified schema as a key. For example, set-associative cache [sacjs](https://github.com/epoberezkin/sacjs) can be used. If not passed then a simple hash is used which is good enough for the common use case (a limited number of statically defined schemas). Cache should have methods `put(key, value)`, `get(key)`, `del(key)` and `clear()`. +- _serialize_: an optional function to serialize schema to cache key. Pass `false` to use schema itself as a key (e.g., if WeakMap used as a cache). By default [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used. + + +## Validation errors + +In case of validation failure, Ajv assigns the array of errors to `errors` property of validation function (or to `errors` property of Ajv instance when `validate` or `validateSchema` methods were called). In case of [asynchronous validation](#asynchronous-validation), the returned promise is rejected with exception `Ajv.ValidationError` that has `errors` property. + + +### Error objects + +Each error is an object with the following properties: + +- _keyword_: validation keyword. +- _dataPath_: the path to the part of the data that was validated. By default `dataPath` uses JavaScript property access notation (e.g., `".prop[1].subProp"`). When the option `jsonPointers` is true (see [Options](#options)) `dataPath` will be set using JSON pointer standard (e.g., `"/prop/1/subProp"`). +- _schemaPath_: the path (JSON-pointer as a URI fragment) to the schema of the keyword that failed validation. +- _params_: the object with the additional information about error that can be used to create custom error messages (e.g., using [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package). See below for parameters set by all keywords. +- _message_: the standard error message (can be excluded with option `messages` set to false). +- _schema_: the schema of the keyword (added with `verbose` option). +- _parentSchema_: the schema containing the keyword (added with `verbose` option) +- _data_: the data validated by the keyword (added with `verbose` option). + +__Please note__: `propertyNames` keyword schema validation errors have an additional property `propertyName`, `dataPath` points to the object. After schema validation for each property name, if it is invalid an additional error is added with the property `keyword` equal to `"propertyNames"`. + + +### Error parameters + +Properties of `params` object in errors depend on the keyword that failed validation. + +- `maxItems`, `minItems`, `maxLength`, `minLength`, `maxProperties`, `minProperties` - property `limit` (number, the schema of the keyword). +- `additionalItems` - property `limit` (the maximum number of allowed items in case when `items` keyword is an array of schemas and `additionalItems` is false). +- `additionalProperties` - property `additionalProperty` (the property not used in `properties` and `patternProperties` keywords). +- `dependencies` - properties: + - `property` (dependent property), + - `missingProperty` (required missing dependency - only the first one is reported currently) + - `deps` (required dependencies, comma separated list as a string), + - `depsCount` (the number of required dependencies). +- `format` - property `format` (the schema of the keyword). +- `maximum`, `minimum` - properties: + - `limit` (number, the schema of the keyword), + - `exclusive` (boolean, the schema of `exclusiveMaximum` or `exclusiveMinimum`), + - `comparison` (string, comparison operation to compare the data to the limit, with the data on the left and the limit on the right; can be "<", "<=", ">", ">=") +- `multipleOf` - property `multipleOf` (the schema of the keyword) +- `pattern` - property `pattern` (the schema of the keyword) +- `required` - property `missingProperty` (required property that is missing). +- `propertyNames` - property `propertyName` (an invalid property name). +- `patternRequired` (in ajv-keywords) - property `missingPattern` (required pattern that did not match any property). +- `type` - property `type` (required type(s), a string, can be a comma-separated list) +- `uniqueItems` - properties `i` and `j` (indices of duplicate items). +- `const` - property `allowedValue` pointing to the value (the schema of the keyword). +- `enum` - property `allowedValues` pointing to the array of values (the schema of the keyword). +- `$ref` - property `ref` with the referenced schema URI. +- `oneOf` - property `passingSchemas` (array of indices of passing schemas, null if no schema passes). +- custom keywords (in case keyword definition doesn't create errors) - property `keyword` (the keyword name). + + +## Plugins + +Ajv can be extended with plugins that add custom keywords, formats or functions to process generated code. When such plugin is published as npm package it is recommended that it follows these conventions: + +- it exports a function +- this function accepts ajv instance as the first parameter and returns the same instance to allow chaining +- this function can accept an optional configuration as the second parameter + +If you have published a useful plugin please submit a PR to add it to the next section. + + +## Related packages + +- [ajv-async](https://github.com/epoberezkin/ajv-async) - plugin to configure async validation mode +- [ajv-bsontype](https://github.com/BoLaMN/ajv-bsontype) - plugin to validate mongodb's bsonType formats +- [ajv-cli](https://github.com/jessedc/ajv-cli) - command line interface +- [ajv-errors](https://github.com/epoberezkin/ajv-errors) - plugin for custom error messages +- [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) - internationalised error messages +- [ajv-istanbul](https://github.com/epoberezkin/ajv-istanbul) - plugin to instrument generated validation code to measure test coverage of your schemas +- [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) - plugin with custom validation keywords (select, typeof, etc.) +- [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) - plugin with keywords $merge and $patch +- [ajv-pack](https://github.com/epoberezkin/ajv-pack) - produces a compact module exporting validation functions + + +## Some packages using Ajv + +- [webpack](https://github.com/webpack/webpack) - a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser +- [jsonscript-js](https://github.com/JSONScript/jsonscript-js) - the interpreter for [JSONScript](http://www.jsonscript.org) - scripted processing of existing endpoints and services +- [osprey-method-handler](https://github.com/mulesoft-labs/osprey-method-handler) - Express middleware for validating requests and responses based on a RAML method object, used in [osprey](https://github.com/mulesoft/osprey) - validating API proxy generated from a RAML definition +- [har-validator](https://github.com/ahmadnassri/har-validator) - HTTP Archive (HAR) validator +- [jsoneditor](https://github.com/josdejong/jsoneditor) - a web-based tool to view, edit, format, and validate JSON http://jsoneditoronline.org +- [JSON Schema Lint](https://github.com/nickcmaynard/jsonschemalint) - a web tool to validate JSON/YAML document against a single JSON Schema http://jsonschemalint.com +- [objection](https://github.com/vincit/objection.js) - SQL-friendly ORM for Node.js +- [table](https://github.com/gajus/table) - formats data into a string table +- [ripple-lib](https://github.com/ripple/ripple-lib) - a JavaScript API for interacting with [Ripple](https://ripple.com) in Node.js and the browser +- [restbase](https://github.com/wikimedia/restbase) - distributed storage with REST API & dispatcher for backend services built to provide a low-latency & high-throughput API for Wikipedia / Wikimedia content +- [hippie-swagger](https://github.com/CacheControl/hippie-swagger) - [Hippie](https://github.com/vesln/hippie) wrapper that provides end to end API testing with swagger validation +- [react-form-controlled](https://github.com/seeden/react-form-controlled) - React controlled form components with validation +- [rabbitmq-schema](https://github.com/tjmehta/rabbitmq-schema) - a schema definition module for RabbitMQ graphs and messages +- [@query/schema](https://www.npmjs.com/package/@query/schema) - stream filtering with a URI-safe query syntax parsing to JSON Schema +- [chai-ajv-json-schema](https://github.com/peon374/chai-ajv-json-schema) - chai plugin to us JSON Schema with expect in mocha tests +- [grunt-jsonschema-ajv](https://github.com/SignpostMarv/grunt-jsonschema-ajv) - Grunt plugin for validating files against JSON Schema +- [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) - extract text from bundle into a file +- [electron-builder](https://github.com/electron-userland/electron-builder) - a solution to package and build a ready for distribution Electron app +- [addons-linter](https://github.com/mozilla/addons-linter) - Mozilla Add-ons Linter +- [gh-pages-generator](https://github.com/epoberezkin/gh-pages-generator) - multi-page site generator converting markdown files to GitHub pages +- [ESLint](https://github.com/eslint/eslint) - the pluggable linting utility for JavaScript and JSX + + +## Tests + +``` +npm install +git submodule update --init +npm test +``` + +## Contributing + +All validation functions are generated using doT templates in [dot](https://github.com/epoberezkin/ajv/tree/master/lib/dot) folder. Templates are precompiled so doT is not a run-time dependency. + +`npm run build` - compiles templates to [dotjs](https://github.com/epoberezkin/ajv/tree/master/lib/dotjs) folder. + +`npm run watch` - automatically compiles templates when files in dot folder change + +Please see [Contributing guidelines](https://github.com/epoberezkin/ajv/blob/master/CONTRIBUTING.md) + + +## Changes history + +See https://github.com/epoberezkin/ajv/releases + +__Please note__: [Changes in version 6.0.0](https://github.com/epoberezkin/ajv/releases/tag/v6.0.0). + +[Version 5.0.0](https://github.com/epoberezkin/ajv/releases/tag/5.0.0). + +[Version 4.0.0](https://github.com/epoberezkin/ajv/releases/tag/4.0.0). + +[Version 3.0.0](https://github.com/epoberezkin/ajv/releases/tag/3.0.0). + +[Version 2.0.0](https://github.com/epoberezkin/ajv/releases/tag/2.0.0). + + +## Open-source software support + +Ajv is a part of [Tidelift subscription](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=readme) - it provides a centralised support to open-source software users, in addition to the support provided by software maintainers. + + +## License + +[MIT](https://github.com/epoberezkin/ajv/blob/master/LICENSE) diff --git a/node_modules/ajv/dist/ajv.bundle.js b/node_modules/ajv/dist/ajv.bundle.js new file mode 100644 index 0000000..2ebb4c3 --- /dev/null +++ b/node_modules/ajv/dist/ajv.bundle.js @@ -0,0 +1,7163 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Ajv = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; +// For the source: https://gist.github.com/dperini/729294 +// For test cases: https://mathiasbynens.be/demo/url-regex +// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. +// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; +var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; +var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; +var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; +var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; +var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; + + +module.exports = formats; + +function formats(mode) { + mode = mode == 'full' ? 'full' : 'fast'; + return util.copy(formats[mode]); +} + + +formats.fast = { + // date: http://tools.ietf.org/html/rfc3339#section-5.6 + date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, + // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 + time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, + 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, + // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js + uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, + 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, + 'uri-template': URITEMPLATE, + url: URL, + // email (sources from jsen validator): + // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 + // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') + email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, + hostname: HOSTNAME, + // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html + ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, + // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses + ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, + regex: regex, + // uuid: http://tools.ietf.org/html/rfc4122 + uuid: UUID, + // JSON-pointer: https://tools.ietf.org/html/rfc6901 + // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A + 'json-pointer': JSON_POINTER, + 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, + // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 + 'relative-json-pointer': RELATIVE_JSON_POINTER +}; + + +formats.full = { + date: date, + time: time, + 'date-time': date_time, + uri: uri, + 'uri-reference': URIREF, + 'uri-template': URITEMPLATE, + url: URL, + email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, + hostname: hostname, + ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, + ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, + regex: regex, + uuid: UUID, + 'json-pointer': JSON_POINTER, + 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, + 'relative-json-pointer': RELATIVE_JSON_POINTER +}; + + +function isLeapYear(year) { + // https://tools.ietf.org/html/rfc3339#appendix-C + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} + + +function date(str) { + // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 + var matches = str.match(DATE); + if (!matches) return false; + + var year = +matches[1]; + var month = +matches[2]; + var day = +matches[3]; + + return month >= 1 && month <= 12 && day >= 1 && + day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); +} + + +function time(str, full) { + var matches = str.match(TIME); + if (!matches) return false; + + var hour = matches[1]; + var minute = matches[2]; + var second = matches[3]; + var timeZone = matches[5]; + return ((hour <= 23 && minute <= 59 && second <= 59) || + (hour == 23 && minute == 59 && second == 60)) && + (!full || timeZone); +} + + +var DATE_TIME_SEPARATOR = /t|\s/i; +function date_time(str) { + // http://tools.ietf.org/html/rfc3339#section-5.6 + var dateTime = str.split(DATE_TIME_SEPARATOR); + return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); +} + + +function hostname(str) { + // https://tools.ietf.org/html/rfc1034#section-3.5 + // https://tools.ietf.org/html/rfc1123#section-2 + return str.length <= 255 && HOSTNAME.test(str); +} + + +var NOT_URI_FRAGMENT = /\/|:/; +function uri(str) { + // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." + return NOT_URI_FRAGMENT.test(str) && URI.test(str); +} + + +var Z_ANCHOR = /[^\\]\\Z/; +function regex(str) { + if (Z_ANCHOR.test(str)) return false; + try { + new RegExp(str); + return true; + } catch(e) { + return false; + } +} + +},{"./util":10}],5:[function(require,module,exports){ +'use strict'; + +var resolve = require('./resolve') + , util = require('./util') + , errorClasses = require('./error_classes') + , stableStringify = require('fast-json-stable-stringify'); + +var validateGenerator = require('../dotjs/validate'); + +/** + * Functions below are used inside compiled validations function + */ + +var ucs2length = util.ucs2length; +var equal = require('fast-deep-equal'); + +// this error is thrown by async schemas to return validation errors via exception +var ValidationError = errorClasses.Validation; + +module.exports = compile; + + +/** + * Compiles schema to validation function + * @this Ajv + * @param {Object} schema schema object + * @param {Object} root object with information about the root schema for this schema + * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution + * @param {String} baseId base ID for IDs in the schema + * @return {Function} validation function + */ +function compile(schema, root, localRefs, baseId) { + /* jshint validthis: true, evil: true */ + /* eslint no-shadow: 0 */ + var self = this + , opts = this._opts + , refVal = [ undefined ] + , refs = {} + , patterns = [] + , patternsHash = {} + , defaults = [] + , defaultsHash = {} + , customRules = []; + + root = root || { schema: schema, refVal: refVal, refs: refs }; + + var c = checkCompiling.call(this, schema, root, baseId); + var compilation = this._compilations[c.index]; + if (c.compiling) return (compilation.callValidate = callValidate); + + var formats = this._formats; + var RULES = this.RULES; + + try { + var v = localCompile(schema, root, localRefs, baseId); + compilation.validate = v; + var cv = compilation.callValidate; + if (cv) { + cv.schema = v.schema; + cv.errors = null; + cv.refs = v.refs; + cv.refVal = v.refVal; + cv.root = v.root; + cv.$async = v.$async; + if (opts.sourceCode) cv.source = v.source; + } + return v; + } finally { + endCompiling.call(this, schema, root, baseId); + } + + /* @this {*} - custom context, see passContext option */ + function callValidate() { + /* jshint validthis: true */ + var validate = compilation.validate; + var result = validate.apply(this, arguments); + callValidate.errors = validate.errors; + return result; + } + + function localCompile(_schema, _root, localRefs, baseId) { + var isRoot = !_root || (_root && _root.schema == _schema); + if (_root.schema != root.schema) + return compile.call(self, _schema, _root, localRefs, baseId); + + var $async = _schema.$async === true; + + var sourceCode = validateGenerator({ + isTop: true, + schema: _schema, + isRoot: isRoot, + baseId: baseId, + root: _root, + schemaPath: '', + errSchemaPath: '#', + errorPath: '""', + MissingRefError: errorClasses.MissingRef, + RULES: RULES, + validate: validateGenerator, + util: util, + resolve: resolve, + resolveRef: resolveRef, + usePattern: usePattern, + useDefault: useDefault, + useCustomRule: useCustomRule, + opts: opts, + formats: formats, + logger: self.logger, + self: self + }); + + sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) + + vars(defaults, defaultCode) + vars(customRules, customRuleCode) + + sourceCode; + + if (opts.processCode) sourceCode = opts.processCode(sourceCode); + // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); + var validate; + try { + var makeValidate = new Function( + 'self', + 'RULES', + 'formats', + 'root', + 'refVal', + 'defaults', + 'customRules', + 'equal', + 'ucs2length', + 'ValidationError', + sourceCode + ); + + validate = makeValidate( + self, + RULES, + formats, + root, + refVal, + defaults, + customRules, + equal, + ucs2length, + ValidationError + ); + + refVal[0] = validate; + } catch(e) { + self.logger.error('Error compiling schema, function code:', sourceCode); + throw e; + } + + validate.schema = _schema; + validate.errors = null; + validate.refs = refs; + validate.refVal = refVal; + validate.root = isRoot ? validate : _root; + if ($async) validate.$async = true; + if (opts.sourceCode === true) { + validate.source = { + code: sourceCode, + patterns: patterns, + defaults: defaults + }; + } + + return validate; + } + + function resolveRef(baseId, ref, isRoot) { + ref = resolve.url(baseId, ref); + var refIndex = refs[ref]; + var _refVal, refCode; + if (refIndex !== undefined) { + _refVal = refVal[refIndex]; + refCode = 'refVal[' + refIndex + ']'; + return resolvedRef(_refVal, refCode); + } + if (!isRoot && root.refs) { + var rootRefId = root.refs[ref]; + if (rootRefId !== undefined) { + _refVal = root.refVal[rootRefId]; + refCode = addLocalRef(ref, _refVal); + return resolvedRef(_refVal, refCode); + } + } + + refCode = addLocalRef(ref); + var v = resolve.call(self, localCompile, root, ref); + if (v === undefined) { + var localSchema = localRefs && localRefs[ref]; + if (localSchema) { + v = resolve.inlineRef(localSchema, opts.inlineRefs) + ? localSchema + : compile.call(self, localSchema, root, localRefs, baseId); + } + } + + if (v === undefined) { + removeLocalRef(ref); + } else { + replaceLocalRef(ref, v); + return resolvedRef(v, refCode); + } + } + + function addLocalRef(ref, v) { + var refId = refVal.length; + refVal[refId] = v; + refs[ref] = refId; + return 'refVal' + refId; + } + + function removeLocalRef(ref) { + delete refs[ref]; + } + + function replaceLocalRef(ref, v) { + var refId = refs[ref]; + refVal[refId] = v; + } + + function resolvedRef(refVal, code) { + return typeof refVal == 'object' || typeof refVal == 'boolean' + ? { code: code, schema: refVal, inline: true } + : { code: code, $async: refVal && !!refVal.$async }; + } + + function usePattern(regexStr) { + var index = patternsHash[regexStr]; + if (index === undefined) { + index = patternsHash[regexStr] = patterns.length; + patterns[index] = regexStr; + } + return 'pattern' + index; + } + + function useDefault(value) { + switch (typeof value) { + case 'boolean': + case 'number': + return '' + value; + case 'string': + return util.toQuotedString(value); + case 'object': + if (value === null) return 'null'; + var valueStr = stableStringify(value); + var index = defaultsHash[valueStr]; + if (index === undefined) { + index = defaultsHash[valueStr] = defaults.length; + defaults[index] = value; + } + return 'default' + index; + } + } + + function useCustomRule(rule, schema, parentSchema, it) { + if (self._opts.validateSchema !== false) { + var deps = rule.definition.dependencies; + if (deps && !deps.every(function(keyword) { + return Object.prototype.hasOwnProperty.call(parentSchema, keyword); + })) + throw new Error('parent schema must have all required keywords: ' + deps.join(',')); + + var validateSchema = rule.definition.validateSchema; + if (validateSchema) { + var valid = validateSchema(schema); + if (!valid) { + var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); + if (self._opts.validateSchema == 'log') self.logger.error(message); + else throw new Error(message); + } + } + } + + var compile = rule.definition.compile + , inline = rule.definition.inline + , macro = rule.definition.macro; + + var validate; + if (compile) { + validate = compile.call(self, schema, parentSchema, it); + } else if (macro) { + validate = macro.call(self, schema, parentSchema, it); + if (opts.validateSchema !== false) self.validateSchema(validate, true); + } else if (inline) { + validate = inline.call(self, it, rule.keyword, schema, parentSchema); + } else { + validate = rule.definition.validate; + if (!validate) return; + } + + if (validate === undefined) + throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); + + var index = customRules.length; + customRules[index] = validate; + + return { + code: 'customRule' + index, + validate: validate + }; + } +} + + +/** + * Checks if the schema is currently compiled + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) + */ +function checkCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var index = compIndex.call(this, schema, root, baseId); + if (index >= 0) return { index: index, compiling: true }; + index = this._compilations.length; + this._compilations[index] = { + schema: schema, + root: root, + baseId: baseId + }; + return { index: index, compiling: false }; +} + + +/** + * Removes the schema from the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + */ +function endCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var i = compIndex.call(this, schema, root, baseId); + if (i >= 0) this._compilations.splice(i, 1); +} + + +/** + * Index of schema compilation in the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Integer} compilation index + */ +function compIndex(schema, root, baseId) { + /* jshint validthis: true */ + for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { + // high surrogate, and there is a next character + value = str.charCodeAt(pos); + if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate + } + } + return length; +}; + +},{}],10:[function(require,module,exports){ +'use strict'; + + +module.exports = { + copy: copy, + checkDataType: checkDataType, + checkDataTypes: checkDataTypes, + coerceToTypes: coerceToTypes, + toHash: toHash, + getProperty: getProperty, + escapeQuotes: escapeQuotes, + equal: require('fast-deep-equal'), + ucs2length: require('./ucs2length'), + varOccurences: varOccurences, + varReplace: varReplace, + cleanUpCode: cleanUpCode, + finalCleanUpCode: finalCleanUpCode, + schemaHasRules: schemaHasRules, + schemaHasRulesExcept: schemaHasRulesExcept, + schemaUnknownRules: schemaUnknownRules, + toQuotedString: toQuotedString, + getPathExpr: getPathExpr, + getPath: getPath, + getData: getData, + unescapeFragment: unescapeFragment, + unescapeJsonPointer: unescapeJsonPointer, + escapeFragment: escapeFragment, + escapeJsonPointer: escapeJsonPointer +}; + + +function copy(o, to) { + to = to || {}; + for (var key in o) to[key] = o[key]; + return to; +} + + +function checkDataType(dataType, data, negate) { + var EQUAL = negate ? ' !== ' : ' === ' + , AND = negate ? ' || ' : ' && ' + , OK = negate ? '!' : '' + , NOT = negate ? '' : '!'; + switch (dataType) { + case 'null': return data + EQUAL + 'null'; + case 'array': return OK + 'Array.isArray(' + data + ')'; + case 'object': return '(' + OK + data + AND + + 'typeof ' + data + EQUAL + '"object"' + AND + + NOT + 'Array.isArray(' + data + '))'; + case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + + NOT + '(' + data + ' % 1)' + + AND + data + EQUAL + data + ')'; + default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; + } +} + + +function checkDataTypes(dataTypes, data) { + switch (dataTypes.length) { + case 1: return checkDataType(dataTypes[0], data, true); + default: + var code = ''; + var types = toHash(dataTypes); + if (types.array && types.object) { + code = types.null ? '(': '(!' + data + ' || '; + code += 'typeof ' + data + ' !== "object")'; + delete types.null; + delete types.array; + delete types.object; + } + if (types.number) delete types.integer; + for (var t in types) + code += (code ? ' && ' : '' ) + checkDataType(t, data, true); + + return code; + } +} + + +var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); +function coerceToTypes(optionCoerceTypes, dataTypes) { + if (Array.isArray(dataTypes)) { + var types = []; + for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); + return paths[lvl - up]; + } + + if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); + data = 'data' + ((lvl - up) || ''); + if (!jsonPointer) return data; + } + + var expr = data; + var segments = jsonPointer.split('/'); + for (var i=0; i', + $notOp = $isMax ? '>' : '<', + $errorKeyword = undefined; + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $exclType = 'exclType' + $lvl, + $exclIsNumber = 'exclIsNumber' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; + if ($schema === undefined) { + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $schemaValue = $schemaValueExcl; + $isData = $isDataExcl; + } + } else { + var $exclIsNumber = typeof $schemaExcl == 'number', + $opStr = $op; + if ($exclIsNumber && $isData) { + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; + } else { + if ($exclIsNumber && $schema === undefined) { + $exclusive = true; + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $schemaValue = $schemaExcl; + $notOp += '='; + } else { + if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); + if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { + $exclusive = true; + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $notOp += '='; + } else { + $exclusive = false; + $opStr += '='; + } + } + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; + } + } + $errorKeyword = $errorKeyword || $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schemaValue) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],14:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitItems(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxItems' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxItems') { + out += 'more'; + } else { + out += 'fewer'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],15:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitLength(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxLength' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + if (it.opts.unicode === false) { + out += ' ' + ($data) + '.length '; + } else { + out += ' ucs2length(' + ($data) + ') '; + } + out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be '; + if ($keyword == 'maxLength') { + out += 'longer'; + } else { + out += 'shorter'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' characters\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],16:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitProperties(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxProperties' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxProperties') { + out += 'more'; + } else { + out += 'fewer'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],17:[function(require,module,exports){ +'use strict'; +module.exports = function generate_allOf(it, $keyword, $ruleType) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $allSchemasEmpty = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($breakOnError) { + if ($allSchemasEmpty) { + out += ' if (true) { '; + } else { + out += ' ' + ($closingBraces.slice(0, -1)) + ' '; + } + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],18:[function(require,module,exports){ +'use strict'; +module.exports = function generate_anyOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $noEmptySchema = $schema.every(function($sch) { + return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all)); + }); + if ($noEmptySchema) { + var $currentBaseId = $it.baseId; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match some schema in anyOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} + +},{}],19:[function(require,module,exports){ +'use strict'; +module.exports = function generate_comment(it, $keyword, $ruleType) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $comment = it.util.toQuotedString($schema); + if (it.opts.$comment === true) { + out += ' console.log(' + ($comment) + ');'; + } else if (typeof it.opts.$comment == 'function') { + out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; + } + return out; +} + +},{}],20:[function(require,module,exports){ +'use strict'; +module.exports = function generate_const(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (!$isData) { + out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to constant\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],21:[function(require,module,exports){ +'use strict'; +module.exports = function generate_contains(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $idx = 'i' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $currentBaseId = it.baseId, + $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all)); + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($nonEmptySchema) { + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (' + ($nextValid) + ') break; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; + } else { + out += ' if (' + ($data) + '.length == 0) {'; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should contain a valid item\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + if ($nonEmptySchema) { + out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + } + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],22:[function(require,module,exports){ +'use strict'; +module.exports = function generate_custom(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $rule = this, + $definition = 'definition' + $lvl, + $rDef = $rule.definition, + $closingBraces = ''; + var $compile, $inline, $macro, $ruleValidate, $validateCode; + if ($isData && $rDef.$data) { + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; + } else { + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + if (!$ruleValidate) return; + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + } + var $ruleErrs = $validateCode + '.errors', + $i = 'i' + $lvl, + $ruleErr = 'ruleErr' + $lvl, + $asyncKeyword = $rDef.async; + if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); + if (!($inline || $macro)) { + out += '' + ($ruleErrs) + ' = null;'; + } + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($isData && $rDef.$data) { + $closingBraces += '}'; + out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; + if ($validateSchema) { + $closingBraces += '}'; + out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; + } + } + if ($inline) { + if ($rDef.statements) { + out += ' ' + ($ruleValidate.validate) + ' '; + } else { + out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; + } + } else if ($macro) { + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $ruleValidate.validate; + $it.schemaPath = ''; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($code); + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + out += ' ' + ($validateCode) + '.call( '; + if (it.opts.passContext) { + out += 'this'; + } else { + out += 'self'; + } + if ($compile || $rDef.schema === false) { + out += ' , ' + ($data) + ' '; + } else { + out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; + } + out += ' , (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; + var def_callRuleValidate = out; + out = $$outStack.pop(); + if ($rDef.errors === false) { + out += ' ' + ($valid) + ' = '; + if ($asyncKeyword) { + out += 'await '; + } + out += '' + (def_callRuleValidate) + '; '; + } else { + if ($asyncKeyword) { + $ruleErrs = 'customErrors' + $lvl; + out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; + } else { + out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; + } + } + } + if ($rDef.modifying) { + out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; + } + out += '' + ($closingBraces); + if ($rDef.valid) { + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + out += ' if ( '; + if ($rDef.valid === undefined) { + out += ' !'; + if ($macro) { + out += '' + ($nextValid); + } else { + out += '' + ($valid); + } + } else { + out += ' ' + (!$rDef.valid) + ' '; + } + out += ') { '; + $errorKeyword = $rule.keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + var def_customError = out; + out = $$outStack.pop(); + if ($inline) { + if ($rDef.errors) { + if ($rDef.errors != 'full') { + out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; + } + out += ') { '; + $it.schema = $sch; + $it.schemaPath = $schemaPath + it.util.getProperty($property); + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],24:[function(require,module,exports){ +'use strict'; +module.exports = function generate_enum(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $i = 'i' + $lvl, + $vSchema = 'schema' + $lvl; + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ';'; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to one of the allowed values\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],25:[function(require,module,exports){ +'use strict'; +module.exports = function generate_format(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + if (it.opts.format === false) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $unknownFormats = it.opts.unknownFormats, + $allowUnknown = Array.isArray($unknownFormats); + if ($isData) { + var $format = 'format' + $lvl, + $isObject = 'isObject' + $lvl, + $formatType = 'formatType' + $lvl; + out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; + if (it.async) { + out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; + } + out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' ('; + if ($unknownFormats != 'ignore') { + out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; + if ($allowUnknown) { + out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; + } + out += ') || '; + } + out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; + if (it.async) { + out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; + } else { + out += ' ' + ($format) + '(' + ($data) + ') '; + } + out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; + } else { + var $format = it.formats[$schema]; + if (!$format) { + if ($unknownFormats == 'ignore') { + it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } else { + throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); + } + } + var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; + var $formatType = $isObject && $format.type || 'string'; + if ($isObject) { + var $async = $format.async === true; + $format = $format.validate; + } + if ($formatType != $ruleType) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } + if ($async) { + if (!it.async) throw new Error('async format in sync schema'); + var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; + out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; + } else { + out += ' if (! '; + var $formatRef = 'formats' + it.util.getProperty($schema); + if ($isObject) $formatRef += '.validate'; + if (typeof $format == 'function') { + out += ' ' + ($formatRef) + '(' + ($data) + ') '; + } else { + out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; + } + out += ') { '; + } + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match format "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],26:[function(require,module,exports){ +'use strict'; +module.exports = function generate_if(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + var $thenSch = it.schema['then'], + $elseSch = it.schema['else'], + $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)), + $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)), + $currentBaseId = $it.baseId; + if ($thenPresent || $elsePresent) { + var $ifClause; + $it.createErrors = false; + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + $it.createErrors = true; + out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + if ($thenPresent) { + out += ' if (' + ($nextValid) + ') { '; + $it.schema = it.schema['then']; + $it.schemaPath = it.schemaPath + '.then'; + $it.errSchemaPath = it.errSchemaPath + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; + if ($thenPresent && $elsePresent) { + $ifClause = 'ifClause' + $lvl; + out += ' var ' + ($ifClause) + ' = \'then\'; '; + } else { + $ifClause = '\'then\''; + } + out += ' } '; + if ($elsePresent) { + out += ' else { '; + } + } else { + out += ' if (!' + ($nextValid) + ') { '; + } + if ($elsePresent) { + $it.schema = it.schema['else']; + $it.schemaPath = it.schemaPath + '.else'; + $it.errSchemaPath = it.errSchemaPath + '/else'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; + if ($thenPresent && $elsePresent) { + $ifClause = 'ifClause' + $lvl; + out += ' var ' + ($ifClause) + ' = \'else\'; '; + } else { + $ifClause = '\'else\''; + } + out += ' } '; + } + out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} + +},{}],27:[function(require,module,exports){ +'use strict'; + +//all requires must be explicit because browserify won't work with dynamic requires +module.exports = { + '$ref': require('./ref'), + allOf: require('./allOf'), + anyOf: require('./anyOf'), + '$comment': require('./comment'), + const: require('./const'), + contains: require('./contains'), + dependencies: require('./dependencies'), + 'enum': require('./enum'), + format: require('./format'), + 'if': require('./if'), + items: require('./items'), + maximum: require('./_limit'), + minimum: require('./_limit'), + maxItems: require('./_limitItems'), + minItems: require('./_limitItems'), + maxLength: require('./_limitLength'), + minLength: require('./_limitLength'), + maxProperties: require('./_limitProperties'), + minProperties: require('./_limitProperties'), + multipleOf: require('./multipleOf'), + not: require('./not'), + oneOf: require('./oneOf'), + pattern: require('./pattern'), + properties: require('./properties'), + propertyNames: require('./propertyNames'), + required: require('./required'), + uniqueItems: require('./uniqueItems'), + validate: require('./validate') +}; + +},{"./_limit":13,"./_limitItems":14,"./_limitLength":15,"./_limitProperties":16,"./allOf":17,"./anyOf":18,"./comment":19,"./const":20,"./contains":21,"./dependencies":23,"./enum":24,"./format":25,"./if":26,"./items":28,"./multipleOf":29,"./not":30,"./oneOf":31,"./pattern":32,"./properties":33,"./propertyNames":34,"./ref":35,"./required":36,"./uniqueItems":37,"./validate":38}],28:[function(require,module,exports){ +'use strict'; +module.exports = function generate_items(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $idx = 'i' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $currentBaseId = it.baseId; + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if (Array.isArray($schema)) { + var $additionalItems = it.schema.additionalItems; + if ($additionalItems === false) { + out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + } + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) { + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' }'; + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],29:[function(require,module,exports){ +'use strict'; +module.exports = function generate_multipleOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + out += 'var division' + ($lvl) + ';if ('; + if ($isData) { + out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; + } + out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; + if (it.opts.multipleOfPrecision) { + out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; + } else { + out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; + } + out += ' ) '; + if ($isData) { + out += ' ) '; + } + out += ' ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be multiple of '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schemaValue) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],30:[function(require,module,exports){ +'use strict'; +module.exports = function generate_not(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + out += ' ' + (it.validate($it)) + ' '; + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (' + ($nextValid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + } else { + out += ' var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if ($breakOnError) { + out += ' if (false) { '; + } + } + return out; +} + +},{}],31:[function(require,module,exports){ +'use strict'; +module.exports = function generate_oneOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $prevValid = 'prevValid' + $lvl, + $passingSchemas = 'passingSchemas' + $lvl; + out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } else { + out += ' var ' + ($nextValid) + ' = true; '; + } + if ($i) { + out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; + $closingBraces += '}'; + } + out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match exactly one schema in oneOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; + if (it.opts.allErrors) { + out += ' } '; + } + return out; +} + +},{}],32:[function(require,module,exports){ +'use strict'; +module.exports = function generate_pattern(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match pattern "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],33:[function(require,module,exports){ +'use strict'; +module.exports = function generate_properties(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $key = 'key' + $lvl, + $idx = 'idx' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $dataProperties = 'dataProperties' + $lvl; + var $schemaKeys = Object.keys($schema || {}), + $pProperties = it.schema.patternProperties || {}, + $pPropertyKeys = Object.keys($pProperties), + $aProperties = it.schema.additionalProperties, + $someProperties = $schemaKeys.length || $pPropertyKeys.length, + $noAdditional = $aProperties === false, + $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, + $removeAdditional = it.opts.removeAdditional, + $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + var $required = it.schema.required; + if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); + out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; + if ($ownProperties) { + out += ' var ' + ($dataProperties) + ' = undefined;'; + } + if ($checkAdditional) { + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + if ($someProperties) { + out += ' var isAdditional' + ($lvl) + ' = !(false '; + if ($schemaKeys.length) { + if ($schemaKeys.length > 8) { + out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; + } else { + var arr1 = $schemaKeys; + if (arr1) { + var $propertyKey, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $propertyKey = arr1[i1 += 1]; + out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; + } + } + } + } + if ($pPropertyKeys.length) { + var arr2 = $pPropertyKeys; + if (arr2) { + var $pProperty, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $pProperty = arr2[$i += 1]; + out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; + } + } + } + out += ' ); if (isAdditional' + ($lvl) + ') { '; + } + if ($removeAdditional == 'all') { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + if ($noAdditional) { + if ($removeAdditional) { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + out += ' ' + ($nextValid) + ' = false; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is an invalid additional property'; + } else { + out += 'should NOT have additional properties'; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' break; '; + } + } + } else if ($additionalIsSchema) { + if ($removeAdditional == 'failing') { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + } else { + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + } + } + it.errorPath = $currentErrorPath; + } + if ($someProperties) { + out += ' } '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + var $useDefaults = it.opts.useDefaults && !it.compositeRule; + if ($schemaKeys.length) { + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + var $prop = it.util.getProperty($propertyKey), + $passData = $data + $prop, + $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + $code = it.util.varReplace($code, $nextData, $passData); + var $useData = $passData; + } else { + var $useData = $nextData; + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; + } + if ($hasDefault) { + out += ' ' + ($code) + ' '; + } else { + if ($requiredHash && $requiredHash[$propertyKey]) { + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { ' + ($nextValid) + ' = false; '; + var $currentErrorPath = it.errorPath, + $currErrSchemaPath = $errSchemaPath, + $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + it.errorPath = $currentErrorPath; + out += ' } else { '; + } else { + if ($breakOnError) { + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { ' + ($nextValid) + ' = true; } else { '; + } else { + out += ' if (' + ($useData) + ' !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ' ) { '; + } + } + out += ' ' + ($code) + ' } '; + } + } + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($pPropertyKeys.length) { + var arr4 = $pPropertyKeys; + if (arr4) { + var $pProperty, i4 = -1, + l4 = arr4.length - 1; + while (i4 < l4) { + $pProperty = arr4[i4 += 1]; + var $sch = $pProperties[$pProperty]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],34:[function(require,module,exports){ +'use strict'; +module.exports = function generate_propertyNames(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + out += 'var ' + ($errs) + ' = errors;'; + if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + var $key = 'key' + $lvl, + $idx = 'idx' + $lvl, + $i = 'i' + $lvl, + $invalidName = '\' + ' + $key + ' + \'', + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $dataProperties = 'dataProperties' + $lvl, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + if ($ownProperties) { + out += ' var ' + ($dataProperties) + ' = undefined; '; + } + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + out += ' var startErrs' + ($lvl) + ' = errors; '; + var $passData = $key; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) { + $required[$required.length] = $property; + } + } + } + } else { + var $required = $schema; + } + } + if ($isData || $required.length) { + var $currentErrorPath = it.errorPath, + $loopRequired = $isData || $required.length >= it.opts.loopRequired, + $ownProperties = it.opts.ownProperties; + if ($breakOnError) { + out += ' var missing' + ($lvl) + '; '; + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + out += ' var ' + ($valid) + ' = true; '; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; + } + out += '; if (!' + ($valid) + ') break; } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } else { + out += ' if ( '; + var arr2 = $required; + if (arr2) { + var $propertyKey, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $propertyKey = arr2[$i += 1]; + if ($i) { + out += ' || '; + } + var $prop = it.util.getProperty($propertyKey), + $useData = $data + $prop; + out += ' ( ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; + } + } + out += ') { '; + var $propertyPath = 'missing' + $lvl, + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } + } else { + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + if ($isData) { + out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; + } + out += ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; + if ($isData) { + out += ' } '; + } + } else { + var arr3 = $required; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $prop = it.util.getProperty($propertyKey), + $missingProperty = it.util.escapeQuotes($propertyKey), + $useData = $data + $prop; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + } + } + } + } + it.errorPath = $currentErrorPath; + } else if ($breakOnError) { + out += ' if (true) {'; + } + return out; +} + +},{}],37:[function(require,module,exports){ +'use strict'; +module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (($schema || $isData) && it.opts.uniqueItems !== false) { + if ($isData) { + out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; + } + out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; + var $itemType = it.schema.items && it.schema.items.type, + $typeIsArray = Array.isArray($itemType); + if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { + out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; + } else { + out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; + var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); + out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; '; + if ($typeIsArray) { + out += ' if (typeof item == \'string\') item = \'"\' + item; '; + } + out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; + } + out += ' } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} + +},{}],38:[function(require,module,exports){ +'use strict'; +module.exports = function generate_validate(it, $keyword, $ruleType) { + var out = ''; + var $async = it.schema.$async === true, + $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), + $id = it.self._getId(it.schema); + if (it.opts.strictKeywords) { + var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); + if ($unknownKwd) { + var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; + if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); + else throw new Error($keywordsMsg); + } + } + if (it.isTop) { + out += ' var validate = '; + if ($async) { + it.async = true; + out += 'async '; + } + out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; + if ($id && (it.opts.sourceCode || it.opts.processCode)) { + out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; + } + } + if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { + var $keyword = 'false schema'; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + if (it.schema === false) { + if (it.isTop) { + $breakOnError = true; + } else { + out += ' var ' + ($valid) + ' = false; '; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'boolean schema is false\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } else { + if (it.isTop) { + if ($async) { + out += ' return data; '; + } else { + out += ' validate.errors = null; return true; '; + } + } else { + out += ' var ' + ($valid) + ' = true; '; + } + } + if (it.isTop) { + out += ' }; return validate; '; + } + return out; + } + if (it.isTop) { + var $top = it.isTop, + $lvl = it.level = 0, + $dataLvl = it.dataLevel = 0, + $data = 'data'; + it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); + it.baseId = it.baseId || it.rootId; + delete it.isTop; + it.dataPathArr = [undefined]; + if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored in the schema root'; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + out += ' var vErrors = null; '; + out += ' var errors = 0; '; + out += ' if (rootData === undefined) rootData = data; '; + } else { + var $lvl = it.level, + $dataLvl = it.dataLevel, + $data = 'data' + ($dataLvl || ''); + if ($id) it.baseId = it.resolve.url(it.baseId, $id); + if ($async && !it.async) throw new Error('async schema in sync schema'); + out += ' var errs_' + ($lvl) + ' = errors;'; + } + var $valid = 'valid' + $lvl, + $breakOnError = !it.opts.allErrors, + $closingBraces1 = '', + $closingBraces2 = ''; + var $errorKeyword; + var $typeSchema = it.schema.type, + $typeIsArray = Array.isArray($typeSchema); + if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { + if ($typeIsArray) { + if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null'); + } else if ($typeSchema != 'null') { + $typeSchema = [$typeSchema, 'null']; + $typeIsArray = true; + } + } + if ($typeIsArray && $typeSchema.length == 1) { + $typeSchema = $typeSchema[0]; + $typeIsArray = false; + } + if (it.schema.$ref && $refKeywords) { + if (it.opts.extendRefs == 'fail') { + throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); + } else if (it.opts.extendRefs !== true) { + $refKeywords = false; + it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + } + } + if (it.schema.$comment && it.opts.$comment) { + out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); + } + if ($typeSchema) { + if (it.opts.coerceTypes) { + var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); + } + var $rulesGroup = it.RULES.types[$typeSchema]; + if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + if ($coerceToTypes) { + var $dataType = 'dataType' + $lvl, + $coerced = 'coerced' + $lvl; + out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; + if (it.opts.coerceTypes == 'array') { + out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; + } + out += ' var ' + ($coerced) + ' = undefined; '; + var $bracesCoercion = ''; + var arr1 = $coerceToTypes; + if (arr1) { + var $type, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $type = arr1[$i += 1]; + if ($i) { + out += ' if (' + ($coerced) + ' === undefined) { '; + $bracesCoercion += '}'; + } + if (it.opts.coerceTypes == 'array' && $type != 'array') { + out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; + } + if ($type == 'string') { + out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; + } else if ($type == 'number' || $type == 'integer') { + out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; + if ($type == 'integer') { + out += ' && !(' + ($data) + ' % 1)'; + } + out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; + } else if ($type == 'boolean') { + out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; + } else if ($type == 'null') { + out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; + } else if (it.opts.coerceTypes == 'array' && $type == 'array') { + out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; + } + } + } + out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' ' + ($data) + ' = ' + ($coerced) + '; '; + if (!$dataLvl) { + out += 'if (' + ($parentData) + ' !== undefined)'; + } + out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' } '; + } + } + if (it.schema.$ref && !$refKeywords) { + out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; + if ($breakOnError) { + out += ' } if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } else { + var arr2 = it.RULES; + if (arr2) { + var $rulesGroup, i2 = -1, + l2 = arr2.length - 1; + while (i2 < l2) { + $rulesGroup = arr2[i2 += 1]; + if ($shouldUseGroup($rulesGroup)) { + if ($rulesGroup.type) { + out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; + } + if (it.opts.useDefaults) { + if ($rulesGroup.type == 'object' && it.schema.properties) { + var $schema = it.schema.properties, + $schemaKeys = Object.keys($schema); + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ($sch.default !== undefined) { + var $passData = $data + it.util.getProperty($propertyKey); + if (it.compositeRule) { + if (it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored for: ' + $passData; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + } else { + out += ' if (' + ($passData) + ' === undefined '; + if (it.opts.useDefaults == 'empty') { + out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; + } + out += ' ) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { + var arr4 = it.schema.items; + if (arr4) { + var $sch, $i = -1, + l4 = arr4.length - 1; + while ($i < l4) { + $sch = arr4[$i += 1]; + if ($sch.default !== undefined) { + var $passData = $data + '[' + $i + ']'; + if (it.compositeRule) { + if (it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored for: ' + $passData; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + } else { + out += ' if (' + ($passData) + ' === undefined '; + if (it.opts.useDefaults == 'empty') { + out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; + } + out += ' ) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } + } + var arr5 = $rulesGroup.rules; + if (arr5) { + var $rule, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $rule = arr5[i5 += 1]; + if ($shouldUseRule($rule)) { + var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); + if ($code) { + out += ' ' + ($code) + ' '; + if ($breakOnError) { + $closingBraces1 += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces1) + ' '; + $closingBraces1 = ''; + } + if ($rulesGroup.type) { + out += ' } '; + if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { + out += ' else { '; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + } + if ($breakOnError) { + out += ' if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces2) + ' '; + } + if ($top) { + if ($async) { + out += ' if (errors === 0) return data; '; + out += ' else throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; '; + out += ' return errors === 0; '; + } + out += ' }; return validate;'; + } else { + out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; + } + out = it.util.cleanUpCode(out); + if ($top) { + out = it.util.finalCleanUpCode(out, $async); + } + + function $shouldUseGroup($rulesGroup) { + var rules = $rulesGroup.rules; + for (var i = 0; i < rules.length; i++) + if ($shouldUseRule(rules[i])) return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); + } + + function $ruleImplementsSomeKeyword($rule) { + var impl = $rule.implements; + for (var i = 0; i < impl.length; i++) + if (it.schema[impl[i]] !== undefined) return true; + } + return out; +} + +},{}],39:[function(require,module,exports){ +'use strict'; + +var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; +var customRuleCode = require('./dotjs/custom'); +var definitionSchema = require('./definition_schema'); + +module.exports = { + add: addKeyword, + get: getKeyword, + remove: removeKeyword, + validate: validateKeyword +}; + + +/** + * Define custom keyword + * @this Ajv + * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). + * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + * @return {Ajv} this for method chaining + */ +function addKeyword(keyword, definition) { + /* jshint validthis: true */ + /* eslint no-shadow: 0 */ + var RULES = this.RULES; + if (RULES.keywords[keyword]) + throw new Error('Keyword ' + keyword + ' is already defined'); + + if (!IDENTIFIER.test(keyword)) + throw new Error('Keyword ' + keyword + ' is not a valid identifier'); + + if (definition) { + this.validateKeyword(definition, true); + + var dataType = definition.type; + if (Array.isArray(dataType)) { + for (var i=0; i 1) { + sets[0] = sets[0].slice(0, -1); + var xl = sets.length - 1; + for (var x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } else { + return sets[0]; + } +} +function subexp(str) { + return "(?:" + str + ")"; +} +function typeOf(o) { + return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); +} +function toUpperCase(str) { + return str.toUpperCase(); +} +function toArray(obj) { + return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; +} +function assign(target, source) { + var obj = target; + if (source) { + for (var key in source) { + obj[key] = source[key]; + } + } + return obj; +} + +function buildExps(isIRI) { + var ALPHA$$ = "[A-Za-z]", + CR$ = "[\\x0D]", + DIGIT$$ = "[0-9]", + DQUOTE$$ = "[\\x22]", + HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), + //case-insensitive + LF$$ = "[\\x0A]", + SP$$ = "[\\x20]", + PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), + //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", + SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", + RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), + UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", + //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", + //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), + SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), + USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), + DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), + DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), + //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), + H16$ = subexp(HEXDIG$$ + "{1,4}"), + LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), + IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), + // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), + // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), + //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), + //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), + //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), + //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), + //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), + //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), + //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), + ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), + //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), + //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), + //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), + IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), + //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), + HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), + PORT$ = subexp(DIGIT$$ + "*"), + AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), + PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), + SEGMENT$ = subexp(PCHAR$ + "*"), + SEGMENT_NZ$ = subexp(PCHAR$ + "+"), + SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), + PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), + PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), + //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), + //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), + //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", + PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), + FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), + HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), + RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), + ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), + GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", + SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +var URI_PROTOCOL = buildExps(false); + +var IRI_PROTOCOL = buildExps(true); + +var slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; +}(); + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +/** Highest positive signed 32-bit float value */ + +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 +var delimiter = '-'; // '\x2D' + +/** Regular expressions */ +var regexPunycode = /^xn--/; +var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +var errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +var baseMinusTMin = base - tMin; +var floor = Math.floor; +var stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error$1(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + var result = []; + var length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + while (counter < length) { + var value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { + // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +var ucs2encode = function ucs2encode(array) { + return String.fromCodePoint.apply(String, toConsumableArray(array)); +}; + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +var basicToDigit = function basicToDigit(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +var digitToBasic = function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +var adapt = function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +var decode = function decode(input) { + // Don't use UCS-2. + var output = []; + var inputLength = input.length; + var i = 0; + var n = initialN; + var bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + var basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (var j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error$1('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + var oldi = i; + for (var w = 1, k = base;; /* no condition */k += base) { + + if (index >= inputLength) { + error$1('invalid-input'); + } + + var digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error$1('overflow'); + } + + i += digit * w; + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + + if (digit < t) { + break; + } + + var baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error$1('overflow'); + } + + w *= baseMinusT; + } + + var out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error$1('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + } + + return String.fromCodePoint.apply(String, output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +var encode = function encode(input) { + var output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + var inputLength = input.length; + + // Initialize the state. + var n = initialN; + var delta = 0; + var bias = initialBias; + + // Handle the basic code points. + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _currentValue2 = _step.value; + + if (_currentValue2 < 0x80) { + output.push(stringFromCharCode(_currentValue2)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + var basicLength = output.length; + var handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + var m = maxInt; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var currentValue = _step2.value; + + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + var handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error$1('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var _currentValue = _step3.value; + + if (_currentValue < n && ++delta > maxInt) { + error$1('overflow'); + } + if (_currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + for (var k = base;; /* no condition */k += base) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) { + break; + } + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + ++delta; + ++n; + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +var toUnicode = function toUnicode(input) { + return mapDomain(input, function (string) { + return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +var toASCII = function toASCII(input) { + return mapDomain(input, function (string) { + return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +var punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ +var SCHEMES = {}; +function pctEncChar(chr) { + var c = chr.charCodeAt(0); + var e = void 0; + if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); + return e; +} +function pctDecChars(str) { + var newStr = ""; + var i = 0; + var il = str.length; + while (i < il) { + var c = parseInt(str.substr(i + 1, 2), 16); + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } else if (c >= 194 && c < 224) { + if (il - i >= 6) { + var c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); + } else { + newStr += str.substr(i, 6); + } + i += 6; + } else if (c >= 224) { + if (il - i >= 9) { + var _c = parseInt(str.substr(i + 4, 2), 16); + var c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); + } else { + newStr += str.substr(i, 9); + } + i += 9; + } else { + newStr += str.substr(i, 3); + i += 3; + } + } + return newStr; +} +function _normalizeComponentEncoding(components, protocol) { + function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(protocol.UNRESERVED) ? str : decStr; + } + if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + return components; +} + +function _stripLeadingZeros(str) { + return str.replace(/^0*(.*)/, "$1") || "0"; +} +function _normalizeIPv4(host, protocol) { + var matches = host.match(protocol.IPV4ADDRESS) || []; + + var _matches = slicedToArray(matches, 2), + address = _matches[1]; + + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } else { + return host; + } +} +function _normalizeIPv6(host, protocol) { + var matches = host.match(protocol.IPV6ADDRESS) || []; + + var _matches2 = slicedToArray(matches, 3), + address = _matches2[1], + zone = _matches2[2]; + + if (address) { + var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), + _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), + last = _address$toLowerCase$2[0], + first = _address$toLowerCase$2[1]; + + var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + var lastFields = last.split(":").map(_stripLeadingZeros); + var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + var fieldCount = isLastFieldIPv4Address ? 7 : 8; + var lastFieldsStart = lastFields.length - fieldCount; + var fields = Array(fieldCount); + for (var x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + var allZeroFields = fields.reduce(function (acc, field, index) { + if (!field || field === "0") { + var lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } else { + acc.push({ index: index, length: 1 }); + } + } + return acc; + }, []); + var longestZeroFields = allZeroFields.sort(function (a, b) { + return b.length - a.length; + })[0]; + var newHost = void 0; + if (longestZeroFields && longestZeroFields.length > 1) { + var newFirst = fields.slice(0, longestZeroFields.index); + var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } else { + newHost = fields.join(":"); + } + if (zone) { + newHost += "%" + zone; + } + return newHost; + } else { + return host; + } +} +var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; +function parse(uriString) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var components = {}; + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + var matches = uriString.match(URI_PARSE); + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } else { + //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; + components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; + components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; + //fix port number + if (isNaN(components.port)) { + components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; + } + } + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } else if (components.scheme === undefined) { + components.reference = "relative"; + } else if (components.fragment === undefined) { + components.reference = "absolute"; + } else { + components.reference = "uri"; + } + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } else { + components.error = components.error || "URI can not be parsed."; + } + return components; +} + +function _recomposeAuthority(components, options) { + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { + return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; + })); + } + if (typeof components.port === "number") { + uriTokens.push(":"); + uriTokens.push(components.port.toString(10)); + } + return uriTokens.length ? uriTokens.join("") : undefined; +} + +var RDS1 = /^\.\.?\//; +var RDS2 = /^\/\.(\/|$)/; +var RDS3 = /^\/\.\.(\/|$)/; +var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; +function removeDotSegments(input) { + var output = []; + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } else if (input === "." || input === "..") { + input = ""; + } else { + var im = input.match(RDS5); + if (im) { + var s = im[0]; + input = input.slice(s.length); + output.push(s); + } else { + throw new Error("Unexpected dot segment condition"); + } + } + } + return output.join(""); +} + +function serialize(components) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) {} + //TODO: normalize IPv6 address as per RFC 5952 + + //if host component is a domain name + else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { + //convert IDN via punycode + try { + components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + //normalize encoding + _normalizeComponentEncoding(components, protocol); + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + var authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + if (components.path !== undefined) { + var s = components.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + uriTokens.push(s); + } + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + return uriTokens.join(""); //merge tokens into a string +} + +function resolveComponents(base, relative) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var skipNormalization = arguments[3]; + + var target = {}; + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } else { + target.query = base.query; + } + } else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } else if (!base.path) { + target.path = relative.path; + } else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative.fragment; + return target; +} + +function resolve(baseURI, relativeURI, options) { + var schemelessOptions = assign({ scheme: 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +} + +function normalize(uri, options) { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + return uri; +} + +function equal(uriA, uriB, options) { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + return uriA === uriB; +} + +function escapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); +} + +function unescapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); +} + +var handler = { + scheme: "http", + domainHost: true, + parse: function parse(components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function serialize(components, options) { + //normalize the default port + if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; + +var handler$1 = { + scheme: "https", + domainHost: handler.domainHost, + parse: handler.parse, + serialize: handler.serialize +}; + +var O = {}; +var isIRI = true; +//RFC 3986 +var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +var UNRESERVED = new RegExp(UNRESERVED$$, "g"); +var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +var NOT_HFVALUE = NOT_HFNAME; +function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(UNRESERVED) ? str : decStr; +} +var handler$2 = { + scheme: "mailto", + parse: function parse$$1(components, options) { + var mailtoComponents = components; + var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; + mailtoComponents.path = undefined; + if (mailtoComponents.query) { + var unknownHeaders = false; + var headers = {}; + var hfields = mailtoComponents.query.split("&"); + for (var x = 0, xl = hfields.length; x < xl; ++x) { + var hfield = hfields[x].split("="); + switch (hfield[0]) { + case "to": + var toAddrs = hfield[1].split(","); + for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { + to.push(toAddrs[_x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + if (unknownHeaders) mailtoComponents.headers = headers; + } + mailtoComponents.query = undefined; + for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { + var addr = to[_x2].split("@"); + addr[0] = unescapeComponent(addr[0]); + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + to[_x2] = addr.join("@"); + } + return mailtoComponents; + }, + serialize: function serialize$$1(mailtoComponents, options) { + var components = mailtoComponents; + var to = toArray(mailtoComponents.to); + if (to) { + for (var x = 0, xl = to.length; x < xl; ++x) { + var toAddr = String(to[x]); + var atIdx = toAddr.lastIndexOf("@"); + var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + var domain = toAddr.slice(atIdx + 1); + //convert IDN via punycode + try { + domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); + } catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + to[x] = localPart + "@" + domain; + } + components.path = to.join(","); + } + var headers = mailtoComponents.headers = mailtoComponents.headers || {}; + if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) headers["body"] = mailtoComponents.body; + var fields = []; + for (var name in headers) { + if (headers[name] !== O[name]) { + fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + return components; + } +}; + +var URN_PARSE = /^([^\:]+)\:(.*)/; +//RFC 2141 +var handler$3 = { + scheme: "urn", + parse: function parse$$1(components, options) { + var matches = components.path && components.path.match(URN_PARSE); + var urnComponents = components; + if (matches) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = matches[1].toLowerCase(); + var nss = matches[2]; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function serialize$$1(urnComponents, options) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = urnComponents.nid; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + var uriComponents = urnComponents; + var nss = urnComponents.nss; + uriComponents.path = (nid || options.nid) + ":" + nss; + return uriComponents; + } +}; + +var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +//RFC 4122 +var handler$4 = { + scheme: "urn:uuid", + parse: function parse(urnComponents, options) { + var uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function serialize(uuidComponents, options) { + var urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + } +}; + +SCHEMES[handler.scheme] = handler; +SCHEMES[handler$1.scheme] = handler$1; +SCHEMES[handler$2.scheme] = handler$2; +SCHEMES[handler$3.scheme] = handler$3; +SCHEMES[handler$4.scheme] = handler$4; + +exports.SCHEMES = SCHEMES; +exports.pctEncChar = pctEncChar; +exports.pctDecChars = pctDecChars; +exports.parse = parse; +exports.removeDotSegments = removeDotSegments; +exports.serialize = serialize; +exports.resolveComponents = resolveComponents; +exports.resolve = resolve; +exports.normalize = normalize; +exports.equal = equal; +exports.escapeComponent = escapeComponent; +exports.unescapeComponent = unescapeComponent; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +},{}],"ajv":[function(require,module,exports){ +'use strict'; + +var compileSchema = require('./compile') + , resolve = require('./compile/resolve') + , Cache = require('./cache') + , SchemaObject = require('./compile/schema_obj') + , stableStringify = require('fast-json-stable-stringify') + , formats = require('./compile/formats') + , rules = require('./compile/rules') + , $dataMetaSchema = require('./data') + , util = require('./compile/util'); + +module.exports = Ajv; + +Ajv.prototype.validate = validate; +Ajv.prototype.compile = compile; +Ajv.prototype.addSchema = addSchema; +Ajv.prototype.addMetaSchema = addMetaSchema; +Ajv.prototype.validateSchema = validateSchema; +Ajv.prototype.getSchema = getSchema; +Ajv.prototype.removeSchema = removeSchema; +Ajv.prototype.addFormat = addFormat; +Ajv.prototype.errorsText = errorsText; + +Ajv.prototype._addSchema = _addSchema; +Ajv.prototype._compile = _compile; + +Ajv.prototype.compileAsync = require('./compile/async'); +var customKeyword = require('./keyword'); +Ajv.prototype.addKeyword = customKeyword.add; +Ajv.prototype.getKeyword = customKeyword.get; +Ajv.prototype.removeKeyword = customKeyword.remove; +Ajv.prototype.validateKeyword = customKeyword.validate; + +var errorClasses = require('./compile/error_classes'); +Ajv.ValidationError = errorClasses.Validation; +Ajv.MissingRefError = errorClasses.MissingRef; +Ajv.$dataMetaSchema = $dataMetaSchema; + +var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; + +var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; +var META_SUPPORT_DATA = ['/properties']; + +/** + * Creates validator instance. + * Usage: `Ajv(opts)` + * @param {Object} opts optional options + * @return {Object} ajv instance + */ +function Ajv(opts) { + if (!(this instanceof Ajv)) return new Ajv(opts); + opts = this._opts = util.copy(opts) || {}; + setLogger(this); + this._schemas = {}; + this._refs = {}; + this._fragments = {}; + this._formats = formats(opts.format); + + this._cache = opts.cache || new Cache; + this._loadingSchemas = {}; + this._compilations = []; + this.RULES = rules(); + this._getId = chooseGetId(opts); + + opts.loopRequired = opts.loopRequired || Infinity; + if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; + if (opts.serialize === undefined) opts.serialize = stableStringify; + this._metaOpts = getMetaSchemaOptions(this); + + if (opts.formats) addInitialFormats(this); + addDefaultMetaSchema(this); + if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); + if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}}); + addInitialSchemas(this); +} + + + +/** + * Validate data using schema + * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. + * @this Ajv + * @param {String|Object} schemaKeyRef key, ref or schema object + * @param {Any} data to be validated + * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). + */ +function validate(schemaKeyRef, data) { + var v; + if (typeof schemaKeyRef == 'string') { + v = this.getSchema(schemaKeyRef); + if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); + } else { + var schemaObj = this._addSchema(schemaKeyRef); + v = schemaObj.validate || this._compile(schemaObj); + } + + var valid = v(data); + if (v.$async !== true) this.errors = v.errors; + return valid; +} + + +/** + * Create validating function for passed schema. + * @this Ajv + * @param {Object} schema schema object + * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. + * @return {Function} validating function + */ +function compile(schema, _meta) { + var schemaObj = this._addSchema(schema, undefined, _meta); + return schemaObj.validate || this._compile(schemaObj); +} + + +/** + * Adds schema to the instance. + * @this Ajv + * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. + * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. + * @return {Ajv} this for method chaining + */ +function addSchema(schema, key, _skipValidation, _meta) { + if (Array.isArray(schema)){ + for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {Object} options optional options with properties `separator` and `dataVar`. + * @return {String} human readable string with all errors descriptions + */ +function errorsText(errors, options) { + errors = errors || this.errors; + if (!errors) return 'No errors'; + options = options || {}; + var separator = options.separator === undefined ? ', ' : options.separator; + var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; + + var text = ''; + for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,u=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,h=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,d=/^(?:\/(?:[^~/]|~0|~1)*)*$/,f=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,p=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return a.copy(m[e="full"==e?"full":"fast"])}function v(e){var r=e.match(o);if(!r)return!1;var t,a=+r[2],s=+r[3];return 1<=a&&a<=12&&1<=s&&s<=(2!=a||((t=+r[1])%4!=0||t%100==0&&t%400!=0)?i[a]:29)}function y(e,r){var t=e.match(n);if(!t)return!1;var a=t[1],s=t[2],o=t[3];return(a<=23&&s<=59&&o<=59||23==a&&59==s&&60==o)&&(!r||t[5])}(r.exports=m).fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p},m.full={date:v,time:y,"date-time":function(e){var r=e.split(g);return 2==r.length&&v(r[0])&&y(r[1],!0)},uri:function(e){return P.test(e)&&l.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:function(e){return e.length<=255&&s.test(e)},ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p};var g=/t|\s/i;var P=/\/|:/;var E=/[^\\]\\Z/;function w(e){if(E.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},{"./util":10}],5:[function(e,r,t){"use strict";var j=e("./resolve"),O=e("./util"),I=e("./error_classes"),A=e("fast-json-stable-stringify"),C=e("../dotjs/validate"),k=O.ucs2length,L=e("fast-deep-equal"),z=I.Validation;function T(e,r,t){var a=s.call(this,e,r,t);return 0<=a?{index:a,compiling:!0}:{index:a=this._compilations.length,compiling:!(this._compilations[a]={schema:e,root:r,baseId:t})}}function q(e,r,t){var a=s.call(this,e,r,t);0<=a&&this._compilations.splice(a,1)}function s(e,r,t){for(var a=0;a",y=d?">":"<",g=void 0;if(m){var P=e.util.getData(p.$data,o,e.dataPathArr),E="exclusive"+s,w="exclType"+s,b="exclIsNumber"+s,S="' + "+(x="op"+s)+" + '";a+=" var schemaExcl"+s+" = "+P+"; ";var _;g=f;(_=_||[]).push(a+=" var "+E+"; var "+w+" = typeof "+(P="schemaExcl"+s)+"; if ("+w+" != 'boolean' && "+w+" != 'undefined' && "+w+" != 'number') { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+f+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var F=a;a=_.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+F+"]); ":" validate.errors = ["+F+"]; return false; ":" var err = "+F+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" "+w+" == 'number' ? ( ("+E+" = "+t+" === undefined || "+P+" "+v+"= "+t+") ? "+u+" "+y+"= "+P+" : "+u+" "+y+" "+t+" ) : ( ("+E+" = "+P+" === true) ? "+u+" "+y+"= "+t+" : "+u+" "+y+" "+t+" ) || "+u+" !== "+u+") { var op"+s+" = "+E+" ? '"+v+"' : '"+v+"='; ",void 0===i&&(l=e.errSchemaPath+"/"+(g=f),t=P,h=m)}else{S=v;if((b="number"==typeof p)&&h){var x="'"+S+"'";a+=" if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" ( "+t+" === undefined || "+p+" "+v+"= "+t+" ? "+u+" "+y+"= "+p+" : "+u+" "+y+" "+t+" ) || "+u+" !== "+u+") { "}else{b&&void 0===i?(E=!0,l=e.errSchemaPath+"/"+(g=f),t=p,y+="="):(b&&(t=Math[d?"min":"max"](p,i)),p===(!b||t)?(E=!0,l=e.errSchemaPath+"/"+(g=f),y+="="):(E=!1,S+="="));x="'"+S+"'";a+=" if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=" "+u+" "+y+" "+t+" || "+u+" !== "+u+") { "}}g=g||r,(_=_||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { comparison: "+x+", limit: "+t+", exclusive: "+E+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+S+" ",a+=h?"' + "+t:t+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";F=a;return a=_.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+F+"]); ":" validate.errors = ["+F+"]; return false; ":" var err = "+F+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || ");var d=r,f=f||[];f.push(a+=" "+u+".length "+("maxItems"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxItems"==r?"more":"fewer",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" items' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || "),a+=!1===e.opts.unicode?" "+u+".length ":" ucs2length("+u+") ";var d=r,f=f||[];f.push(a+=" "+("maxLength"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be ",a+="maxLength"==r?"longer":"shorter",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" characters' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h=e.opts.$data&&i&&i.$data;t=h?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ","schema"+s):i,a+="if ( ",h&&(a+=" ("+t+" !== undefined && typeof "+t+" != 'number') || ");var d=r,f=f||[];f.push(a+=" Object.keys("+u+").length "+("maxProperties"==r?">":"<")+" "+t+") { "),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxProperties"==r?"more":"fewer",a+=" than ",a+=h?"' + "+t+" + '":""+i,a+=" properties' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var p=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],17:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.schema[r],s=e.schemaPath+e.util.getProperty(r),o=e.errSchemaPath+"/"+r,i=!e.opts.allErrors,n=e.util.copy(e),l="";n.level++;var c="valid"+n.level,u=n.baseId,h=!0,d=a;if(d)for(var f,p=-1,m=d.length-1;p "+F+") { ";var R=c+"["+F+"]";d.schema=_,d.schemaPath=i+"["+F+"]",d.errSchemaPath=n+"/"+F,d.errorPath=e.util.getPathExpr(e.errorPath,F,e.opts.jsonPointers,!0),d.dataPathArr[v]=F;var $=e.validate(d);d.baseId=g,e.util.varOccurences($,y)<2?t+=" "+e.util.varReplace($,y,R)+" ":t+=" var "+y+" = "+R+"; "+$+" ",t+=" } ",l&&(t+=" if ("+p+") { ",f+="}")}if("object"==typeof P&&(e.opts.strictKeywords?"object"==typeof P&&0 "+o.length+") { for (var "+m+" = "+o.length+"; "+m+" < "+c+".length; "+m+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);R=c+"["+m+"]";d.dataPathArr[v]=m;$=e.validate(d);d.baseId=g,e.util.varOccurences($,y)<2?t+=" "+e.util.varReplace($,y,R)+" ":t+=" var "+y+" = "+R+"; "+$+" ",l&&(t+=" if (!"+p+") break; "),t+=" } } ",l&&(t+=" if ("+p+") { ",f+="}")}}else if(e.opts.strictKeywords?"object"==typeof o&&0 1e-"+e.opts.multipleOfPrecision+" ":" division"+s+" !== parseInt(division"+s+") ",a+=" ) ",h&&(a+=" ) ");var d=d||[];d.push(a+=" ) { "),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { multipleOf: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=h?"' + "+t:t+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var f=a;return a=d.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],30:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e);h.level++;var d="valid"+h.level;if(e.opts.strictKeywords?"object"==typeof o&&0 1) { ";var f=e.schema.items&&e.schema.items.type,p=Array.isArray(f);if(!f||"object"==f||"array"==f||p&&(0<=f.indexOf("object")||0<=f.indexOf("array")))a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+u+"[i], "+u+"[j])) { "+h+" = false; break outer; } } } ";else a+=" var itemIndices = {}, item; for (;i--;) { var item = "+u+"[i]; ",a+=" if ("+e.util["checkDataType"+(p?"s":"")](f,"item",!0)+") continue; ",p&&(a+=" if (typeof item == 'string') item = '\"' + item; "),a+=" if (typeof itemIndices[item] == 'number') { "+h+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ";a+=" } ",d&&(a+=" } ");var m=m||[];m.push(a+=" if (!"+h+") { "),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema: ",a+=d?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var v=a;a=m.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { ")}else c&&(a+=" if (true) { ");return a}},{}],38:[function(e,r,t){"use strict";r.exports=function(a,e){var r="",t=!0===a.schema.$async,s=a.util.schemaHasRulesExcept(a.schema,a.RULES.all,"$ref"),o=a.self._getId(a.schema);if(a.opts.strictKeywords){var i=a.util.schemaUnknownRules(a.schema,a.RULES.keywords);if(i){var n="unknown keyword: "+i;if("log"!==a.opts.strictKeywords)throw new Error(n);a.logger.warn(n)}}if(a.isTop&&(r+=" var validate = ",t&&(a.async=!0,r+="async "),r+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",o&&(a.opts.sourceCode||a.opts.processCode)&&(r+=" /*# sourceURL="+o+" */ ")),"boolean"==typeof a.schema||!s&&!a.schema.$ref){var l=a.level,c=a.dataLevel,u=a.schema[e="false schema"],h=a.schemaPath+a.util.getProperty(e),d=a.errSchemaPath+"/"+e,f=!a.opts.allErrors,p="data"+(c||""),m="valid"+l;if(!1===a.schema){a.isTop?f=!0:r+=" var "+m+" = false; ",(Z=Z||[]).push(r),r="",!1!==a.createErrors?(r+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: {} ",!1!==a.opts.messages&&(r+=" , message: 'boolean schema is false' "),a.opts.verbose&&(r+=" , schema: false , parentSchema: validate.schema"+a.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var v=r;r=Z.pop(),r+=!a.compositeRule&&f?a.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else r+=a.isTop?t?" return data; ":" validate.errors = null; return true; ":" var "+m+" = true; ";return a.isTop&&(r+=" }; return validate; "),r}if(a.isTop){var y=a.isTop;l=a.level=0,c=a.dataLevel=0,p="data";if(a.rootId=a.resolve.fullPath(a.self._getId(a.root.schema)),a.baseId=a.baseId||a.rootId,delete a.isTop,a.dataPathArr=[void 0],void 0!==a.schema.default&&a.opts.useDefaults&&a.opts.strictDefaults){var g="default is ignored in the schema root";if("log"!==a.opts.strictDefaults)throw new Error(g);a.logger.warn(g)}r+=" var vErrors = null; ",r+=" var errors = 0; ",r+=" if (rootData === undefined) rootData = data; "}else{l=a.level,p="data"+((c=a.dataLevel)||"");if(o&&(a.baseId=a.resolve.url(a.baseId,o)),t&&!a.async)throw new Error("async schema in sync schema");r+=" var errs_"+l+" = errors;"}m="valid"+l,f=!a.opts.allErrors;var P="",E="",w=a.schema.type,b=Array.isArray(w);if(w&&a.opts.nullable&&!0===a.schema.nullable&&(b?-1==w.indexOf("null")&&(w=w.concat("null")):"null"!=w&&(w=[w,"null"],b=!0)),b&&1==w.length&&(w=w[0],b=!1),a.schema.$ref&&s){if("fail"==a.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+a.errSchemaPath+'" (see option extendRefs)');!0!==a.opts.extendRefs&&(s=!1,a.logger.warn('$ref: keywords ignored in schema at path "'+a.errSchemaPath+'"'))}if(a.schema.$comment&&a.opts.$comment&&(r+=" "+a.RULES.all.$comment.code(a,"$comment")),w){if(a.opts.coerceTypes)var S=a.util.coerceToTypes(a.opts.coerceTypes,w);var _=a.RULES.types[w];if(S||b||!0===_||_&&!G(_)){h=a.schemaPath+".type",d=a.errSchemaPath+"/type",h=a.schemaPath+".type",d=a.errSchemaPath+"/type";if(r+=" if ("+a.util[b?"checkDataTypes":"checkDataType"](w,p,!0)+") { ",S){var F="dataType"+l,x="coerced"+l;r+=" var "+F+" = typeof "+p+"; ","array"==a.opts.coerceTypes&&(r+=" if ("+F+" == 'object' && Array.isArray("+p+")) "+F+" = 'array'; "),r+=" var "+x+" = undefined; ";var R="",$=S;if($)for(var D,j=-1,O=$.length-1;j= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=Math.floor,k=String.fromCharCode;function L(e){throw new RangeError(i[e])}function n(e,r){var t=e.split("@"),a="";return 1>1,e+=C(e/r);455C((A-s)/h))&&L("overflow"),s+=f*h;var p=d<=i?1:i+26<=d?26:d-i;if(fC(A/m)&&L("overflow"),h*=m}var v=t.length+1;i=q(s-u,v,0==u),C(s/v)>A-o&&L("overflow"),o+=C(s/v),s%=v,t.splice(s++,0,o)}return String.fromCodePoint.apply(String,t)}function c(e){var r=[],t=(e=z(e)).length,a=128,s=0,o=72,i=!0,n=!1,l=void 0;try{for(var c,u=e[Symbol.iterator]();!(i=(c=u.next()).done);i=!0){var h=c.value;h<128&&r.push(k(h))}}catch(e){n=!0,l=e}finally{try{!i&&u.return&&u.return()}finally{if(n)throw l}}var d=r.length,f=d;for(d&&r.push("-");fC((A-s)/w)&&L("overflow"),s+=(p-a)*w,a=p;var b=!0,S=!1,_=void 0;try{for(var F,x=e[Symbol.iterator]();!(b=(F=x.next()).done);b=!0){var R=F.value;if(RA&&L("overflow"),R==a){for(var $=s,D=36;;D+=36){var j=D<=o?1:o+26<=D?26:D-o;if($>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function f(e){for(var r="",t=0,a=e.length;tA-Z\\x5E-\\x7E]",'[\\"\\\\]')),M=new RegExp(V,"g"),B=new RegExp("(?:(?:%[EFef][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[89A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[0-9A-Fa-f][0-9A-Fa-f]))","g"),G=new RegExp(J("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',K),"g"),Y=new RegExp(J("[^]",V,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),W=Y;function X(e){var r=f(e);return r.match(M)?r:e}var ee={scheme:"mailto",parse:function(e,r){var t=e,a=t.to=t.path?t.path.split(","):[];if(t.path=void 0,t.query){for(var s=!1,o={},i=t.query.split("&"),n=0,l=i.length;n); + + message: string; + errors: Array; + ajv: true; + validation: true; + } + + class MissingRefError extends Error { + constructor(baseId: string, ref: string, message?: string); + static message: (baseId: string, ref: string) => string; + + message: string; + missingRef: string; + missingSchema: string; + } +} + +declare namespace ajv { + type ValidationError = AjvErrors.ValidationError; + + type MissingRefError = AjvErrors.MissingRefError; + + interface Ajv { + /** + * Validate data using schema + * Schema will be compiled and cached (using serialized JSON as key, [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize by default). + * @param {string|object|Boolean} schemaKeyRef key, ref or schema object + * @param {Any} data to be validated + * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). + */ + validate(schemaKeyRef: object | string | boolean, data: any): boolean | PromiseLike; + /** + * Create validating function for passed schema. + * @param {object|Boolean} schema schema object + * @return {Function} validating function + */ + compile(schema: object | boolean): ValidateFunction; + /** + * Creates validating function for passed schema with asynchronous loading of missing schemas. + * `loadSchema` option should be a function that accepts schema uri and node-style callback. + * @this Ajv + * @param {object|Boolean} schema schema object + * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped + * @param {Function} callback optional node-style callback, it is always called with 2 parameters: error (or null) and validating function. + * @return {PromiseLike} validating function + */ + compileAsync(schema: object | boolean, meta?: Boolean, callback?: (err: Error, validate: ValidateFunction) => any): PromiseLike; + /** + * Adds schema to the instance. + * @param {object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {string} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + * @return {Ajv} this for method chaining + */ + addSchema(schema: Array | object, key?: string): Ajv; + /** + * Add schema that will be used to validate other schemas + * options in META_IGNORE_OPTIONS are alway set to false + * @param {object} schema schema object + * @param {string} key optional schema key + * @return {Ajv} this for method chaining + */ + addMetaSchema(schema: object, key?: string): Ajv; + /** + * Validate schema + * @param {object|Boolean} schema schema to validate + * @return {Boolean} true if schema is valid + */ + validateSchema(schema: object | boolean): boolean; + /** + * Get compiled schema from the instance by `key` or `ref`. + * @param {string} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). + * @return {Function} schema validating function (with property `schema`). + */ + getSchema(keyRef: string): ValidateFunction; + /** + * Remove cached schema(s). + * If no parameter is passed all schemas but meta-schemas are removed. + * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. + * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. + * @param {string|object|RegExp|Boolean} schemaKeyRef key, ref, pattern to match key/ref or schema object + * @return {Ajv} this for method chaining + */ + removeSchema(schemaKeyRef?: object | string | RegExp | boolean): Ajv; + /** + * Add custom format + * @param {string} name format name + * @param {string|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) + * @return {Ajv} this for method chaining + */ + addFormat(name: string, format: FormatValidator | FormatDefinition): Ajv; + /** + * Define custom keyword + * @this Ajv + * @param {string} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords. + * @param {object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + * @return {Ajv} this for method chaining + */ + addKeyword(keyword: string, definition: KeywordDefinition): Ajv; + /** + * Get keyword definition + * @this Ajv + * @param {string} keyword pre-defined or custom keyword. + * @return {object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. + */ + getKeyword(keyword: string): object | boolean; + /** + * Remove keyword + * @this Ajv + * @param {string} keyword pre-defined or custom keyword. + * @return {Ajv} this for method chaining + */ + removeKeyword(keyword: string): Ajv; + /** + * Validate keyword + * @this Ajv + * @param {object} definition keyword definition object + * @param {boolean} throwError true to throw exception if definition is invalid + * @return {boolean} validation result + */ + validateKeyword(definition: KeywordDefinition, throwError: boolean): boolean; + /** + * Convert array of error message objects to string + * @param {Array} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {object} options optional options with properties `separator` and `dataVar`. + * @return {string} human readable string with all errors descriptions + */ + errorsText(errors?: Array | null, options?: ErrorsTextOptions): string; + errors?: Array | null; + } + + interface CustomLogger { + log(...args: any[]): any; + warn(...args: any[]): any; + error(...args: any[]): any; + } + + interface ValidateFunction { + ( + data: any, + dataPath?: string, + parentData?: object | Array, + parentDataProperty?: string | number, + rootData?: object | Array + ): boolean | PromiseLike; + schema?: object | boolean; + errors?: null | Array; + refs?: object; + refVal?: Array; + root?: ValidateFunction | object; + $async?: true; + source?: object; + } + + interface Options { + $data?: boolean; + allErrors?: boolean; + verbose?: boolean; + jsonPointers?: boolean; + uniqueItems?: boolean; + unicode?: boolean; + format?: string; + formats?: object; + unknownFormats?: true | string[] | 'ignore'; + schemas?: Array | object; + schemaId?: '$id' | 'id' | 'auto'; + missingRefs?: true | 'ignore' | 'fail'; + extendRefs?: true | 'ignore' | 'fail'; + loadSchema?: (uri: string, cb?: (err: Error, schema: object) => void) => PromiseLike; + removeAdditional?: boolean | 'all' | 'failing'; + useDefaults?: boolean | 'empty' | 'shared'; + coerceTypes?: boolean | 'array'; + strictDefaults?: boolean | 'log'; + strictKeywords?: boolean | 'log'; + async?: boolean | string; + transpile?: string | ((code: string) => string); + meta?: boolean | object; + validateSchema?: boolean | 'log'; + addUsedSchema?: boolean; + inlineRefs?: boolean | number; + passContext?: boolean; + loopRequired?: number; + ownProperties?: boolean; + multipleOfPrecision?: boolean | number; + errorDataPath?: string, + messages?: boolean; + sourceCode?: boolean; + processCode?: (code: string) => string; + cache?: object; + logger?: CustomLogger | false; + nullable?: boolean; + serialize?: ((schema: object | boolean) => any) | false; + } + + type FormatValidator = string | RegExp | ((data: string) => boolean | PromiseLike); + type NumberFormatValidator = ((data: number) => boolean | PromiseLike); + + interface NumberFormatDefinition { + type: "number", + validate: NumberFormatValidator; + compare?: (data1: number, data2: number) => number; + async?: boolean; + } + + interface StringFormatDefinition { + type?: "string", + validate: FormatValidator; + compare?: (data1: string, data2: string) => number; + async?: boolean; + } + + type FormatDefinition = NumberFormatDefinition | StringFormatDefinition; + + interface KeywordDefinition { + type?: string | Array; + async?: boolean; + $data?: boolean; + errors?: boolean | string; + metaSchema?: object; + // schema: false makes validate not to expect schema (ValidateFunction) + schema?: boolean; + statements?: boolean; + dependencies?: Array; + modifying?: boolean; + valid?: boolean; + // one and only one of the following properties should be present + validate?: SchemaValidateFunction | ValidateFunction; + compile?: (schema: any, parentSchema: object, it: CompilationContext) => ValidateFunction; + macro?: (schema: any, parentSchema: object, it: CompilationContext) => object | boolean; + inline?: (it: CompilationContext, keyword: string, schema: any, parentSchema: object) => string; + } + + interface CompilationContext { + level: number; + dataLevel: number; + dataPathArr: string[]; + schema: any; + schemaPath: string; + baseId: string; + async: boolean; + opts: Options; + formats: { + [index: string]: FormatDefinition | undefined; + }; + compositeRule: boolean; + validate: (schema: object) => boolean; + util: { + copy(obj: any, target?: any): any; + toHash(source: string[]): { [index: string]: true | undefined }; + equal(obj: any, target: any): boolean; + getProperty(str: string): string; + schemaHasRules(schema: object, rules: any): string; + escapeQuotes(str: string): string; + toQuotedString(str: string): string; + getData(jsonPointer: string, dataLevel: number, paths: string[]): string; + escapeJsonPointer(str: string): string; + unescapeJsonPointer(str: string): string; + escapeFragment(str: string): string; + unescapeFragment(str: string): string; + }; + self: Ajv; + } + + interface SchemaValidateFunction { + ( + schema: any, + data: any, + parentSchema?: object, + dataPath?: string, + parentData?: object | Array, + parentDataProperty?: string | number, + rootData?: object | Array + ): boolean | PromiseLike; + errors?: Array; + } + + interface ErrorsTextOptions { + separator?: string; + dataVar?: string; + } + + interface ErrorObject { + keyword: string; + dataPath: string; + schemaPath: string; + params: ErrorParameters; + // Added to validation errors of propertyNames keyword schema + propertyName?: string; + // Excluded if messages set to false. + message?: string; + // These are added with the `verbose` option. + schema?: any; + parentSchema?: object; + data?: any; + } + + type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | + DependenciesParams | FormatParams | ComparisonParams | + MultipleOfParams | PatternParams | RequiredParams | + TypeParams | UniqueItemsParams | CustomParams | + PatternRequiredParams | PropertyNamesParams | + IfParams | SwitchParams | NoParams | EnumParams; + + interface RefParams { + ref: string; + } + + interface LimitParams { + limit: number; + } + + interface AdditionalPropertiesParams { + additionalProperty: string; + } + + interface DependenciesParams { + property: string; + missingProperty: string; + depsCount: number; + deps: string; + } + + interface FormatParams { + format: string + } + + interface ComparisonParams { + comparison: string; + limit: number | string; + exclusive: boolean; + } + + interface MultipleOfParams { + multipleOf: number; + } + + interface PatternParams { + pattern: string; + } + + interface RequiredParams { + missingProperty: string; + } + + interface TypeParams { + type: string; + } + + interface UniqueItemsParams { + i: number; + j: number; + } + + interface CustomParams { + keyword: string; + } + + interface PatternRequiredParams { + missingPattern: string; + } + + interface PropertyNamesParams { + propertyName: string; + } + + interface IfParams { + failingKeyword: string; + } + + interface SwitchParams { + caseIndex: number; + } + + interface NoParams { } + + interface EnumParams { + allowedValues: Array; + } +} + +export = ajv; diff --git a/node_modules/ajv/lib/ajv.js b/node_modules/ajv/lib/ajv.js new file mode 100644 index 0000000..611b938 --- /dev/null +++ b/node_modules/ajv/lib/ajv.js @@ -0,0 +1,497 @@ +'use strict'; + +var compileSchema = require('./compile') + , resolve = require('./compile/resolve') + , Cache = require('./cache') + , SchemaObject = require('./compile/schema_obj') + , stableStringify = require('fast-json-stable-stringify') + , formats = require('./compile/formats') + , rules = require('./compile/rules') + , $dataMetaSchema = require('./data') + , util = require('./compile/util'); + +module.exports = Ajv; + +Ajv.prototype.validate = validate; +Ajv.prototype.compile = compile; +Ajv.prototype.addSchema = addSchema; +Ajv.prototype.addMetaSchema = addMetaSchema; +Ajv.prototype.validateSchema = validateSchema; +Ajv.prototype.getSchema = getSchema; +Ajv.prototype.removeSchema = removeSchema; +Ajv.prototype.addFormat = addFormat; +Ajv.prototype.errorsText = errorsText; + +Ajv.prototype._addSchema = _addSchema; +Ajv.prototype._compile = _compile; + +Ajv.prototype.compileAsync = require('./compile/async'); +var customKeyword = require('./keyword'); +Ajv.prototype.addKeyword = customKeyword.add; +Ajv.prototype.getKeyword = customKeyword.get; +Ajv.prototype.removeKeyword = customKeyword.remove; +Ajv.prototype.validateKeyword = customKeyword.validate; + +var errorClasses = require('./compile/error_classes'); +Ajv.ValidationError = errorClasses.Validation; +Ajv.MissingRefError = errorClasses.MissingRef; +Ajv.$dataMetaSchema = $dataMetaSchema; + +var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; + +var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; +var META_SUPPORT_DATA = ['/properties']; + +/** + * Creates validator instance. + * Usage: `Ajv(opts)` + * @param {Object} opts optional options + * @return {Object} ajv instance + */ +function Ajv(opts) { + if (!(this instanceof Ajv)) return new Ajv(opts); + opts = this._opts = util.copy(opts) || {}; + setLogger(this); + this._schemas = {}; + this._refs = {}; + this._fragments = {}; + this._formats = formats(opts.format); + + this._cache = opts.cache || new Cache; + this._loadingSchemas = {}; + this._compilations = []; + this.RULES = rules(); + this._getId = chooseGetId(opts); + + opts.loopRequired = opts.loopRequired || Infinity; + if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; + if (opts.serialize === undefined) opts.serialize = stableStringify; + this._metaOpts = getMetaSchemaOptions(this); + + if (opts.formats) addInitialFormats(this); + addDefaultMetaSchema(this); + if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); + if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}}); + addInitialSchemas(this); +} + + + +/** + * Validate data using schema + * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. + * @this Ajv + * @param {String|Object} schemaKeyRef key, ref or schema object + * @param {Any} data to be validated + * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). + */ +function validate(schemaKeyRef, data) { + var v; + if (typeof schemaKeyRef == 'string') { + v = this.getSchema(schemaKeyRef); + if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); + } else { + var schemaObj = this._addSchema(schemaKeyRef); + v = schemaObj.validate || this._compile(schemaObj); + } + + var valid = v(data); + if (v.$async !== true) this.errors = v.errors; + return valid; +} + + +/** + * Create validating function for passed schema. + * @this Ajv + * @param {Object} schema schema object + * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. + * @return {Function} validating function + */ +function compile(schema, _meta) { + var schemaObj = this._addSchema(schema, undefined, _meta); + return schemaObj.validate || this._compile(schemaObj); +} + + +/** + * Adds schema to the instance. + * @this Ajv + * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. + * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. + * @return {Ajv} this for method chaining + */ +function addSchema(schema, key, _skipValidation, _meta) { + if (Array.isArray(schema)){ + for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {Object} options optional options with properties `separator` and `dataVar`. + * @return {String} human readable string with all errors descriptions + */ +function errorsText(errors, options) { + errors = errors || this.errors; + if (!errors) return 'No errors'; + options = options || {}; + var separator = options.separator === undefined ? ', ' : options.separator; + var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; + + var text = ''; + for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; +// For the source: https://gist.github.com/dperini/729294 +// For test cases: https://mathiasbynens.be/demo/url-regex +// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. +// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; +var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; +var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; +var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; +var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; +var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; + + +module.exports = formats; + +function formats(mode) { + mode = mode == 'full' ? 'full' : 'fast'; + return util.copy(formats[mode]); +} + + +formats.fast = { + // date: http://tools.ietf.org/html/rfc3339#section-5.6 + date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, + // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 + time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, + 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, + // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js + uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, + 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, + 'uri-template': URITEMPLATE, + url: URL, + // email (sources from jsen validator): + // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 + // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') + email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, + hostname: HOSTNAME, + // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html + ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, + // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses + ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, + regex: regex, + // uuid: http://tools.ietf.org/html/rfc4122 + uuid: UUID, + // JSON-pointer: https://tools.ietf.org/html/rfc6901 + // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A + 'json-pointer': JSON_POINTER, + 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, + // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 + 'relative-json-pointer': RELATIVE_JSON_POINTER +}; + + +formats.full = { + date: date, + time: time, + 'date-time': date_time, + uri: uri, + 'uri-reference': URIREF, + 'uri-template': URITEMPLATE, + url: URL, + email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, + hostname: hostname, + ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, + ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, + regex: regex, + uuid: UUID, + 'json-pointer': JSON_POINTER, + 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, + 'relative-json-pointer': RELATIVE_JSON_POINTER +}; + + +function isLeapYear(year) { + // https://tools.ietf.org/html/rfc3339#appendix-C + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} + + +function date(str) { + // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 + var matches = str.match(DATE); + if (!matches) return false; + + var year = +matches[1]; + var month = +matches[2]; + var day = +matches[3]; + + return month >= 1 && month <= 12 && day >= 1 && + day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); +} + + +function time(str, full) { + var matches = str.match(TIME); + if (!matches) return false; + + var hour = matches[1]; + var minute = matches[2]; + var second = matches[3]; + var timeZone = matches[5]; + return ((hour <= 23 && minute <= 59 && second <= 59) || + (hour == 23 && minute == 59 && second == 60)) && + (!full || timeZone); +} + + +var DATE_TIME_SEPARATOR = /t|\s/i; +function date_time(str) { + // http://tools.ietf.org/html/rfc3339#section-5.6 + var dateTime = str.split(DATE_TIME_SEPARATOR); + return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); +} + + +function hostname(str) { + // https://tools.ietf.org/html/rfc1034#section-3.5 + // https://tools.ietf.org/html/rfc1123#section-2 + return str.length <= 255 && HOSTNAME.test(str); +} + + +var NOT_URI_FRAGMENT = /\/|:/; +function uri(str) { + // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." + return NOT_URI_FRAGMENT.test(str) && URI.test(str); +} + + +var Z_ANCHOR = /[^\\]\\Z/; +function regex(str) { + if (Z_ANCHOR.test(str)) return false; + try { + new RegExp(str); + return true; + } catch(e) { + return false; + } +} diff --git a/node_modules/ajv/lib/compile/index.js b/node_modules/ajv/lib/compile/index.js new file mode 100644 index 0000000..f4d3f0d --- /dev/null +++ b/node_modules/ajv/lib/compile/index.js @@ -0,0 +1,387 @@ +'use strict'; + +var resolve = require('./resolve') + , util = require('./util') + , errorClasses = require('./error_classes') + , stableStringify = require('fast-json-stable-stringify'); + +var validateGenerator = require('../dotjs/validate'); + +/** + * Functions below are used inside compiled validations function + */ + +var ucs2length = util.ucs2length; +var equal = require('fast-deep-equal'); + +// this error is thrown by async schemas to return validation errors via exception +var ValidationError = errorClasses.Validation; + +module.exports = compile; + + +/** + * Compiles schema to validation function + * @this Ajv + * @param {Object} schema schema object + * @param {Object} root object with information about the root schema for this schema + * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution + * @param {String} baseId base ID for IDs in the schema + * @return {Function} validation function + */ +function compile(schema, root, localRefs, baseId) { + /* jshint validthis: true, evil: true */ + /* eslint no-shadow: 0 */ + var self = this + , opts = this._opts + , refVal = [ undefined ] + , refs = {} + , patterns = [] + , patternsHash = {} + , defaults = [] + , defaultsHash = {} + , customRules = []; + + root = root || { schema: schema, refVal: refVal, refs: refs }; + + var c = checkCompiling.call(this, schema, root, baseId); + var compilation = this._compilations[c.index]; + if (c.compiling) return (compilation.callValidate = callValidate); + + var formats = this._formats; + var RULES = this.RULES; + + try { + var v = localCompile(schema, root, localRefs, baseId); + compilation.validate = v; + var cv = compilation.callValidate; + if (cv) { + cv.schema = v.schema; + cv.errors = null; + cv.refs = v.refs; + cv.refVal = v.refVal; + cv.root = v.root; + cv.$async = v.$async; + if (opts.sourceCode) cv.source = v.source; + } + return v; + } finally { + endCompiling.call(this, schema, root, baseId); + } + + /* @this {*} - custom context, see passContext option */ + function callValidate() { + /* jshint validthis: true */ + var validate = compilation.validate; + var result = validate.apply(this, arguments); + callValidate.errors = validate.errors; + return result; + } + + function localCompile(_schema, _root, localRefs, baseId) { + var isRoot = !_root || (_root && _root.schema == _schema); + if (_root.schema != root.schema) + return compile.call(self, _schema, _root, localRefs, baseId); + + var $async = _schema.$async === true; + + var sourceCode = validateGenerator({ + isTop: true, + schema: _schema, + isRoot: isRoot, + baseId: baseId, + root: _root, + schemaPath: '', + errSchemaPath: '#', + errorPath: '""', + MissingRefError: errorClasses.MissingRef, + RULES: RULES, + validate: validateGenerator, + util: util, + resolve: resolve, + resolveRef: resolveRef, + usePattern: usePattern, + useDefault: useDefault, + useCustomRule: useCustomRule, + opts: opts, + formats: formats, + logger: self.logger, + self: self + }); + + sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) + + vars(defaults, defaultCode) + vars(customRules, customRuleCode) + + sourceCode; + + if (opts.processCode) sourceCode = opts.processCode(sourceCode); + // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); + var validate; + try { + var makeValidate = new Function( + 'self', + 'RULES', + 'formats', + 'root', + 'refVal', + 'defaults', + 'customRules', + 'equal', + 'ucs2length', + 'ValidationError', + sourceCode + ); + + validate = makeValidate( + self, + RULES, + formats, + root, + refVal, + defaults, + customRules, + equal, + ucs2length, + ValidationError + ); + + refVal[0] = validate; + } catch(e) { + self.logger.error('Error compiling schema, function code:', sourceCode); + throw e; + } + + validate.schema = _schema; + validate.errors = null; + validate.refs = refs; + validate.refVal = refVal; + validate.root = isRoot ? validate : _root; + if ($async) validate.$async = true; + if (opts.sourceCode === true) { + validate.source = { + code: sourceCode, + patterns: patterns, + defaults: defaults + }; + } + + return validate; + } + + function resolveRef(baseId, ref, isRoot) { + ref = resolve.url(baseId, ref); + var refIndex = refs[ref]; + var _refVal, refCode; + if (refIndex !== undefined) { + _refVal = refVal[refIndex]; + refCode = 'refVal[' + refIndex + ']'; + return resolvedRef(_refVal, refCode); + } + if (!isRoot && root.refs) { + var rootRefId = root.refs[ref]; + if (rootRefId !== undefined) { + _refVal = root.refVal[rootRefId]; + refCode = addLocalRef(ref, _refVal); + return resolvedRef(_refVal, refCode); + } + } + + refCode = addLocalRef(ref); + var v = resolve.call(self, localCompile, root, ref); + if (v === undefined) { + var localSchema = localRefs && localRefs[ref]; + if (localSchema) { + v = resolve.inlineRef(localSchema, opts.inlineRefs) + ? localSchema + : compile.call(self, localSchema, root, localRefs, baseId); + } + } + + if (v === undefined) { + removeLocalRef(ref); + } else { + replaceLocalRef(ref, v); + return resolvedRef(v, refCode); + } + } + + function addLocalRef(ref, v) { + var refId = refVal.length; + refVal[refId] = v; + refs[ref] = refId; + return 'refVal' + refId; + } + + function removeLocalRef(ref) { + delete refs[ref]; + } + + function replaceLocalRef(ref, v) { + var refId = refs[ref]; + refVal[refId] = v; + } + + function resolvedRef(refVal, code) { + return typeof refVal == 'object' || typeof refVal == 'boolean' + ? { code: code, schema: refVal, inline: true } + : { code: code, $async: refVal && !!refVal.$async }; + } + + function usePattern(regexStr) { + var index = patternsHash[regexStr]; + if (index === undefined) { + index = patternsHash[regexStr] = patterns.length; + patterns[index] = regexStr; + } + return 'pattern' + index; + } + + function useDefault(value) { + switch (typeof value) { + case 'boolean': + case 'number': + return '' + value; + case 'string': + return util.toQuotedString(value); + case 'object': + if (value === null) return 'null'; + var valueStr = stableStringify(value); + var index = defaultsHash[valueStr]; + if (index === undefined) { + index = defaultsHash[valueStr] = defaults.length; + defaults[index] = value; + } + return 'default' + index; + } + } + + function useCustomRule(rule, schema, parentSchema, it) { + if (self._opts.validateSchema !== false) { + var deps = rule.definition.dependencies; + if (deps && !deps.every(function(keyword) { + return Object.prototype.hasOwnProperty.call(parentSchema, keyword); + })) + throw new Error('parent schema must have all required keywords: ' + deps.join(',')); + + var validateSchema = rule.definition.validateSchema; + if (validateSchema) { + var valid = validateSchema(schema); + if (!valid) { + var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); + if (self._opts.validateSchema == 'log') self.logger.error(message); + else throw new Error(message); + } + } + } + + var compile = rule.definition.compile + , inline = rule.definition.inline + , macro = rule.definition.macro; + + var validate; + if (compile) { + validate = compile.call(self, schema, parentSchema, it); + } else if (macro) { + validate = macro.call(self, schema, parentSchema, it); + if (opts.validateSchema !== false) self.validateSchema(validate, true); + } else if (inline) { + validate = inline.call(self, it, rule.keyword, schema, parentSchema); + } else { + validate = rule.definition.validate; + if (!validate) return; + } + + if (validate === undefined) + throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); + + var index = customRules.length; + customRules[index] = validate; + + return { + code: 'customRule' + index, + validate: validate + }; + } +} + + +/** + * Checks if the schema is currently compiled + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) + */ +function checkCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var index = compIndex.call(this, schema, root, baseId); + if (index >= 0) return { index: index, compiling: true }; + index = this._compilations.length; + this._compilations[index] = { + schema: schema, + root: root, + baseId: baseId + }; + return { index: index, compiling: false }; +} + + +/** + * Removes the schema from the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + */ +function endCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var i = compIndex.call(this, schema, root, baseId); + if (i >= 0) this._compilations.splice(i, 1); +} + + +/** + * Index of schema compilation in the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Integer} compilation index + */ +function compIndex(schema, root, baseId) { + /* jshint validthis: true */ + for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { + // high surrogate, and there is a next character + value = str.charCodeAt(pos); + if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate + } + } + return length; +}; diff --git a/node_modules/ajv/lib/compile/util.js b/node_modules/ajv/lib/compile/util.js new file mode 100644 index 0000000..0efa001 --- /dev/null +++ b/node_modules/ajv/lib/compile/util.js @@ -0,0 +1,274 @@ +'use strict'; + + +module.exports = { + copy: copy, + checkDataType: checkDataType, + checkDataTypes: checkDataTypes, + coerceToTypes: coerceToTypes, + toHash: toHash, + getProperty: getProperty, + escapeQuotes: escapeQuotes, + equal: require('fast-deep-equal'), + ucs2length: require('./ucs2length'), + varOccurences: varOccurences, + varReplace: varReplace, + cleanUpCode: cleanUpCode, + finalCleanUpCode: finalCleanUpCode, + schemaHasRules: schemaHasRules, + schemaHasRulesExcept: schemaHasRulesExcept, + schemaUnknownRules: schemaUnknownRules, + toQuotedString: toQuotedString, + getPathExpr: getPathExpr, + getPath: getPath, + getData: getData, + unescapeFragment: unescapeFragment, + unescapeJsonPointer: unescapeJsonPointer, + escapeFragment: escapeFragment, + escapeJsonPointer: escapeJsonPointer +}; + + +function copy(o, to) { + to = to || {}; + for (var key in o) to[key] = o[key]; + return to; +} + + +function checkDataType(dataType, data, negate) { + var EQUAL = negate ? ' !== ' : ' === ' + , AND = negate ? ' || ' : ' && ' + , OK = negate ? '!' : '' + , NOT = negate ? '' : '!'; + switch (dataType) { + case 'null': return data + EQUAL + 'null'; + case 'array': return OK + 'Array.isArray(' + data + ')'; + case 'object': return '(' + OK + data + AND + + 'typeof ' + data + EQUAL + '"object"' + AND + + NOT + 'Array.isArray(' + data + '))'; + case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + + NOT + '(' + data + ' % 1)' + + AND + data + EQUAL + data + ')'; + default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; + } +} + + +function checkDataTypes(dataTypes, data) { + switch (dataTypes.length) { + case 1: return checkDataType(dataTypes[0], data, true); + default: + var code = ''; + var types = toHash(dataTypes); + if (types.array && types.object) { + code = types.null ? '(': '(!' + data + ' || '; + code += 'typeof ' + data + ' !== "object")'; + delete types.null; + delete types.array; + delete types.object; + } + if (types.number) delete types.integer; + for (var t in types) + code += (code ? ' && ' : '' ) + checkDataType(t, data, true); + + return code; + } +} + + +var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); +function coerceToTypes(optionCoerceTypes, dataTypes) { + if (Array.isArray(dataTypes)) { + var types = []; + for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); + return paths[lvl - up]; + } + + if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); + data = 'data' + ((lvl - up) || ''); + if (!jsonPointer) return data; + } + + var expr = data; + var segments = jsonPointer.split('/'); + for (var i=0; i' + , $notOp = $isMax ? '>' : '<' + , $errorKeyword = undefined; +}} + +{{? $isDataExcl }} + {{ + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) + , $exclusive = 'exclusive' + $lvl + , $exclType = 'exclType' + $lvl + , $exclIsNumber = 'exclIsNumber' + $lvl + , $opExpr = 'op' + $lvl + , $opStr = '\' + ' + $opExpr + ' + \''; + }} + var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; + {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} + + var {{=$exclusive}}; + var {{=$exclType}} = typeof {{=$schemaValueExcl}}; + if ({{=$exclType}} != 'boolean' && {{=$exclType}} != 'undefined' && {{=$exclType}} != 'number') { + {{ var $errorKeyword = $exclusiveKeyword; }} + {{# def.error:'_exclusiveLimit' }} + } else if ({{# def.$dataNotType:'number' }} + {{=$exclType}} == 'number' + ? ( + ({{=$exclusive}} = {{=$schemaValue}} === undefined || {{=$schemaValueExcl}} {{=$op}}= {{=$schemaValue}}) + ? {{=$data}} {{=$notOp}}= {{=$schemaValueExcl}} + : {{=$data}} {{=$notOp}} {{=$schemaValue}} + ) + : ( + ({{=$exclusive}} = {{=$schemaValueExcl}} === true) + ? {{=$data}} {{=$notOp}}= {{=$schemaValue}} + : {{=$data}} {{=$notOp}} {{=$schemaValue}} + ) + || {{=$data}} !== {{=$data}}) { + var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; + {{ + if ($schema === undefined) { + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $schemaValue = $schemaValueExcl; + $isData = $isDataExcl; + } + }} +{{??}} + {{ + var $exclIsNumber = typeof $schemaExcl == 'number' + , $opStr = $op; /*used in error*/ + }} + + {{? $exclIsNumber && $isData }} + {{ var $opExpr = '\'' + $opStr + '\''; /*used in error*/ }} + if ({{# def.$dataNotType:'number' }} + ( {{=$schemaValue}} === undefined + || {{=$schemaExcl}} {{=$op}}= {{=$schemaValue}} + ? {{=$data}} {{=$notOp}}= {{=$schemaExcl}} + : {{=$data}} {{=$notOp}} {{=$schemaValue}} ) + || {{=$data}} !== {{=$data}}) { + {{??}} + {{ + if ($exclIsNumber && $schema === undefined) { + {{# def.setExclusiveLimit }} + $schemaValue = $schemaExcl; + $notOp += '='; + } else { + if ($exclIsNumber) + $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); + + if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { + {{# def.setExclusiveLimit }} + $notOp += '='; + } else { + $exclusive = false; + $opStr += '='; + } + } + + var $opExpr = '\'' + $opStr + '\''; /*used in error*/ + }} + + if ({{# def.$dataNotType:'number' }} + {{=$data}} {{=$notOp}} {{=$schemaValue}} + || {{=$data}} !== {{=$data}}) { + {{?}} +{{?}} + {{ $errorKeyword = $errorKeyword || $keyword; }} + {{# def.error:'_limit' }} + } {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitItems.jst b/node_modules/ajv/lib/dot/_limitItems.jst new file mode 100644 index 0000000..a3e078e --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitItems.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxItems' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} {{=$data}}.length {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitItems' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitLength.jst b/node_modules/ajv/lib/dot/_limitLength.jst new file mode 100644 index 0000000..cfc8dbb --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitLength.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxLength' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} {{# def.strLength }} {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitLength' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitProperties.jst b/node_modules/ajv/lib/dot/_limitProperties.jst new file mode 100644 index 0000000..da7ea77 --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitProperties.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxProperties' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} Object.keys({{=$data}}).length {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitProperties' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/allOf.jst b/node_modules/ajv/lib/dot/allOf.jst new file mode 100644 index 0000000..4c28363 --- /dev/null +++ b/node_modules/ajv/lib/dot/allOf.jst @@ -0,0 +1,34 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{ + var $currentBaseId = $it.baseId + , $allSchemasEmpty = true; +}} + +{{~ $schema:$sch:$i }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{ + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + + {{# def.ifResultValid }} + {{?}} +{{~}} + +{{? $breakOnError }} + {{? $allSchemasEmpty }} + if (true) { + {{??}} + {{= $closingBraces.slice(0,-1) }} + {{?}} +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/anyOf.jst b/node_modules/ajv/lib/dot/anyOf.jst new file mode 100644 index 0000000..086cf2b --- /dev/null +++ b/node_modules/ajv/lib/dot/anyOf.jst @@ -0,0 +1,48 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{ + var $noEmptySchema = $schema.every(function($sch) { + return {{# def.nonEmptySchema:$sch }}; + }); +}} +{{? $noEmptySchema }} + {{ var $currentBaseId = $it.baseId; }} + var {{=$errs}} = errors; + var {{=$valid}} = false; + + {{# def.setCompositeRule }} + + {{~ $schema:$sch:$i }} + {{ + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + + {{=$valid}} = {{=$valid}} || {{=$nextValid}}; + + if (!{{=$valid}}) { + {{ $closingBraces += '}'; }} + {{~}} + + {{# def.resetCompositeRule }} + + {{= $closingBraces }} + + if (!{{=$valid}}) { + {{# def.extraError:'anyOf' }} + } else { + {{# def.resetErrors }} + {{? it.opts.allErrors }} } {{?}} + + {{# def.cleanUp }} +{{??}} + {{? $breakOnError }} + if (true) { + {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/coerce.def b/node_modules/ajv/lib/dot/coerce.def new file mode 100644 index 0000000..86e0e18 --- /dev/null +++ b/node_modules/ajv/lib/dot/coerce.def @@ -0,0 +1,61 @@ +{{## def.coerceType: + {{ + var $dataType = 'dataType' + $lvl + , $coerced = 'coerced' + $lvl; + }} + var {{=$dataType}} = typeof {{=$data}}; + {{? it.opts.coerceTypes == 'array'}} + if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array'; + {{?}} + + var {{=$coerced}} = undefined; + + {{ var $bracesCoercion = ''; }} + {{~ $coerceToTypes:$type:$i }} + {{? $i }} + if ({{=$coerced}} === undefined) { + {{ $bracesCoercion += '}'; }} + {{?}} + + {{? it.opts.coerceTypes == 'array' && $type != 'array' }} + if ({{=$dataType}} == 'array' && {{=$data}}.length == 1) { + {{=$coerced}} = {{=$data}} = {{=$data}}[0]; + {{=$dataType}} = typeof {{=$data}}; + /*if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array';*/ + } + {{?}} + + {{? $type == 'string' }} + if ({{=$dataType}} == 'number' || {{=$dataType}} == 'boolean') + {{=$coerced}} = '' + {{=$data}}; + else if ({{=$data}} === null) {{=$coerced}} = ''; + {{?? $type == 'number' || $type == 'integer' }} + if ({{=$dataType}} == 'boolean' || {{=$data}} === null + || ({{=$dataType}} == 'string' && {{=$data}} && {{=$data}} == +{{=$data}} + {{? $type == 'integer' }} && !({{=$data}} % 1){{?}})) + {{=$coerced}} = +{{=$data}}; + {{?? $type == 'boolean' }} + if ({{=$data}} === 'false' || {{=$data}} === 0 || {{=$data}} === null) + {{=$coerced}} = false; + else if ({{=$data}} === 'true' || {{=$data}} === 1) + {{=$coerced}} = true; + {{?? $type == 'null' }} + if ({{=$data}} === '' || {{=$data}} === 0 || {{=$data}} === false) + {{=$coerced}} = null; + {{?? it.opts.coerceTypes == 'array' && $type == 'array' }} + if ({{=$dataType}} == 'string' || {{=$dataType}} == 'number' || {{=$dataType}} == 'boolean' || {{=$data}} == null) + {{=$coerced}} = [{{=$data}}]; + {{?}} + {{~}} + + {{= $bracesCoercion }} + + if ({{=$coerced}} === undefined) { + {{# def.error:'type' }} + } else { + {{# def.setParentData }} + {{=$data}} = {{=$coerced}}; + {{? !$dataLvl }}if ({{=$parentData}} !== undefined){{?}} + {{=$parentData}}[{{=$parentDataProperty}}] = {{=$coerced}}; + } +#}} diff --git a/node_modules/ajv/lib/dot/comment.jst b/node_modules/ajv/lib/dot/comment.jst new file mode 100644 index 0000000..f959150 --- /dev/null +++ b/node_modules/ajv/lib/dot/comment.jst @@ -0,0 +1,9 @@ +{{# def.definitions }} +{{# def.setupKeyword }} + +{{ var $comment = it.util.toQuotedString($schema); }} +{{? it.opts.$comment === true }} + console.log({{=$comment}}); +{{?? typeof it.opts.$comment == 'function' }} + self._opts.$comment({{=$comment}}, {{=it.util.toQuotedString($errSchemaPath)}}, validate.root.schema); +{{?}} diff --git a/node_modules/ajv/lib/dot/const.jst b/node_modules/ajv/lib/dot/const.jst new file mode 100644 index 0000000..2aa2298 --- /dev/null +++ b/node_modules/ajv/lib/dot/const.jst @@ -0,0 +1,11 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{? !$isData }} + var schema{{=$lvl}} = validate.schema{{=$schemaPath}}; +{{?}} +var {{=$valid}} = equal({{=$data}}, schema{{=$lvl}}); +{{# def.checkError:'const' }} +{{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/contains.jst b/node_modules/ajv/lib/dot/contains.jst new file mode 100644 index 0000000..925d2c8 --- /dev/null +++ b/node_modules/ajv/lib/dot/contains.jst @@ -0,0 +1,57 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{ + var $idx = 'i' + $lvl + , $dataNxt = $it.dataLevel = it.dataLevel + 1 + , $nextData = 'data' + $dataNxt + , $currentBaseId = it.baseId + , $nonEmptySchema = {{# def.nonEmptySchema:$schema }}; +}} + +var {{=$errs}} = errors; +var {{=$valid}}; + +{{? $nonEmptySchema }} + {{# def.setCompositeRule }} + + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + + var {{=$nextValid}} = false; + + for (var {{=$idx}} = 0; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { + {{ + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + + if ({{=$nextValid}}) break; + } + + {{# def.resetCompositeRule }} + {{= $closingBraces }} + + if (!{{=$nextValid}}) { +{{??}} + if ({{=$data}}.length == 0) { +{{?}} + + {{# def.error:'contains' }} + } else { + {{? $nonEmptySchema }} + {{# def.resetErrors }} + {{?}} + {{? it.opts.allErrors }} } {{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/custom.jst b/node_modules/ajv/lib/dot/custom.jst new file mode 100644 index 0000000..d30588f --- /dev/null +++ b/node_modules/ajv/lib/dot/custom.jst @@ -0,0 +1,191 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ + var $rule = this + , $definition = 'definition' + $lvl + , $rDef = $rule.definition + , $closingBraces = ''; + var $validate = $rDef.validate; + var $compile, $inline, $macro, $ruleValidate, $validateCode; +}} + +{{? $isData && $rDef.$data }} + {{ + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + }} + var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; + var {{=$validateCode}} = {{=$definition}}.validate; +{{??}} + {{ + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + if (!$ruleValidate) return; + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + }} +{{?}} + +{{ + var $ruleErrs = $validateCode + '.errors' + , $i = 'i' + $lvl + , $ruleErr = 'ruleErr' + $lvl + , $asyncKeyword = $rDef.async; + + if ($asyncKeyword && !it.async) + throw new Error('async keyword in sync schema'); +}} + + +{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} +var {{=$errs}} = errors; +var {{=$valid}}; + +{{## def.callRuleValidate: + {{=$validateCode}}.call( + {{? it.opts.passContext }}this{{??}}self{{?}} + {{? $compile || $rDef.schema === false }} + , {{=$data}} + {{??}} + , {{=$schemaValue}} + , {{=$data}} + , validate.schema{{=it.schemaPath}} + {{?}} + , {{# def.dataPath }} + {{# def.passParentData }} + , rootData + ) +#}} + +{{## def.extendErrors:_inline: + for (var {{=$i}}={{=$errs}}; {{=$i}} 0 + : it.util.schemaHasRules(_schema, it.RULES.all)) +#}} + + +{{## def.strLength: + {{? it.opts.unicode === false }} + {{=$data}}.length + {{??}} + ucs2length({{=$data}}) + {{?}} +#}} + + +{{## def.willOptimize: + it.util.varOccurences($code, $nextData) < 2 +#}} + + +{{## def.generateSubschemaCode: + {{ + var $code = it.validate($it); + $it.baseId = $currentBaseId; + }} +#}} + + +{{## def.insertSubschemaCode: + {{= it.validate($it) }} + {{ $it.baseId = $currentBaseId; }} +#}} + + +{{## def._optimizeValidate: + it.util.varReplace($code, $nextData, $passData) +#}} + + +{{## def.optimizeValidate: + {{? {{# def.willOptimize}} }} + {{= {{# def._optimizeValidate }} }} + {{??}} + var {{=$nextData}} = {{=$passData}}; + {{= $code }} + {{?}} +#}} + + +{{## def.cleanUp: {{ out = it.util.cleanUpCode(out); }} #}} + + +{{## def.finalCleanUp: {{ out = it.util.finalCleanUpCode(out, $async); }} #}} + + +{{## def.$data: + {{ + var $isData = it.opts.$data && $schema && $schema.$data + , $schemaValue; + }} + {{? $isData }} + var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }}; + {{ $schemaValue = 'schema' + $lvl; }} + {{??}} + {{ $schemaValue = $schema; }} + {{?}} +#}} + + +{{## def.$dataNotType:_type: + {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}} +#}} + + +{{## def.check$dataIsArray: + if (schema{{=$lvl}} === undefined) {{=$valid}} = true; + else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false; + else { +#}} + + +{{## def.beginDefOut: + {{ + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + }} +#}} + + +{{## def.storeDefOut:_variable: + {{ + var _variable = out; + out = $$outStack.pop(); + }} +#}} + + +{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}} + +{{## def.setParentData: + {{ + var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData' + , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + }} +#}} + +{{## def.passParentData: + {{# def.setParentData }} + , {{= $parentData }} + , {{= $parentDataProperty }} +#}} + + +{{## def.iterateProperties: + {{? $ownProperties }} + {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}}); + for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) { + var {{=$key}} = {{=$dataProperties}}[{{=$idx}}]; + {{??}} + for (var {{=$key}} in {{=$data}}) { + {{?}} +#}} + + +{{## def.noPropertyInData: + {{=$useData}} === undefined + {{? $ownProperties }} + || !{{# def.isOwnProperty }} + {{?}} +#}} + + +{{## def.isOwnProperty: + Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}') +#}} diff --git a/node_modules/ajv/lib/dot/dependencies.jst b/node_modules/ajv/lib/dot/dependencies.jst new file mode 100644 index 0000000..c41f334 --- /dev/null +++ b/node_modules/ajv/lib/dot/dependencies.jst @@ -0,0 +1,80 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.missing }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.propertyInData: + {{=$data}}{{= it.util.getProperty($property) }} !== undefined + {{? $ownProperties }} + && Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($property)}}') + {{?}} +#}} + + +{{ + var $schemaDeps = {} + , $propertyDeps = {} + , $ownProperties = it.opts.ownProperties; + + for ($property in $schema) { + var $sch = $schema[$property]; + var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps; + $deps[$property] = $sch; + } +}} + +var {{=$errs}} = errors; + +{{ var $currentErrorPath = it.errorPath; }} + +var missing{{=$lvl}}; +{{ for (var $property in $propertyDeps) { }} + {{ $deps = $propertyDeps[$property]; }} + {{? $deps.length }} + if ({{# def.propertyInData }} + {{? $breakOnError }} + && ({{# def.checkMissingProperty:$deps }})) { + {{# def.errorMissingProperty:'dependencies' }} + {{??}} + ) { + {{~ $deps:$propertyKey }} + {{# def.allErrorsMissingProperty:'dependencies' }} + {{~}} + {{?}} + } {{# def.elseIfValid }} + {{?}} +{{ } }} + +{{ + it.errorPath = $currentErrorPath; + var $currentBaseId = $it.baseId; +}} + + +{{ for (var $property in $schemaDeps) { }} + {{ var $sch = $schemaDeps[$property]; }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{=$nextValid}} = true; + + if ({{# def.propertyInData }}) { + {{ + $it.schema = $sch; + $it.schemaPath = $schemaPath + it.util.getProperty($property); + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); + }} + + {{# def.insertSubschemaCode }} + } + + {{# def.ifResultValid }} + {{?}} +{{ } }} + +{{? $breakOnError }} + {{= $closingBraces }} + if ({{=$errs}} == errors) { +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/enum.jst b/node_modules/ajv/lib/dot/enum.jst new file mode 100644 index 0000000..357c2e8 --- /dev/null +++ b/node_modules/ajv/lib/dot/enum.jst @@ -0,0 +1,30 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ + var $i = 'i' + $lvl + , $vSchema = 'schema' + $lvl; +}} + +{{? !$isData }} + var {{=$vSchema}} = validate.schema{{=$schemaPath}}; +{{?}} +var {{=$valid}}; + +{{?$isData}}{{# def.check$dataIsArray }}{{?}} + +{{=$valid}} = false; + +for (var {{=$i}}=0; {{=$i}}<{{=$vSchema}}.length; {{=$i}}++) + if (equal({{=$data}}, {{=$vSchema}}[{{=$i}}])) { + {{=$valid}} = true; + break; + } + +{{? $isData }} } {{?}} + +{{# def.checkError:'enum' }} + +{{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/errors.def b/node_modules/ajv/lib/dot/errors.def new file mode 100644 index 0000000..5c5752c --- /dev/null +++ b/node_modules/ajv/lib/dot/errors.def @@ -0,0 +1,194 @@ +{{# def.definitions }} + +{{## def._error:_rule: + {{ 'istanbul ignore else'; }} + {{? it.createErrors !== false }} + { + keyword: '{{= $errorKeyword || _rule }}' + , dataPath: (dataPath || '') + {{= it.errorPath }} + , schemaPath: {{=it.util.toQuotedString($errSchemaPath)}} + , params: {{# def._errorParams[_rule] }} + {{? it.opts.messages !== false }} + , message: {{# def._errorMessages[_rule] }} + {{?}} + {{? it.opts.verbose }} + , schema: {{# def._errorSchemas[_rule] }} + , parentSchema: validate.schema{{=it.schemaPath}} + , data: {{=$data}} + {{?}} + } + {{??}} + {} + {{?}} +#}} + + +{{## def._addError:_rule: + if (vErrors === null) vErrors = [err]; + else vErrors.push(err); + errors++; +#}} + + +{{## def.addError:_rule: + var err = {{# def._error:_rule }}; + {{# def._addError:_rule }} +#}} + + +{{## def.error:_rule: + {{# def.beginDefOut}} + {{# def._error:_rule }} + {{# def.storeDefOut:__err }} + + {{? !it.compositeRule && $breakOnError }} + {{ 'istanbul ignore if'; }} + {{? it.async }} + throw new ValidationError([{{=__err}}]); + {{??}} + validate.errors = [{{=__err}}]; + return false; + {{?}} + {{??}} + var err = {{=__err}}; + {{# def._addError:_rule }} + {{?}} +#}} + + +{{## def.extraError:_rule: + {{# def.addError:_rule}} + {{? !it.compositeRule && $breakOnError }} + {{ 'istanbul ignore if'; }} + {{? it.async }} + throw new ValidationError(vErrors); + {{??}} + validate.errors = vErrors; + return false; + {{?}} + {{?}} +#}} + + +{{## def.checkError:_rule: + if (!{{=$valid}}) { + {{# def.error:_rule }} + } +#}} + + +{{## def.resetErrors: + errors = {{=$errs}}; + if (vErrors !== null) { + if ({{=$errs}}) vErrors.length = {{=$errs}}; + else vErrors = null; + } +#}} + + +{{## def.concatSchema:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=$schema}}{{?}}#}} +{{## def.appendSchema:{{?$isData}}' + {{=$schemaValue}}{{??}}{{=$schemaValue}}'{{?}}#}} +{{## def.concatSchemaEQ:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=it.util.escapeQuotes($schema)}}{{?}}#}} + +{{## def._errorMessages = { + 'false schema': "'boolean schema is false'", + $ref: "'can\\\'t resolve reference {{=it.util.escapeQuotes($schema)}}'", + additionalItems: "'should NOT have more than {{=$schema.length}} items'", + additionalProperties: "'{{? it.opts._errorDataPathProperty }}is an invalid additional property{{??}}should NOT have additional properties{{?}}'", + anyOf: "'should match some schema in anyOf'", + const: "'should be equal to constant'", + contains: "'should contain a valid item'", + dependencies: "'should have {{? $deps.length == 1 }}property {{= it.util.escapeQuotes($deps[0]) }}{{??}}properties {{= it.util.escapeQuotes($deps.join(\", \")) }}{{?}} when property {{= it.util.escapeQuotes($property) }} is present'", + 'enum': "'should be equal to one of the allowed values'", + format: "'should match format \"{{#def.concatSchemaEQ}}\"'", + 'if': "'should match \"' + {{=$ifClause}} + '\" schema'", + _limit: "'should be {{=$opStr}} {{#def.appendSchema}}", + _exclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'", + _limitItems: "'should NOT have {{?$keyword=='maxItems'}}more{{??}}fewer{{?}} than {{#def.concatSchema}} items'", + _limitLength: "'should NOT be {{?$keyword=='maxLength'}}longer{{??}}shorter{{?}} than {{#def.concatSchema}} characters'", + _limitProperties:"'should NOT have {{?$keyword=='maxProperties'}}more{{??}}fewer{{?}} than {{#def.concatSchema}} properties'", + multipleOf: "'should be multiple of {{#def.appendSchema}}", + not: "'should NOT be valid'", + oneOf: "'should match exactly one schema in oneOf'", + pattern: "'should match pattern \"{{#def.concatSchemaEQ}}\"'", + propertyNames: "'property name \\'{{=$invalidName}}\\' is invalid'", + required: "'{{? it.opts._errorDataPathProperty }}is a required property{{??}}should have required property \\'{{=$missingProperty}}\\'{{?}}'", + type: "'should be {{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}'", + uniqueItems: "'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)'", + custom: "'should pass \"{{=$rule.keyword}}\" keyword validation'", + patternRequired: "'should have property matching pattern \\'{{=$missingPattern}}\\''", + switch: "'should pass \"switch\" keyword validation'", + _formatLimit: "'should be {{=$opStr}} \"{{#def.concatSchemaEQ}}\"'", + _formatExclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'" +} #}} + + +{{## def.schemaRefOrVal: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=$schema}}{{?}} #}} +{{## def.schemaRefOrQS: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} + +{{## def._errorSchemas = { + 'false schema': "false", + $ref: "{{=it.util.toQuotedString($schema)}}", + additionalItems: "false", + additionalProperties: "false", + anyOf: "validate.schema{{=$schemaPath}}", + const: "validate.schema{{=$schemaPath}}", + contains: "validate.schema{{=$schemaPath}}", + dependencies: "validate.schema{{=$schemaPath}}", + 'enum': "validate.schema{{=$schemaPath}}", + format: "{{#def.schemaRefOrQS}}", + 'if': "validate.schema{{=$schemaPath}}", + _limit: "{{#def.schemaRefOrVal}}", + _exclusiveLimit: "validate.schema{{=$schemaPath}}", + _limitItems: "{{#def.schemaRefOrVal}}", + _limitLength: "{{#def.schemaRefOrVal}}", + _limitProperties:"{{#def.schemaRefOrVal}}", + multipleOf: "{{#def.schemaRefOrVal}}", + not: "validate.schema{{=$schemaPath}}", + oneOf: "validate.schema{{=$schemaPath}}", + pattern: "{{#def.schemaRefOrQS}}", + propertyNames: "validate.schema{{=$schemaPath}}", + required: "validate.schema{{=$schemaPath}}", + type: "validate.schema{{=$schemaPath}}", + uniqueItems: "{{#def.schemaRefOrVal}}", + custom: "validate.schema{{=$schemaPath}}", + patternRequired: "validate.schema{{=$schemaPath}}", + switch: "validate.schema{{=$schemaPath}}", + _formatLimit: "{{#def.schemaRefOrQS}}", + _formatExclusiveLimit: "validate.schema{{=$schemaPath}}" +} #}} + + +{{## def.schemaValueQS: {{?$isData}}{{=$schemaValue}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} + +{{## def._errorParams = { + 'false schema': "{}", + $ref: "{ ref: '{{=it.util.escapeQuotes($schema)}}' }", + additionalItems: "{ limit: {{=$schema.length}} }", + additionalProperties: "{ additionalProperty: '{{=$additionalProperty}}' }", + anyOf: "{}", + const: "{ allowedValue: schema{{=$lvl}} }", + contains: "{}", + dependencies: "{ property: '{{= it.util.escapeQuotes($property) }}', missingProperty: '{{=$missingProperty}}', depsCount: {{=$deps.length}}, deps: '{{= it.util.escapeQuotes($deps.length==1 ? $deps[0] : $deps.join(\", \")) }}' }", + 'enum': "{ allowedValues: schema{{=$lvl}} }", + format: "{ format: {{#def.schemaValueQS}} }", + 'if': "{ failingKeyword: {{=$ifClause}} }", + _limit: "{ comparison: {{=$opExpr}}, limit: {{=$schemaValue}}, exclusive: {{=$exclusive}} }", + _exclusiveLimit: "{}", + _limitItems: "{ limit: {{=$schemaValue}} }", + _limitLength: "{ limit: {{=$schemaValue}} }", + _limitProperties:"{ limit: {{=$schemaValue}} }", + multipleOf: "{ multipleOf: {{=$schemaValue}} }", + not: "{}", + oneOf: "{ passingSchemas: {{=$passingSchemas}} }", + pattern: "{ pattern: {{#def.schemaValueQS}} }", + propertyNames: "{ propertyName: '{{=$invalidName}}' }", + required: "{ missingProperty: '{{=$missingProperty}}' }", + type: "{ type: '{{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}' }", + uniqueItems: "{ i: i, j: j }", + custom: "{ keyword: '{{=$rule.keyword}}' }", + patternRequired: "{ missingPattern: '{{=$missingPattern}}' }", + switch: "{ caseIndex: {{=$caseIndex}} }", + _formatLimit: "{ comparison: {{=$opExpr}}, limit: {{#def.schemaValueQS}}, exclusive: {{=$exclusive}} }", + _formatExclusiveLimit: "{}" +} #}} diff --git a/node_modules/ajv/lib/dot/format.jst b/node_modules/ajv/lib/dot/format.jst new file mode 100644 index 0000000..37f14da --- /dev/null +++ b/node_modules/ajv/lib/dot/format.jst @@ -0,0 +1,106 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} + +{{## def.skipFormat: + {{? $breakOnError }} if (true) { {{?}} + {{ return out; }} +#}} + +{{? it.opts.format === false }}{{# def.skipFormat }}{{?}} + + +{{# def.$data }} + + +{{## def.$dataCheckFormat: + {{# def.$dataNotType:'string' }} + ({{? $unknownFormats != 'ignore' }} + ({{=$schemaValue}} && !{{=$format}} + {{? $allowUnknown }} + && self._opts.unknownFormats.indexOf({{=$schemaValue}}) == -1 + {{?}}) || + {{?}} + ({{=$format}} && {{=$formatType}} == '{{=$ruleType}}' + && !(typeof {{=$format}} == 'function' + ? {{? it.async}} + (async{{=$lvl}} ? await {{=$format}}({{=$data}}) : {{=$format}}({{=$data}})) + {{??}} + {{=$format}}({{=$data}}) + {{?}} + : {{=$format}}.test({{=$data}})))) +#}} + +{{## def.checkFormat: + {{ + var $formatRef = 'formats' + it.util.getProperty($schema); + if ($isObject) $formatRef += '.validate'; + }} + {{? typeof $format == 'function' }} + {{=$formatRef}}({{=$data}}) + {{??}} + {{=$formatRef}}.test({{=$data}}) + {{?}} +#}} + + +{{ + var $unknownFormats = it.opts.unknownFormats + , $allowUnknown = Array.isArray($unknownFormats); +}} + +{{? $isData }} + {{ + var $format = 'format' + $lvl + , $isObject = 'isObject' + $lvl + , $formatType = 'formatType' + $lvl; + }} + var {{=$format}} = formats[{{=$schemaValue}}]; + var {{=$isObject}} = typeof {{=$format}} == 'object' + && !({{=$format}} instanceof RegExp) + && {{=$format}}.validate; + var {{=$formatType}} = {{=$isObject}} && {{=$format}}.type || 'string'; + if ({{=$isObject}}) { + {{? it.async}} + var async{{=$lvl}} = {{=$format}}.async; + {{?}} + {{=$format}} = {{=$format}}.validate; + } + if ({{# def.$dataCheckFormat }}) { +{{??}} + {{ var $format = it.formats[$schema]; }} + {{? !$format }} + {{? $unknownFormats == 'ignore' }} + {{ it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); }} + {{# def.skipFormat }} + {{?? $allowUnknown && $unknownFormats.indexOf($schema) >= 0 }} + {{# def.skipFormat }} + {{??}} + {{ throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); }} + {{?}} + {{?}} + {{ + var $isObject = typeof $format == 'object' + && !($format instanceof RegExp) + && $format.validate; + var $formatType = $isObject && $format.type || 'string'; + if ($isObject) { + var $async = $format.async === true; + $format = $format.validate; + } + }} + {{? $formatType != $ruleType }} + {{# def.skipFormat }} + {{?}} + {{? $async }} + {{ + if (!it.async) throw new Error('async format in sync schema'); + var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; + }} + if (!(await {{=$formatRef}}({{=$data}}))) { + {{??}} + if (!{{# def.checkFormat }}) { + {{?}} +{{?}} + {{# def.error:'format' }} + } {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/if.jst b/node_modules/ajv/lib/dot/if.jst new file mode 100644 index 0000000..7ccc9b7 --- /dev/null +++ b/node_modules/ajv/lib/dot/if.jst @@ -0,0 +1,75 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.validateIfClause:_clause: + {{ + $it.schema = it.schema['_clause']; + $it.schemaPath = it.schemaPath + '._clause'; + $it.errSchemaPath = it.errSchemaPath + '/_clause'; + }} + {{# def.insertSubschemaCode }} + {{=$valid}} = {{=$nextValid}}; + {{? $thenPresent && $elsePresent }} + {{ $ifClause = 'ifClause' + $lvl; }} + var {{=$ifClause}} = '_clause'; + {{??}} + {{ $ifClause = '\'_clause\''; }} + {{?}} +#}} + +{{ + var $thenSch = it.schema['then'] + , $elseSch = it.schema['else'] + , $thenPresent = $thenSch !== undefined && {{# def.nonEmptySchema:$thenSch }} + , $elsePresent = $elseSch !== undefined && {{# def.nonEmptySchema:$elseSch }} + , $currentBaseId = $it.baseId; +}} + +{{? $thenPresent || $elsePresent }} + {{ + var $ifClause; + $it.createErrors = false; + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + var {{=$errs}} = errors; + var {{=$valid}} = true; + + {{# def.setCompositeRule }} + {{# def.insertSubschemaCode }} + {{ $it.createErrors = true; }} + {{# def.resetErrors }} + {{# def.resetCompositeRule }} + + {{? $thenPresent }} + if ({{=$nextValid}}) { + {{# def.validateIfClause:then }} + } + {{? $elsePresent }} + else { + {{?}} + {{??}} + if (!{{=$nextValid}}) { + {{?}} + + {{? $elsePresent }} + {{# def.validateIfClause:else }} + } + {{?}} + + if (!{{=$valid}}) { + {{# def.extraError:'if' }} + } + {{? $breakOnError }} else { {{?}} + + {{# def.cleanUp }} +{{??}} + {{? $breakOnError }} + if (true) { + {{?}} +{{?}} + diff --git a/node_modules/ajv/lib/dot/items.jst b/node_modules/ajv/lib/dot/items.jst new file mode 100644 index 0000000..8c0f5ac --- /dev/null +++ b/node_modules/ajv/lib/dot/items.jst @@ -0,0 +1,100 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.validateItems:startFrom: + for (var {{=$idx}} = {{=startFrom}}; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { + {{ + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + + {{? $breakOnError }} + if (!{{=$nextValid}}) break; + {{?}} + } +#}} + +{{ + var $idx = 'i' + $lvl + , $dataNxt = $it.dataLevel = it.dataLevel + 1 + , $nextData = 'data' + $dataNxt + , $currentBaseId = it.baseId; +}} + +var {{=$errs}} = errors; +var {{=$valid}}; + +{{? Array.isArray($schema) }} + {{ /* 'items' is an array of schemas */}} + {{ var $additionalItems = it.schema.additionalItems; }} + {{? $additionalItems === false }} + {{=$valid}} = {{=$data}}.length <= {{= $schema.length }}; + {{ + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalItems'; + }} + {{# def.checkError:'additionalItems' }} + {{ $errSchemaPath = $currErrSchemaPath; }} + {{# def.elseIfValid}} + {{?}} + + {{~ $schema:$sch:$i }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{=$nextValid}} = true; + + if ({{=$data}}.length > {{=$i}}) { + {{ + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + } + + {{# def.ifResultValid }} + {{?}} + {{~}} + + {{? typeof $additionalItems == 'object' && {{# def.nonEmptySchema:$additionalItems }} }} + {{ + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + }} + {{=$nextValid}} = true; + + if ({{=$data}}.length > {{= $schema.length }}) { + {{# def.validateItems: $schema.length }} + } + + {{# def.ifResultValid }} + {{?}} + +{{?? {{# def.nonEmptySchema:$schema }} }} + {{ /* 'items' is a single schema */}} + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + {{# def.validateItems: 0 }} +{{?}} + +{{? $breakOnError }} + {{= $closingBraces }} + if ({{=$errs}} == errors) { +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/missing.def b/node_modules/ajv/lib/dot/missing.def new file mode 100644 index 0000000..a73b9f9 --- /dev/null +++ b/node_modules/ajv/lib/dot/missing.def @@ -0,0 +1,39 @@ +{{## def.checkMissingProperty:_properties: + {{~ _properties:$propertyKey:$i }} + {{?$i}} || {{?}} + {{ + var $prop = it.util.getProperty($propertyKey) + , $useData = $data + $prop; + }} + ( ({{# def.noPropertyInData }}) && (missing{{=$lvl}} = {{= it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) }}) ) + {{~}} +#}} + + +{{## def.errorMissingProperty:_error: + {{ + var $propertyPath = 'missing' + $lvl + , $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers + ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) + : $currentErrorPath + ' + ' + $propertyPath; + } + }} + {{# def.error:_error }} +#}} + + +{{## def.allErrorsMissingProperty:_error: + {{ + var $prop = it.util.getProperty($propertyKey) + , $missingProperty = it.util.escapeQuotes($propertyKey) + , $useData = $data + $prop; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + }} + if ({{# def.noPropertyInData }}) { + {{# def.addError:_error }} + } +#}} diff --git a/node_modules/ajv/lib/dot/multipleOf.jst b/node_modules/ajv/lib/dot/multipleOf.jst new file mode 100644 index 0000000..5f8dd33 --- /dev/null +++ b/node_modules/ajv/lib/dot/multipleOf.jst @@ -0,0 +1,20 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +var division{{=$lvl}}; +if ({{?$isData}} + {{=$schemaValue}} !== undefined && ( + typeof {{=$schemaValue}} != 'number' || + {{?}} + (division{{=$lvl}} = {{=$data}} / {{=$schemaValue}}, + {{? it.opts.multipleOfPrecision }} + Math.abs(Math.round(division{{=$lvl}}) - division{{=$lvl}}) > 1e-{{=it.opts.multipleOfPrecision}} + {{??}} + division{{=$lvl}} !== parseInt(division{{=$lvl}}) + {{?}} + ) + {{?$isData}} ) {{?}} ) { + {{# def.error:'multipleOf' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/not.jst b/node_modules/ajv/lib/dot/not.jst new file mode 100644 index 0000000..e03185a --- /dev/null +++ b/node_modules/ajv/lib/dot/not.jst @@ -0,0 +1,43 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{? {{# def.nonEmptySchema:$schema }} }} + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + + var {{=$errs}} = errors; + + {{# def.setCompositeRule }} + + {{ + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + }} + {{= it.validate($it) }} + {{ + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + }} + + {{# def.resetCompositeRule }} + + if ({{=$nextValid}}) { + {{# def.error:'not' }} + } else { + {{# def.resetErrors }} + {{? it.opts.allErrors }} } {{?}} +{{??}} + {{# def.addError:'not' }} + {{? $breakOnError}} + if (false) { + {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/oneOf.jst b/node_modules/ajv/lib/dot/oneOf.jst new file mode 100644 index 0000000..bcce2c6 --- /dev/null +++ b/node_modules/ajv/lib/dot/oneOf.jst @@ -0,0 +1,54 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{ + var $currentBaseId = $it.baseId + , $prevValid = 'prevValid' + $lvl + , $passingSchemas = 'passingSchemas' + $lvl; +}} + +var {{=$errs}} = errors + , {{=$prevValid}} = false + , {{=$valid}} = false + , {{=$passingSchemas}} = null; + +{{# def.setCompositeRule }} + +{{~ $schema:$sch:$i }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{ + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + {{??}} + var {{=$nextValid}} = true; + {{?}} + + {{? $i }} + if ({{=$nextValid}} && {{=$prevValid}}) { + {{=$valid}} = false; + {{=$passingSchemas}} = [{{=$passingSchemas}}, {{=$i}}]; + } else { + {{ $closingBraces += '}'; }} + {{?}} + + if ({{=$nextValid}}) { + {{=$valid}} = {{=$prevValid}} = true; + {{=$passingSchemas}} = {{=$i}}; + } +{{~}} + +{{# def.resetCompositeRule }} + +{{= $closingBraces }} + +if (!{{=$valid}}) { + {{# def.extraError:'oneOf' }} +} else { + {{# def.resetErrors }} +{{? it.opts.allErrors }} } {{?}} diff --git a/node_modules/ajv/lib/dot/pattern.jst b/node_modules/ajv/lib/dot/pattern.jst new file mode 100644 index 0000000..3a37ef6 --- /dev/null +++ b/node_modules/ajv/lib/dot/pattern.jst @@ -0,0 +1,14 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ + var $regexp = $isData + ? '(new RegExp(' + $schemaValue + '))' + : it.usePattern($schema); +}} + +if ({{# def.$dataNotType:'string' }} !{{=$regexp}}.test({{=$data}}) ) { + {{# def.error:'pattern' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/properties.jst b/node_modules/ajv/lib/dot/properties.jst new file mode 100644 index 0000000..862067e --- /dev/null +++ b/node_modules/ajv/lib/dot/properties.jst @@ -0,0 +1,244 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.validateAdditional: + {{ /* additionalProperties is schema */ + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty + ? it.errorPath + : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} +#}} + + +{{ + var $key = 'key' + $lvl + , $idx = 'idx' + $lvl + , $dataNxt = $it.dataLevel = it.dataLevel + 1 + , $nextData = 'data' + $dataNxt + , $dataProperties = 'dataProperties' + $lvl; + + var $schemaKeys = Object.keys($schema || {}) + , $pProperties = it.schema.patternProperties || {} + , $pPropertyKeys = Object.keys($pProperties) + , $aProperties = it.schema.additionalProperties + , $someProperties = $schemaKeys.length || $pPropertyKeys.length + , $noAdditional = $aProperties === false + , $additionalIsSchema = typeof $aProperties == 'object' + && Object.keys($aProperties).length + , $removeAdditional = it.opts.removeAdditional + , $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional + , $ownProperties = it.opts.ownProperties + , $currentBaseId = it.baseId; + + var $required = it.schema.required; + if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) + var $requiredHash = it.util.toHash($required); +}} + + +var {{=$errs}} = errors; +var {{=$nextValid}} = true; +{{? $ownProperties }} + var {{=$dataProperties}} = undefined; +{{?}} + +{{? $checkAdditional }} + {{# def.iterateProperties }} + {{? $someProperties }} + var isAdditional{{=$lvl}} = !(false + {{? $schemaKeys.length }} + {{? $schemaKeys.length > 8 }} + || validate.schema{{=$schemaPath}}.hasOwnProperty({{=$key}}) + {{??}} + {{~ $schemaKeys:$propertyKey }} + || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} + {{~}} + {{?}} + {{?}} + {{? $pPropertyKeys.length }} + {{~ $pPropertyKeys:$pProperty:$i }} + || {{= it.usePattern($pProperty) }}.test({{=$key}}) + {{~}} + {{?}} + ); + + if (isAdditional{{=$lvl}}) { + {{?}} + {{? $removeAdditional == 'all' }} + delete {{=$data}}[{{=$key}}]; + {{??}} + {{ + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + }} + {{? $noAdditional }} + {{? $removeAdditional }} + delete {{=$data}}[{{=$key}}]; + {{??}} + {{=$nextValid}} = false; + {{ + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + }} + {{# def.error:'additionalProperties' }} + {{ $errSchemaPath = $currErrSchemaPath; }} + {{? $breakOnError }} break; {{?}} + {{?}} + {{?? $additionalIsSchema }} + {{? $removeAdditional == 'failing' }} + var {{=$errs}} = errors; + {{# def.setCompositeRule }} + + {{# def.validateAdditional }} + + if (!{{=$nextValid}}) { + errors = {{=$errs}}; + if (validate.errors !== null) { + if (errors) validate.errors.length = errors; + else validate.errors = null; + } + delete {{=$data}}[{{=$key}}]; + } + + {{# def.resetCompositeRule }} + {{??}} + {{# def.validateAdditional }} + {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} + {{?}} + {{?}} + {{ it.errorPath = $currentErrorPath; }} + {{?}} + {{? $someProperties }} + } + {{?}} + } + + {{# def.ifResultValid }} +{{?}} + +{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} + +{{? $schemaKeys.length }} + {{~ $schemaKeys:$propertyKey }} + {{ var $sch = $schema[$propertyKey]; }} + + {{? {{# def.nonEmptySchema:$sch}} }} + {{ + var $prop = it.util.getProperty($propertyKey) + , $passData = $data + $prop + , $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + }} + + {{# def.generateSubschemaCode }} + + {{? {{# def.willOptimize }} }} + {{ + $code = {{# def._optimizeValidate }}; + var $useData = $passData; + }} + {{??}} + {{ var $useData = $nextData; }} + var {{=$nextData}} = {{=$passData}}; + {{?}} + + {{? $hasDefault }} + {{= $code }} + {{??}} + {{? $requiredHash && $requiredHash[$propertyKey] }} + if ({{# def.noPropertyInData }}) { + {{=$nextValid}} = false; + {{ + var $currentErrorPath = it.errorPath + , $currErrSchemaPath = $errSchemaPath + , $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + }} + {{# def.error:'required' }} + {{ $errSchemaPath = $currErrSchemaPath; }} + {{ it.errorPath = $currentErrorPath; }} + } else { + {{??}} + {{? $breakOnError }} + if ({{# def.noPropertyInData }}) { + {{=$nextValid}} = true; + } else { + {{??}} + if ({{=$useData}} !== undefined + {{? $ownProperties }} + && {{# def.isOwnProperty }} + {{?}} + ) { + {{?}} + {{?}} + + {{= $code }} + } + {{?}} {{ /* $hasDefault */ }} + {{?}} {{ /* def.nonEmptySchema */ }} + + {{# def.ifResultValid }} + {{~}} +{{?}} + +{{? $pPropertyKeys.length }} + {{~ $pPropertyKeys:$pProperty }} + {{ var $sch = $pProperties[$pProperty]; }} + + {{? {{# def.nonEmptySchema:$sch}} }} + {{ + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + + it.util.escapeFragment($pProperty); + }} + + {{# def.iterateProperties }} + if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { + {{ + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + + {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} + } + {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} + } + + {{# def.ifResultValid }} + {{?}} {{ /* def.nonEmptySchema */ }} + {{~}} +{{?}} + + +{{? $breakOnError }} + {{= $closingBraces }} + if ({{=$errs}} == errors) { +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/propertyNames.jst b/node_modules/ajv/lib/dot/propertyNames.jst new file mode 100644 index 0000000..ee52b21 --- /dev/null +++ b/node_modules/ajv/lib/dot/propertyNames.jst @@ -0,0 +1,54 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +var {{=$errs}} = errors; + +{{? {{# def.nonEmptySchema:$schema }} }} + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + + {{ + var $key = 'key' + $lvl + , $idx = 'idx' + $lvl + , $i = 'i' + $lvl + , $invalidName = '\' + ' + $key + ' + \'' + , $dataNxt = $it.dataLevel = it.dataLevel + 1 + , $nextData = 'data' + $dataNxt + , $dataProperties = 'dataProperties' + $lvl + , $ownProperties = it.opts.ownProperties + , $currentBaseId = it.baseId; + }} + + {{? $ownProperties }} + var {{=$dataProperties}} = undefined; + {{?}} + {{# def.iterateProperties }} + var startErrs{{=$lvl}} = errors; + + {{ var $passData = $key; }} + {{# def.setCompositeRule }} + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + {{# def.resetCompositeRule }} + + if (!{{=$nextValid}}) { + for (var {{=$i}}=startErrs{{=$lvl}}; {{=$i}}= it.opts.loopRequired + , $ownProperties = it.opts.ownProperties; + }} + + {{? $breakOnError }} + var missing{{=$lvl}}; + {{? $loopRequired }} + {{# def.setupLoop }} + var {{=$valid}} = true; + + {{?$isData}}{{# def.check$dataIsArray }}{{?}} + + for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { + {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined + {{? $ownProperties }} + && {{# def.isRequiredOwnProperty }} + {{?}}; + if (!{{=$valid}}) break; + } + + {{? $isData }} } {{?}} + + {{# def.checkError:'required' }} + else { + {{??}} + if ({{# def.checkMissingProperty:$required }}) { + {{# def.errorMissingProperty:'required' }} + } else { + {{?}} + {{??}} + {{? $loopRequired }} + {{# def.setupLoop }} + {{? $isData }} + if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) { + {{# def.addError:'required' }} + } else if ({{=$vSchema}} !== undefined) { + {{?}} + + for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { + if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined + {{? $ownProperties }} + || !{{# def.isRequiredOwnProperty }} + {{?}}) { + {{# def.addError:'required' }} + } + } + + {{? $isData }} } {{?}} + {{??}} + {{~ $required:$propertyKey }} + {{# def.allErrorsMissingProperty:'required' }} + {{~}} + {{?}} + {{?}} + + {{ it.errorPath = $currentErrorPath; }} + +{{?? $breakOnError }} + if (true) { +{{?}} diff --git a/node_modules/ajv/lib/dot/uniqueItems.jst b/node_modules/ajv/lib/dot/uniqueItems.jst new file mode 100644 index 0000000..22f82f9 --- /dev/null +++ b/node_modules/ajv/lib/dot/uniqueItems.jst @@ -0,0 +1,62 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + + +{{? ($schema || $isData) && it.opts.uniqueItems !== false }} + {{? $isData }} + var {{=$valid}}; + if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) + {{=$valid}} = true; + else if (typeof {{=$schemaValue}} != 'boolean') + {{=$valid}} = false; + else { + {{?}} + + var i = {{=$data}}.length + , {{=$valid}} = true + , j; + if (i > 1) { + {{ + var $itemType = it.schema.items && it.schema.items.type + , $typeIsArray = Array.isArray($itemType); + }} + {{? !$itemType || $itemType == 'object' || $itemType == 'array' || + ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0)) }} + outer: + for (;i--;) { + for (j = i; j--;) { + if (equal({{=$data}}[i], {{=$data}}[j])) { + {{=$valid}} = false; + break outer; + } + } + } + {{??}} + var itemIndices = {}, item; + for (;i--;) { + var item = {{=$data}}[i]; + {{ var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); }} + if ({{= it.util[$method]($itemType, 'item', true) }}) continue; + {{? $typeIsArray}} + if (typeof item == 'string') item = '"' + item; + {{?}} + if (typeof itemIndices[item] == 'number') { + {{=$valid}} = false; + j = itemIndices[item]; + break; + } + itemIndices[item] = i; + } + {{?}} + } + + {{? $isData }} } {{?}} + + if (!{{=$valid}}) { + {{# def.error:'uniqueItems' }} + } {{? $breakOnError }} else { {{?}} +{{??}} + {{? $breakOnError }} if (true) { {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/validate.jst b/node_modules/ajv/lib/dot/validate.jst new file mode 100644 index 0000000..f8a1edf --- /dev/null +++ b/node_modules/ajv/lib/dot/validate.jst @@ -0,0 +1,282 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.defaults }} +{{# def.coerce }} + +{{ /** + * schema compilation (render) time: + * it = { schema, RULES, _validate, opts } + * it.validate - this template function, + * it is used recursively to generate code for subschemas + * + * runtime: + * "validate" is a variable name to which this function will be assigned + * validateRef etc. are defined in the parent scope in index.js + */ }} + +{{ + var $async = it.schema.$async === true + , $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref') + , $id = it.self._getId(it.schema); +}} + +{{ + if (it.opts.strictKeywords) { + var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); + if ($unknownKwd) { + var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; + if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); + else throw new Error($keywordsMsg); + } + } +}} + +{{? it.isTop }} + var validate = {{?$async}}{{it.async = true;}}async {{?}}function(data, dataPath, parentData, parentDataProperty, rootData) { + 'use strict'; + {{? $id && (it.opts.sourceCode || it.opts.processCode) }} + {{= '/\*# sourceURL=' + $id + ' */' }} + {{?}} +{{?}} + +{{? typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref) }} + {{ var $keyword = 'false schema'; }} + {{# def.setupKeyword }} + {{? it.schema === false}} + {{? it.isTop}} + {{ $breakOnError = true; }} + {{??}} + var {{=$valid}} = false; + {{?}} + {{# def.error:'false schema' }} + {{??}} + {{? it.isTop}} + {{? $async }} + return data; + {{??}} + validate.errors = null; + return true; + {{?}} + {{??}} + var {{=$valid}} = true; + {{?}} + {{?}} + + {{? it.isTop}} + }; + return validate; + {{?}} + + {{ return out; }} +{{?}} + + +{{? it.isTop }} + {{ + var $top = it.isTop + , $lvl = it.level = 0 + , $dataLvl = it.dataLevel = 0 + , $data = 'data'; + it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); + it.baseId = it.baseId || it.rootId; + delete it.isTop; + + it.dataPathArr = [undefined]; + + if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored in the schema root'; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + }} + + var vErrors = null; {{ /* don't edit, used in replace */ }} + var errors = 0; {{ /* don't edit, used in replace */ }} + if (rootData === undefined) rootData = data; {{ /* don't edit, used in replace */ }} +{{??}} + {{ + var $lvl = it.level + , $dataLvl = it.dataLevel + , $data = 'data' + ($dataLvl || ''); + + if ($id) it.baseId = it.resolve.url(it.baseId, $id); + + if ($async && !it.async) throw new Error('async schema in sync schema'); + }} + + var errs_{{=$lvl}} = errors; +{{?}} + +{{ + var $valid = 'valid' + $lvl + , $breakOnError = !it.opts.allErrors + , $closingBraces1 = '' + , $closingBraces2 = ''; + + var $errorKeyword; + var $typeSchema = it.schema.type + , $typeIsArray = Array.isArray($typeSchema); + + if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { + if ($typeIsArray) { + if ($typeSchema.indexOf('null') == -1) + $typeSchema = $typeSchema.concat('null'); + } else if ($typeSchema != 'null') { + $typeSchema = [$typeSchema, 'null']; + $typeIsArray = true; + } + } + + if ($typeIsArray && $typeSchema.length == 1) { + $typeSchema = $typeSchema[0]; + $typeIsArray = false; + } +}} + +{{## def.checkType: + {{ + var $schemaPath = it.schemaPath + '.type' + , $errSchemaPath = it.errSchemaPath + '/type' + , $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + }} + + if ({{= it.util[$method]($typeSchema, $data, true) }}) { +#}} + +{{? it.schema.$ref && $refKeywords }} + {{? it.opts.extendRefs == 'fail' }} + {{ throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); }} + {{?? it.opts.extendRefs !== true }} + {{ + $refKeywords = false; + it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + }} + {{?}} +{{?}} + +{{? it.schema.$comment && it.opts.$comment }} + {{= it.RULES.all.$comment.code(it, '$comment') }} +{{?}} + +{{? $typeSchema }} + {{? it.opts.coerceTypes }} + {{ var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); }} + {{?}} + + {{ var $rulesGroup = it.RULES.types[$typeSchema]; }} + {{? $coerceToTypes || $typeIsArray || $rulesGroup === true || + ($rulesGroup && !$shouldUseGroup($rulesGroup)) }} + {{ + var $schemaPath = it.schemaPath + '.type' + , $errSchemaPath = it.errSchemaPath + '/type'; + }} + {{# def.checkType }} + {{? $coerceToTypes }} + {{# def.coerceType }} + {{??}} + {{# def.error:'type' }} + {{?}} + } + {{?}} +{{?}} + + +{{? it.schema.$ref && !$refKeywords }} + {{= it.RULES.all.$ref.code(it, '$ref') }} + {{? $breakOnError }} + } + if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { + {{ $closingBraces2 += '}'; }} + {{?}} +{{??}} + {{~ it.RULES:$rulesGroup }} + {{? $shouldUseGroup($rulesGroup) }} + {{? $rulesGroup.type }} + if ({{= it.util.checkDataType($rulesGroup.type, $data) }}) { + {{?}} + {{? it.opts.useDefaults }} + {{? $rulesGroup.type == 'object' && it.schema.properties }} + {{# def.defaultProperties }} + {{?? $rulesGroup.type == 'array' && Array.isArray(it.schema.items) }} + {{# def.defaultItems }} + {{?}} + {{?}} + {{~ $rulesGroup.rules:$rule }} + {{? $shouldUseRule($rule) }} + {{ var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); }} + {{? $code }} + {{= $code }} + {{? $breakOnError }} + {{ $closingBraces1 += '}'; }} + {{?}} + {{?}} + {{?}} + {{~}} + {{? $breakOnError }} + {{= $closingBraces1 }} + {{ $closingBraces1 = ''; }} + {{?}} + {{? $rulesGroup.type }} + } + {{? $typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes }} + else { + {{ + var $schemaPath = it.schemaPath + '.type' + , $errSchemaPath = it.errSchemaPath + '/type'; + }} + {{# def.error:'type' }} + } + {{?}} + {{?}} + + {{? $breakOnError }} + if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { + {{ $closingBraces2 += '}'; }} + {{?}} + {{?}} + {{~}} +{{?}} + +{{? $breakOnError }} {{= $closingBraces2 }} {{?}} + +{{? $top }} + {{? $async }} + if (errors === 0) return data; {{ /* don't edit, used in replace */ }} + else throw new ValidationError(vErrors); {{ /* don't edit, used in replace */ }} + {{??}} + validate.errors = vErrors; {{ /* don't edit, used in replace */ }} + return errors === 0; {{ /* don't edit, used in replace */ }} + {{?}} + }; + + return validate; +{{??}} + var {{=$valid}} = errors === errs_{{=$lvl}}; +{{?}} + +{{# def.cleanUp }} + +{{? $top }} + {{# def.finalCleanUp }} +{{?}} + +{{ + function $shouldUseGroup($rulesGroup) { + var rules = $rulesGroup.rules; + for (var i=0; i < rules.length; i++) + if ($shouldUseRule(rules[i])) + return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || + ($rule.implements && $ruleImplementsSomeKeyword($rule)); + } + + function $ruleImplementsSomeKeyword($rule) { + var impl = $rule.implements; + for (var i=0; i < impl.length; i++) + if (it.schema[impl[i]] !== undefined) + return true; + } +}} diff --git a/node_modules/ajv/lib/dotjs/README.md b/node_modules/ajv/lib/dotjs/README.md new file mode 100644 index 0000000..4d99484 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/README.md @@ -0,0 +1,3 @@ +These files are compiled dot templates from dot folder. + +Do NOT edit them directly, edit the templates and run `npm run build` from main ajv folder. diff --git a/node_modules/ajv/lib/dotjs/_limit.js b/node_modules/ajv/lib/dotjs/_limit.js new file mode 100644 index 0000000..f02a760 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limit.js @@ -0,0 +1,157 @@ +'use strict'; +module.exports = function generate__limit(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $isMax = $keyword == 'maximum', + $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', + $schemaExcl = it.schema[$exclusiveKeyword], + $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, + $op = $isMax ? '<' : '>', + $notOp = $isMax ? '>' : '<', + $errorKeyword = undefined; + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $exclType = 'exclType' + $lvl, + $exclIsNumber = 'exclIsNumber' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; + if ($schema === undefined) { + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $schemaValue = $schemaValueExcl; + $isData = $isDataExcl; + } + } else { + var $exclIsNumber = typeof $schemaExcl == 'number', + $opStr = $op; + if ($exclIsNumber && $isData) { + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; + } else { + if ($exclIsNumber && $schema === undefined) { + $exclusive = true; + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $schemaValue = $schemaExcl; + $notOp += '='; + } else { + if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); + if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { + $exclusive = true; + $errorKeyword = $exclusiveKeyword; + $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; + $notOp += '='; + } else { + $exclusive = false; + $opStr += '='; + } + } + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; + } + } + $errorKeyword = $errorKeyword || $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schemaValue) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitItems.js b/node_modules/ajv/lib/dotjs/_limitItems.js new file mode 100644 index 0000000..a27d118 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitItems.js @@ -0,0 +1,77 @@ +'use strict'; +module.exports = function generate__limitItems(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxItems' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxItems') { + out += 'more'; + } else { + out += 'fewer'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitLength.js b/node_modules/ajv/lib/dotjs/_limitLength.js new file mode 100644 index 0000000..789f374 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitLength.js @@ -0,0 +1,82 @@ +'use strict'; +module.exports = function generate__limitLength(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxLength' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + if (it.opts.unicode === false) { + out += ' ' + ($data) + '.length '; + } else { + out += ' ucs2length(' + ($data) + ') '; + } + out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be '; + if ($keyword == 'maxLength') { + out += 'longer'; + } else { + out += 'shorter'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' characters\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitProperties.js b/node_modules/ajv/lib/dotjs/_limitProperties.js new file mode 100644 index 0000000..11dc939 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitProperties.js @@ -0,0 +1,77 @@ +'use strict'; +module.exports = function generate__limitProperties(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxProperties' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxProperties') { + out += 'more'; + } else { + out += 'fewer'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/allOf.js b/node_modules/ajv/lib/dotjs/allOf.js new file mode 100644 index 0000000..4bad914 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/allOf.js @@ -0,0 +1,43 @@ +'use strict'; +module.exports = function generate_allOf(it, $keyword, $ruleType) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $allSchemasEmpty = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($breakOnError) { + if ($allSchemasEmpty) { + out += ' if (true) { '; + } else { + out += ' ' + ($closingBraces.slice(0, -1)) + ' '; + } + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/anyOf.js b/node_modules/ajv/lib/dotjs/anyOf.js new file mode 100644 index 0000000..01551d5 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/anyOf.js @@ -0,0 +1,74 @@ +'use strict'; +module.exports = function generate_anyOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $noEmptySchema = $schema.every(function($sch) { + return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all)); + }); + if ($noEmptySchema) { + var $currentBaseId = $it.baseId; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match some schema in anyOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/comment.js b/node_modules/ajv/lib/dotjs/comment.js new file mode 100644 index 0000000..dd66bb8 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/comment.js @@ -0,0 +1,14 @@ +'use strict'; +module.exports = function generate_comment(it, $keyword, $ruleType) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $comment = it.util.toQuotedString($schema); + if (it.opts.$comment === true) { + out += ' console.log(' + ($comment) + ');'; + } else if (typeof it.opts.$comment == 'function') { + out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/const.js b/node_modules/ajv/lib/dotjs/const.js new file mode 100644 index 0000000..15b7c61 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/const.js @@ -0,0 +1,56 @@ +'use strict'; +module.exports = function generate_const(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (!$isData) { + out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to constant\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/contains.js b/node_modules/ajv/lib/dotjs/contains.js new file mode 100644 index 0000000..cd4dfab --- /dev/null +++ b/node_modules/ajv/lib/dotjs/contains.js @@ -0,0 +1,82 @@ +'use strict'; +module.exports = function generate_contains(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $idx = 'i' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $currentBaseId = it.baseId, + $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all)); + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($nonEmptySchema) { + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (' + ($nextValid) + ') break; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; + } else { + out += ' if (' + ($data) + '.length == 0) {'; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should contain a valid item\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + if ($nonEmptySchema) { + out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + } + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/custom.js b/node_modules/ajv/lib/dotjs/custom.js new file mode 100644 index 0000000..f3e641e --- /dev/null +++ b/node_modules/ajv/lib/dotjs/custom.js @@ -0,0 +1,228 @@ +'use strict'; +module.exports = function generate_custom(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $rule = this, + $definition = 'definition' + $lvl, + $rDef = $rule.definition, + $closingBraces = ''; + var $compile, $inline, $macro, $ruleValidate, $validateCode; + if ($isData && $rDef.$data) { + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; + } else { + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + if (!$ruleValidate) return; + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + } + var $ruleErrs = $validateCode + '.errors', + $i = 'i' + $lvl, + $ruleErr = 'ruleErr' + $lvl, + $asyncKeyword = $rDef.async; + if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); + if (!($inline || $macro)) { + out += '' + ($ruleErrs) + ' = null;'; + } + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($isData && $rDef.$data) { + $closingBraces += '}'; + out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; + if ($validateSchema) { + $closingBraces += '}'; + out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; + } + } + if ($inline) { + if ($rDef.statements) { + out += ' ' + ($ruleValidate.validate) + ' '; + } else { + out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; + } + } else if ($macro) { + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $ruleValidate.validate; + $it.schemaPath = ''; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($code); + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + out += ' ' + ($validateCode) + '.call( '; + if (it.opts.passContext) { + out += 'this'; + } else { + out += 'self'; + } + if ($compile || $rDef.schema === false) { + out += ' , ' + ($data) + ' '; + } else { + out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; + } + out += ' , (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; + var def_callRuleValidate = out; + out = $$outStack.pop(); + if ($rDef.errors === false) { + out += ' ' + ($valid) + ' = '; + if ($asyncKeyword) { + out += 'await '; + } + out += '' + (def_callRuleValidate) + '; '; + } else { + if ($asyncKeyword) { + $ruleErrs = 'customErrors' + $lvl; + out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; + } else { + out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; + } + } + } + if ($rDef.modifying) { + out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; + } + out += '' + ($closingBraces); + if ($rDef.valid) { + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + out += ' if ( '; + if ($rDef.valid === undefined) { + out += ' !'; + if ($macro) { + out += '' + ($nextValid); + } else { + out += '' + ($valid); + } + } else { + out += ' ' + (!$rDef.valid) + ' '; + } + out += ') { '; + $errorKeyword = $rule.keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + var def_customError = out; + out = $$outStack.pop(); + if ($inline) { + if ($rDef.errors) { + if ($rDef.errors != 'full') { + out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; + } + out += ') { '; + $it.schema = $sch; + $it.schemaPath = $schemaPath + it.util.getProperty($property); + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/enum.js b/node_modules/ajv/lib/dotjs/enum.js new file mode 100644 index 0000000..90580b9 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/enum.js @@ -0,0 +1,66 @@ +'use strict'; +module.exports = function generate_enum(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $i = 'i' + $lvl, + $vSchema = 'schema' + $lvl; + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ';'; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to one of the allowed values\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/format.js b/node_modules/ajv/lib/dotjs/format.js new file mode 100644 index 0000000..cd9a569 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/format.js @@ -0,0 +1,150 @@ +'use strict'; +module.exports = function generate_format(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + if (it.opts.format === false) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $unknownFormats = it.opts.unknownFormats, + $allowUnknown = Array.isArray($unknownFormats); + if ($isData) { + var $format = 'format' + $lvl, + $isObject = 'isObject' + $lvl, + $formatType = 'formatType' + $lvl; + out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; + if (it.async) { + out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; + } + out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' ('; + if ($unknownFormats != 'ignore') { + out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; + if ($allowUnknown) { + out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; + } + out += ') || '; + } + out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; + if (it.async) { + out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; + } else { + out += ' ' + ($format) + '(' + ($data) + ') '; + } + out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; + } else { + var $format = it.formats[$schema]; + if (!$format) { + if ($unknownFormats == 'ignore') { + it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } else { + throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); + } + } + var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; + var $formatType = $isObject && $format.type || 'string'; + if ($isObject) { + var $async = $format.async === true; + $format = $format.validate; + } + if ($formatType != $ruleType) { + if ($breakOnError) { + out += ' if (true) { '; + } + return out; + } + if ($async) { + if (!it.async) throw new Error('async format in sync schema'); + var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; + out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; + } else { + out += ' if (! '; + var $formatRef = 'formats' + it.util.getProperty($schema); + if ($isObject) $formatRef += '.validate'; + if (typeof $format == 'function') { + out += ' ' + ($formatRef) + '(' + ($data) + ') '; + } else { + out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; + } + out += ') { '; + } + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match format "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/if.js b/node_modules/ajv/lib/dotjs/if.js new file mode 100644 index 0000000..019f61a --- /dev/null +++ b/node_modules/ajv/lib/dotjs/if.js @@ -0,0 +1,104 @@ +'use strict'; +module.exports = function generate_if(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + var $thenSch = it.schema['then'], + $elseSch = it.schema['else'], + $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)), + $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)), + $currentBaseId = $it.baseId; + if ($thenPresent || $elsePresent) { + var $ifClause; + $it.createErrors = false; + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + $it.createErrors = true; + out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + if ($thenPresent) { + out += ' if (' + ($nextValid) + ') { '; + $it.schema = it.schema['then']; + $it.schemaPath = it.schemaPath + '.then'; + $it.errSchemaPath = it.errSchemaPath + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; + if ($thenPresent && $elsePresent) { + $ifClause = 'ifClause' + $lvl; + out += ' var ' + ($ifClause) + ' = \'then\'; '; + } else { + $ifClause = '\'then\''; + } + out += ' } '; + if ($elsePresent) { + out += ' else { '; + } + } else { + out += ' if (!' + ($nextValid) + ') { '; + } + if ($elsePresent) { + $it.schema = it.schema['else']; + $it.schemaPath = it.schemaPath + '.else'; + $it.errSchemaPath = it.errSchemaPath + '/else'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; + if ($thenPresent && $elsePresent) { + $ifClause = 'ifClause' + $lvl; + out += ' var ' + ($ifClause) + ' = \'else\'; '; + } else { + $ifClause = '\'else\''; + } + out += ' } '; + } + out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/index.js b/node_modules/ajv/lib/dotjs/index.js new file mode 100644 index 0000000..2fb1b00 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/index.js @@ -0,0 +1,33 @@ +'use strict'; + +//all requires must be explicit because browserify won't work with dynamic requires +module.exports = { + '$ref': require('./ref'), + allOf: require('./allOf'), + anyOf: require('./anyOf'), + '$comment': require('./comment'), + const: require('./const'), + contains: require('./contains'), + dependencies: require('./dependencies'), + 'enum': require('./enum'), + format: require('./format'), + 'if': require('./if'), + items: require('./items'), + maximum: require('./_limit'), + minimum: require('./_limit'), + maxItems: require('./_limitItems'), + minItems: require('./_limitItems'), + maxLength: require('./_limitLength'), + minLength: require('./_limitLength'), + maxProperties: require('./_limitProperties'), + minProperties: require('./_limitProperties'), + multipleOf: require('./multipleOf'), + not: require('./not'), + oneOf: require('./oneOf'), + pattern: require('./pattern'), + properties: require('./properties'), + propertyNames: require('./propertyNames'), + required: require('./required'), + uniqueItems: require('./uniqueItems'), + validate: require('./validate') +}; diff --git a/node_modules/ajv/lib/dotjs/items.js b/node_modules/ajv/lib/dotjs/items.js new file mode 100644 index 0000000..d5532f0 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/items.js @@ -0,0 +1,141 @@ +'use strict'; +module.exports = function generate_items(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $idx = 'i' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $currentBaseId = it.baseId; + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if (Array.isArray($schema)) { + var $additionalItems = it.schema.additionalItems; + if ($additionalItems === false) { + out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + } + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) { + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' }'; + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/multipleOf.js b/node_modules/ajv/lib/dotjs/multipleOf.js new file mode 100644 index 0000000..af087d2 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/multipleOf.js @@ -0,0 +1,77 @@ +'use strict'; +module.exports = function generate_multipleOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + out += 'var division' + ($lvl) + ';if ('; + if ($isData) { + out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; + } + out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; + if (it.opts.multipleOfPrecision) { + out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; + } else { + out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; + } + out += ' ) '; + if ($isData) { + out += ' ) '; + } + out += ' ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be multiple of '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schemaValue) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/not.js b/node_modules/ajv/lib/dotjs/not.js new file mode 100644 index 0000000..6aea659 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/not.js @@ -0,0 +1,84 @@ +'use strict'; +module.exports = function generate_not(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + out += ' ' + (it.validate($it)) + ' '; + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (' + ($nextValid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + } else { + out += ' var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if ($breakOnError) { + out += ' if (false) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/oneOf.js b/node_modules/ajv/lib/dotjs/oneOf.js new file mode 100644 index 0000000..30988d5 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/oneOf.js @@ -0,0 +1,73 @@ +'use strict'; +module.exports = function generate_oneOf(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $prevValid = 'prevValid' + $lvl, + $passingSchemas = 'passingSchemas' + $lvl; + out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } else { + out += ' var ' + ($nextValid) + ' = true; '; + } + if ($i) { + out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; + $closingBraces += '}'; + } + out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match exactly one schema in oneOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; return false; '; + } + } + out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; + if (it.opts.allErrors) { + out += ' } '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/pattern.js b/node_modules/ajv/lib/dotjs/pattern.js new file mode 100644 index 0000000..1d74d6b --- /dev/null +++ b/node_modules/ajv/lib/dotjs/pattern.js @@ -0,0 +1,75 @@ +'use strict'; +module.exports = function generate_pattern(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match pattern "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/properties.js b/node_modules/ajv/lib/dotjs/properties.js new file mode 100644 index 0000000..34a82c6 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/properties.js @@ -0,0 +1,330 @@ +'use strict'; +module.exports = function generate_properties(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $key = 'key' + $lvl, + $idx = 'idx' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $dataProperties = 'dataProperties' + $lvl; + var $schemaKeys = Object.keys($schema || {}), + $pProperties = it.schema.patternProperties || {}, + $pPropertyKeys = Object.keys($pProperties), + $aProperties = it.schema.additionalProperties, + $someProperties = $schemaKeys.length || $pPropertyKeys.length, + $noAdditional = $aProperties === false, + $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, + $removeAdditional = it.opts.removeAdditional, + $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + var $required = it.schema.required; + if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); + out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; + if ($ownProperties) { + out += ' var ' + ($dataProperties) + ' = undefined;'; + } + if ($checkAdditional) { + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + if ($someProperties) { + out += ' var isAdditional' + ($lvl) + ' = !(false '; + if ($schemaKeys.length) { + if ($schemaKeys.length > 8) { + out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; + } else { + var arr1 = $schemaKeys; + if (arr1) { + var $propertyKey, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $propertyKey = arr1[i1 += 1]; + out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; + } + } + } + } + if ($pPropertyKeys.length) { + var arr2 = $pPropertyKeys; + if (arr2) { + var $pProperty, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $pProperty = arr2[$i += 1]; + out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; + } + } + } + out += ' ); if (isAdditional' + ($lvl) + ') { '; + } + if ($removeAdditional == 'all') { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + if ($noAdditional) { + if ($removeAdditional) { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + out += ' ' + ($nextValid) + ' = false; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is an invalid additional property'; + } else { + out += 'should NOT have additional properties'; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' break; '; + } + } + } else if ($additionalIsSchema) { + if ($removeAdditional == 'failing') { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + } else { + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + } + } + it.errorPath = $currentErrorPath; + } + if ($someProperties) { + out += ' } '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + var $useDefaults = it.opts.useDefaults && !it.compositeRule; + if ($schemaKeys.length) { + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + var $prop = it.util.getProperty($propertyKey), + $passData = $data + $prop, + $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + $code = it.util.varReplace($code, $nextData, $passData); + var $useData = $passData; + } else { + var $useData = $nextData; + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; + } + if ($hasDefault) { + out += ' ' + ($code) + ' '; + } else { + if ($requiredHash && $requiredHash[$propertyKey]) { + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { ' + ($nextValid) + ' = false; '; + var $currentErrorPath = it.errorPath, + $currErrSchemaPath = $errSchemaPath, + $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + it.errorPath = $currentErrorPath; + out += ' } else { '; + } else { + if ($breakOnError) { + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { ' + ($nextValid) + ' = true; } else { '; + } else { + out += ' if (' + ($useData) + ' !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ' ) { '; + } + } + out += ' ' + ($code) + ' } '; + } + } + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($pPropertyKeys.length) { + var arr4 = $pPropertyKeys; + if (arr4) { + var $pProperty, i4 = -1, + l4 = arr4.length - 1; + while (i4 < l4) { + $pProperty = arr4[i4 += 1]; + var $sch = $pProperties[$pProperty]; + if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/propertyNames.js b/node_modules/ajv/lib/dotjs/propertyNames.js new file mode 100644 index 0000000..b2bf295 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/propertyNames.js @@ -0,0 +1,82 @@ +'use strict'; +module.exports = function generate_propertyNames(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + out += 'var ' + ($errs) + ' = errors;'; + if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + var $key = 'key' + $lvl, + $idx = 'idx' + $lvl, + $i = 'i' + $lvl, + $invalidName = '\' + ' + $key + ' + \'', + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt, + $dataProperties = 'dataProperties' + $lvl, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + if ($ownProperties) { + out += ' var ' + ($dataProperties) + ' = undefined; '; + } + if ($ownProperties) { + out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; + } else { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + } + out += ' var startErrs' + ($lvl) + ' = errors; '; + var $passData = $key; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) { + $required[$required.length] = $property; + } + } + } + } else { + var $required = $schema; + } + } + if ($isData || $required.length) { + var $currentErrorPath = it.errorPath, + $loopRequired = $isData || $required.length >= it.opts.loopRequired, + $ownProperties = it.opts.ownProperties; + if ($breakOnError) { + out += ' var missing' + ($lvl) + '; '; + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + out += ' var ' + ($valid) + ' = true; '; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; + if ($ownProperties) { + out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; + } + out += '; if (!' + ($valid) + ') break; } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } else { + out += ' if ( '; + var arr2 = $required; + if (arr2) { + var $propertyKey, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $propertyKey = arr2[$i += 1]; + if ($i) { + out += ' || '; + } + var $prop = it.util.getProperty($propertyKey), + $useData = $data + $prop; + out += ' ( ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; + } + } + out += ') { '; + var $propertyPath = 'missing' + $lvl, + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } + } else { + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + if ($isData) { + out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; + } + out += ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; + if ($isData) { + out += ' } '; + } + } else { + var arr3 = $required; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $prop = it.util.getProperty($propertyKey), + $missingProperty = it.util.escapeQuotes($propertyKey), + $useData = $data + $prop; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + out += ' if ( ' + ($useData) + ' === undefined '; + if ($ownProperties) { + out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; + } + out += ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + } + } + } + } + it.errorPath = $currentErrorPath; + } else if ($breakOnError) { + out += ' if (true) {'; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/uniqueItems.js b/node_modules/ajv/lib/dotjs/uniqueItems.js new file mode 100644 index 0000000..c4f6536 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/uniqueItems.js @@ -0,0 +1,86 @@ +'use strict'; +module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.$data && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (($schema || $isData) && it.opts.uniqueItems !== false) { + if ($isData) { + out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; + } + out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; + var $itemType = it.schema.items && it.schema.items.type, + $typeIsArray = Array.isArray($itemType); + if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { + out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; + } else { + out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; + var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); + out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; '; + if ($typeIsArray) { + out += ' if (typeof item == \'string\') item = \'"\' + item; '; + } + out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; + } + out += ' } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/validate.js b/node_modules/ajv/lib/dotjs/validate.js new file mode 100644 index 0000000..cd0efc8 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/validate.js @@ -0,0 +1,494 @@ +'use strict'; +module.exports = function generate_validate(it, $keyword, $ruleType) { + var out = ''; + var $async = it.schema.$async === true, + $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), + $id = it.self._getId(it.schema); + if (it.opts.strictKeywords) { + var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); + if ($unknownKwd) { + var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; + if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); + else throw new Error($keywordsMsg); + } + } + if (it.isTop) { + out += ' var validate = '; + if ($async) { + it.async = true; + out += 'async '; + } + out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; + if ($id && (it.opts.sourceCode || it.opts.processCode)) { + out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; + } + } + if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { + var $keyword = 'false schema'; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + if (it.schema === false) { + if (it.isTop) { + $breakOnError = true; + } else { + out += ' var ' + ($valid) + ' = false; '; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'boolean schema is false\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } else { + if (it.isTop) { + if ($async) { + out += ' return data; '; + } else { + out += ' validate.errors = null; return true; '; + } + } else { + out += ' var ' + ($valid) + ' = true; '; + } + } + if (it.isTop) { + out += ' }; return validate; '; + } + return out; + } + if (it.isTop) { + var $top = it.isTop, + $lvl = it.level = 0, + $dataLvl = it.dataLevel = 0, + $data = 'data'; + it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); + it.baseId = it.baseId || it.rootId; + delete it.isTop; + it.dataPathArr = [undefined]; + if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored in the schema root'; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + out += ' var vErrors = null; '; + out += ' var errors = 0; '; + out += ' if (rootData === undefined) rootData = data; '; + } else { + var $lvl = it.level, + $dataLvl = it.dataLevel, + $data = 'data' + ($dataLvl || ''); + if ($id) it.baseId = it.resolve.url(it.baseId, $id); + if ($async && !it.async) throw new Error('async schema in sync schema'); + out += ' var errs_' + ($lvl) + ' = errors;'; + } + var $valid = 'valid' + $lvl, + $breakOnError = !it.opts.allErrors, + $closingBraces1 = '', + $closingBraces2 = ''; + var $errorKeyword; + var $typeSchema = it.schema.type, + $typeIsArray = Array.isArray($typeSchema); + if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { + if ($typeIsArray) { + if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null'); + } else if ($typeSchema != 'null') { + $typeSchema = [$typeSchema, 'null']; + $typeIsArray = true; + } + } + if ($typeIsArray && $typeSchema.length == 1) { + $typeSchema = $typeSchema[0]; + $typeIsArray = false; + } + if (it.schema.$ref && $refKeywords) { + if (it.opts.extendRefs == 'fail') { + throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); + } else if (it.opts.extendRefs !== true) { + $refKeywords = false; + it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + } + } + if (it.schema.$comment && it.opts.$comment) { + out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); + } + if ($typeSchema) { + if (it.opts.coerceTypes) { + var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); + } + var $rulesGroup = it.RULES.types[$typeSchema]; + if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + if ($coerceToTypes) { + var $dataType = 'dataType' + $lvl, + $coerced = 'coerced' + $lvl; + out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; + if (it.opts.coerceTypes == 'array') { + out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; + } + out += ' var ' + ($coerced) + ' = undefined; '; + var $bracesCoercion = ''; + var arr1 = $coerceToTypes; + if (arr1) { + var $type, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $type = arr1[$i += 1]; + if ($i) { + out += ' if (' + ($coerced) + ' === undefined) { '; + $bracesCoercion += '}'; + } + if (it.opts.coerceTypes == 'array' && $type != 'array') { + out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; + } + if ($type == 'string') { + out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; + } else if ($type == 'number' || $type == 'integer') { + out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; + if ($type == 'integer') { + out += ' && !(' + ($data) + ' % 1)'; + } + out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; + } else if ($type == 'boolean') { + out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; + } else if ($type == 'null') { + out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; + } else if (it.opts.coerceTypes == 'array' && $type == 'array') { + out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; + } + } + } + out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' ' + ($data) + ' = ' + ($coerced) + '; '; + if (!$dataLvl) { + out += 'if (' + ($parentData) + ' !== undefined)'; + } + out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' } '; + } + } + if (it.schema.$ref && !$refKeywords) { + out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; + if ($breakOnError) { + out += ' } if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } else { + var arr2 = it.RULES; + if (arr2) { + var $rulesGroup, i2 = -1, + l2 = arr2.length - 1; + while (i2 < l2) { + $rulesGroup = arr2[i2 += 1]; + if ($shouldUseGroup($rulesGroup)) { + if ($rulesGroup.type) { + out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; + } + if (it.opts.useDefaults) { + if ($rulesGroup.type == 'object' && it.schema.properties) { + var $schema = it.schema.properties, + $schemaKeys = Object.keys($schema); + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ($sch.default !== undefined) { + var $passData = $data + it.util.getProperty($propertyKey); + if (it.compositeRule) { + if (it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored for: ' + $passData; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + } else { + out += ' if (' + ($passData) + ' === undefined '; + if (it.opts.useDefaults == 'empty') { + out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; + } + out += ' ) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { + var arr4 = it.schema.items; + if (arr4) { + var $sch, $i = -1, + l4 = arr4.length - 1; + while ($i < l4) { + $sch = arr4[$i += 1]; + if ($sch.default !== undefined) { + var $passData = $data + '[' + $i + ']'; + if (it.compositeRule) { + if (it.opts.strictDefaults) { + var $defaultMsg = 'default is ignored for: ' + $passData; + if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); + else throw new Error($defaultMsg); + } + } else { + out += ' if (' + ($passData) + ' === undefined '; + if (it.opts.useDefaults == 'empty') { + out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; + } + out += ' ) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } + } + var arr5 = $rulesGroup.rules; + if (arr5) { + var $rule, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $rule = arr5[i5 += 1]; + if ($shouldUseRule($rule)) { + var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); + if ($code) { + out += ' ' + ($code) + ' '; + if ($breakOnError) { + $closingBraces1 += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces1) + ' '; + $closingBraces1 = ''; + } + if ($rulesGroup.type) { + out += ' } '; + if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { + out += ' else { '; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { + /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + } + if ($breakOnError) { + out += ' if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces2) + ' '; + } + if ($top) { + if ($async) { + out += ' if (errors === 0) return data; '; + out += ' else throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; '; + out += ' return errors === 0; '; + } + out += ' }; return validate;'; + } else { + out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; + } + out = it.util.cleanUpCode(out); + if ($top) { + out = it.util.finalCleanUpCode(out, $async); + } + + function $shouldUseGroup($rulesGroup) { + var rules = $rulesGroup.rules; + for (var i = 0; i < rules.length; i++) + if ($shouldUseRule(rules[i])) return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); + } + + function $ruleImplementsSomeKeyword($rule) { + var impl = $rule.implements; + for (var i = 0; i < impl.length; i++) + if (it.schema[impl[i]] !== undefined) return true; + } + return out; +} diff --git a/node_modules/ajv/lib/keyword.js b/node_modules/ajv/lib/keyword.js new file mode 100644 index 0000000..5fec19a --- /dev/null +++ b/node_modules/ajv/lib/keyword.js @@ -0,0 +1,146 @@ +'use strict'; + +var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; +var customRuleCode = require('./dotjs/custom'); +var definitionSchema = require('./definition_schema'); + +module.exports = { + add: addKeyword, + get: getKeyword, + remove: removeKeyword, + validate: validateKeyword +}; + + +/** + * Define custom keyword + * @this Ajv + * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). + * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + * @return {Ajv} this for method chaining + */ +function addKeyword(keyword, definition) { + /* jshint validthis: true */ + /* eslint no-shadow: 0 */ + var RULES = this.RULES; + if (RULES.keywords[keyword]) + throw new Error('Keyword ' + keyword + ' is already defined'); + + if (!IDENTIFIER.test(keyword)) + throw new Error('Keyword ' + keyword + ' is not a valid identifier'); + + if (definition) { + this.validateKeyword(definition, true); + + var dataType = definition.type; + if (Array.isArray(dataType)) { + for (var i=0; i ../ajv-dist/bower.json + cd ../ajv-dist + + if [[ `git status --porcelain` ]]; then + echo "Changes detected. Updating master branch..." + git add -A + git commit -m "updated by travis build #$TRAVIS_BUILD_NUMBER" + git push --quiet origin master > /dev/null 2>&1 + fi + + echo "Publishing tag..." + + git tag $TRAVIS_TAG + git push --tags > /dev/null 2>&1 + + echo "Done" +fi diff --git a/node_modules/ajv/scripts/travis-gh-pages b/node_modules/ajv/scripts/travis-gh-pages new file mode 100644 index 0000000..46ded16 --- /dev/null +++ b/node_modules/ajv/scripts/travis-gh-pages @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -e + +if [[ "$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "false" && $TRAVIS_JOB_NUMBER =~ ".3" ]]; then + git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qE '\.md$|^LICENSE$|travis-gh-pages$' && { + rm -rf ../gh-pages + git clone -b gh-pages --single-branch https://${GITHUB_TOKEN}@github.com/epoberezkin/ajv.git ../gh-pages + mkdir -p ../gh-pages/_source + cp *.md ../gh-pages/_source + cp LICENSE ../gh-pages/_source + currentDir=$(pwd) + cd ../gh-pages + $currentDir/node_modules/.bin/gh-pages-generator + # remove logo from README + sed -i -E "s/]+ajv_logo[^>]+>//" index.md + git config user.email "$GIT_USER_EMAIL" + git config user.name "$GIT_USER_NAME" + git add . + git commit -am "updated by travis build #$TRAVIS_BUILD_NUMBER" + git push --quiet origin gh-pages > /dev/null 2>&1 + } +fi diff --git a/node_modules/ansi-align/CHANGELOG.md b/node_modules/ansi-align/CHANGELOG.md new file mode 100644 index 0000000..36eeb52 --- /dev/null +++ b/node_modules/ansi-align/CHANGELOG.md @@ -0,0 +1,58 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### [3.0.1](https://github.com/nexdrew/ansi-align/compare/v3.0.0...v3.0.1) (2021-09-27) + + +### Bug Fixes + +* **package:** update string-width to version 4.1.0 ([#52](https://github.com/nexdrew/ansi-align/issues/52)) ([ab5b733](https://github.com/nexdrew/ansi-align/commit/ab5b733b1c30eef87b75e15459f2216db28d7ed3)) + + +# [3.0.0](https://github.com/nexdrew/ansi-align/compare/v2.0.0...v3.0.0) (2018-12-17) + + +### Bug Fixes + +* **package:** update string-width to version 3.0.0 ([#50](https://github.com/nexdrew/ansi-align/issues/50)) ([67f0d8f](https://github.com/nexdrew/ansi-align/commit/67f0d8f)) + + +### BREAKING CHANGES + +* **package:** Node 4 no longer supported, please update to Node 6+ or use ansi-align@2.0.0 + + + + +# [2.0.0](https://github.com/nexdrew/ansi-align/compare/v1.1.0...v2.0.0) (2017-05-01) + + +### Features + +* ES2015ify, dropping support for Node <4 ([#30](https://github.com/nexdrew/ansi-align/issues/30)) ([7b43f48](https://github.com/nexdrew/ansi-align/commit/7b43f48)) + + +### BREAKING CHANGES + +* Node 0.10 or 0.12 no longer supported, please update to Node 4+ or use ansi-align@1.1.0 + + + + +# [1.1.0](https://github.com/nexdrew/ansi-align/compare/v1.0.0...v1.1.0) (2016-06-06) + + +### Features + +* support left-alignment as no-op ([#3](https://github.com/nexdrew/ansi-align/issues/3)) ([e581db6](https://github.com/nexdrew/ansi-align/commit/e581db6)) + + + + +# 1.0.0 (2016-04-30) + + +### Features + +* initial commit ([1914d90](https://github.com/nexdrew/ansi-align/commit/1914d90)) diff --git a/node_modules/ansi-align/LICENSE b/node_modules/ansi-align/LICENSE new file mode 100644 index 0000000..ab601b6 --- /dev/null +++ b/node_modules/ansi-align/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/node_modules/ansi-align/README.md b/node_modules/ansi-align/README.md new file mode 100644 index 0000000..5e51682 --- /dev/null +++ b/node_modules/ansi-align/README.md @@ -0,0 +1,80 @@ +# ansi-align + +> align-text with ANSI support for CLIs + +[![Build Status](https://travis-ci.org/nexdrew/ansi-align.svg?branch=master)](https://travis-ci.org/nexdrew/ansi-align) +[![Coverage Status](https://coveralls.io/repos/github/nexdrew/ansi-align/badge.svg?branch=master)](https://coveralls.io/github/nexdrew/ansi-align?branch=master) +[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) +[![Greenkeeper badge](https://badges.greenkeeper.io/nexdrew/ansi-align.svg)](https://greenkeeper.io/) + +Easily center- or right- align a block of text, carefully ignoring ANSI escape codes. + +E.g. turn this: + +ansi text block no alignment :( + +Into this: + +ansi text block center aligned! + +## Install + +```sh +npm install --save ansi-align +``` + +```js +var ansiAlign = require('ansi-align') +``` + +## API + +### `ansiAlign(text, [opts])` + +Align the given text per the line with the greatest [`string-width`](https://github.com/sindresorhus/string-width), returning a new string (or array). + +#### Arguments + +- `text`: required, string or array + + The text to align. If a string is given, it will be split using either the `opts.split` value or `'\n'` by default. If an array is given, a different array of modified strings will be returned. + +- `opts`: optional, object + + Options to change behavior, see below. + +#### Options + +- `opts.align`: string, default `'center'` + + The alignment mode. Use `'center'` for center-alignment, `'right'` for right-alignment, or `'left'` for left-alignment. Note that the given `text` is assumed to be left-aligned already, so specifying `align: 'left'` just returns the `text` as is (no-op). + +- `opts.split`: string or RegExp, default `'\n'` + + The separator to use when splitting the text. Only used if text is given as a string. + +- `opts.pad`: string, default `' '` + + The value used to left-pad (prepend to) lines of lesser width. Will be repeated as necessary to adjust alignment to the line with the greatest width. + +### `ansiAlign.center(text)` + +Alias for `ansiAlign(text, { align: 'center' })`. + +### `ansiAlign.right(text)` + +Alias for `ansiAlign(text, { align: 'right' })`. + +### `ansiAlign.left(text)` + +Alias for `ansiAlign(text, { align: 'left' })`, which is a no-op. + +## Similar Packages + +- [`center-align`](https://github.com/jonschlinkert/center-align): Very close to this package, except it doesn't support ANSI codes. +- [`left-pad`](https://github.com/camwest/left-pad): Great for left-padding but does not support center alignment or ANSI codes. +- Pretty much anything by the [chalk](https://github.com/chalk) team + +## License + +ISC © Contributors diff --git a/node_modules/ansi-align/index.js b/node_modules/ansi-align/index.js new file mode 100644 index 0000000..67fa826 --- /dev/null +++ b/node_modules/ansi-align/index.js @@ -0,0 +1,61 @@ +'use strict' + +const stringWidth = require('string-width') + +function ansiAlign (text, opts) { + if (!text) return text + + opts = opts || {} + const align = opts.align || 'center' + + // short-circuit `align: 'left'` as no-op + if (align === 'left') return text + + const split = opts.split || '\n' + const pad = opts.pad || ' ' + const widthDiffFn = align !== 'right' ? halfDiff : fullDiff + + let returnString = false + if (!Array.isArray(text)) { + returnString = true + text = String(text).split(split) + } + + let width + let maxWidth = 0 + text = text.map(function (str) { + str = String(str) + width = stringWidth(str) + maxWidth = Math.max(width, maxWidth) + return { + str, + width + } + }).map(function (obj) { + return new Array(widthDiffFn(maxWidth, obj.width) + 1).join(pad) + obj.str + }) + + return returnString ? text.join(split) : text +} + +ansiAlign.left = function left (text) { + return ansiAlign(text, { align: 'left' }) +} + +ansiAlign.center = function center (text) { + return ansiAlign(text, { align: 'center' }) +} + +ansiAlign.right = function right (text) { + return ansiAlign(text, { align: 'right' }) +} + +module.exports = ansiAlign + +function halfDiff (maxWidth, curWidth) { + return Math.floor((maxWidth - curWidth) / 2) +} + +function fullDiff (maxWidth, curWidth) { + return maxWidth - curWidth +} diff --git a/node_modules/ansi-align/package.json b/node_modules/ansi-align/package.json new file mode 100644 index 0000000..2e88159 --- /dev/null +++ b/node_modules/ansi-align/package.json @@ -0,0 +1,70 @@ +{ + "_from": "ansi-align@^3.0.0", + "_id": "ansi-align@3.0.1", + "_inBundle": false, + "_integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "_location": "/ansi-align", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-align@^3.0.0", + "name": "ansi-align", + "escapedName": "ansi-align", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/boxen" + ], + "_resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "_shasum": "0cdf12e111ace773a86e9a1fad1225c43cb19a59", + "_spec": "ansi-align@^3.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "nexdrew" + }, + "bugs": { + "url": "https://github.com/nexdrew/ansi-align/issues" + }, + "bundleDependencies": false, + "dependencies": { + "string-width": "^4.1.0" + }, + "deprecated": false, + "description": "align-text with ANSI support for CLIs", + "devDependencies": { + "ava": "^2.0.0", + "chalk": "^2.4.2", + "coveralls": "^3.0.3", + "nyc": "^14.0.0", + "standard": "^14.0.0", + "standard-version": "^7.0.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/nexdrew/ansi-align#readme", + "keywords": [ + "ansi", + "align", + "cli", + "center", + "pad" + ], + "license": "ISC", + "main": "index.js", + "name": "ansi-align", + "repository": { + "type": "git", + "url": "git+https://github.com/nexdrew/ansi-align.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "pretest": "standard", + "release": "standard-version", + "test": "nyc ava" + }, + "version": "3.0.1" +} diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000..2dbf6af --- /dev/null +++ b/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js new file mode 100644 index 0000000..616ff83 --- /dev/null +++ b/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 0000000..1bdc307 --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,87 @@ +{ + "_from": "ansi-regex@^5.0.1", + "_id": "ansi-regex@5.0.1", + "_inBundle": false, + "_integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "_location": "/ansi-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-regex@^5.0.1", + "name": "ansi-regex", + "escapedName": "ansi-regex", + "rawSpec": "^5.0.1", + "saveSpec": null, + "fetchSpec": "^5.0.1" + }, + "_requiredBy": [ + "/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "_shasum": "082cb2c89c9fe8659a311a53bd6a4dc5301db304", + "_spec": "ansi-regex@^5.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "name": "ansi-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "5.0.1" +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000..4d848bc --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
      +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/ansi-styles/index.d.ts new file mode 100644 index 0000000..44a907e --- /dev/null +++ b/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,345 @@ +declare type CSSColor = + | 'aliceblue' + | 'antiquewhite' + | 'aqua' + | 'aquamarine' + | 'azure' + | 'beige' + | 'bisque' + | 'black' + | 'blanchedalmond' + | 'blue' + | 'blueviolet' + | 'brown' + | 'burlywood' + | 'cadetblue' + | 'chartreuse' + | 'chocolate' + | 'coral' + | 'cornflowerblue' + | 'cornsilk' + | 'crimson' + | 'cyan' + | 'darkblue' + | 'darkcyan' + | 'darkgoldenrod' + | 'darkgray' + | 'darkgreen' + | 'darkgrey' + | 'darkkhaki' + | 'darkmagenta' + | 'darkolivegreen' + | 'darkorange' + | 'darkorchid' + | 'darkred' + | 'darksalmon' + | 'darkseagreen' + | 'darkslateblue' + | 'darkslategray' + | 'darkslategrey' + | 'darkturquoise' + | 'darkviolet' + | 'deeppink' + | 'deepskyblue' + | 'dimgray' + | 'dimgrey' + | 'dodgerblue' + | 'firebrick' + | 'floralwhite' + | 'forestgreen' + | 'fuchsia' + | 'gainsboro' + | 'ghostwhite' + | 'gold' + | 'goldenrod' + | 'gray' + | 'green' + | 'greenyellow' + | 'grey' + | 'honeydew' + | 'hotpink' + | 'indianred' + | 'indigo' + | 'ivory' + | 'khaki' + | 'lavender' + | 'lavenderblush' + | 'lawngreen' + | 'lemonchiffon' + | 'lightblue' + | 'lightcoral' + | 'lightcyan' + | 'lightgoldenrodyellow' + | 'lightgray' + | 'lightgreen' + | 'lightgrey' + | 'lightpink' + | 'lightsalmon' + | 'lightseagreen' + | 'lightskyblue' + | 'lightslategray' + | 'lightslategrey' + | 'lightsteelblue' + | 'lightyellow' + | 'lime' + | 'limegreen' + | 'linen' + | 'magenta' + | 'maroon' + | 'mediumaquamarine' + | 'mediumblue' + | 'mediumorchid' + | 'mediumpurple' + | 'mediumseagreen' + | 'mediumslateblue' + | 'mediumspringgreen' + | 'mediumturquoise' + | 'mediumvioletred' + | 'midnightblue' + | 'mintcream' + | 'mistyrose' + | 'moccasin' + | 'navajowhite' + | 'navy' + | 'oldlace' + | 'olive' + | 'olivedrab' + | 'orange' + | 'orangered' + | 'orchid' + | 'palegoldenrod' + | 'palegreen' + | 'paleturquoise' + | 'palevioletred' + | 'papayawhip' + | 'peachpuff' + | 'peru' + | 'pink' + | 'plum' + | 'powderblue' + | 'purple' + | 'rebeccapurple' + | 'red' + | 'rosybrown' + | 'royalblue' + | 'saddlebrown' + | 'salmon' + | 'sandybrown' + | 'seagreen' + | 'seashell' + | 'sienna' + | 'silver' + | 'skyblue' + | 'slateblue' + | 'slategray' + | 'slategrey' + | 'snow' + | 'springgreen' + | 'steelblue' + | 'tan' + | 'teal' + | 'thistle' + | 'tomato' + | 'turquoise' + | 'violet' + | 'wheat' + | 'white' + | 'whitesmoke' + | 'yellow' + | 'yellowgreen'; + +declare namespace ansiStyles { + interface ColorConvert { + /** + The RGB color space. + + @param red - (`0`-`255`) + @param green - (`0`-`255`) + @param blue - (`0`-`255`) + */ + rgb(red: number, green: number, blue: number): string; + + /** + The RGB HEX color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hex(hex: string): string; + + /** + @param keyword - A CSS color name. + */ + keyword(keyword: CSSColor): string; + + /** + The HSL color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param lightness - (`0`-`100`) + */ + hsl(hue: number, saturation: number, lightness: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param value - (`0`-`100`) + */ + hsv(hue: number, saturation: number, value: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param whiteness - (`0`-`100`) + @param blackness - (`0`-`100`) + */ + hwb(hue: number, whiteness: number, blackness: number): string; + + /** + Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. + */ + ansi(ansi: number): string; + + /** + Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(ansi: number): string; + } + + interface CSPair { + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; + } + + interface ColorBase { + readonly ansi: ColorConvert; + readonly ansi256: ColorConvert; + readonly ansi16m: ColorConvert; + + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + } + + interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; + } + + interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; + } + + interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; + } +} + +declare const ansiStyles: { + readonly modifier: ansiStyles.Modifier; + readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; + readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; + readonly codes: ReadonlyMap; +} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; + +export = ansiStyles; diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js new file mode 100644 index 0000000..5d82581 --- /dev/null +++ b/node_modules/ansi-styles/index.js @@ -0,0 +1,163 @@ +'use strict'; + +const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +const ansi2ansi = n => n; +const rgb2rgb = (r, g, b) => [r, g, b]; + +const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); + + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); + + return value; + }, + enumerable: true, + configurable: true + }); +}; + +/** @type {typeof import('color-convert')} */ +let colorConvert; +const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = require('color-convert'); + } + + const offset = isBackground ? 10 : 0; + const styles = {}; + + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } + + return styles; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json new file mode 100644 index 0000000..6ee0660 --- /dev/null +++ b/node_modules/ansi-styles/package.json @@ -0,0 +1,89 @@ +{ + "_from": "ansi-styles@^4.1.0", + "_id": "ansi-styles@4.3.0", + "_inBundle": false, + "_integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "_location": "/ansi-styles", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-styles@^4.1.0", + "name": "ansi-styles", + "escapedName": "ansi-styles", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "/chalk", + "/wrap-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "_shasum": "edd803628ae71c04c85ae7a0906edad34b648937", + "_spec": "ansi-styles@^4.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-styles/issues" + }, + "bundleDependencies": false, + "dependencies": { + "color-convert": "^2.0.1" + }, + "deprecated": false, + "description": "ANSI escape codes for styling strings in the terminal", + "devDependencies": { + "@types/color-convert": "^1.9.0", + "ava": "^2.3.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.11.0", + "xo": "^0.25.3" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "homepage": "https://github.com/chalk/ansi-styles#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "ansi-styles", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-styles.git" + }, + "scripts": { + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor", + "test": "xo && ava && tsd" + }, + "version": "4.3.0" +} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000..24883de --- /dev/null +++ b/node_modules/ansi-styles/readme.md @@ -0,0 +1,152 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + + + +## Install + +``` +$ npm install ansi-styles +``` + +## Usage + +```js +const style = require('ansi-styles'); + +console.log(`${style.green.open}Hello world!${style.green.close}`); + + +// Color conversion between 16/256/truecolor +// NOTE: If conversion goes to 16 colors or 256 colors, the original color +// may be degraded to fit that color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); +console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); +console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); +``` + +## API + +Each style has an `open` and `close` property. + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `style.modifier` +- `style.color` +- `style.bgColor` + +###### Example + +```js +console.log(style.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +console.log(style.codes.get(36)); +//=> 39 +``` + +## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) + +`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. + +The following color spaces from `color-convert` are supported: + +- `rgb` +- `hex` +- `keyword` +- `hsl` +- `hsv` +- `hwb` +- `ansi` +- `ansi256` + +To use these, call the associated conversion function with the intended output, for example: + +```js +style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code +style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code + +style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code +style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code + +style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code +style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE new file mode 100644 index 0000000..491766c --- /dev/null +++ b/node_modules/anymatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com) + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/anymatch/README.md b/node_modules/anymatch/README.md new file mode 100644 index 0000000..1dd67f5 --- /dev/null +++ b/node_modules/anymatch/README.md @@ -0,0 +1,87 @@ +anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master) +====== +Javascript module to match a string against a regular expression, glob, string, +or function that takes the string as an argument and returns a truthy or falsy +value. The matcher can also be an array of any or all of these. Useful for +allowing a very flexible user-defined config to define things like file paths. + +__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__ + + +Usage +----- +```sh +npm install anymatch +``` + +#### anymatch(matchers, testString, [returnIndex], [options]) +* __matchers__: (_Array|String|RegExp|Function_) +String to be directly matched, string with glob patterns, regular expression +test, function that takes the testString as an argument and returns a truthy +value if it should be matched, or an array of any number and mix of these types. +* __testString__: (_String|Array_) The string to test against the matchers. If +passed as an array, the first element of the array will be used as the +`testString` for non-function matchers, while the entire array will be applied +as the arguments for function matchers. +* __options__: (_Object_ [optional]_) Any of the [picomatch](https://github.com/micromatch/picomatch#options) options. + * __returnIndex__: (_Boolean [optional]_) If true, return the array index of +the first matcher that that testString matched, or -1 if no match, instead of a +boolean result. + +```js +const anymatch = require('anymatch'); + +const matchers = [ 'path/to/file.js', 'path/anyjs/**/*.js', /foo.js$/, string => string.includes('bar') && string.length > 10 ] ; + +anymatch(matchers, 'path/to/file.js'); // true +anymatch(matchers, 'path/anyjs/baz.js'); // true +anymatch(matchers, 'path/to/foo.js'); // true +anymatch(matchers, 'path/to/bar.js'); // true +anymatch(matchers, 'bar.js'); // false + +// returnIndex = true +anymatch(matchers, 'foo.js', {returnIndex: true}); // 2 +anymatch(matchers, 'path/anyjs/foo.js', {returnIndex: true}); // 1 + +// any picomatc + +// using globs to match directories and their children +anymatch('node_modules', 'node_modules'); // true +anymatch('node_modules', 'node_modules/somelib/index.js'); // false +anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true +anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false +anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true + +const matcher = anymatch(matchers); +['foo.js', 'bar.js'].filter(matcher); // [ 'foo.js' ] +anymatch master* ❯ + +``` + +#### anymatch(matchers) +You can also pass in only your matcher(s) to get a curried function that has +already been bound to the provided matching criteria. This can be used as an +`Array#filter` callback. + +```js +var matcher = anymatch(matchers); + +matcher('path/to/file.js'); // true +matcher('path/anyjs/baz.js', true); // 1 + +['foo.js', 'bar.js'].filter(matcher); // ['foo.js'] +``` + +Changelog +---------- +[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases) + +- **v3.0:** Removed `startIndex` and `endIndex` arguments. Node 8.x-only. +- **v2.0:** [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information). +- **v1.2:** anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch) +for glob pattern matching. Issues with glob pattern matching should be +reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues). + +License +------- +[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE) diff --git a/node_modules/anymatch/index.d.ts b/node_modules/anymatch/index.d.ts new file mode 100644 index 0000000..196d061 --- /dev/null +++ b/node_modules/anymatch/index.d.ts @@ -0,0 +1,19 @@ +type AnymatchFn = (testString: string) => boolean; +type AnymatchPattern = string|RegExp|AnymatchFn; +type AnymatchMatcher = AnymatchPattern|AnymatchPattern[] +type AnymatchTester = { + (testString: string|any[], returnIndex: true): number; + (testString: string|any[]): boolean; +} + +type PicomatchOptions = {dot: boolean}; + +declare const anymatch: { + (matchers: AnymatchMatcher): AnymatchTester; + (matchers: AnymatchMatcher, testString: string|any[], returnIndex: true | PicomatchOptions): number; + (matchers: AnymatchMatcher, testString: string|any[]): boolean; +} + +export {AnymatchMatcher as Matcher} +export {AnymatchTester as Tester} +export default anymatch diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js new file mode 100644 index 0000000..9fb3ebb --- /dev/null +++ b/node_modules/anymatch/index.js @@ -0,0 +1,104 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { value: true }); + +const picomatch = require('picomatch'); +const normalizePath = require('normalize-path'); + +/** + * @typedef {(testString: string) => boolean} AnymatchFn + * @typedef {string|RegExp|AnymatchFn} AnymatchPattern + * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher + */ +const BANG = '!'; +const DEFAULT_OPTIONS = {returnIndex: false}; +const arrify = (item) => Array.isArray(item) ? item : [item]; + +/** + * @param {AnymatchPattern} matcher + * @param {object} options + * @returns {AnymatchFn} + */ +const createPattern = (matcher, options) => { + if (typeof matcher === 'function') { + return matcher; + } + if (typeof matcher === 'string') { + const glob = picomatch(matcher, options); + return (string) => matcher === string || glob(string); + } + if (matcher instanceof RegExp) { + return (string) => matcher.test(string); + } + return (string) => false; +}; + +/** + * @param {Array} patterns + * @param {Array} negPatterns + * @param {String|Array} args + * @param {Boolean} returnIndex + * @returns {boolean|number} + */ +const matchPatterns = (patterns, negPatterns, args, returnIndex) => { + const isList = Array.isArray(args); + const _path = isList ? args[0] : args; + if (!isList && typeof _path !== 'string') { + throw new TypeError('anymatch: second argument must be a string: got ' + + Object.prototype.toString.call(_path)) + } + const path = normalizePath(_path); + + for (let index = 0; index < negPatterns.length; index++) { + const nglob = negPatterns[index]; + if (nglob(path)) { + return returnIndex ? -1 : false; + } + } + + const applied = isList && [path].concat(args.slice(1)); + for (let index = 0; index < patterns.length; index++) { + const pattern = patterns[index]; + if (isList ? pattern(...applied) : pattern(path)) { + return returnIndex ? index : true; + } + } + + return returnIndex ? -1 : false; +}; + +/** + * @param {AnymatchMatcher} matchers + * @param {Array|string} testString + * @param {object} options + * @returns {boolean|number|Function} + */ +const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { + if (matchers == null) { + throw new TypeError('anymatch: specify first argument'); + } + const opts = typeof options === 'boolean' ? {returnIndex: options} : options; + const returnIndex = opts.returnIndex || false; + + // Early cache for matchers. + const mtchers = arrify(matchers); + const negatedGlobs = mtchers + .filter(item => typeof item === 'string' && item.charAt(0) === BANG) + .map(item => item.slice(1)) + .map(item => picomatch(item, opts)); + const patterns = mtchers + .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG)) + .map(matcher => createPattern(matcher, opts)); + + if (testString == null) { + return (testString, ri = false) => { + const returnIndex = typeof ri === 'boolean' ? ri : false; + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); + } + } + + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); +}; + +anymatch.default = anymatch; +module.exports = anymatch; diff --git a/node_modules/anymatch/package.json b/node_modules/anymatch/package.json new file mode 100644 index 0000000..3a71208 --- /dev/null +++ b/node_modules/anymatch/package.json @@ -0,0 +1,76 @@ +{ + "_from": "anymatch@~3.1.2", + "_id": "anymatch@3.1.2", + "_inBundle": false, + "_integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "_location": "/anymatch", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "anymatch@~3.1.2", + "name": "anymatch", + "escapedName": "anymatch", + "rawSpec": "~3.1.2", + "saveSpec": null, + "fetchSpec": "~3.1.2" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "_shasum": "c0557c096af32f106198f4f4e2a383537e378716", + "_spec": "anymatch@~3.1.2", + "_where": "D:\\Cricbuzzz\\node_modules\\chokidar", + "author": { + "name": "Elan Shanker", + "url": "https://github.com/es128" + }, + "bugs": { + "url": "https://github.com/micromatch/anymatch/issues" + }, + "bundleDependencies": false, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "deprecated": false, + "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions", + "devDependencies": { + "mocha": "^6.1.3", + "nyc": "^14.0.0" + }, + "engines": { + "node": ">= 8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/micromatch/anymatch", + "keywords": [ + "match", + "any", + "string", + "file", + "fs", + "list", + "glob", + "regex", + "regexp", + "regular", + "expression", + "function" + ], + "license": "ISC", + "name": "anymatch", + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/anymatch.git" + }, + "scripts": { + "mocha": "mocha", + "test": "nyc mocha" + }, + "version": "3.1.2" +} diff --git a/node_modules/array-flatten/LICENSE b/node_modules/array-flatten/LICENSE new file mode 100644 index 0000000..983fbe8 --- /dev/null +++ b/node_modules/array-flatten/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/array-flatten/README.md b/node_modules/array-flatten/README.md new file mode 100644 index 0000000..91fa5b6 --- /dev/null +++ b/node_modules/array-flatten/README.md @@ -0,0 +1,43 @@ +# Array Flatten + +[![NPM version][npm-image]][npm-url] +[![NPM downloads][downloads-image]][downloads-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] + +> Flatten an array of nested arrays into a single flat array. Accepts an optional depth. + +## Installation + +``` +npm install array-flatten --save +``` + +## Usage + +```javascript +var flatten = require('array-flatten') + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) +//=> [1, 2, 3, 4, 5, 6, 7, 8, 9] + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) +//=> [1, 2, 3, [4, [5], 6], 7, 8, 9] + +(function () { + flatten(arguments) //=> [1, 2, 3] +})(1, [2, 3]) +``` + +## License + +MIT + +[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat +[npm-url]: https://npmjs.org/package/array-flatten +[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat +[downloads-url]: https://npmjs.org/package/array-flatten +[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat +[travis-url]: https://travis-ci.org/blakeembrey/array-flatten +[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat +[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master diff --git a/node_modules/array-flatten/array-flatten.js b/node_modules/array-flatten/array-flatten.js new file mode 100644 index 0000000..089117b --- /dev/null +++ b/node_modules/array-flatten/array-flatten.js @@ -0,0 +1,64 @@ +'use strict' + +/** + * Expose `arrayFlatten`. + */ +module.exports = arrayFlatten + +/** + * Recursive flatten function with depth. + * + * @param {Array} array + * @param {Array} result + * @param {Number} depth + * @return {Array} + */ +function flattenWithDepth (array, result, depth) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (depth > 0 && Array.isArray(value)) { + flattenWithDepth(value, result, depth - 1) + } else { + result.push(value) + } + } + + return result +} + +/** + * Recursive flatten function. Omitting depth is slightly faster. + * + * @param {Array} array + * @param {Array} result + * @return {Array} + */ +function flattenForever (array, result) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (Array.isArray(value)) { + flattenForever(value, result) + } else { + result.push(value) + } + } + + return result +} + +/** + * Flatten an array, with the ability to define a depth. + * + * @param {Array} array + * @param {Number} depth + * @return {Array} + */ +function arrayFlatten (array, depth) { + if (depth == null) { + return flattenForever(array, []) + } + + return flattenWithDepth(array, [], depth) +} diff --git a/node_modules/array-flatten/package.json b/node_modules/array-flatten/package.json new file mode 100644 index 0000000..18e2b1b --- /dev/null +++ b/node_modules/array-flatten/package.json @@ -0,0 +1,67 @@ +{ + "_args": [ + [ + "array-flatten@1.1.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "array-flatten@1.1.1", + "_id": "array-flatten@1.1.1", + "_inBundle": false, + "_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "_location": "/array-flatten", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "array-flatten@1.1.1", + "name": "array-flatten", + "escapedName": "array-flatten", + "rawSpec": "1.1.1", + "saveSpec": null, + "fetchSpec": "1.1.1" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "_spec": "1.1.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Blake Embrey", + "email": "hello@blakeembrey.com", + "url": "http://blakeembrey.me" + }, + "bugs": { + "url": "https://github.com/blakeembrey/array-flatten/issues" + }, + "description": "Flatten an array of nested arrays into a single flat array", + "devDependencies": { + "istanbul": "^0.3.13", + "mocha": "^2.2.4", + "pre-commit": "^1.0.7", + "standard": "^3.7.3" + }, + "files": [ + "array-flatten.js", + "LICENSE" + ], + "homepage": "https://github.com/blakeembrey/array-flatten", + "keywords": [ + "array", + "flatten", + "arguments", + "depth" + ], + "license": "MIT", + "main": "array-flatten.js", + "name": "array-flatten", + "repository": { + "type": "git", + "url": "git://github.com/blakeembrey/array-flatten.git" + }, + "scripts": { + "test": "istanbul cover _mocha -- -R spec" + }, + "version": "1.1.1" +} diff --git a/node_modules/asn1/LICENSE b/node_modules/asn1/LICENSE new file mode 100644 index 0000000..9b5dcdb --- /dev/null +++ b/node_modules/asn1/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Mark Cavage, All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE diff --git a/node_modules/asn1/README.md b/node_modules/asn1/README.md new file mode 100644 index 0000000..2208210 --- /dev/null +++ b/node_modules/asn1/README.md @@ -0,0 +1,50 @@ +node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. +Currently BER encoding is supported; at some point I'll likely have to do DER. + +## Usage + +Mostly, if you're *actually* needing to read and write ASN.1, you probably don't +need this readme to explain what and why. If you have no idea what ASN.1 is, +see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +The source is pretty much self-explanatory, and has read/write methods for the +common types out there. + +### Decoding + +The following reads an ASN.1 sequence with a boolean. + + var Ber = require('asn1').Ber; + + var reader = new Ber.Reader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff])); + + reader.readSequence(); + console.log('Sequence len: ' + reader.length); + if (reader.peek() === Ber.Boolean) + console.log(reader.readBoolean()); + +### Encoding + +The following generates the same payload as above. + + var Ber = require('asn1').Ber; + + var writer = new Ber.Writer(); + + writer.startSequence(); + writer.writeBoolean(true); + writer.endSequence(); + + console.log(writer.buffer); + +## Installation + + npm install asn1 + +## License + +MIT. + +## Bugs + +See . diff --git a/node_modules/asn1/lib/ber/errors.js b/node_modules/asn1/lib/ber/errors.js new file mode 100644 index 0000000..4557b8a --- /dev/null +++ b/node_modules/asn1/lib/ber/errors.js @@ -0,0 +1,13 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + + newInvalidAsn1Error: function (msg) { + var e = new Error(); + e.name = 'InvalidAsn1Error'; + e.message = msg || ''; + return e; + } + +}; diff --git a/node_modules/asn1/lib/ber/index.js b/node_modules/asn1/lib/ber/index.js new file mode 100644 index 0000000..387d132 --- /dev/null +++ b/node_modules/asn1/lib/ber/index.js @@ -0,0 +1,27 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var errors = require('./errors'); +var types = require('./types'); + +var Reader = require('./reader'); +var Writer = require('./writer'); + + +// --- Exports + +module.exports = { + + Reader: Reader, + + Writer: Writer + +}; + +for (var t in types) { + if (types.hasOwnProperty(t)) + module.exports[t] = types[t]; +} +for (var e in errors) { + if (errors.hasOwnProperty(e)) + module.exports[e] = errors[e]; +} diff --git a/node_modules/asn1/lib/ber/reader.js b/node_modules/asn1/lib/ber/reader.js new file mode 100644 index 0000000..8a7e4ca --- /dev/null +++ b/node_modules/asn1/lib/ber/reader.js @@ -0,0 +1,262 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; + +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + + + +// --- API + +function Reader(data) { + if (!data || !Buffer.isBuffer(data)) + throw new TypeError('data must be a node Buffer'); + + this._buf = data; + this._size = data.length; + + // These hold the "current" state + this._len = 0; + this._offset = 0; +} + +Object.defineProperty(Reader.prototype, 'length', { + enumerable: true, + get: function () { return (this._len); } +}); + +Object.defineProperty(Reader.prototype, 'offset', { + enumerable: true, + get: function () { return (this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'remain', { + get: function () { return (this._size - this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'buffer', { + get: function () { return (this._buf.slice(this._offset)); } +}); + + +/** + * Reads a single byte and advances offset; you can pass in `true` to make this + * a "peek" operation (i.e., get the byte, but don't advance the offset). + * + * @param {Boolean} peek true means don't move offset. + * @return {Number} the next byte, null if not enough data. + */ +Reader.prototype.readByte = function (peek) { + if (this._size - this._offset < 1) + return null; + + var b = this._buf[this._offset] & 0xff; + + if (!peek) + this._offset += 1; + + return b; +}; + + +Reader.prototype.peek = function () { + return this.readByte(true); +}; + + +/** + * Reads a (potentially) variable length off the BER buffer. This call is + * not really meant to be called directly, as callers have to manipulate + * the internal buffer afterwards. + * + * As a result of this call, you can call `Reader.length`, until the + * next thing called that does a readLength. + * + * @return {Number} the amount of offset to advance the buffer. + * @throws {InvalidAsn1Error} on bad ASN.1 + */ +Reader.prototype.readLength = function (offset) { + if (offset === undefined) + offset = this._offset; + + if (offset >= this._size) + return null; + + var lenB = this._buf[offset++] & 0xff; + if (lenB === null) + return null; + + if ((lenB & 0x80) === 0x80) { + lenB &= 0x7f; + + if (lenB === 0) + throw newInvalidAsn1Error('Indefinite length not supported'); + + if (lenB > 4) + throw newInvalidAsn1Error('encoding too long'); + + if (this._size - offset < lenB) + return null; + + this._len = 0; + for (var i = 0; i < lenB; i++) + this._len = (this._len << 8) + (this._buf[offset++] & 0xff); + + } else { + // Wasn't a variable length + this._len = lenB; + } + + return offset; +}; + + +/** + * Parses the next sequence in this BER buffer. + * + * To get the length of the sequence, call `Reader.length`. + * + * @return {Number} the sequence's tag. + */ +Reader.prototype.readSequence = function (tag) { + var seq = this.peek(); + if (seq === null) + return null; + if (tag !== undefined && tag !== seq) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + seq.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + this._offset = o; + return seq; +}; + + +Reader.prototype.readInt = function () { + return this._readTag(ASN1.Integer); +}; + + +Reader.prototype.readBoolean = function () { + return (this._readTag(ASN1.Boolean) === 0 ? false : true); +}; + + +Reader.prototype.readEnumeration = function () { + return this._readTag(ASN1.Enumeration); +}; + + +Reader.prototype.readString = function (tag, retbuf) { + if (!tag) + tag = ASN1.OctetString; + + var b = this.peek(); + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + + if (o === null) + return null; + + if (this.length > this._size - o) + return null; + + this._offset = o; + + if (this.length === 0) + return retbuf ? Buffer.alloc(0) : ''; + + var str = this._buf.slice(this._offset, this._offset + this.length); + this._offset += this.length; + + return retbuf ? str : str.toString('utf8'); +}; + +Reader.prototype.readOID = function (tag) { + if (!tag) + tag = ASN1.OID; + + var b = this.readString(tag, true); + if (b === null) + return null; + + var values = []; + var value = 0; + + for (var i = 0; i < b.length; i++) { + var byte = b[i] & 0xff; + + value <<= 7; + value += byte & 0x7f; + if ((byte & 0x80) === 0) { + values.push(value); + value = 0; + } + } + + value = values.shift(); + values.unshift(value % 40); + values.unshift((value / 40) >> 0); + + return values.join('.'); +}; + + +Reader.prototype._readTag = function (tag) { + assert.ok(tag !== undefined); + + var b = this.peek(); + + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + if (this.length > 4) + throw newInvalidAsn1Error('Integer too long: ' + this.length); + + if (this.length > this._size - o) + return null; + this._offset = o; + + var fb = this._buf[this._offset]; + var value = 0; + + for (var i = 0; i < this.length; i++) { + value <<= 8; + value |= (this._buf[this._offset++] & 0xff); + } + + if ((fb & 0x80) === 0x80 && i !== 4) + value -= (1 << (i * 8)); + + return value >> 0; +}; + + + +// --- Exported API + +module.exports = Reader; diff --git a/node_modules/asn1/lib/ber/types.js b/node_modules/asn1/lib/ber/types.js new file mode 100644 index 0000000..8aea000 --- /dev/null +++ b/node_modules/asn1/lib/ber/types.js @@ -0,0 +1,36 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + EOC: 0, + Boolean: 1, + Integer: 2, + BitString: 3, + OctetString: 4, + Null: 5, + OID: 6, + ObjectDescriptor: 7, + External: 8, + Real: 9, // float + Enumeration: 10, + PDV: 11, + Utf8String: 12, + RelativeOID: 13, + Sequence: 16, + Set: 17, + NumericString: 18, + PrintableString: 19, + T61String: 20, + VideotexString: 21, + IA5String: 22, + UTCTime: 23, + GeneralizedTime: 24, + GraphicString: 25, + VisibleString: 26, + GeneralString: 28, + UniversalString: 29, + CharacterString: 30, + BMPString: 31, + Constructor: 32, + Context: 128 +}; diff --git a/node_modules/asn1/lib/ber/writer.js b/node_modules/asn1/lib/ber/writer.js new file mode 100644 index 0000000..3515acf --- /dev/null +++ b/node_modules/asn1/lib/ber/writer.js @@ -0,0 +1,317 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + +var DEFAULT_OPTS = { + size: 1024, + growthFactor: 8 +}; + + +// --- Helpers + +function merge(from, to) { + assert.ok(from); + assert.equal(typeof (from), 'object'); + assert.ok(to); + assert.equal(typeof (to), 'object'); + + var keys = Object.getOwnPropertyNames(from); + keys.forEach(function (key) { + if (to[key]) + return; + + var value = Object.getOwnPropertyDescriptor(from, key); + Object.defineProperty(to, key, value); + }); + + return to; +} + + + +// --- API + +function Writer(options) { + options = merge(DEFAULT_OPTS, options || {}); + + this._buf = Buffer.alloc(options.size || 1024); + this._size = this._buf.length; + this._offset = 0; + this._options = options; + + // A list of offsets in the buffer where we need to insert + // sequence tag/len pairs. + this._seq = []; +} + +Object.defineProperty(Writer.prototype, 'buffer', { + get: function () { + if (this._seq.length) + throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)'); + + return (this._buf.slice(0, this._offset)); + } +}); + +Writer.prototype.writeByte = function (b) { + if (typeof (b) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(1); + this._buf[this._offset++] = b; +}; + + +Writer.prototype.writeInt = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Integer; + + var sz = 4; + + while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && + (sz > 1)) { + sz--; + i <<= 8; + } + + if (sz > 4) + throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff'); + + this._ensure(2 + sz); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = sz; + + while (sz-- > 0) { + this._buf[this._offset++] = ((i & 0xff000000) >>> 24); + i <<= 8; + } + +}; + + +Writer.prototype.writeNull = function () { + this.writeByte(ASN1.Null); + this.writeByte(0x00); +}; + + +Writer.prototype.writeEnumeration = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Enumeration; + + return this.writeInt(i, tag); +}; + + +Writer.prototype.writeBoolean = function (b, tag) { + if (typeof (b) !== 'boolean') + throw new TypeError('argument must be a Boolean'); + if (typeof (tag) !== 'number') + tag = ASN1.Boolean; + + this._ensure(3); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = 0x01; + this._buf[this._offset++] = b ? 0xff : 0x00; +}; + + +Writer.prototype.writeString = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string (was: ' + typeof (s) + ')'); + if (typeof (tag) !== 'number') + tag = ASN1.OctetString; + + var len = Buffer.byteLength(s); + this.writeByte(tag); + this.writeLength(len); + if (len) { + this._ensure(len); + this._buf.write(s, this._offset); + this._offset += len; + } +}; + + +Writer.prototype.writeBuffer = function (buf, tag) { + if (typeof (tag) !== 'number') + throw new TypeError('tag must be a number'); + if (!Buffer.isBuffer(buf)) + throw new TypeError('argument must be a buffer'); + + this.writeByte(tag); + this.writeLength(buf.length); + this._ensure(buf.length); + buf.copy(this._buf, this._offset, 0, buf.length); + this._offset += buf.length; +}; + + +Writer.prototype.writeStringArray = function (strings) { + if ((!strings instanceof Array)) + throw new TypeError('argument must be an Array[String]'); + + var self = this; + strings.forEach(function (s) { + self.writeString(s); + }); +}; + +// This is really to solve DER cases, but whatever for now +Writer.prototype.writeOID = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string'); + if (typeof (tag) !== 'number') + tag = ASN1.OID; + + if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) + throw new Error('argument is not a valid OID string'); + + function encodeOctet(bytes, octet) { + if (octet < 128) { + bytes.push(octet); + } else if (octet < 16384) { + bytes.push((octet >>> 7) | 0x80); + bytes.push(octet & 0x7F); + } else if (octet < 2097152) { + bytes.push((octet >>> 14) | 0x80); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else if (octet < 268435456) { + bytes.push((octet >>> 21) | 0x80); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else { + bytes.push(((octet >>> 28) | 0x80) & 0xFF); + bytes.push(((octet >>> 21) | 0x80) & 0xFF); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } + } + + var tmp = s.split('.'); + var bytes = []; + bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); + tmp.slice(2).forEach(function (b) { + encodeOctet(bytes, parseInt(b, 10)); + }); + + var self = this; + this._ensure(2 + bytes.length); + this.writeByte(tag); + this.writeLength(bytes.length); + bytes.forEach(function (b) { + self.writeByte(b); + }); +}; + + +Writer.prototype.writeLength = function (len) { + if (typeof (len) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(4); + + if (len <= 0x7f) { + this._buf[this._offset++] = len; + } else if (len <= 0xff) { + this._buf[this._offset++] = 0x81; + this._buf[this._offset++] = len; + } else if (len <= 0xffff) { + this._buf[this._offset++] = 0x82; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else if (len <= 0xffffff) { + this._buf[this._offset++] = 0x83; + this._buf[this._offset++] = len >> 16; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else { + throw newInvalidAsn1Error('Length too long (> 4 bytes)'); + } +}; + +Writer.prototype.startSequence = function (tag) { + if (typeof (tag) !== 'number') + tag = ASN1.Sequence | ASN1.Constructor; + + this.writeByte(tag); + this._seq.push(this._offset); + this._ensure(3); + this._offset += 3; +}; + + +Writer.prototype.endSequence = function () { + var seq = this._seq.pop(); + var start = seq + 3; + var len = this._offset - start; + + if (len <= 0x7f) { + this._shift(start, len, -2); + this._buf[seq] = len; + } else if (len <= 0xff) { + this._shift(start, len, -1); + this._buf[seq] = 0x81; + this._buf[seq + 1] = len; + } else if (len <= 0xffff) { + this._buf[seq] = 0x82; + this._buf[seq + 1] = len >> 8; + this._buf[seq + 2] = len; + } else if (len <= 0xffffff) { + this._shift(start, len, 1); + this._buf[seq] = 0x83; + this._buf[seq + 1] = len >> 16; + this._buf[seq + 2] = len >> 8; + this._buf[seq + 3] = len; + } else { + throw newInvalidAsn1Error('Sequence too long'); + } +}; + + +Writer.prototype._shift = function (start, len, shift) { + assert.ok(start !== undefined); + assert.ok(len !== undefined); + assert.ok(shift); + + this._buf.copy(this._buf, start + shift, start, start + len); + this._offset += shift; +}; + +Writer.prototype._ensure = function (len) { + assert.ok(len); + + if (this._size - this._offset < len) { + var sz = this._size * this._options.growthFactor; + if (sz - this._offset < len) + sz += len; + + var buf = Buffer.alloc(sz); + + this._buf.copy(buf, 0, 0, this._offset); + this._buf = buf; + this._size = sz; + } +}; + + + +// --- Exported API + +module.exports = Writer; diff --git a/node_modules/asn1/lib/index.js b/node_modules/asn1/lib/index.js new file mode 100644 index 0000000..ede3ab2 --- /dev/null +++ b/node_modules/asn1/lib/index.js @@ -0,0 +1,20 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +// If you have no idea what ASN.1 or BER is, see this: +// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +var Ber = require('./ber/index'); + + + +// --- Exported API + +module.exports = { + + Ber: Ber, + + BerReader: Ber.Reader, + + BerWriter: Ber.Writer + +}; diff --git a/node_modules/asn1/package.json b/node_modules/asn1/package.json new file mode 100644 index 0000000..0ffe407 --- /dev/null +++ b/node_modules/asn1/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "asn1@0.2.4", + "D:\\Cricbuzzz" + ] + ], + "_from": "asn1@0.2.4", + "_id": "asn1@0.2.4", + "_inBundle": false, + "_integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "_location": "/asn1", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "asn1@0.2.4", + "name": "asn1", + "escapedName": "asn1", + "rawSpec": "0.2.4", + "saveSpec": null, + "fetchSpec": "0.2.4" + }, + "_requiredBy": [ + "/sshpk" + ], + "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "_spec": "0.2.4", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Joyent", + "url": "joyent.com" + }, + "bugs": { + "url": "https://github.com/joyent/node-asn1/issues" + }, + "contributors": [ + { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + { + "name": "David Gwynne", + "email": "loki@animata.net" + }, + { + "name": "Yunong Xiao", + "email": "yunong@joyent.com" + }, + { + "name": "Alex Wilson", + "email": "alex.wilson@joyent.com" + } + ], + "dependencies": { + "safer-buffer": "~2.1.0" + }, + "description": "Contains parsers and serializers for ASN.1 (currently BER only)", + "devDependencies": { + "eslint": "2.13.1", + "eslint-plugin-joyent": "~1.3.0", + "faucet": "0.0.1", + "istanbul": "^0.3.6", + "tape": "^3.5.0" + }, + "homepage": "https://github.com/joyent/node-asn1#readme", + "license": "MIT", + "main": "lib/index.js", + "name": "asn1", + "repository": { + "type": "git", + "url": "git://github.com/joyent/node-asn1.git" + }, + "scripts": { + "test": "tape ./test/ber/*.test.js" + }, + "version": "0.2.4" +} diff --git a/node_modules/assert-plus/AUTHORS b/node_modules/assert-plus/AUTHORS new file mode 100644 index 0000000..1923524 --- /dev/null +++ b/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/assert-plus/CHANGES.md b/node_modules/assert-plus/CHANGES.md new file mode 100644 index 0000000..57d92bf --- /dev/null +++ b/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,14 @@ +# assert-plus Changelog + +## 1.0.0 + +- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input +- Add assert.finite check. Previous assert.number callers should use this if + they expect Infinity inputs to throw. + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/assert-plus/README.md b/node_modules/assert-plus/README.md new file mode 100644 index 0000000..ec200d1 --- /dev/null +++ b/node_modules/assert-plus/README.md @@ -0,0 +1,162 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.finite +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regexp +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfFinite +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfRegexp +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalFinite +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalRegexp +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfFinite +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfRegexp +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Bugs + +See . diff --git a/node_modules/assert-plus/assert.js b/node_modules/assert-plus/assert.js new file mode 100644 index 0000000..26f944e --- /dev/null +++ b/node_modules/assert-plus/assert.js @@ -0,0 +1,211 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/assert-plus/package.json b/node_modules/assert-plus/package.json new file mode 100644 index 0000000..d790cbd --- /dev/null +++ b/node_modules/assert-plus/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "assert-plus@1.0.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "assert-plus@1.0.0", + "_id": "assert-plus@1.0.0", + "_inBundle": false, + "_integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "_location": "/assert-plus", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "assert-plus@1.0.0", + "name": "assert-plus", + "escapedName": "assert-plus", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/dashdash", + "/getpass", + "/http-signature", + "/jsprim", + "/sshpk", + "/verror" + ], + "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + "bugs": { + "url": "https://github.com/mcavage/node-assert-plus/issues" + }, + "contributors": [ + { + "name": "Dave Eddy", + "email": "dave@daveeddy.com" + }, + { + "name": "Fred Kuo", + "email": "fred.kuo@joyent.com" + }, + { + "name": "Lars-Magnus Skog", + "email": "ralphtheninja@riseup.net" + }, + { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + { + "name": "Patrick Mooney", + "email": "pmooney@pfmooney.com" + }, + { + "name": "Rob Gulewich", + "email": "robert.gulewich@joyent.com" + } + ], + "dependencies": {}, + "description": "Extra assertions on top of node's assert module", + "devDependencies": { + "faucet": "0.0.1", + "tape": "4.2.2" + }, + "engines": { + "node": ">=0.8" + }, + "homepage": "https://github.com/mcavage/node-assert-plus#readme", + "license": "MIT", + "main": "./assert.js", + "name": "assert-plus", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/mcavage/node-assert-plus.git" + }, + "scripts": { + "test": "tape tests/*.js | ./node_modules/.bin/faucet" + }, + "version": "1.0.0" +} diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE new file mode 100644 index 0000000..c9eca5d --- /dev/null +++ b/node_modules/asynckit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md new file mode 100644 index 0000000..ddcc7e6 --- /dev/null +++ b/node_modules/asynckit/README.md @@ -0,0 +1,233 @@ +# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) + +Minimal async jobs utility library, with streams support. + +[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) + +[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) +[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) +[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) + + + +AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. +Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. + +It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. + +| compression | size | +| :----------------- | -------: | +| asynckit.js | 12.34 kB | +| asynckit.min.js | 4.11 kB | +| asynckit.min.js.gz | 1.47 kB | + + +## Install + +```sh +$ npm install --save asynckit +``` + +## Examples + +### Parallel Jobs + +Runs iterator over provided array in parallel. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will terminate rest of the active jobs (if abort function is provided) +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var parallel = require('asynckit').parallel + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , target = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// async job accepts one element from the array +// and a callback function +function asyncJob(item, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var parallel = require('asynckit/parallel') + , assert = require('assert') + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] + , target = [] + , keys = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); + assert.deepEqual(keys, expectedKeys); +}); + +// supports full value, key, callback (shortcut) interface +function asyncJob(item, key, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + keys.push(key); + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). + +### Serial Jobs + +Runs iterator over provided array sequentially. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will not proceed to the rest of the items in the list +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var serial = require('asynckit/serial') + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// extended interface (item, key, callback) +// also supported for arrays +function asyncJob(item, key, cb) +{ + target.push(key); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var serial = require('asynckit').serial + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , target = [] + ; + + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// shortcut interface (item, callback) +// works for object as well as for the arrays +function asyncJob(item, cb) +{ + target.push(item); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). + +_Note: Since _object_ is an _unordered_ collection of properties, +it may produce unexpected results with sequential iterations. +Whenever order of the jobs' execution is important please use `serialOrdered` method._ + +### Ordered Serial Iterations + +TBD + +For example [compare-property](compare-property) package. + +### Streaming interface + +TBD + +## Want to Know More? + +More examples can be found in [test folder](test/). + +Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. + +## License + +AsyncKit is licensed under the MIT license. diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js new file mode 100644 index 0000000..c612f1a --- /dev/null +++ b/node_modules/asynckit/bench.js @@ -0,0 +1,76 @@ +/* eslint no-console: "off" */ + +var asynckit = require('./') + , async = require('async') + , assert = require('assert') + , expected = 0 + ; + +var Benchmark = require('benchmark'); +var suite = new Benchmark.Suite; + +var source = []; +for (var z = 1; z < 100; z++) +{ + source.push(z); + expected += z; +} + +suite +// add tests + +.add('async.map', function(deferred) +{ + var total = 0; + + async.map(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +.add('asynckit.parallel', function(deferred) +{ + var total = 0; + + asynckit.parallel(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +// add listeners +.on('cycle', function(ev) +{ + console.log(String(ev.target)); +}) +.on('complete', function() +{ + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +// run async +.run({ 'async': true }); diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js new file mode 100644 index 0000000..455f945 --- /dev/null +++ b/node_modules/asynckit/index.js @@ -0,0 +1,6 @@ +module.exports = +{ + parallel : require('./parallel.js'), + serial : require('./serial.js'), + serialOrdered : require('./serialOrdered.js') +}; diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js new file mode 100644 index 0000000..114367e --- /dev/null +++ b/node_modules/asynckit/lib/abort.js @@ -0,0 +1,29 @@ +// API +module.exports = abort; + +/** + * Aborts leftover active jobs + * + * @param {object} state - current state object + */ +function abort(state) +{ + Object.keys(state.jobs).forEach(clean.bind(state)); + + // reset leftover jobs + state.jobs = {}; +} + +/** + * Cleans up leftover job by invoking abort function for the provided job id + * + * @this state + * @param {string|number} key - job id to abort + */ +function clean(key) +{ + if (typeof this.jobs[key] == 'function') + { + this.jobs[key](); + } +} diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js new file mode 100644 index 0000000..7f1288a --- /dev/null +++ b/node_modules/asynckit/lib/async.js @@ -0,0 +1,34 @@ +var defer = require('./defer.js'); + +// API +module.exports = async; + +/** + * Runs provided callback asynchronously + * even if callback itself is not + * + * @param {function} callback - callback to invoke + * @returns {function} - augmented callback + */ +function async(callback) +{ + var isAsync = false; + + // check if async happened + defer(function() { isAsync = true; }); + + return function async_callback(err, result) + { + if (isAsync) + { + callback(err, result); + } + else + { + defer(function nextTick_callback() + { + callback(err, result); + }); + } + }; +} diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js new file mode 100644 index 0000000..b67110c --- /dev/null +++ b/node_modules/asynckit/lib/defer.js @@ -0,0 +1,26 @@ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js new file mode 100644 index 0000000..5d2839a --- /dev/null +++ b/node_modules/asynckit/lib/iterate.js @@ -0,0 +1,75 @@ +var async = require('./async.js') + , abort = require('./abort.js') + ; + +// API +module.exports = iterate; + +/** + * Iterates over each job object + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {object} state - current job status + * @param {function} callback - invoked when all elements processed + */ +function iterate(list, iterator, state, callback) +{ + // store current index + var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; + + state.jobs[key] = runJob(iterator, key, list[key], function(error, output) + { + // don't repeat yourself + // skip secondary callbacks + if (!(key in state.jobs)) + { + return; + } + + // clean up jobs + delete state.jobs[key]; + + if (error) + { + // don't process rest of the results + // stop still active jobs + // and reset the list + abort(state); + } + else + { + state.results[key] = output; + } + + // return salvaged results + callback(error, state.results); + }); +} + +/** + * Runs iterator over provided job element + * + * @param {function} iterator - iterator to invoke + * @param {string|number} key - key/index of the element in the list of jobs + * @param {mixed} item - job description + * @param {function} callback - invoked after iterator is done with the job + * @returns {function|mixed} - job abort function or something else + */ +function runJob(iterator, key, item, callback) +{ + var aborter; + + // allow shortcut if iterator expects only two arguments + if (iterator.length == 2) + { + aborter = iterator(item, async(callback)); + } + // otherwise go with full three arguments + else + { + aborter = iterator(item, key, async(callback)); + } + + return aborter; +} diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js new file mode 100644 index 0000000..78ad240 --- /dev/null +++ b/node_modules/asynckit/lib/readable_asynckit.js @@ -0,0 +1,91 @@ +var streamify = require('./streamify.js') + , defer = require('./defer.js') + ; + +// API +module.exports = ReadableAsyncKit; + +/** + * Base constructor for all streams + * used to hold properties/methods + */ +function ReadableAsyncKit() +{ + ReadableAsyncKit.super_.apply(this, arguments); + + // list of active jobs + this.jobs = {}; + + // add stream methods + this.destroy = destroy; + this._start = _start; + this._read = _read; +} + +/** + * Destroys readable stream, + * by aborting outstanding jobs + * + * @returns {void} + */ +function destroy() +{ + if (this.destroyed) + { + return; + } + + this.destroyed = true; + + if (typeof this.terminator == 'function') + { + this.terminator(); + } +} + +/** + * Starts provided jobs in async manner + * + * @private + */ +function _start() +{ + // first argument – runner function + var runner = arguments[0] + // take away first argument + , args = Array.prototype.slice.call(arguments, 1) + // second argument - input data + , input = args[0] + // last argument - result callback + , endCb = streamify.callback.call(this, args[args.length - 1]) + ; + + args[args.length - 1] = endCb; + // third argument - iterator + args[1] = streamify.iterator.call(this, args[1]); + + // allow time for proper setup + defer(function() + { + if (!this.destroyed) + { + this.terminator = runner.apply(null, args); + } + else + { + endCb(null, Array.isArray(input) ? [] : {}); + } + }.bind(this)); +} + + +/** + * Implement _read to comply with Readable streams + * Doesn't really make sense for flowing object mode + * + * @private + */ +function _read() +{ + +} diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js new file mode 100644 index 0000000..5d2929f --- /dev/null +++ b/node_modules/asynckit/lib/readable_parallel.js @@ -0,0 +1,25 @@ +var parallel = require('../parallel.js'); + +// API +module.exports = ReadableParallel; + +/** + * Streaming wrapper to `asynckit.parallel` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableParallel(list, iterator, callback) +{ + if (!(this instanceof ReadableParallel)) + { + return new ReadableParallel(list, iterator, callback); + } + + // turn on object mode + ReadableParallel.super_.call(this, {objectMode: true}); + + this._start(parallel, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js new file mode 100644 index 0000000..7822698 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial.js @@ -0,0 +1,25 @@ +var serial = require('../serial.js'); + +// API +module.exports = ReadableSerial; + +/** + * Streaming wrapper to `asynckit.serial` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerial(list, iterator, callback) +{ + if (!(this instanceof ReadableSerial)) + { + return new ReadableSerial(list, iterator, callback); + } + + // turn on object mode + ReadableSerial.super_.call(this, {objectMode: true}); + + this._start(serial, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js new file mode 100644 index 0000000..3de89c4 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial_ordered.js @@ -0,0 +1,29 @@ +var serialOrdered = require('../serialOrdered.js'); + +// API +module.exports = ReadableSerialOrdered; +// expose sort helpers +module.exports.ascending = serialOrdered.ascending; +module.exports.descending = serialOrdered.descending; + +/** + * Streaming wrapper to `asynckit.serialOrdered` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerialOrdered(list, iterator, sortMethod, callback) +{ + if (!(this instanceof ReadableSerialOrdered)) + { + return new ReadableSerialOrdered(list, iterator, sortMethod, callback); + } + + // turn on object mode + ReadableSerialOrdered.super_.call(this, {objectMode: true}); + + this._start(serialOrdered, list, iterator, sortMethod, callback); +} diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js new file mode 100644 index 0000000..cbea7ad --- /dev/null +++ b/node_modules/asynckit/lib/state.js @@ -0,0 +1,37 @@ +// API +module.exports = state; + +/** + * Creates initial state object + * for iteration over list + * + * @param {array|object} list - list to iterate over + * @param {function|null} sortMethod - function to use for keys sort, + * or `null` to keep them as is + * @returns {object} - initial state object + */ +function state(list, sortMethod) +{ + var isNamedList = !Array.isArray(list) + , initState = + { + index : 0, + keyedList: isNamedList || sortMethod ? Object.keys(list) : null, + jobs : {}, + results : isNamedList ? {} : [], + size : isNamedList ? Object.keys(list).length : list.length + } + ; + + if (sortMethod) + { + // sort array keys based on it's values + // sort object's keys just on own merit + initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) + { + return sortMethod(list[a], list[b]); + }); + } + + return initState; +} diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js new file mode 100644 index 0000000..f56a1c9 --- /dev/null +++ b/node_modules/asynckit/lib/streamify.js @@ -0,0 +1,141 @@ +var async = require('./async.js'); + +// API +module.exports = { + iterator: wrapIterator, + callback: wrapCallback +}; + +/** + * Wraps iterators with long signature + * + * @this ReadableAsyncKit# + * @param {function} iterator - function to wrap + * @returns {function} - wrapped function + */ +function wrapIterator(iterator) +{ + var stream = this; + + return function(item, key, cb) + { + var aborter + , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) + ; + + stream.jobs[key] = wrappedCb; + + // it's either shortcut (item, cb) + if (iterator.length == 2) + { + aborter = iterator(item, wrappedCb); + } + // or long format (item, key, cb) + else + { + aborter = iterator(item, key, wrappedCb); + } + + return aborter; + }; +} + +/** + * Wraps provided callback function + * allowing to execute snitch function before + * real callback + * + * @this ReadableAsyncKit# + * @param {function} callback - function to wrap + * @returns {function} - wrapped function + */ +function wrapCallback(callback) +{ + var stream = this; + + var wrapped = function(error, result) + { + return finisher.call(stream, error, result, callback); + }; + + return wrapped; +} + +/** + * Wraps provided iterator callback function + * makes sure snitch only called once, + * but passes secondary calls to the original callback + * + * @this ReadableAsyncKit# + * @param {function} callback - callback to wrap + * @param {number|string} key - iteration key + * @returns {function} wrapped callback + */ +function wrapIteratorCallback(callback, key) +{ + var stream = this; + + return function(error, output) + { + // don't repeat yourself + if (!(key in stream.jobs)) + { + callback(error, output); + return; + } + + // clean up jobs + delete stream.jobs[key]; + + return streamer.call(stream, error, {key: key, value: output}, callback); + }; +} + +/** + * Stream wrapper for iterator callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects iterator results + */ +function streamer(error, output, callback) +{ + if (error && !this.error) + { + this.error = error; + this.pause(); + this.emit('error', error); + // send back value only, as expected + callback(error, output && output.value); + return; + } + + // stream stuff + this.push(output); + + // back to original track + // send back value only, as expected + callback(error, output && output.value); +} + +/** + * Stream wrapper for finishing callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects final results + */ +function finisher(error, output, callback) +{ + // signal end of the stream + // only for successfully finished streams + if (!error) + { + this.push(null); + } + + // back to original track + callback(error, output); +} diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js new file mode 100644 index 0000000..d6eb992 --- /dev/null +++ b/node_modules/asynckit/lib/terminator.js @@ -0,0 +1,29 @@ +var abort = require('./abort.js') + , async = require('./async.js') + ; + +// API +module.exports = terminator; + +/** + * Terminates jobs in the attached state context + * + * @this AsyncKitState# + * @param {function} callback - final callback to invoke after termination + */ +function terminator(callback) +{ + if (!Object.keys(this.jobs).length) + { + return; + } + + // fast forward iteration index + this.index = this.size; + + // abort jobs + abort(this); + + // send back results we have so far + async(callback)(null, this.results); +} diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json new file mode 100644 index 0000000..87680e8 --- /dev/null +++ b/node_modules/asynckit/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + "asynckit@0.4.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "asynckit@0.4.0", + "_id": "asynckit@0.4.0", + "_inBundle": false, + "_integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "_location": "/asynckit", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "asynckit@0.4.0", + "name": "asynckit", + "escapedName": "asynckit", + "rawSpec": "0.4.0", + "saveSpec": null, + "fetchSpec": "0.4.0" + }, + "_requiredBy": [ + "/form-data" + ], + "_resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "_spec": "0.4.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Alex Indigo", + "email": "iam@alexindigo.com" + }, + "bugs": { + "url": "https://github.com/alexindigo/asynckit/issues" + }, + "dependencies": {}, + "description": "Minimal async jobs utility library, with streams support", + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.9", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.7", + "pre-commit": "^1.1.3", + "reamde": "^1.1.0", + "rimraf": "^2.5.2", + "size-table": "^0.2.0", + "tap-spec": "^4.1.1", + "tape": "^4.5.1" + }, + "homepage": "https://github.com/alexindigo/asynckit#readme", + "keywords": [ + "async", + "jobs", + "parallel", + "serial", + "iterator", + "array", + "object", + "stream", + "destroy", + "terminate", + "abort" + ], + "license": "MIT", + "main": "index.js", + "name": "asynckit", + "pre-commit": [ + "clean", + "lint", + "test", + "browser", + "report", + "size" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/alexindigo/asynckit.git" + }, + "scripts": { + "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", + "clean": "rimraf coverage", + "debug": "tape test/test-*.js", + "lint": "eslint *.js lib/*.js test/*.js", + "report": "istanbul report", + "size": "browserify index.js | size-table asynckit", + "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", + "win-test": "tape test/test-*.js" + }, + "version": "0.4.0" +} diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js new file mode 100644 index 0000000..3c50344 --- /dev/null +++ b/node_modules/asynckit/parallel.js @@ -0,0 +1,43 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = parallel; + +/** + * Runs iterator over provided array elements in parallel + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function parallel(list, iterator, callback) +{ + var state = initState(list); + + while (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, function(error, result) + { + if (error) + { + callback(error, result); + return; + } + + // looks like it's the last one + if (Object.keys(state.jobs).length === 0) + { + callback(null, state.results); + return; + } + }); + + state.index++; + } + + return terminator.bind(state, callback); +} diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js new file mode 100644 index 0000000..6cd949a --- /dev/null +++ b/node_modules/asynckit/serial.js @@ -0,0 +1,17 @@ +var serialOrdered = require('./serialOrdered.js'); + +// Public API +module.exports = serial; + +/** + * Runs iterator over provided array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serial(list, iterator, callback) +{ + return serialOrdered(list, iterator, null, callback); +} diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js new file mode 100644 index 0000000..607eafe --- /dev/null +++ b/node_modules/asynckit/serialOrdered.js @@ -0,0 +1,75 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = serialOrdered; +// sorting helpers +module.exports.ascending = ascending; +module.exports.descending = descending; + +/** + * Runs iterator over provided sorted array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serialOrdered(list, iterator, sortMethod, callback) +{ + var state = initState(list, sortMethod); + + iterate(list, iterator, state, function iteratorHandler(error, result) + { + if (error) + { + callback(error, result); + return; + } + + state.index++; + + // are we there yet? + if (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, iteratorHandler); + return; + } + + // done here + callback(null, state.results); + }); + + return terminator.bind(state, callback); +} + +/* + * -- Sort methods + */ + +/** + * sort helper to sort array elements in ascending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function ascending(a, b) +{ + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * sort helper to sort array elements in descending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function descending(a, b) +{ + return -1 * ascending(a, b); +} diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js new file mode 100644 index 0000000..d43465f --- /dev/null +++ b/node_modules/asynckit/stream.js @@ -0,0 +1,21 @@ +var inherits = require('util').inherits + , Readable = require('stream').Readable + , ReadableAsyncKit = require('./lib/readable_asynckit.js') + , ReadableParallel = require('./lib/readable_parallel.js') + , ReadableSerial = require('./lib/readable_serial.js') + , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') + ; + +// API +module.exports = +{ + parallel : ReadableParallel, + serial : ReadableSerial, + serialOrdered : ReadableSerialOrdered, +}; + +inherits(ReadableAsyncKit, Readable); + +inherits(ReadableParallel, ReadableAsyncKit); +inherits(ReadableSerial, ReadableAsyncKit); +inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/node_modules/aws-sign2/LICENSE b/node_modules/aws-sign2/LICENSE new file mode 100644 index 0000000..a4a9aee --- /dev/null +++ b/node_modules/aws-sign2/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/aws-sign2/README.md b/node_modules/aws-sign2/README.md new file mode 100644 index 0000000..763564e --- /dev/null +++ b/node_modules/aws-sign2/README.md @@ -0,0 +1,4 @@ +aws-sign +======== + +AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/node_modules/aws-sign2/index.js b/node_modules/aws-sign2/index.js new file mode 100644 index 0000000..fb35f6d --- /dev/null +++ b/node_modules/aws-sign2/index.js @@ -0,0 +1,212 @@ + +/*! + * Copyright 2010 LearnBoost + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Module dependencies. + */ + +var crypto = require('crypto') + , parse = require('url').parse + ; + +/** + * Valid keys. + */ + +var keys = + [ 'acl' + , 'location' + , 'logging' + , 'notification' + , 'partNumber' + , 'policy' + , 'requestPayment' + , 'torrent' + , 'uploadId' + , 'uploads' + , 'versionId' + , 'versioning' + , 'versions' + , 'website' + ] + +/** + * Return an "Authorization" header value with the given `options` + * in the form of "AWS :" + * + * @param {Object} options + * @return {String} + * @api private + */ + +function authorization (options) { + return 'AWS ' + options.key + ':' + sign(options) +} + +module.exports = authorization +module.exports.authorization = authorization + +/** + * Simple HMAC-SHA1 Wrapper + * + * @param {Object} options + * @return {String} + * @api private + */ + +function hmacSha1 (options) { + return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') +} + +module.exports.hmacSha1 = hmacSha1 + +/** + * Create a base64 sha1 HMAC for `options`. + * + * @param {Object} options + * @return {String} + * @api private + */ + +function sign (options) { + options.message = stringToSign(options) + return hmacSha1(options) +} +module.exports.sign = sign + +/** + * Create a base64 sha1 HMAC for `options`. + * + * Specifically to be used with S3 presigned URLs + * + * @param {Object} options + * @return {String} + * @api private + */ + +function signQuery (options) { + options.message = queryStringToSign(options) + return hmacSha1(options) +} +module.exports.signQuery= signQuery + +/** + * Return a string for sign() with the given `options`. + * + * Spec: + * + * \n + * \n + * \n + * \n + * [headers\n] + * + * + * @param {Object} options + * @return {String} + * @api private + */ + +function stringToSign (options) { + var headers = options.amazonHeaders || '' + if (headers) headers += '\n' + var r = + [ options.verb + , options.md5 + , options.contentType + , options.date ? options.date.toUTCString() : '' + , headers + options.resource + ] + return r.join('\n') +} +module.exports.stringToSign = stringToSign + +/** + * Return a string for sign() with the given `options`, but is meant exclusively + * for S3 presigned URLs + * + * Spec: + * + * \n + * + * + * @param {Object} options + * @return {String} + * @api private + */ + +function queryStringToSign (options){ + return 'GET\n\n\n' + options.date + '\n' + options.resource +} +module.exports.queryStringToSign = queryStringToSign + +/** + * Perform the following: + * + * - ignore non-amazon headers + * - lowercase fields + * - sort lexicographically + * - trim whitespace between ":" + * - join with newline + * + * @param {Object} headers + * @return {String} + * @api private + */ + +function canonicalizeHeaders (headers) { + var buf = [] + , fields = Object.keys(headers) + ; + for (var i = 0, len = fields.length; i < len; ++i) { + var field = fields[i] + , val = headers[field] + , field = field.toLowerCase() + ; + if (0 !== field.indexOf('x-amz')) continue + buf.push(field + ':' + val) + } + return buf.sort().join('\n') +} +module.exports.canonicalizeHeaders = canonicalizeHeaders + +/** + * Perform the following: + * + * - ignore non sub-resources + * - sort lexicographically + * + * @param {String} resource + * @return {String} + * @api private + */ + +function canonicalizeResource (resource) { + var url = parse(resource, true) + , path = url.pathname + , buf = [] + ; + + Object.keys(url.query).forEach(function(key){ + if (!~keys.indexOf(key)) return + var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) + buf.push(key + val) + }) + + return path + (buf.length ? '?' + buf.sort().join('&') : '') +} +module.exports.canonicalizeResource = canonicalizeResource diff --git a/node_modules/aws-sign2/package.json b/node_modules/aws-sign2/package.json new file mode 100644 index 0000000..cbb484c --- /dev/null +++ b/node_modules/aws-sign2/package.json @@ -0,0 +1,53 @@ +{ + "_args": [ + [ + "aws-sign2@0.7.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "aws-sign2@0.7.0", + "_id": "aws-sign2@0.7.0", + "_inBundle": false, + "_integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "_location": "/aws-sign2", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "aws-sign2@0.7.0", + "name": "aws-sign2", + "escapedName": "aws-sign2", + "rawSpec": "0.7.0", + "saveSpec": null, + "fetchSpec": "0.7.0" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "_spec": "0.7.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": "http://www.futurealoof.com" + }, + "bugs": { + "url": "https://github.com/mikeal/aws-sign/issues" + }, + "dependencies": {}, + "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", + "devDependencies": {}, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/mikeal/aws-sign#readme", + "license": "Apache-2.0", + "main": "index.js", + "name": "aws-sign2", + "optionalDependencies": {}, + "repository": { + "url": "git+https://github.com/mikeal/aws-sign.git" + }, + "version": "0.7.0" +} diff --git a/node_modules/aws4/.travis.yml b/node_modules/aws4/.travis.yml new file mode 100644 index 0000000..178bf31 --- /dev/null +++ b/node_modules/aws4/.travis.yml @@ -0,0 +1,9 @@ +language: node_js +node_js: + - "0.10" + - "0.12" + - "4" + - "6" + - "8" + - "10" + - "12" diff --git a/node_modules/aws4/LICENSE b/node_modules/aws4/LICENSE new file mode 100644 index 0000000..4f321e5 --- /dev/null +++ b/node_modules/aws4/LICENSE @@ -0,0 +1,19 @@ +Copyright 2013 Michael Hart (michael.hart.au@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/aws4/README.md b/node_modules/aws4/README.md new file mode 100644 index 0000000..1e9d61b --- /dev/null +++ b/node_modules/aws4/README.md @@ -0,0 +1,523 @@ +aws4 +---- + +[![Build Status](https://secure.travis-ci.org/mhart/aws4.png?branch=master)](http://travis-ci.org/mhart/aws4) + +A small utility to sign vanilla Node.js http(s) request options using Amazon's +[AWS Signature Version 4](http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html). + +If you want to sign and send AWS requests in a modern browser, or an environment like [Cloudflare Workers](https://developers.cloudflare.com/workers/), then check out [aws4fetch](https://github.com/mhart/aws4fetch) – otherwise you can also bundle this library for use [in the browser](./browser). + +This signature is supported by nearly all Amazon services, including +[S3](http://docs.aws.amazon.com/AmazonS3/latest/API/), +[EC2](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/), +[DynamoDB](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API.html), +[Kinesis](http://docs.aws.amazon.com/kinesis/latest/APIReference/), +[Lambda](http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.html), +[SQS](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/), +[SNS](http://docs.aws.amazon.com/sns/latest/api/), +[IAM](http://docs.aws.amazon.com/IAM/latest/APIReference/), +[STS](http://docs.aws.amazon.com/STS/latest/APIReference/), +[RDS](http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/), +[CloudWatch](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/), +[CloudWatch Logs](http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/), +[CodeDeploy](http://docs.aws.amazon.com/codedeploy/latest/APIReference/), +[CloudFront](http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/), +[CloudTrail](http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/), +[ElastiCache](http://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/), +[EMR](http://docs.aws.amazon.com/ElasticMapReduce/latest/API/), +[Glacier](http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-api.html), +[CloudSearch](http://docs.aws.amazon.com/cloudsearch/latest/developerguide/APIReq.html), +[Elastic Load Balancing](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/), +[Elastic Transcoder](http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/api-reference.html), +[CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/), +[Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/api/), +[Storage Gateway](http://docs.aws.amazon.com/storagegateway/latest/userguide/AWSStorageGatewayAPI.html), +[Data Pipeline](http://docs.aws.amazon.com/datapipeline/latest/APIReference/), +[Direct Connect](http://docs.aws.amazon.com/directconnect/latest/APIReference/), +[Redshift](http://docs.aws.amazon.com/redshift/latest/APIReference/), +[OpsWorks](http://docs.aws.amazon.com/opsworks/latest/APIReference/), +[SES](http://docs.aws.amazon.com/ses/latest/APIReference/), +[SWF](http://docs.aws.amazon.com/amazonswf/latest/apireference/), +[AutoScaling](http://docs.aws.amazon.com/AutoScaling/latest/APIReference/), +[Mobile Analytics](http://docs.aws.amazon.com/mobileanalytics/latest/ug/server-reference.html), +[Cognito Identity](http://docs.aws.amazon.com/cognitoidentity/latest/APIReference/), +[Cognito Sync](http://docs.aws.amazon.com/cognitosync/latest/APIReference/), +[Container Service](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/), +[AppStream](http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-api-rest.html), +[Key Management Service](http://docs.aws.amazon.com/kms/latest/APIReference/), +[Config](http://docs.aws.amazon.com/config/latest/APIReference/), +[CloudHSM](http://docs.aws.amazon.com/cloudhsm/latest/dg/api-ref.html), +[Route53](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rest.html) and +[Route53 Domains](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rpc.html). + +Indeed, the only AWS services that *don't* support v4 as of 2014-12-30 are +[Import/Export](http://docs.aws.amazon.com/AWSImportExport/latest/DG/api-reference.html) and +[SimpleDB](http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/SDB_API.html) +(they only support [AWS Signature Version 2](https://github.com/mhart/aws2)). + +It also provides defaults for a number of core AWS headers and +request parameters, making it very easy to query AWS services, or +build out a fully-featured AWS library. + +Example +------- + +```javascript +var http = require('http'), + https = require('https'), + aws4 = require('aws4') + +// given an options object you could pass to http.request +var opts = {host: 'sqs.us-east-1.amazonaws.com', path: '/?Action=ListQueues'} + +// alternatively (as aws4 can infer the host): +opts = {service: 'sqs', region: 'us-east-1', path: '/?Action=ListQueues'} + +// alternatively (as us-east-1 is default): +opts = {service: 'sqs', path: '/?Action=ListQueues'} + +aws4.sign(opts) // assumes AWS credentials are available in process.env + +console.log(opts) +/* +{ + host: 'sqs.us-east-1.amazonaws.com', + path: '/?Action=ListQueues', + headers: { + Host: 'sqs.us-east-1.amazonaws.com', + 'X-Amz-Date': '20121226T061030Z', + Authorization: 'AWS4-HMAC-SHA256 Credential=ABCDEF/20121226/us-east-1/sqs/aws4_request, ...' + } +} +*/ + +// we can now use this to query AWS using the standard node.js http API +http.request(opts, function(res) { res.pipe(process.stdout) }).end() +/* + + +... +*/ +``` + +More options +------------ + +```javascript +// you can also pass AWS credentials in explicitly (otherwise taken from process.env) +aws4.sign(opts, {accessKeyId: '', secretAccessKey: ''}) + +// can also add the signature to query strings +aws4.sign({service: 's3', path: '/my-bucket?X-Amz-Expires=12345', signQuery: true}) + +// create a utility function to pipe to stdout (with https this time) +function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') } + +// aws4 can infer the HTTP method if a body is passed in +// method will be POST and Content-Type: 'application/x-www-form-urlencoded; charset=utf-8' +request(aws4.sign({service: 'iam', body: 'Action=ListGroups&Version=2010-05-08'})) +/* + +... +*/ + +// can specify any custom option or header as per usual +request(aws4.sign({ + service: 'dynamodb', + region: 'ap-southeast-2', + method: 'POST', + path: '/', + headers: { + 'Content-Type': 'application/x-amz-json-1.0', + 'X-Amz-Target': 'DynamoDB_20120810.ListTables' + }, + body: '{}' +})) +/* +{"TableNames":[]} +... +*/ + +// works with all other services that support Signature Version 4 + +request(aws4.sign({service: 's3', path: '/', signQuery: true})) +/* + +... +*/ + +request(aws4.sign({service: 'ec2', path: '/?Action=DescribeRegions&Version=2014-06-15'})) +/* + +... +*/ + +request(aws4.sign({service: 'sns', path: '/?Action=ListTopics&Version=2010-03-31'})) +/* + +... +*/ + +request(aws4.sign({service: 'sts', path: '/?Action=GetSessionToken&Version=2011-06-15'})) +/* + +... +*/ + +request(aws4.sign({service: 'cloudsearch', path: '/?Action=ListDomainNames&Version=2013-01-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'ses', path: '/?Action=ListIdentities&Version=2010-12-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'autoscaling', path: '/?Action=DescribeAutoScalingInstances&Version=2011-01-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'elasticloadbalancing', path: '/?Action=DescribeLoadBalancers&Version=2012-06-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'cloudformation', path: '/?Action=ListStacks&Version=2010-05-15'})) +/* + +... +*/ + +request(aws4.sign({service: 'elasticbeanstalk', path: '/?Action=ListAvailableSolutionStacks&Version=2010-12-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'rds', path: '/?Action=DescribeDBInstances&Version=2012-09-17'})) +/* + +... +*/ + +request(aws4.sign({service: 'monitoring', path: '/?Action=ListMetrics&Version=2010-08-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'redshift', path: '/?Action=DescribeClusters&Version=2012-12-01'})) +/* + +... +*/ + +request(aws4.sign({service: 'cloudfront', path: '/2014-05-31/distribution'})) +/* + +... +*/ + +request(aws4.sign({service: 'elasticache', path: '/?Action=DescribeCacheClusters&Version=2014-07-15'})) +/* + +... +*/ + +request(aws4.sign({service: 'elasticmapreduce', path: '/?Action=DescribeJobFlows&Version=2009-03-31'})) +/* + +... +*/ + +request(aws4.sign({service: 'route53', path: '/2013-04-01/hostedzone'})) +/* + +... +*/ + +request(aws4.sign({service: 'appstream', path: '/applications'})) +/* +{"_links":{"curie":[{"href":"http://docs.aws.amazon.com/appstream/latest/... +... +*/ + +request(aws4.sign({service: 'cognito-sync', path: '/identitypools'})) +/* +{"Count":0,"IdentityPoolUsages":[],"MaxResults":16,"NextToken":null} +... +*/ + +request(aws4.sign({service: 'elastictranscoder', path: '/2012-09-25/pipelines'})) +/* +{"NextPageToken":null,"Pipelines":[]} +... +*/ + +request(aws4.sign({service: 'lambda', path: '/2014-11-13/functions/'})) +/* +{"Functions":[],"NextMarker":null} +... +*/ + +request(aws4.sign({service: 'ecs', path: '/?Action=ListClusters&Version=2014-11-13'})) +/* + +... +*/ + +request(aws4.sign({service: 'glacier', path: '/-/vaults', headers: {'X-Amz-Glacier-Version': '2012-06-01'}})) +/* +{"Marker":null,"VaultList":[]} +... +*/ + +request(aws4.sign({service: 'storagegateway', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'StorageGateway_20120630.ListGateways' +}})) +/* +{"Gateways":[]} +... +*/ + +request(aws4.sign({service: 'datapipeline', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'DataPipeline.ListPipelines' +}})) +/* +{"hasMoreResults":false,"pipelineIdList":[]} +... +*/ + +request(aws4.sign({service: 'opsworks', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'OpsWorks_20130218.DescribeStacks' +}})) +/* +{"Stacks":[]} +... +*/ + +request(aws4.sign({service: 'route53domains', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'Route53Domains_v20140515.ListDomains' +}})) +/* +{"Domains":[]} +... +*/ + +request(aws4.sign({service: 'kinesis', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'Kinesis_20131202.ListStreams' +}})) +/* +{"HasMoreStreams":false,"StreamNames":[]} +... +*/ + +request(aws4.sign({service: 'cloudtrail', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'CloudTrail_20131101.DescribeTrails' +}})) +/* +{"trailList":[]} +... +*/ + +request(aws4.sign({service: 'logs', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'Logs_20140328.DescribeLogGroups' +}})) +/* +{"logGroups":[]} +... +*/ + +request(aws4.sign({service: 'codedeploy', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'CodeDeploy_20141006.ListApplications' +}})) +/* +{"applications":[]} +... +*/ + +request(aws4.sign({service: 'directconnect', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'OvertureService.DescribeConnections' +}})) +/* +{"connections":[]} +... +*/ + +request(aws4.sign({service: 'kms', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'TrentService.ListKeys' +}})) +/* +{"Keys":[],"Truncated":false} +... +*/ + +request(aws4.sign({service: 'config', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'StarlingDoveService.DescribeDeliveryChannels' +}})) +/* +{"DeliveryChannels":[]} +... +*/ + +request(aws4.sign({service: 'cloudhsm', body: '{}', headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'CloudHsmFrontendService.ListAvailableZones' +}})) +/* +{"AZList":["us-east-1a","us-east-1b","us-east-1c"]} +... +*/ + +request(aws4.sign({ + service: 'swf', + body: '{"registrationStatus":"REGISTERED"}', + headers: { + 'Content-Type': 'application/x-amz-json-1.0', + 'X-Amz-Target': 'SimpleWorkflowService.ListDomains' + } +})) +/* +{"domainInfos":[]} +... +*/ + +request(aws4.sign({ + service: 'cognito-identity', + body: '{"MaxResults": 1}', + headers: { + 'Content-Type': 'application/x-amz-json-1.1', + 'X-Amz-Target': 'AWSCognitoIdentityService.ListIdentityPools' + } +})) +/* +{"IdentityPools":[]} +... +*/ + +request(aws4.sign({ + service: 'mobileanalytics', + path: '/2014-06-05/events', + body: JSON.stringify({events:[{ + eventType: 'a', + timestamp: new Date().toISOString(), + session: {}, + }]}), + headers: { + 'Content-Type': 'application/json', + 'X-Amz-Client-Context': JSON.stringify({ + client: {client_id: 'a', app_title: 'a'}, + custom: {}, + env: {platform: 'a'}, + services: {}, + }), + } +})) +/* +(HTTP 202, empty response) +*/ + +// Generate CodeCommit Git access password +var signer = new aws4.RequestSigner({ + service: 'codecommit', + host: 'git-codecommit.us-east-1.amazonaws.com', + method: 'GIT', + path: '/v1/repos/MyAwesomeRepo', +}) +var password = signer.getDateTime() + 'Z' + signer.signature() +``` + +API +--- + +### aws4.sign(requestOptions, [credentials]) + +This calculates and populates the `Authorization` header of +`requestOptions`, and any other necessary AWS headers and/or request +options. Returns `requestOptions` as a convenience for chaining. + +`requestOptions` is an object holding the same options that the node.js +[http.request](http://nodejs.org/docs/latest/api/http.html#http_http_request_options_callback) +function takes. + +The following properties of `requestOptions` are used in the signing or +populated if they don't already exist: + +- `hostname` or `host` (will be determined from `service` and `region` if not given) +- `method` (will use `'GET'` if not given or `'POST'` if there is a `body`) +- `path` (will use `'/'` if not given) +- `body` (will use `''` if not given) +- `service` (will be calculated from `hostname` or `host` if not given) +- `region` (will be calculated from `hostname` or `host` or use `'us-east-1'` if not given) +- `headers['Host']` (will use `hostname` or `host` or be calculated if not given) +- `headers['Content-Type']` (will use `'application/x-www-form-urlencoded; charset=utf-8'` + if not given and there is a `body`) +- `headers['Date']` (used to calculate the signature date if given, otherwise `new Date` is used) + +Your AWS credentials (which can be found in your +[AWS console](https://portal.aws.amazon.com/gp/aws/securityCredentials)) +can be specified in one of two ways: + +- As the second argument, like this: + +```javascript +aws4.sign(requestOptions, { + secretAccessKey: "", + accessKeyId: "", + sessionToken: "" +}) +``` + +- From `process.env`, such as this: + +``` +export AWS_SECRET_ACCESS_KEY="" +export AWS_ACCESS_KEY_ID="" +export AWS_SESSION_TOKEN="" +``` + +(will also use `AWS_ACCESS_KEY` and `AWS_SECRET_KEY` if available) + +The `sessionToken` property and `AWS_SESSION_TOKEN` environment variable are optional for signing +with [IAM STS temporary credentials](http://docs.aws.amazon.com/STS/latest/UsingSTS/using-temp-creds.html). + +Installation +------------ + +With [npm](http://npmjs.org/) do: + +``` +npm install aws4 +``` + +Can also be used [in the browser](./browser). + +Thanks +------ + +Thanks to [@jed](https://github.com/jed) for his +[dynamo-client](https://github.com/jed/dynamo-client) lib where I first +committed and subsequently extracted this code. + +Also thanks to the +[official node.js AWS SDK](https://github.com/aws/aws-sdk-js) for giving +me a start on implementing the v4 signature. + diff --git a/node_modules/aws4/aws4.js b/node_modules/aws4/aws4.js new file mode 100644 index 0000000..9014894 --- /dev/null +++ b/node_modules/aws4/aws4.js @@ -0,0 +1,345 @@ +var aws4 = exports, + url = require('url'), + querystring = require('querystring'), + crypto = require('crypto'), + lru = require('./lru'), + credentialsCache = lru(1000) + +// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html + +function hmac(key, string, encoding) { + return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding) +} + +function hash(string, encoding) { + return crypto.createHash('sha256').update(string, 'utf8').digest(encoding) +} + +// This function assumes the string has already been percent encoded +function encodeRfc3986(urlEncodedString) { + return urlEncodedString.replace(/[!'()*]/g, function(c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +function encodeRfc3986Full(str) { + return encodeRfc3986(encodeURIComponent(str)) +} + +// request: { path | body, [host], [method], [headers], [service], [region] } +// credentials: { accessKeyId, secretAccessKey, [sessionToken] } +function RequestSigner(request, credentials) { + + if (typeof request === 'string') request = url.parse(request) + + var headers = request.headers = (request.headers || {}), + hostParts = this.matchHost(request.hostname || request.host || headers.Host || headers.host) + + this.request = request + this.credentials = credentials || this.defaultCredentials() + + this.service = request.service || hostParts[0] || '' + this.region = request.region || hostParts[1] || 'us-east-1' + + // SES uses a different domain from the service name + if (this.service === 'email') this.service = 'ses' + + if (!request.method && request.body) + request.method = 'POST' + + if (!headers.Host && !headers.host) { + headers.Host = request.hostname || request.host || this.createHost() + + // If a port is specified explicitly, use it as is + if (request.port) + headers.Host += ':' + request.port + } + if (!request.hostname && !request.host) + request.hostname = headers.Host || headers.host + + this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT' +} + +RequestSigner.prototype.matchHost = function(host) { + var match = (host || '').match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/) + var hostParts = (match || []).slice(1, 3) + + // ES's hostParts are sometimes the other way round, if the value that is expected + // to be region equals ‘es’ switch them back + // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com + if (hostParts[1] === 'es') + hostParts = hostParts.reverse() + + return hostParts +} + +// http://docs.aws.amazon.com/general/latest/gr/rande.html +RequestSigner.prototype.isSingleRegion = function() { + // Special case for S3 and SimpleDB in us-east-1 + if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true + + return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts'] + .indexOf(this.service) >= 0 +} + +RequestSigner.prototype.createHost = function() { + var region = this.isSingleRegion() ? '' : + (this.service === 's3' && this.region !== 'us-east-1' ? '-' : '.') + this.region, + service = this.service === 'ses' ? 'email' : this.service + return service + region + '.amazonaws.com' +} + +RequestSigner.prototype.prepareRequest = function() { + this.parsePath() + + var request = this.request, headers = request.headers, query + + if (request.signQuery) { + + this.parsedPath.query = query = this.parsedPath.query || {} + + if (this.credentials.sessionToken) + query['X-Amz-Security-Token'] = this.credentials.sessionToken + + if (this.service === 's3' && !query['X-Amz-Expires']) + query['X-Amz-Expires'] = 86400 + + if (query['X-Amz-Date']) + this.datetime = query['X-Amz-Date'] + else + query['X-Amz-Date'] = this.getDateTime() + + query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256' + query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString() + query['X-Amz-SignedHeaders'] = this.signedHeaders() + + } else { + + if (!request.doNotModifyHeaders && !this.isCodeCommitGit) { + if (request.body && !headers['Content-Type'] && !headers['content-type']) + headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8' + + if (request.body && !headers['Content-Length'] && !headers['content-length']) + headers['Content-Length'] = Buffer.byteLength(request.body) + + if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token']) + headers['X-Amz-Security-Token'] = this.credentials.sessionToken + + if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256']) + headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex') + + if (headers['X-Amz-Date'] || headers['x-amz-date']) + this.datetime = headers['X-Amz-Date'] || headers['x-amz-date'] + else + headers['X-Amz-Date'] = this.getDateTime() + } + + delete headers.Authorization + delete headers.authorization + } +} + +RequestSigner.prototype.sign = function() { + if (!this.parsedPath) this.prepareRequest() + + if (this.request.signQuery) { + this.parsedPath.query['X-Amz-Signature'] = this.signature() + } else { + this.request.headers.Authorization = this.authHeader() + } + + this.request.path = this.formatPath() + + return this.request +} + +RequestSigner.prototype.getDateTime = function() { + if (!this.datetime) { + var headers = this.request.headers, + date = new Date(headers.Date || headers.date || new Date) + + this.datetime = date.toISOString().replace(/[:\-]|\.\d{3}/g, '') + + // Remove the trailing 'Z' on the timestamp string for CodeCommit git access + if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1) + } + return this.datetime +} + +RequestSigner.prototype.getDate = function() { + return this.getDateTime().substr(0, 8) +} + +RequestSigner.prototype.authHeader = function() { + return [ + 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(), + 'SignedHeaders=' + this.signedHeaders(), + 'Signature=' + this.signature(), + ].join(', ') +} + +RequestSigner.prototype.signature = function() { + var date = this.getDate(), + cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(), + kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey) + if (!kCredentials) { + kDate = hmac('AWS4' + this.credentials.secretAccessKey, date) + kRegion = hmac(kDate, this.region) + kService = hmac(kRegion, this.service) + kCredentials = hmac(kService, 'aws4_request') + credentialsCache.set(cacheKey, kCredentials) + } + return hmac(kCredentials, this.stringToSign(), 'hex') +} + +RequestSigner.prototype.stringToSign = function() { + return [ + 'AWS4-HMAC-SHA256', + this.getDateTime(), + this.credentialString(), + hash(this.canonicalString(), 'hex'), + ].join('\n') +} + +RequestSigner.prototype.canonicalString = function() { + if (!this.parsedPath) this.prepareRequest() + + var pathStr = this.parsedPath.path, + query = this.parsedPath.query, + headers = this.request.headers, + queryStr = '', + normalizePath = this.service !== 's3', + decodePath = this.service === 's3' || this.request.doNotEncodePath, + decodeSlashesInPath = this.service === 's3', + firstValOnly = this.service === 's3', + bodyHash + + if (this.service === 's3' && this.request.signQuery) { + bodyHash = 'UNSIGNED-PAYLOAD' + } else if (this.isCodeCommitGit) { + bodyHash = '' + } else { + bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] || + hash(this.request.body || '', 'hex') + } + + if (query) { + var reducedQuery = Object.keys(query).reduce(function(obj, key) { + if (!key) return obj + obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] : + (firstValOnly ? query[key][0] : query[key]) + return obj + }, {}) + var encodedQueryPieces = [] + Object.keys(reducedQuery).sort().forEach(function(key) { + if (!Array.isArray(reducedQuery[key])) { + encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key])) + } else { + reducedQuery[key].map(encodeRfc3986Full).sort() + .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) }) + } + }) + queryStr = encodedQueryPieces.join('&') + } + if (pathStr !== '/') { + if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/') + pathStr = pathStr.split('/').reduce(function(path, piece) { + if (normalizePath && piece === '..') { + path.pop() + } else if (!normalizePath || piece !== '.') { + if (decodePath) piece = decodeURIComponent(piece).replace(/\+/g, ' ') + path.push(encodeRfc3986Full(piece)) + } + return path + }, []).join('/') + if (pathStr[0] !== '/') pathStr = '/' + pathStr + if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/') + } + + return [ + this.request.method || 'GET', + pathStr, + queryStr, + this.canonicalHeaders() + '\n', + this.signedHeaders(), + bodyHash, + ].join('\n') +} + +RequestSigner.prototype.canonicalHeaders = function() { + var headers = this.request.headers + function trimAll(header) { + return header.toString().trim().replace(/\s+/g, ' ') + } + return Object.keys(headers) + .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 }) + .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) }) + .join('\n') +} + +RequestSigner.prototype.signedHeaders = function() { + return Object.keys(this.request.headers) + .map(function(key) { return key.toLowerCase() }) + .sort() + .join(';') +} + +RequestSigner.prototype.credentialString = function() { + return [ + this.getDate(), + this.region, + this.service, + 'aws4_request', + ].join('/') +} + +RequestSigner.prototype.defaultCredentials = function() { + var env = process.env + return { + accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY, + secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY, + sessionToken: env.AWS_SESSION_TOKEN, + } +} + +RequestSigner.prototype.parsePath = function() { + var path = this.request.path || '/' + + // S3 doesn't always encode characters > 127 correctly and + // all services don't encode characters > 255 correctly + // So if there are non-reserved chars (and it's not already all % encoded), just encode them all + if (/[^0-9A-Za-z;,/?:@&=+$\-_.!~*'()#%]/.test(path)) { + path = encodeURI(decodeURI(path)) + } + + var queryIx = path.indexOf('?'), + query = null + + if (queryIx >= 0) { + query = querystring.parse(path.slice(queryIx + 1)) + path = path.slice(0, queryIx) + } + + this.parsedPath = { + path: path, + query: query, + } +} + +RequestSigner.prototype.formatPath = function() { + var path = this.parsedPath.path, + query = this.parsedPath.query + + if (!query) return path + + // Services don't support empty query string keys + if (query[''] != null) delete query[''] + + return path + '?' + encodeRfc3986(querystring.stringify(query)) +} + +aws4.RequestSigner = RequestSigner + +aws4.sign = function(request, credentials) { + return new RequestSigner(request, credentials).sign() +} diff --git a/node_modules/aws4/lru.js b/node_modules/aws4/lru.js new file mode 100644 index 0000000..333f66a --- /dev/null +++ b/node_modules/aws4/lru.js @@ -0,0 +1,96 @@ +module.exports = function(size) { + return new LruCache(size) +} + +function LruCache(size) { + this.capacity = size | 0 + this.map = Object.create(null) + this.list = new DoublyLinkedList() +} + +LruCache.prototype.get = function(key) { + var node = this.map[key] + if (node == null) return undefined + this.used(node) + return node.val +} + +LruCache.prototype.set = function(key, val) { + var node = this.map[key] + if (node != null) { + node.val = val + } else { + if (!this.capacity) this.prune() + if (!this.capacity) return false + node = new DoublyLinkedNode(key, val) + this.map[key] = node + this.capacity-- + } + this.used(node) + return true +} + +LruCache.prototype.used = function(node) { + this.list.moveToFront(node) +} + +LruCache.prototype.prune = function() { + var node = this.list.pop() + if (node != null) { + delete this.map[node.key] + this.capacity++ + } +} + + +function DoublyLinkedList() { + this.firstNode = null + this.lastNode = null +} + +DoublyLinkedList.prototype.moveToFront = function(node) { + if (this.firstNode == node) return + + this.remove(node) + + if (this.firstNode == null) { + this.firstNode = node + this.lastNode = node + node.prev = null + node.next = null + } else { + node.prev = null + node.next = this.firstNode + node.next.prev = node + this.firstNode = node + } +} + +DoublyLinkedList.prototype.pop = function() { + var lastNode = this.lastNode + if (lastNode != null) { + this.remove(lastNode) + } + return lastNode +} + +DoublyLinkedList.prototype.remove = function(node) { + if (this.firstNode == node) { + this.firstNode = node.next + } else if (node.prev != null) { + node.prev.next = node.next + } + if (this.lastNode == node) { + this.lastNode = node.prev + } else if (node.next != null) { + node.next.prev = node.prev + } +} + + +function DoublyLinkedNode(key, val) { + this.key = key + this.val = val + this.prev = null + this.next = null +} diff --git a/node_modules/aws4/package.json b/node_modules/aws4/package.json new file mode 100644 index 0000000..8a801e2 --- /dev/null +++ b/node_modules/aws4/package.json @@ -0,0 +1,108 @@ +{ + "_args": [ + [ + "aws4@1.9.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "aws4@1.9.1", + "_id": "aws4@1.9.1", + "_inBundle": false, + "_integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "_location": "/aws4", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "aws4@1.9.1", + "name": "aws4", + "escapedName": "aws4", + "rawSpec": "1.9.1", + "saveSpec": null, + "fetchSpec": "1.9.1" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "_spec": "1.9.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Michael Hart", + "email": "michael.hart.au@gmail.com", + "url": "http://github.com/mhart" + }, + "bugs": { + "url": "https://github.com/mhart/aws4/issues" + }, + "description": "Signs and prepares requests using AWS Signature Version 4", + "devDependencies": { + "mocha": "^2.4.5", + "should": "^8.2.2" + }, + "homepage": "https://github.com/mhart/aws4#readme", + "keywords": [ + "amazon", + "aws", + "signature", + "s3", + "ec2", + "autoscaling", + "cloudformation", + "elasticloadbalancing", + "elb", + "elasticbeanstalk", + "cloudsearch", + "dynamodb", + "kinesis", + "lambda", + "glacier", + "sqs", + "sns", + "iam", + "sts", + "ses", + "swf", + "storagegateway", + "datapipeline", + "directconnect", + "redshift", + "opsworks", + "rds", + "monitoring", + "cloudtrail", + "cloudfront", + "codedeploy", + "elasticache", + "elasticmapreduce", + "elastictranscoder", + "emr", + "cloudwatch", + "mobileanalytics", + "cognitoidentity", + "cognitosync", + "cognito", + "containerservice", + "ecs", + "appstream", + "keymanagementservice", + "kms", + "config", + "cloudhsm", + "route53", + "route53domains", + "logs" + ], + "license": "MIT", + "main": "aws4.js", + "name": "aws4", + "repository": { + "type": "git", + "url": "git+https://github.com/mhart/aws4.git" + }, + "scripts": { + "integration": "node ./test/slow.js", + "test": "mocha ./test/fast.js -b -t 100s -R list" + }, + "version": "1.9.1" +} diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml new file mode 100644 index 0000000..cea8b16 --- /dev/null +++ b/node_modules/balanced-match/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/balanced-match" +patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..2cdc8e4 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 0000000..d2a48b6 --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,97 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 0000000..c67a646 --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,62 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + if(a===b) { + return [ai, bi]; + } + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 0000000..6c4bbba --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,76 @@ +{ + "_from": "balanced-match@^1.0.0", + "_id": "balanced-match@1.0.2", + "_inBundle": false, + "_integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "_location": "/balanced-match", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "balanced-match@^1.0.0", + "name": "balanced-match", + "escapedName": "balanced-match", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "_shasum": "e83e3a7e3f300b34cb9d87f615fa0cbf357690ee", + "_spec": "balanced-match@^1.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\brace-expansion", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "name": "balanced-match", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "bench": "matcha test/bench.js", + "test": "tape test/test.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.2" +} diff --git a/node_modules/bcrypt-pbkdf/CONTRIBUTING.md b/node_modules/bcrypt-pbkdf/CONTRIBUTING.md new file mode 100644 index 0000000..401d34e --- /dev/null +++ b/node_modules/bcrypt-pbkdf/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contributing + +This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new +changes. Anyone can submit changes. To get started, see the [cr.joyent.us user +guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). +This repo does not use GitHub pull requests. + +See the [Joyent Engineering +Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general +best practices expected in this repository. + +If you're changing something non-trivial or user-facing, you may want to submit +an issue first. diff --git a/node_modules/bcrypt-pbkdf/LICENSE b/node_modules/bcrypt-pbkdf/LICENSE new file mode 100644 index 0000000..fc58d2a --- /dev/null +++ b/node_modules/bcrypt-pbkdf/LICENSE @@ -0,0 +1,66 @@ +The Blowfish portions are under the following license: + +Blowfish block cipher for OpenBSD +Copyright 1997 Niels Provos +All rights reserved. + +Implementation advice by David Mazieres . + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +The bcrypt_pbkdf portions are under the following license: + +Copyright (c) 2013 Ted Unangst + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + +Performance improvements (Javascript-specific): + +Copyright 2016, Joyent Inc +Author: Alex Wilson + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/bcrypt-pbkdf/README.md b/node_modules/bcrypt-pbkdf/README.md new file mode 100644 index 0000000..7551f33 --- /dev/null +++ b/node_modules/bcrypt-pbkdf/README.md @@ -0,0 +1,45 @@ +Port of the OpenBSD `bcrypt_pbkdf` function to pure Javascript. `npm`-ified +version of [Devi Mandiri's port](https://github.com/devi/tmp/blob/master/js/bcrypt_pbkdf.js), +with some minor performance improvements. The code is copied verbatim (and +un-styled) from Devi's work. + +This product includes software developed by Niels Provos. + +## API + +### `bcrypt_pbkdf.pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds)` + +Derive a cryptographic key of arbitrary length from a given password and salt, +using the OpenBSD `bcrypt_pbkdf` function. This is a combination of Blowfish and +SHA-512. + +See [this article](http://www.tedunangst.com/flak/post/bcrypt-pbkdf) for +further information. + +Parameters: + + * `pass`, a Uint8Array of length `passlen` + * `passlen`, an integer Number + * `salt`, a Uint8Array of length `saltlen` + * `saltlen`, an integer Number + * `key`, a Uint8Array of length `keylen`, will be filled with output + * `keylen`, an integer Number + * `rounds`, an integer Number, number of rounds of the PBKDF to run + +### `bcrypt_pbkdf.hash(sha2pass, sha2salt, out)` + +Calculate a Blowfish hash, given SHA2-512 output of a password and salt. Used as +part of the inner round function in the PBKDF. + +Parameters: + + * `sha2pass`, a Uint8Array of length 64 + * `sha2salt`, a Uint8Array of length 64 + * `out`, a Uint8Array of length 32, will be filled with output + +## License + +This source form is a 1:1 port from the OpenBSD `blowfish.c` and `bcrypt_pbkdf.c`. +As a result, it retains the original copyright and license. The two files are +under slightly different (but compatible) licenses, and are here combined in +one file. For each of the full license texts see `LICENSE`. diff --git a/node_modules/bcrypt-pbkdf/index.js b/node_modules/bcrypt-pbkdf/index.js new file mode 100644 index 0000000..b1b5ad4 --- /dev/null +++ b/node_modules/bcrypt-pbkdf/index.js @@ -0,0 +1,556 @@ +'use strict'; + +var crypto_hash_sha512 = require('tweetnacl').lowlevel.crypto_hash; + +/* + * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a + * result, it retains the original copyright and license. The two files are + * under slightly different (but compatible) licenses, and are here combined in + * one file. + * + * Credit for the actual porting work goes to: + * Devi Mandiri + */ + +/* + * The Blowfish portions are under the following license: + * + * Blowfish block cipher for OpenBSD + * Copyright 1997 Niels Provos + * All rights reserved. + * + * Implementation advice by David Mazieres . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * The bcrypt_pbkdf portions are under the following license: + * + * Copyright (c) 2013 Ted Unangst + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Performance improvements (Javascript-specific): + * + * Copyright 2016, Joyent Inc + * Author: Alex Wilson + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +// Ported from OpenBSD bcrypt_pbkdf.c v1.9 + +var BLF_J = 0; + +var Blowfish = function() { + this.S = [ + new Uint32Array([ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]), + new Uint32Array([ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]), + new Uint32Array([ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]), + new Uint32Array([ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]) + ]; + this.P = new Uint32Array([ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b]); +}; + +function F(S, x8, i) { + return (((S[0][x8[i+3]] + + S[1][x8[i+2]]) ^ + S[2][x8[i+1]]) + + S[3][x8[i]]); +}; + +Blowfish.prototype.encipher = function(x, x8) { + if (x8 === undefined) { + x8 = new Uint8Array(x.buffer); + if (x.byteOffset !== 0) + x8 = x8.subarray(x.byteOffset); + } + x[0] ^= this.P[0]; + for (var i = 1; i < 16; i += 2) { + x[1] ^= F(this.S, x8, 0) ^ this.P[i]; + x[0] ^= F(this.S, x8, 4) ^ this.P[i+1]; + } + var t = x[0]; + x[0] = x[1] ^ this.P[17]; + x[1] = t; +}; + +Blowfish.prototype.decipher = function(x) { + var x8 = new Uint8Array(x.buffer); + if (x.byteOffset !== 0) + x8 = x8.subarray(x.byteOffset); + x[0] ^= this.P[17]; + for (var i = 16; i > 0; i -= 2) { + x[1] ^= F(this.S, x8, 0) ^ this.P[i]; + x[0] ^= F(this.S, x8, 4) ^ this.P[i-1]; + } + var t = x[0]; + x[0] = x[1] ^ this.P[0]; + x[1] = t; +}; + +function stream2word(data, databytes){ + var i, temp = 0; + for (i = 0; i < 4; i++, BLF_J++) { + if (BLF_J >= databytes) BLF_J = 0; + temp = (temp << 8) | data[BLF_J]; + } + return temp; +}; + +Blowfish.prototype.expand0state = function(key, keybytes) { + var d = new Uint32Array(2), i, k; + var d8 = new Uint8Array(d.buffer); + + for (i = 0, BLF_J = 0; i < 18; i++) { + this.P[i] ^= stream2word(key, keybytes); + } + BLF_J = 0; + + for (i = 0; i < 18; i += 2) { + this.encipher(d, d8); + this.P[i] = d[0]; + this.P[i+1] = d[1]; + } + + for (i = 0; i < 4; i++) { + for (k = 0; k < 256; k += 2) { + this.encipher(d, d8); + this.S[i][k] = d[0]; + this.S[i][k+1] = d[1]; + } + } +}; + +Blowfish.prototype.expandstate = function(data, databytes, key, keybytes) { + var d = new Uint32Array(2), i, k; + + for (i = 0, BLF_J = 0; i < 18; i++) { + this.P[i] ^= stream2word(key, keybytes); + } + + for (i = 0, BLF_J = 0; i < 18; i += 2) { + d[0] ^= stream2word(data, databytes); + d[1] ^= stream2word(data, databytes); + this.encipher(d); + this.P[i] = d[0]; + this.P[i+1] = d[1]; + } + + for (i = 0; i < 4; i++) { + for (k = 0; k < 256; k += 2) { + d[0] ^= stream2word(data, databytes); + d[1] ^= stream2word(data, databytes); + this.encipher(d); + this.S[i][k] = d[0]; + this.S[i][k+1] = d[1]; + } + } + BLF_J = 0; +}; + +Blowfish.prototype.enc = function(data, blocks) { + for (var i = 0; i < blocks; i++) { + this.encipher(data.subarray(i*2)); + } +}; + +Blowfish.prototype.dec = function(data, blocks) { + for (var i = 0; i < blocks; i++) { + this.decipher(data.subarray(i*2)); + } +}; + +var BCRYPT_BLOCKS = 8, + BCRYPT_HASHSIZE = 32; + +function bcrypt_hash(sha2pass, sha2salt, out) { + var state = new Blowfish(), + cdata = new Uint32Array(BCRYPT_BLOCKS), i, + ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105, + 99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109, + 105,116,101]); //"OxychromaticBlowfishSwatDynamite" + + state.expandstate(sha2salt, 64, sha2pass, 64); + for (i = 0; i < 64; i++) { + state.expand0state(sha2salt, 64); + state.expand0state(sha2pass, 64); + } + + for (i = 0; i < BCRYPT_BLOCKS; i++) + cdata[i] = stream2word(ciphertext, ciphertext.byteLength); + for (i = 0; i < 64; i++) + state.enc(cdata, cdata.byteLength / 8); + + for (i = 0; i < BCRYPT_BLOCKS; i++) { + out[4*i+3] = cdata[i] >>> 24; + out[4*i+2] = cdata[i] >>> 16; + out[4*i+1] = cdata[i] >>> 8; + out[4*i+0] = cdata[i]; + } +}; + +function bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) { + var sha2pass = new Uint8Array(64), + sha2salt = new Uint8Array(64), + out = new Uint8Array(BCRYPT_HASHSIZE), + tmpout = new Uint8Array(BCRYPT_HASHSIZE), + countsalt = new Uint8Array(saltlen+4), + i, j, amt, stride, dest, count, + origkeylen = keylen; + + if (rounds < 1) + return -1; + if (passlen === 0 || saltlen === 0 || keylen === 0 || + keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20)) + return -1; + + stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength); + amt = Math.floor((keylen + stride - 1) / stride); + + for (i = 0; i < saltlen; i++) + countsalt[i] = salt[i]; + + crypto_hash_sha512(sha2pass, pass, passlen); + + for (count = 1; keylen > 0; count++) { + countsalt[saltlen+0] = count >>> 24; + countsalt[saltlen+1] = count >>> 16; + countsalt[saltlen+2] = count >>> 8; + countsalt[saltlen+3] = count; + + crypto_hash_sha512(sha2salt, countsalt, saltlen + 4); + bcrypt_hash(sha2pass, sha2salt, tmpout); + for (i = out.byteLength; i--;) + out[i] = tmpout[i]; + + for (i = 1; i < rounds; i++) { + crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength); + bcrypt_hash(sha2pass, sha2salt, tmpout); + for (j = 0; j < out.byteLength; j++) + out[j] ^= tmpout[j]; + } + + amt = Math.min(amt, keylen); + for (i = 0; i < amt; i++) { + dest = i * stride + (count - 1); + if (dest >= origkeylen) + break; + key[dest] = out[i]; + } + keylen -= i; + } + + return 0; +}; + +module.exports = { + BLOCKS: BCRYPT_BLOCKS, + HASHSIZE: BCRYPT_HASHSIZE, + hash: bcrypt_hash, + pbkdf: bcrypt_pbkdf +}; diff --git a/node_modules/bcrypt-pbkdf/package.json b/node_modules/bcrypt-pbkdf/package.json new file mode 100644 index 0000000..72bc7a1 --- /dev/null +++ b/node_modules/bcrypt-pbkdf/package.json @@ -0,0 +1,47 @@ +{ + "_args": [ + [ + "bcrypt-pbkdf@1.0.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "bcrypt-pbkdf@1.0.2", + "_id": "bcrypt-pbkdf@1.0.2", + "_inBundle": false, + "_integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "_location": "/bcrypt-pbkdf", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "bcrypt-pbkdf@1.0.2", + "name": "bcrypt-pbkdf", + "escapedName": "bcrypt-pbkdf", + "rawSpec": "1.0.2", + "saveSpec": null, + "fetchSpec": "1.0.2" + }, + "_requiredBy": [ + "/sshpk" + ], + "_resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "_spec": "1.0.2", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/joyent/node-bcrypt-pbkdf/issues" + }, + "dependencies": { + "tweetnacl": "^0.14.3" + }, + "description": "Port of the OpenBSD bcrypt_pbkdf function to pure JS", + "devDependencies": {}, + "homepage": "https://github.com/joyent/node-bcrypt-pbkdf#readme", + "license": "BSD-3-Clause", + "main": "index.js", + "name": "bcrypt-pbkdf", + "repository": { + "type": "git", + "url": "git://github.com/joyent/node-bcrypt-pbkdf.git" + }, + "version": "1.0.2" +} diff --git a/node_modules/binary-extensions/binary-extensions.json b/node_modules/binary-extensions/binary-extensions.json new file mode 100644 index 0000000..4aab383 --- /dev/null +++ b/node_modules/binary-extensions/binary-extensions.json @@ -0,0 +1,260 @@ +[ + "3dm", + "3ds", + "3g2", + "3gp", + "7z", + "a", + "aac", + "adp", + "ai", + "aif", + "aiff", + "alz", + "ape", + "apk", + "appimage", + "ar", + "arj", + "asf", + "au", + "avi", + "bak", + "baml", + "bh", + "bin", + "bk", + "bmp", + "btif", + "bz2", + "bzip2", + "cab", + "caf", + "cgm", + "class", + "cmx", + "cpio", + "cr2", + "cur", + "dat", + "dcm", + "deb", + "dex", + "djvu", + "dll", + "dmg", + "dng", + "doc", + "docm", + "docx", + "dot", + "dotm", + "dra", + "DS_Store", + "dsk", + "dts", + "dtshd", + "dvb", + "dwg", + "dxf", + "ecelp4800", + "ecelp7470", + "ecelp9600", + "egg", + "eol", + "eot", + "epub", + "exe", + "f4v", + "fbs", + "fh", + "fla", + "flac", + "flatpak", + "fli", + "flv", + "fpx", + "fst", + "fvt", + "g3", + "gh", + "gif", + "graffle", + "gz", + "gzip", + "h261", + "h263", + "h264", + "icns", + "ico", + "ief", + "img", + "ipa", + "iso", + "jar", + "jpeg", + "jpg", + "jpgv", + "jpm", + "jxr", + "key", + "ktx", + "lha", + "lib", + "lvp", + "lz", + "lzh", + "lzma", + "lzo", + "m3u", + "m4a", + "m4v", + "mar", + "mdi", + "mht", + "mid", + "midi", + "mj2", + "mka", + "mkv", + "mmr", + "mng", + "mobi", + "mov", + "movie", + "mp3", + "mp4", + "mp4a", + "mpeg", + "mpg", + "mpga", + "mxu", + "nef", + "npx", + "numbers", + "nupkg", + "o", + "odp", + "ods", + "odt", + "oga", + "ogg", + "ogv", + "otf", + "ott", + "pages", + "pbm", + "pcx", + "pdb", + "pdf", + "pea", + "pgm", + "pic", + "png", + "pnm", + "pot", + "potm", + "potx", + "ppa", + "ppam", + "ppm", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx", + "psd", + "pya", + "pyc", + "pyo", + "pyv", + "qt", + "rar", + "ras", + "raw", + "resources", + "rgb", + "rip", + "rlc", + "rmf", + "rmvb", + "rpm", + "rtf", + "rz", + "s3m", + "s7z", + "scpt", + "sgi", + "shar", + "snap", + "sil", + "sketch", + "slk", + "smv", + "snk", + "so", + "stl", + "suo", + "sub", + "swf", + "tar", + "tbz", + "tbz2", + "tga", + "tgz", + "thmx", + "tif", + "tiff", + "tlz", + "ttc", + "ttf", + "txz", + "udf", + "uvh", + "uvi", + "uvm", + "uvp", + "uvs", + "uvu", + "viv", + "vob", + "war", + "wav", + "wax", + "wbmp", + "wdp", + "weba", + "webm", + "webp", + "whl", + "wim", + "wm", + "wma", + "wmv", + "wmx", + "woff", + "woff2", + "wrm", + "wvx", + "xbm", + "xif", + "xla", + "xlam", + "xls", + "xlsb", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx", + "xm", + "xmind", + "xpi", + "xpm", + "xwd", + "xz", + "z", + "zip", + "zipx" +] diff --git a/node_modules/binary-extensions/binary-extensions.json.d.ts b/node_modules/binary-extensions/binary-extensions.json.d.ts new file mode 100644 index 0000000..94a248c --- /dev/null +++ b/node_modules/binary-extensions/binary-extensions.json.d.ts @@ -0,0 +1,3 @@ +declare const binaryExtensionsJson: readonly string[]; + +export = binaryExtensionsJson; diff --git a/node_modules/binary-extensions/index.d.ts b/node_modules/binary-extensions/index.d.ts new file mode 100644 index 0000000..f469ac5 --- /dev/null +++ b/node_modules/binary-extensions/index.d.ts @@ -0,0 +1,14 @@ +/** +List of binary file extensions. + +@example +``` +import binaryExtensions = require('binary-extensions'); + +console.log(binaryExtensions); +//=> ['3ds', '3g2', …] +``` +*/ +declare const binaryExtensions: readonly string[]; + +export = binaryExtensions; diff --git a/node_modules/binary-extensions/index.js b/node_modules/binary-extensions/index.js new file mode 100644 index 0000000..d46e468 --- /dev/null +++ b/node_modules/binary-extensions/index.js @@ -0,0 +1 @@ +module.exports = require('./binary-extensions.json'); diff --git a/node_modules/binary-extensions/license b/node_modules/binary-extensions/license new file mode 100644 index 0000000..401b1c7 --- /dev/null +++ b/node_modules/binary-extensions/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/binary-extensions/package.json b/node_modules/binary-extensions/package.json new file mode 100644 index 0000000..c109156 --- /dev/null +++ b/node_modules/binary-extensions/package.json @@ -0,0 +1,70 @@ +{ + "_from": "binary-extensions@^2.0.0", + "_id": "binary-extensions@2.2.0", + "_inBundle": false, + "_integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "_location": "/binary-extensions", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "binary-extensions@^2.0.0", + "name": "binary-extensions", + "escapedName": "binary-extensions", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/is-binary-path" + ], + "_resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "_shasum": "75f502eeaf9ffde42fc98829645be4ea76bd9e2d", + "_spec": "binary-extensions@^2.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\is-binary-path", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/binary-extensions/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "List of binary file extensions", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts", + "binary-extensions.json", + "binary-extensions.json.d.ts" + ], + "homepage": "https://github.com/sindresorhus/binary-extensions#readme", + "keywords": [ + "binary", + "extensions", + "extension", + "file", + "json", + "list", + "array" + ], + "license": "MIT", + "name": "binary-extensions", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/binary-extensions.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.2.0" +} diff --git a/node_modules/binary-extensions/readme.md b/node_modules/binary-extensions/readme.md new file mode 100644 index 0000000..3e25dd8 --- /dev/null +++ b/node_modules/binary-extensions/readme.md @@ -0,0 +1,41 @@ +# binary-extensions + +> List of binary file extensions + +The list is just a [JSON file](binary-extensions.json) and can be used anywhere. + + +## Install + +``` +$ npm install binary-extensions +``` + + +## Usage + +```js +const binaryExtensions = require('binary-extensions'); + +console.log(binaryExtensions); +//=> ['3ds', '3g2', …] +``` + + +## Related + +- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file +- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions + + +--- + + diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md new file mode 100644 index 0000000..a1d3fbf --- /dev/null +++ b/node_modules/body-parser/HISTORY.md @@ -0,0 +1,609 @@ +1.19.0 / 2019-04-25 +=================== + + * deps: bytes@3.1.0 + - Add petabyte (`pb`) support + * deps: http-errors@1.7.2 + - Set constructor name when possible + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: iconv-lite@0.4.24 + - Added encoding MIK + * deps: qs@6.7.0 + - Fix parsing array brackets after index + * deps: raw-body@2.4.0 + - deps: bytes@3.1.0 + - deps: http-errors@1.7.2 + - deps: iconv-lite@0.4.24 + * deps: type-is@~1.6.17 + - deps: mime-types@~2.1.24 + - perf: prevent internal `throw` on invalid type + +1.18.3 / 2018-05-14 +=================== + + * Fix stack trace for strict json parse error + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: http-errors@~1.6.3 + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.0 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.23 + - Fix loading encoding with year appended + - Fix deprecation warnings on Node.js 10+ + * deps: qs@6.5.2 + * deps: raw-body@2.3.3 + - deps: http-errors@1.6.3 + - deps: iconv-lite@0.4.23 + * deps: type-is@~1.6.16 + - deps: mime-types@~2.1.18 + +1.18.2 / 2017-09-22 +=================== + + * deps: debug@2.6.9 + * perf: remove argument reassignment + +1.18.1 / 2017-09-12 +=================== + + * deps: content-type@~1.0.4 + - perf: remove argument reassignment + - perf: skip parameter parsing when no parameters + * deps: iconv-lite@0.4.19 + - Fix ISO-8859-1 regression + - Update Windows-1255 + * deps: qs@6.5.1 + - Fix parsing & compacting very deep objects + * deps: raw-body@2.3.2 + - deps: iconv-lite@0.4.19 + +1.18.0 / 2017-09-08 +=================== + + * Fix JSON strict violation error to match native parse error + * Include the `body` property on verify errors + * Include the `type` property on all generated errors + * Use `http-errors` to set status code on errors + * deps: bytes@3.0.0 + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: http-errors@~1.6.2 + - deps: depd@1.1.1 + * deps: iconv-lite@0.4.18 + - Add support for React Native + - Add a warning if not loaded as utf-8 + - Fix CESU-8 decoding in Node.js 8 + - Improve speed of ISO-8859-1 encoding + * deps: qs@6.5.0 + * deps: raw-body@2.3.1 + - Use `http-errors` for standard emitted errors + - deps: bytes@3.0.0 + - deps: iconv-lite@0.4.18 + - perf: skip buffer decoding on overage chunk + * perf: prevent internal `throw` when missing charset + +1.17.2 / 2017-05-17 +=================== + + * deps: debug@2.6.7 + - Fix `DEBUG_MAX_ARRAY_LENGTH` + - deps: ms@2.0.0 + * deps: type-is@~1.6.15 + - deps: mime-types@~2.1.15 + +1.17.1 / 2017-03-06 +=================== + + * deps: qs@6.4.0 + - Fix regression parsing keys starting with `[` + +1.17.0 / 2017-03-01 +=================== + + * deps: http-errors@~1.6.1 + - Make `message` property enumerable for `HttpError`s + - deps: setprototypeof@1.0.3 + * deps: qs@6.3.1 + - Fix compacting nested arrays + +1.16.1 / 2017-02-10 +=================== + + * deps: debug@2.6.1 + - Fix deprecation messages in WebStorm and other editors + - Undeprecate `DEBUG_FD` set to `1` or `2` + +1.16.0 / 2017-01-17 +=================== + + * deps: debug@2.6.0 + - Allow colors in workers + - Deprecated `DEBUG_FD` environment variable + - Fix error when running under React Native + - Use same color for same namespace + - deps: ms@0.7.2 + * deps: http-errors@~1.5.1 + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.2 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.15 + - Added encoding MS-31J + - Added encoding MS-932 + - Added encoding MS-936 + - Added encoding MS-949 + - Added encoding MS-950 + - Fix GBK/GB18030 handling of Euro character + * deps: qs@6.2.1 + - Fix array parsing from skipping empty values + * deps: raw-body@~2.2.0 + - deps: iconv-lite@0.4.15 + * deps: type-is@~1.6.14 + - deps: mime-types@~2.1.13 + +1.15.2 / 2016-06-19 +=================== + + * deps: bytes@2.4.0 + * deps: content-type@~1.0.2 + - perf: enable strict mode + * deps: http-errors@~1.5.0 + - Use `setprototypeof` module to replace `__proto__` setting + - deps: statuses@'>= 1.3.0 < 2' + - perf: enable strict mode + * deps: qs@6.2.0 + * deps: raw-body@~2.1.7 + - deps: bytes@2.4.0 + - perf: remove double-cleanup on happy path + * deps: type-is@~1.6.13 + - deps: mime-types@~2.1.11 + +1.15.1 / 2016-05-05 +=================== + + * deps: bytes@2.3.0 + - Drop partial bytes on all parsed units + - Fix parsing byte string that looks like hex + * deps: raw-body@~2.1.6 + - deps: bytes@2.3.0 + * deps: type-is@~1.6.12 + - deps: mime-types@~2.1.10 + +1.15.0 / 2016-02-10 +=================== + + * deps: http-errors@~1.4.0 + - Add `HttpError` export, for `err instanceof createError.HttpError` + - deps: inherits@2.0.1 + - deps: statuses@'>= 1.2.1 < 2' + * deps: qs@6.1.0 + * deps: type-is@~1.6.11 + - deps: mime-types@~2.1.9 + +1.14.2 / 2015-12-16 +=================== + + * deps: bytes@2.2.0 + * deps: iconv-lite@0.4.13 + * deps: qs@5.2.0 + * deps: raw-body@~2.1.5 + - deps: bytes@2.2.0 + - deps: iconv-lite@0.4.13 + * deps: type-is@~1.6.10 + - deps: mime-types@~2.1.8 + +1.14.1 / 2015-09-27 +=================== + + * Fix issue where invalid charset results in 400 when `verify` used + * deps: iconv-lite@0.4.12 + - Fix CESU-8 decoding in Node.js 4.x + * deps: raw-body@~2.1.4 + - Fix masking critical errors from `iconv-lite` + - deps: iconv-lite@0.4.12 + * deps: type-is@~1.6.9 + - deps: mime-types@~2.1.7 + +1.14.0 / 2015-09-16 +=================== + + * Fix JSON strict parse error to match syntax errors + * Provide static `require` analysis in `urlencoded` parser + * deps: depd@~1.1.0 + - Support web browser loading + * deps: qs@5.1.0 + * deps: raw-body@~2.1.3 + - Fix sync callback when attaching data listener causes sync read + * deps: type-is@~1.6.8 + - Fix type error when given invalid type to match against + - deps: mime-types@~2.1.6 + +1.13.3 / 2015-07-31 +=================== + + * deps: type-is@~1.6.6 + - deps: mime-types@~2.1.4 + +1.13.2 / 2015-07-05 +=================== + + * deps: iconv-lite@0.4.11 + * deps: qs@4.0.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix user-visible incompatibilities from 3.1.0 + - Fix various parsing edge cases + * deps: raw-body@~2.1.2 + - Fix error stack traces to skip `makeError` + - deps: iconv-lite@0.4.11 + * deps: type-is@~1.6.4 + - deps: mime-types@~2.1.2 + - perf: enable strict mode + - perf: remove argument reassignment + +1.13.1 / 2015-06-16 +=================== + + * deps: qs@2.4.2 + - Downgraded from 3.1.0 because of user-visible incompatibilities + +1.13.0 / 2015-06-14 +=================== + + * Add `statusCode` property on `Error`s, in addition to `status` + * Change `type` default to `application/json` for JSON parser + * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser + * Provide static `require` analysis + * Use the `http-errors` module to generate errors + * deps: bytes@2.1.0 + - Slight optimizations + * deps: iconv-lite@0.4.10 + - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails + - Leading BOM is now removed when decoding + * deps: on-finished@~2.3.0 + - Add defined behavior for HTTP `CONNECT` requests + - Add defined behavior for HTTP `Upgrade` requests + - deps: ee-first@1.1.1 + * deps: qs@3.1.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix various parsing edge cases + - Parsed object now has `null` prototype + * deps: raw-body@~2.1.1 + - Use `unpipe` module for unpiping requests + - deps: iconv-lite@0.4.10 + * deps: type-is@~1.6.3 + - deps: mime-types@~2.1.1 + - perf: reduce try block size + - perf: remove bitwise operations + * perf: enable strict mode + * perf: remove argument reassignment + * perf: remove delete call + +1.12.4 / 2015-05-10 +=================== + + * deps: debug@~2.2.0 + * deps: qs@2.4.2 + - Fix allowing parameters like `constructor` + * deps: on-finished@~2.2.1 + * deps: raw-body@~2.0.1 + - Fix a false-positive when unpiping in Node.js 0.8 + - deps: bytes@2.0.1 + * deps: type-is@~1.6.2 + - deps: mime-types@~2.0.11 + +1.12.3 / 2015-04-15 +=================== + + * Slight efficiency improvement when not debugging + * deps: depd@~1.0.1 + * deps: iconv-lite@0.4.8 + - Add encoding alias UNICODE-1-1-UTF-7 + * deps: raw-body@1.3.4 + - Fix hanging callback if request aborts during read + - deps: iconv-lite@0.4.8 + +1.12.2 / 2015-03-16 +=================== + + * deps: qs@2.4.1 + - Fix error when parameter `hasOwnProperty` is present + +1.12.1 / 2015-03-15 +=================== + + * deps: debug@~2.1.3 + - Fix high intensity foreground color for bold + - deps: ms@0.7.0 + * deps: type-is@~1.6.1 + - deps: mime-types@~2.0.10 + +1.12.0 / 2015-02-13 +=================== + + * add `debug` messages + * accept a function for the `type` option + * use `content-type` to parse `Content-Type` headers + * deps: iconv-lite@0.4.7 + - Gracefully support enumerables on `Object.prototype` + * deps: raw-body@1.3.3 + - deps: iconv-lite@0.4.7 + * deps: type-is@~1.6.0 + - fix argument reassignment + - fix false-positives in `hasBody` `Transfer-Encoding` check + - support wildcard for both type and subtype (`*/*`) + - deps: mime-types@~2.0.9 + +1.11.0 / 2015-01-30 +=================== + + * make internal `extended: true` depth limit infinity + * deps: type-is@~1.5.6 + - deps: mime-types@~2.0.8 + +1.10.2 / 2015-01-20 +=================== + + * deps: iconv-lite@0.4.6 + - Fix rare aliases of single-byte encodings + * deps: raw-body@1.3.2 + - deps: iconv-lite@0.4.6 + +1.10.1 / 2015-01-01 +=================== + + * deps: on-finished@~2.2.0 + * deps: type-is@~1.5.5 + - deps: mime-types@~2.0.7 + +1.10.0 / 2014-12-02 +=================== + + * make internal `extended: true` array limit dynamic + +1.9.3 / 2014-11-21 +================== + + * deps: iconv-lite@0.4.5 + - Fix Windows-31J and X-SJIS encoding support + * deps: qs@2.3.3 + - Fix `arrayLimit` behavior + * deps: raw-body@1.3.1 + - deps: iconv-lite@0.4.5 + * deps: type-is@~1.5.3 + - deps: mime-types@~2.0.3 + +1.9.2 / 2014-10-27 +================== + + * deps: qs@2.3.2 + - Fix parsing of mixed objects and values + +1.9.1 / 2014-10-22 +================== + + * deps: on-finished@~2.1.1 + - Fix handling of pipelined requests + * deps: qs@2.3.0 + - Fix parsing of mixed implicit and explicit arrays + * deps: type-is@~1.5.2 + - deps: mime-types@~2.0.2 + +1.9.0 / 2014-09-24 +================== + + * include the charset in "unsupported charset" error message + * include the encoding in "unsupported content encoding" error message + * deps: depd@~1.0.0 + +1.8.4 / 2014-09-23 +================== + + * fix content encoding to be case-insensitive + +1.8.3 / 2014-09-19 +================== + + * deps: qs@2.2.4 + - Fix issue with object keys starting with numbers truncated + +1.8.2 / 2014-09-15 +================== + + * deps: depd@0.4.5 + +1.8.1 / 2014-09-07 +================== + + * deps: media-typer@0.3.0 + * deps: type-is@~1.5.1 + +1.8.0 / 2014-09-05 +================== + + * make empty-body-handling consistent between chunked requests + - empty `json` produces `{}` + - empty `raw` produces `new Buffer(0)` + - empty `text` produces `''` + - empty `urlencoded` produces `{}` + * deps: qs@2.2.3 + - Fix issue where first empty value in array is discarded + * deps: type-is@~1.5.0 + - fix `hasbody` to be true for `content-length: 0` + +1.7.0 / 2014-09-01 +================== + + * add `parameterLimit` option to `urlencoded` parser + * change `urlencoded` extended array limit to 100 + * respond with 413 when over `parameterLimit` in `urlencoded` + +1.6.7 / 2014-08-29 +================== + + * deps: qs@2.2.2 + - Remove unnecessary cloning + +1.6.6 / 2014-08-27 +================== + + * deps: qs@2.2.0 + - Array parsing fix + - Performance improvements + +1.6.5 / 2014-08-16 +================== + + * deps: on-finished@2.1.0 + +1.6.4 / 2014-08-14 +================== + + * deps: qs@1.2.2 + +1.6.3 / 2014-08-10 +================== + + * deps: qs@1.2.1 + +1.6.2 / 2014-08-07 +================== + + * deps: qs@1.2.0 + - Fix parsing array of objects + +1.6.1 / 2014-08-06 +================== + + * deps: qs@1.1.0 + - Accept urlencoded square brackets + - Accept empty values in implicit array notation + +1.6.0 / 2014-08-05 +================== + + * deps: qs@1.0.2 + - Complete rewrite + - Limits array length to 20 + - Limits object depth to 5 + - Limits parameters to 1,000 + +1.5.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +1.5.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +1.5.0 / 2014-07-20 +================== + + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + * deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + * deps: raw-body@1.3.0 + - deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + - Fix `Cannot switch to old mode now` error on Node.js 0.10+ + * deps: type-is@~1.3.2 + +1.4.3 / 2014-06-19 +================== + + * deps: type-is@1.3.1 + - fix global variable leak + +1.4.2 / 2014-06-19 +================== + + * deps: type-is@1.3.0 + - improve type parsing + +1.4.1 / 2014-06-19 +================== + + * fix urlencoded extended deprecation message + +1.4.0 / 2014-06-19 +================== + + * add `text` parser + * add `raw` parser + * check accepted charset in content-type (accepts utf-8) + * check accepted encoding in content-encoding (accepts identity) + * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed + * deprecate `urlencoded()` without provided `extended` option + * lazy-load urlencoded parsers + * parsers split into files for reduced mem usage + * support gzip and deflate bodies + - set `inflate: false` to turn off + * deps: raw-body@1.2.2 + - Support all encodings from `iconv-lite` + +1.3.1 / 2014-06-11 +================== + + * deps: type-is@1.2.1 + - Switch dependency from mime to mime-types@1.0.0 + +1.3.0 / 2014-05-31 +================== + + * add `extended` option to urlencoded parser + +1.2.2 / 2014-05-27 +================== + + * deps: raw-body@1.1.6 + - assert stream encoding on node.js 0.8 + - assert stream encoding on node.js < 0.10.6 + - deps: bytes@1 + +1.2.1 / 2014-05-26 +================== + + * invoke `next(err)` after request fully read + - prevents hung responses and socket hang ups + +1.2.0 / 2014-05-11 +================== + + * add `verify` option + * deps: type-is@1.2.0 + - support suffix matching + +1.1.2 / 2014-05-11 +================== + + * improve json parser speed + +1.1.1 / 2014-05-11 +================== + + * fix repeated limit parsing with every request + +1.1.0 / 2014-05-10 +================== + + * add `type` option + * deps: pin for safety and consistency + +1.0.2 / 2014-04-14 +================== + + * use `type-is` module + +1.0.1 / 2014-03-20 +================== + + * lower default limits to 100kb diff --git a/node_modules/body-parser/LICENSE b/node_modules/body-parser/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/node_modules/body-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/body-parser/README.md b/node_modules/body-parser/README.md new file mode 100644 index 0000000..aba6297 --- /dev/null +++ b/node_modules/body-parser/README.md @@ -0,0 +1,443 @@ +# body-parser + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Node.js body parsing middleware. + +Parse incoming request bodies in a middleware before your handlers, available +under the `req.body` property. + +**Note** As `req.body`'s shape is based on user-controlled input, all +properties and values in this object are untrusted and should be validated +before trusting. For example, `req.body.foo.toString()` may fail in multiple +ways, for example the `foo` property may not be there or may not be a string, +and `toString` may not be a function and instead a string or other user input. + +[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). + +_This does not handle multipart bodies_, due to their complex and typically +large nature. For multipart bodies, you may be interested in the following +modules: + + * [busboy](https://www.npmjs.org/package/busboy#readme) and + [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) + * [multiparty](https://www.npmjs.org/package/multiparty#readme) and + [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) + * [formidable](https://www.npmjs.org/package/formidable#readme) + * [multer](https://www.npmjs.org/package/multer#readme) + +This module provides the following parsers: + + * [JSON body parser](#bodyparserjsonoptions) + * [Raw body parser](#bodyparserrawoptions) + * [Text body parser](#bodyparsertextoptions) + * [URL-encoded form body parser](#bodyparserurlencodedoptions) + +Other body parsers you might be interested in: + +- [body](https://www.npmjs.org/package/body#readme) +- [co-body](https://www.npmjs.org/package/co-body#readme) + +## Installation + +```sh +$ npm install body-parser +``` + +## API + + + +```js +var bodyParser = require('body-parser') +``` + +The `bodyParser` object exposes various factories to create middlewares. All +middlewares will populate the `req.body` property with the parsed body when +the `Content-Type` request header matches the `type` option, or an empty +object (`{}`) if there was no body to parse, the `Content-Type` was not matched, +or an error occurred. + +The various errors returned by this module are described in the +[errors section](#errors). + +### bodyParser.json([options]) + +Returns middleware that only parses `json` and only looks at requests where +the `Content-Type` header matches the `type` option. This parser accepts any +Unicode encoding of the body and supports automatic inflation of `gzip` and +`deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). + +#### Options + +The `json` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### reviver + +The `reviver` option is passed directly to `JSON.parse` as the second +argument. You can find more information on this argument +[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). + +##### strict + +When set to `true`, will only accept arrays and objects; when `false` will +accept anything `JSON.parse` accepts. Defaults to `true`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not a +function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `json`), a mime type (like `application/json`), or +a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a truthy +value. Defaults to `application/json`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.raw([options]) + +Returns middleware that parses all bodies as a `Buffer` and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a `Buffer` object +of the body. + +#### Options + +The `raw` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. +If not a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this +can be an extension name (like `bin`), a mime type (like +`application/octet-stream`), or a mime type with a wildcard (like `*/*` or +`application/*`). If a function, the `type` option is called as `fn(req)` +and the request is parsed if it returns a truthy value. Defaults to +`application/octet-stream`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.text([options]) + +Returns middleware that parses all bodies as a string and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` string containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a string of the +body. + +#### Options + +The `text` function takes an optional `options` object that may contain any of +the following keys: + +##### defaultCharset + +Specify the default character set for the text content if the charset is not +specified in the `Content-Type` header of the request. Defaults to `utf-8`. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `txt`), a mime type (like `text/plain`), or a mime +type with a wildcard (like `*/*` or `text/*`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a +truthy value. Defaults to `text/plain`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.urlencoded([options]) + +Returns middleware that only parses `urlencoded` bodies and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser accepts only UTF-8 encoding of the body and supports automatic +inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This object will contain +key-value pairs, where the value can be a string or array (when `extended` is +`false`), or any type (when `extended` is `true`). + +#### Options + +The `urlencoded` function takes an optional `options` object that may contain +any of the following keys: + +##### extended + +The `extended` option allows to choose between parsing the URL-encoded data +with the `querystring` library (when `false`) or the `qs` library (when +`true`). The "extended" syntax allows for rich objects and arrays to be +encoded into the URL-encoded format, allowing for a JSON-like experience +with URL-encoded. For more information, please +[see the qs library](https://www.npmjs.org/package/qs#readme). + +Defaults to `true`, but using the default has been deprecated. Please +research into the difference between `qs` and `querystring` and choose the +appropriate setting. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### parameterLimit + +The `parameterLimit` option controls the maximum number of parameters that +are allowed in the URL-encoded data. If a request contains more parameters +than this value, a 413 will be returned to the client. Defaults to `1000`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `urlencoded`), a mime type (like +`application/x-www-form-urlencoded`), or a mime type with a wildcard (like +`*/x-www-form-urlencoded`). If a function, the `type` option is called as +`fn(req)` and the request is parsed if it returns a truthy value. Defaults +to `application/x-www-form-urlencoded`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +## Errors + +The middlewares provided by this module create errors depending on the error +condition during parsing. The errors will typically have a `status`/`statusCode` +property that contains the suggested HTTP response code, an `expose` property +to determine if the `message` property should be displayed to the client, a +`type` property to determine the type of error without matching against the +`message`, and a `body` property containing the read body, if available. + +The following are the common errors emitted, though any error can come through +for various reasons. + +### content encoding unsupported + +This error will occur when the request had a `Content-Encoding` header that +contained an encoding but the "inflation" option was set to `false`. The +`status` property is set to `415`, the `type` property is set to +`'encoding.unsupported'`, and the `charset` property will be set to the +encoding that is unsupported. + +### request aborted + +This error will occur when the request is aborted by the client before reading +the body has finished. The `received` property will be set to the number of +bytes received before the request was aborted and the `expected` property is +set to the number of expected bytes. The `status` property is set to `400` +and `type` property is set to `'request.aborted'`. + +### request entity too large + +This error will occur when the request body's size is larger than the "limit" +option. The `limit` property will be set to the byte limit and the `length` +property will be set to the request body's length. The `status` property is +set to `413` and the `type` property is set to `'entity.too.large'`. + +### request size did not match content length + +This error will occur when the request's length did not match the length from +the `Content-Length` header. This typically occurs when the request is malformed, +typically when the `Content-Length` header was calculated based on characters +instead of bytes. The `status` property is set to `400` and the `type` property +is set to `'request.size.invalid'`. + +### stream encoding should not be set + +This error will occur when something called the `req.setEncoding` method prior +to this middleware. This module operates directly on bytes only and you cannot +call `req.setEncoding` when using this module. The `status` property is set to +`500` and the `type` property is set to `'stream.encoding.set'`. + +### too many parameters + +This error will occur when the content of the request exceeds the configured +`parameterLimit` for the `urlencoded` parser. The `status` property is set to +`413` and the `type` property is set to `'parameters.too.many'`. + +### unsupported charset "BOGUS" + +This error will occur when the request had a charset parameter in the +`Content-Type` header, but the `iconv-lite` module does not support it OR the +parser does not support it. The charset is contained in the message as well +as in the `charset` property. The `status` property is set to `415`, the +`type` property is set to `'charset.unsupported'`, and the `charset` property +is set to the charset that is unsupported. + +### unsupported content encoding "bogus" + +This error will occur when the request had a `Content-Encoding` header that +contained an unsupported encoding. The encoding is contained in the message +as well as in the `encoding` property. The `status` property is set to `415`, +the `type` property is set to `'encoding.unsupported'`, and the `encoding` +property is set to the encoding that is unsupported. + +## Examples + +### Express/Connect top-level generic + +This example demonstrates adding a generic JSON and URL-encoded parser as a +top-level middleware, which will parse the bodies of all incoming requests. +This is the simplest setup. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse application/x-www-form-urlencoded +app.use(bodyParser.urlencoded({ extended: false })) + +// parse application/json +app.use(bodyParser.json()) + +app.use(function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('you posted:\n') + res.end(JSON.stringify(req.body, null, 2)) +}) +``` + +### Express route-specific + +This example demonstrates adding body parsers specifically to the routes that +need them. In general, this is the most recommended way to use body-parser with +Express. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// create application/json parser +var jsonParser = bodyParser.json() + +// create application/x-www-form-urlencoded parser +var urlencodedParser = bodyParser.urlencoded({ extended: false }) + +// POST /login gets urlencoded bodies +app.post('/login', urlencodedParser, function (req, res) { + res.send('welcome, ' + req.body.username) +}) + +// POST /api/users gets JSON bodies +app.post('/api/users', jsonParser, function (req, res) { + // create user in req.body +}) +``` + +### Change accepted type for parsers + +All the parsers accept a `type` option which allows you to change the +`Content-Type` that the middleware will parse. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse various different custom JSON types as JSON +app.use(bodyParser.json({ type: 'application/*+json' })) + +// parse some custom thing into a Buffer +app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) + +// parse an HTML body into a string +app.use(bodyParser.text({ type: 'text/html' })) +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/body-parser.svg +[npm-url]: https://npmjs.org/package/body-parser +[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg +[travis-url]: https://travis-ci.org/expressjs/body-parser +[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg +[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master +[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg +[downloads-url]: https://npmjs.org/package/body-parser diff --git a/node_modules/body-parser/index.js b/node_modules/body-parser/index.js new file mode 100644 index 0000000..93c3a1f --- /dev/null +++ b/node_modules/body-parser/index.js @@ -0,0 +1,157 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var deprecate = require('depd')('body-parser') + +/** + * Cache of loaded parsers. + * @private + */ + +var parsers = Object.create(null) + +/** + * @typedef Parsers + * @type {function} + * @property {function} json + * @property {function} raw + * @property {function} text + * @property {function} urlencoded + */ + +/** + * Module exports. + * @type {Parsers} + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * JSON parser. + * @public + */ + +Object.defineProperty(exports, 'json', { + configurable: true, + enumerable: true, + get: createParserGetter('json') +}) + +/** + * Raw parser. + * @public + */ + +Object.defineProperty(exports, 'raw', { + configurable: true, + enumerable: true, + get: createParserGetter('raw') +}) + +/** + * Text parser. + * @public + */ + +Object.defineProperty(exports, 'text', { + configurable: true, + enumerable: true, + get: createParserGetter('text') +}) + +/** + * URL-encoded parser. + * @public + */ + +Object.defineProperty(exports, 'urlencoded', { + configurable: true, + enumerable: true, + get: createParserGetter('urlencoded') +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @public + */ + +function bodyParser (options) { + var opts = {} + + // exclude type option + if (options) { + for (var prop in options) { + if (prop !== 'type') { + opts[prop] = options[prop] + } + } + } + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser (req, res, next) { + _json(req, res, function (err) { + if (err) return next(err) + _urlencoded(req, res, next) + }) + } +} + +/** + * Create a getter for loading a parser. + * @private + */ + +function createParserGetter (name) { + return function get () { + return loadParser(name) + } +} + +/** + * Load a parser module. + * @private + */ + +function loadParser (parserName) { + var parser = parsers[parserName] + + if (parser !== undefined) { + return parser + } + + // this uses a switch for static require analysis + switch (parserName) { + case 'json': + parser = require('./lib/types/json') + break + case 'raw': + parser = require('./lib/types/raw') + break + case 'text': + parser = require('./lib/types/text') + break + case 'urlencoded': + parser = require('./lib/types/urlencoded') + break + } + + // store to prevent invoking require() + return (parsers[parserName] = parser) +} diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js new file mode 100644 index 0000000..c102609 --- /dev/null +++ b/node_modules/body-parser/lib/read.js @@ -0,0 +1,181 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var createError = require('http-errors') +var getBody = require('raw-body') +var iconv = require('iconv-lite') +var onFinished = require('on-finished') +var zlib = require('zlib') + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {function} debug + * @param {object} options + * @private + */ + +function read (req, res, next, parse, debug, options) { + var length + var opts = options + var stream + + // flag as parsed + req._body = true + + // read options + var encoding = opts.encoding !== null + ? opts.encoding + : null + var verify = opts.verify + + try { + // get the content stream + stream = contentstream(req, debug, opts.inflate) + length = stream.length + stream.length = undefined + } catch (err) { + return next(err) + } + + // set raw-body options + opts.length = length + opts.encoding = verify + ? null + : encoding + + // assert charset is supported + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + })) + } + + // read body + debug('read body') + getBody(stream, opts, function (error, body) { + if (error) { + var _error + + if (error.type === 'encoding.unsupported') { + // echo back charset + _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + }) + } else { + // set status code on error + _error = createError(400, error) + } + + // read off entire request + stream.resume() + onFinished(req, function onfinished () { + next(createError(400, _error)) + }) + return + } + + // verify + if (verify) { + try { + debug('verify body') + verify(req, res, body, encoding) + } catch (err) { + next(createError(403, err, { + body: body, + type: err.type || 'entity.verify.failed' + })) + return + } + } + + // parse + var str = body + try { + debug('parse body') + str = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(str) + } catch (err) { + next(createError(400, err, { + body: str, + type: err.type || 'entity.parse.failed' + })) + return + } + + next() + }) +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {function} debug + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream (req, debug, inflate) { + var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() + var length = req.headers['content-length'] + var stream + + debug('content-encoding "%s"', encoding) + + if (inflate === false && encoding !== 'identity') { + throw createError(415, 'content encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + debug('inflate body') + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + debug('gunzip body') + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + return stream +} diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js new file mode 100644 index 0000000..2971dc1 --- /dev/null +++ b/node_modules/body-parser/lib/types/json.js @@ -0,0 +1,230 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:json') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + * + * Allowed whitespace is defined in RFC 7159: + * + * ws = *( + * %x20 / ; Space + * %x09 / ; Horizontal tab + * %x0A / ; Line feed or New line + * %x0D ) ; Carriage return + */ + +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function json (options) { + var opts = options || {} + + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var inflate = opts.inflate !== false + var reviver = opts.reviver + var strict = opts.strict !== false + var type = opts.type || 'application/json' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + if (body.length === 0) { + // special-case empty json body, as it's a common client-side mistake + // TODO: maybe make this configurable or part of "strict" option + return {} + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + debug('strict violation') + throw createStrictSyntaxError(body, first) + } + } + + try { + debug('parse json') + return JSON.parse(body, reviver) + } catch (e) { + throw normalizeJsonSyntaxError(e, { + message: e.message, + stack: e.stack + }) + } + } + + return function jsonParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset per RFC 7159 sec 8.1 + var charset = getCharset(req) || 'utf-8' + if (charset.substr(0, 4) !== 'utf-') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Create strict violation syntax error matching native error. + * + * @param {string} str + * @param {string} char + * @return {Error} + * @private + */ + +function createStrictSyntaxError (str, char) { + var index = str.indexOf(char) + var partial = str.substring(0, index) + '#' + + try { + JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace('#', char), + stack: e.stack + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @private + */ + +function firstchar (str) { + return FIRST_CHAR_REGEXP.exec(str)[1] +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Normalize a SyntaxError for JSON.parse. + * + * @param {SyntaxError} error + * @param {object} obj + * @return {SyntaxError} + */ + +function normalizeJsonSyntaxError (error, obj) { + var keys = Object.getOwnPropertyNames(error) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key !== 'stack' && key !== 'message') { + delete error[key] + } + } + + // replace stack before message for Node.js 0.10 and below + error.stack = obj.stack.replace(error.message, obj.message) + error.message = obj.message + + return error +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js new file mode 100644 index 0000000..f5d1b67 --- /dev/null +++ b/node_modules/body-parser/lib/types/raw.js @@ -0,0 +1,101 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var debug = require('debug')('body-parser:raw') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw (options) { + var opts = options || {} + + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/octet-stream' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function rawParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // read + read(req, res, next, parse, debug, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js new file mode 100644 index 0000000..083a009 --- /dev/null +++ b/node_modules/body-parser/lib/types/text.js @@ -0,0 +1,121 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var debug = require('debug')('body-parser:text') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text (options) { + var opts = options || {} + + var defaultCharset = opts.defaultCharset || 'utf-8' + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'text/plain' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function textParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // get charset + var charset = getCharset(req) || defaultCharset + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js new file mode 100644 index 0000000..b2ca8f1 --- /dev/null +++ b/node_modules/body-parser/lib/types/urlencoded.js @@ -0,0 +1,284 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:urlencoded') +var deprecate = require('depd')('body-parser') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function urlencoded (options) { + var opts = options || {} + + // notice because option default will flip in next major + if (opts.extended === undefined) { + deprecate('undefined extended: provide extended option') + } + + var extended = opts.extended !== false + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/x-www-form-urlencoded' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate query parser + var queryparse = extended + ? extendedparser(opts) + : simpleparser(opts) + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset + var charset = getCharset(req) || 'utf-8' + if (charset !== 'utf-8') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + debug: debug, + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the extended query parser. + * + * @param {object} options + */ + +function extendedparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('qs') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + var arrayLimit = Math.max(100, paramCount) + + debug('parse extended urlencoding') + return parse(body, { + allowPrototypes: true, + arrayLimit: arrayLimit, + depth: Infinity, + parameterLimit: parameterLimit + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Count the number of parameters, stopping once limit reached + * + * @param {string} body + * @param {number} limit + * @api private + */ + +function parameterCount (body, limit) { + var count = 0 + var index = 0 + + while ((index = body.indexOf('&', index)) !== -1) { + count++ + index++ + + if (count === limit) { + return undefined + } + } + + return count +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser (name) { + var mod = parsers[name] + + if (mod !== undefined) { + return mod.parse + } + + // this uses a switch for static require analysis + switch (name) { + case 'qs': + mod = require('qs') + break + case 'querystring': + mod = require('querystring') + break + } + + // store to prevent invoking require() + parsers[name] = mod + + return mod.parse +} + +/** + * Get the simple query parser. + * + * @param {object} options + */ + +function simpleparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('querystring') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + debug('parse urlencoding') + return parse(body, undefined, undefined, { maxKeys: parameterLimit }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json new file mode 100644 index 0000000..a8cf301 --- /dev/null +++ b/node_modules/body-parser/package.json @@ -0,0 +1,93 @@ +{ + "_from": "body-parser@^1.19.0", + "_id": "body-parser@1.19.0", + "_inBundle": false, + "_integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "_location": "/body-parser", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "body-parser@^1.19.0", + "name": "body-parser", + "escapedName": "body-parser", + "rawSpec": "^1.19.0", + "saveSpec": null, + "fetchSpec": "^1.19.0" + }, + "_requiredBy": [ + "#USER", + "/", + "/express" + ], + "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "_shasum": "96b2709e57c9c4e09a6fd66a8fd979844f69f08a", + "_spec": "body-parser@^1.19.0", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/expressjs/body-parser/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "deprecated": false, + "description": "Node.js body parsing middleware", + "devDependencies": { + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "methods": "1.1.2", + "mocha": "6.1.4", + "safe-buffer": "5.1.2", + "supertest": "4.0.2" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "lib/", + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/expressjs/body-parser#readme", + "license": "MIT", + "name": "body-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/body-parser.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/" + }, + "version": "1.19.0" +} diff --git a/node_modules/boxen/index.d.ts b/node_modules/boxen/index.d.ts new file mode 100644 index 0000000..69ebd42 --- /dev/null +++ b/node_modules/boxen/index.d.ts @@ -0,0 +1,200 @@ +import {LiteralUnion} from 'type-fest'; +import {BoxStyle, Boxes} from 'cli-boxes'; + +declare namespace boxen { + /** + Characters used for custom border. + + @example + ``` + // affffb + // e e + // dffffc + + const border: CustomBorderStyle = { + topLeft: 'a', + topRight: 'b', + bottomRight: 'c', + bottomLeft: 'd', + vertical: 'e', + horizontal: 'f' + }; + ``` + */ + interface CustomBorderStyle extends BoxStyle {} + + /** + Spacing used for `padding` and `margin`. + */ + interface Spacing { + readonly top: number; + readonly right: number; + readonly bottom: number; + readonly left: number; + } + + interface Options { + /** + Color of the box border. + */ + readonly borderColor?: LiteralUnion< + | 'black' + | 'red' + | 'green' + | 'yellow' + | 'blue' + | 'magenta' + | 'cyan' + | 'white' + | 'gray' + | 'grey' + | 'blackBright' + | 'redBright' + | 'greenBright' + | 'yellowBright' + | 'blueBright' + | 'magentaBright' + | 'cyanBright' + | 'whiteBright', + string + >; + + /** + Style of the box border. + + @default 'single' + */ + readonly borderStyle?: keyof Boxes | CustomBorderStyle; + + /** + Reduce opacity of the border. + + @default false + */ + readonly dimBorder?: boolean; + + /** + Space between the text and box border. + + @default 0 + */ + readonly padding?: number | Spacing; + + /** + Space around the box. + + @default 0 + */ + readonly margin?: number | Spacing; + + /** + Float the box on the available terminal screen space. + + @default 'left' + */ + readonly float?: 'left' | 'right' | 'center'; + + /** + Color of the background. + */ + readonly backgroundColor?: LiteralUnion< + | 'black' + | 'red' + | 'green' + | 'yellow' + | 'blue' + | 'magenta' + | 'cyan' + | 'white' + | 'blackBright' + | 'redBright' + | 'greenBright' + | 'yellowBright' + | 'blueBright' + | 'magentaBright' + | 'cyanBright' + | 'whiteBright', + string + >; + + /** + Align the text in the box based on the widest line. + + @default 'left' + @deprecated Use `textAlignment` instead. + */ + readonly align?: 'left' | 'right' | 'center'; + + /** + Align the text in the box based on the widest line. + + @default 'left' + */ + readonly textAlignment?: 'left' | 'right' | 'center'; + + /** + Display a title at the top of the box. + If needed, the box will horizontally expand to fit the title. + + @example + ``` + console.log(boxen('foo bar', {title: 'example'})); + // ┌ example ┐ + // │foo bar │ + // └─────────┘ + ``` + */ + readonly title?: string; + + /** + Align the title in the top bar. + + @default 'left' + + @example + ``` + console.log(boxen('foo bar foo bar', {title: 'example', titleAlignment: 'center'})); + // ┌─── example ───┐ + // │foo bar foo bar│ + // └───────────────┘ + + console.log(boxen('foo bar foo bar', {title: 'example', titleAlignment: 'right'})); + // ┌────── example ┐ + // │foo bar foo bar│ + // └───────────────┘ + ``` + */ + readonly titleAlignment?: 'left' | 'right' | 'center'; + } +} + +/** +Creates a box in the terminal. + +@param text - The text inside the box. +@returns The box. + +@example +``` +import boxen = require('boxen'); + +console.log(boxen('unicorn', {padding: 1})); +// ┌─────────────┐ +// │ │ +// │ unicorn │ +// │ │ +// └─────────────┘ + +console.log(boxen('unicorn', {padding: 1, margin: 1, borderStyle: 'double'})); +// +// ╔═════════════╗ +// ║ ║ +// ║ unicorn ║ +// ║ ║ +// ╚═════════════╝ +// +``` +*/ +declare const boxen: (text: string, options?: boxen.Options) => string; + +export = boxen; diff --git a/node_modules/boxen/index.js b/node_modules/boxen/index.js new file mode 100644 index 0000000..d6bc693 --- /dev/null +++ b/node_modules/boxen/index.js @@ -0,0 +1,279 @@ +'use strict'; +const stringWidth = require('string-width'); +const chalk = require('chalk'); +const widestLine = require('widest-line'); +const cliBoxes = require('cli-boxes'); +const camelCase = require('camelcase'); +const ansiAlign = require('ansi-align'); +const wrapAnsi = require('wrap-ansi'); + +const NL = '\n'; +const PAD = ' '; + +const terminalColumns = () => { + const {env, stdout, stderr} = process; + + if (stdout && stdout.columns) { + return stdout.columns; + } + + if (stderr && stderr.columns) { + return stderr.columns; + } + + if (env.COLUMNS) { + return Number.parseInt(env.COLUMNS, 10); + } + + return 80; +}; + +const getObject = detail => { + return typeof detail === 'number' ? { + top: detail, + right: detail * 3, + bottom: detail, + left: detail * 3 + } : { + top: 0, + right: 0, + bottom: 0, + left: 0, + ...detail + }; +}; + +const getBorderChars = borderStyle => { + const sides = [ + 'topLeft', + 'topRight', + 'bottomRight', + 'bottomLeft', + 'vertical', + 'horizontal' + ]; + + let chararacters; + + if (typeof borderStyle === 'string') { + chararacters = cliBoxes[borderStyle]; + + if (!chararacters) { + throw new TypeError(`Invalid border style: ${borderStyle}`); + } + } else { + for (const side of sides) { + if (!borderStyle[side] || typeof borderStyle[side] !== 'string') { + throw new TypeError(`Invalid border style: ${side}`); + } + } + + chararacters = borderStyle; + } + + return chararacters; +}; + +const makeTitle = (text, horizontal, alignement) => { + let title = ''; + + const textWidth = stringWidth(text); + + switch (alignement) { + case 'left': + title = text + horizontal.slice(textWidth); + break; + case 'right': + title = horizontal.slice(textWidth) + text; + break; + default: + horizontal = horizontal.slice(textWidth); + + if (horizontal.length % 2 === 1) { // This is needed in case the length is odd + horizontal = horizontal.slice(Math.floor(horizontal.length / 2)); + title = horizontal.slice(1) + text + horizontal; // We reduce the left part of one character to avoid the bar to go beyond its limit + } else { + horizontal = horizontal.slice(horizontal.length / 2); + title = horizontal + text + horizontal; + } + + break; + } + + return title; +}; + +const makeContentText = (text, padding, columns, align) => { + text = ansiAlign(text, {align}); + let lines = text.split(NL); + const textWidth = widestLine(text); + + const max = columns - padding.left - padding.right; + + if (textWidth > max) { + const newLines = []; + for (const line of lines) { + const createdLines = wrapAnsi(line, max, {hard: true}); + const alignedLines = ansiAlign(createdLines, {align}); + const alignedLinesArray = alignedLines.split('\n'); + const longestLength = Math.max(...alignedLinesArray.map(s => stringWidth(s))); + + for (const alignedLine of alignedLinesArray) { + let paddedLine; + switch (align) { + case 'center': + paddedLine = PAD.repeat((max - longestLength) / 2) + alignedLine; + break; + case 'right': + paddedLine = PAD.repeat(max - longestLength) + alignedLine; + break; + default: + paddedLine = alignedLine; + break; + } + + newLines.push(paddedLine); + } + } + + lines = newLines; + } + + if (align === 'center' && textWidth < max) { + lines = lines.map(line => PAD.repeat((max - textWidth) / 2) + line); + } else if (align === 'right' && textWidth < max) { + lines = lines.map(line => PAD.repeat(max - textWidth) + line); + } + + const paddingLeft = PAD.repeat(padding.left); + const paddingRight = PAD.repeat(padding.right); + + lines = lines.map(line => paddingLeft + line + paddingRight); + + lines = lines.map(line => { + if (columns - stringWidth(line) > 0) { + switch (align) { + case 'center': + return line + PAD.repeat(columns - stringWidth(line)); + case 'right': + return line + PAD.repeat(columns - stringWidth(line)); + default: + return line + PAD.repeat(columns - stringWidth(line)); + } + } + + return line; + }); + + if (padding.top > 0) { + lines = new Array(padding.top).fill(PAD.repeat(columns)).concat(lines); + } + + if (padding.bottom > 0) { + lines = lines.concat(new Array(padding.bottom).fill(PAD.repeat(columns))); + } + + return lines.join(NL); +}; + +const isHex = color => color.match(/^#(?:[0-f]{3}){1,2}$/i); +const isColorValid = color => typeof color === 'string' && ((chalk[color]) || isHex(color)); +const getColorFn = color => isHex(color) ? chalk.hex(color) : chalk[color]; +const getBGColorFn = color => isHex(color) ? chalk.bgHex(color) : chalk[camelCase(['bg', color])]; + +module.exports = (text, options) => { + options = { + padding: 0, + borderStyle: 'single', + dimBorder: false, + textAlignment: 'left', + float: 'left', + titleAlignment: 'left', + ...options + }; + + // This option is deprecated + if (options.align) { + options.textAlignment = options.align; + } + + const BORDERS_WIDTH = 2; + + if (options.borderColor && !isColorValid(options.borderColor)) { + throw new Error(`${options.borderColor} is not a valid borderColor`); + } + + if (options.backgroundColor && !isColorValid(options.backgroundColor)) { + throw new Error(`${options.backgroundColor} is not a valid backgroundColor`); + } + + const chars = getBorderChars(options.borderStyle); + const padding = getObject(options.padding); + const margin = getObject(options.margin); + + const colorizeBorder = border => { + const newBorder = options.borderColor ? getColorFn(options.borderColor)(border) : border; + return options.dimBorder ? chalk.dim(newBorder) : newBorder; + }; + + const colorizeContent = content => options.backgroundColor ? getBGColorFn(options.backgroundColor)(content) : content; + + const columns = terminalColumns(); + + let contentWidth = widestLine(wrapAnsi(text, columns - BORDERS_WIDTH, {hard: true, trim: false})) + padding.left + padding.right; + + // This prevents the title bar to exceed the console's width + let title = options.title && options.title.slice(0, columns - 4 - margin.left - margin.right); + + if (title) { + title = ` ${title} `; + // Make the box larger to fit a larger title + if (stringWidth(title) > contentWidth) { + contentWidth = stringWidth(title); + } + } + + if ((margin.left && margin.right) && contentWidth + BORDERS_WIDTH + margin.left + margin.right > columns) { + // Let's assume we have margins: left = 3, right = 5, in total = 8 + const spaceForMargins = columns - contentWidth - BORDERS_WIDTH; + // Let's assume we have space = 4 + const multiplier = spaceForMargins / (margin.left + margin.right); + // Here: multiplier = 4/8 = 0.5 + margin.left = Math.max(0, Math.floor(margin.left * multiplier)); + margin.right = Math.max(0, Math.floor(margin.right * multiplier)); + // Left: 3 * 0.5 = 1.5 -> 1 + // Right: 6 * 0.5 = 3 + } + + // Prevent content from exceeding the console's width + contentWidth = Math.min(contentWidth, columns - BORDERS_WIDTH - margin.left - margin.right); + + text = makeContentText(text, padding, contentWidth, options.textAlignment); + + let marginLeft = PAD.repeat(margin.left); + + if (options.float === 'center') { + const marginWidth = Math.max((columns - contentWidth - BORDERS_WIDTH) / 2, 0); + marginLeft = PAD.repeat(marginWidth); + } else if (options.float === 'right') { + const marginWidth = Math.max(columns - contentWidth - margin.right - BORDERS_WIDTH, 0); + marginLeft = PAD.repeat(marginWidth); + } + + const horizontal = chars.horizontal.repeat(contentWidth); + const top = colorizeBorder(NL.repeat(margin.top) + marginLeft + chars.topLeft + (title ? makeTitle(title, horizontal, options.titleAlignment) : horizontal) + chars.topRight); + const bottom = colorizeBorder(marginLeft + chars.bottomLeft + horizontal + chars.bottomRight + NL.repeat(margin.bottom)); + const side = colorizeBorder(chars.vertical); + + const LINE_SEPARATOR = (contentWidth + BORDERS_WIDTH + margin.left >= columns) ? '' : NL; + + const lines = text.split(NL); + + const middle = lines.map(line => { + return marginLeft + side + colorizeContent(line) + side; + }).join(LINE_SEPARATOR); + + return top + LINE_SEPARATOR + middle + LINE_SEPARATOR + bottom; +}; + +module.exports._borderStyles = cliBoxes; diff --git a/node_modules/boxen/license b/node_modules/boxen/license new file mode 100644 index 0000000..fa7ceba --- /dev/null +++ b/node_modules/boxen/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/boxen/package.json b/node_modules/boxen/package.json new file mode 100644 index 0000000..d34805a --- /dev/null +++ b/node_modules/boxen/package.json @@ -0,0 +1,83 @@ +{ + "_from": "boxen@^5.0.0", + "_id": "boxen@5.1.2", + "_inBundle": false, + "_integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "_location": "/boxen", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "boxen@^5.0.0", + "name": "boxen", + "escapedName": "boxen", + "rawSpec": "^5.0.0", + "saveSpec": null, + "fetchSpec": "^5.0.0" + }, + "_requiredBy": [ + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "_shasum": "788cb686fc83c1f486dfa8a40c68fc2b831d2b50", + "_spec": "boxen@^5.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/boxen/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "deprecated": false, + "description": "Create boxes in the terminal", + "devDependencies": { + "ava": "^2.4.0", + "nyc": "^15.1.0", + "tsd": "^0.14.0", + "xo": "^0.36.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/boxen#readme", + "keywords": [ + "cli", + "box", + "boxes", + "terminal", + "term", + "console", + "ascii", + "unicode", + "border", + "text" + ], + "license": "MIT", + "name": "boxen", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/boxen.git" + }, + "scripts": { + "test": "xo && nyc ava && tsd" + }, + "version": "5.1.2" +} diff --git a/node_modules/boxen/readme.md b/node_modules/boxen/readme.md new file mode 100644 index 0000000..c7ed496 --- /dev/null +++ b/node_modules/boxen/readme.md @@ -0,0 +1,244 @@ +# boxen + +> Create boxes in the terminal + +![](screenshot.png) + +## Install + +``` +$ npm install boxen +``` + +## Usage + +```js +const boxen = require('boxen'); + +console.log(boxen('unicorn', {padding: 1})); +/* +┌─────────────┐ +│ │ +│ unicorn │ +│ │ +└─────────────┘ +*/ + +console.log(boxen('unicorn', {padding: 1, margin: 1, borderStyle: 'double'})); +/* + + ╔═════════════╗ + ║ ║ + ║ unicorn ║ + ║ ║ + ╚═════════════╝ + +*/ + +console.log(boxen('unicorns love rainbows', {title: 'magical', titleAlignment: 'center'})); +/* +┌────── magical ───────┐ +│unicorns love rainbows│ +└──────────────────────┘ +*/ +``` + +## API + +### boxen(text, options?) + +#### text + +Type: `string` + +Text inside the box. + +#### options + +Type: `object` + +##### borderColor + +Type: `string`\ +Values: `'black'` `'red'` `'green'` `'yellow'` `'blue'` `'magenta'` `'cyan'` `'white'` `'gray'` or a hex value like `'#ff0000'` + +Color of the box border. + +##### borderStyle + +Type: `string | object`\ +Default: `'single'`\ +Values: +- `'single'` +``` +┌───┐ +│foo│ +└───┘ +``` +- `'double'` +``` +╔═══╗ +║foo║ +╚═══╝ +``` +- `'round'` (`'single'` sides with round corners) +``` +╭───╮ +│foo│ +╰───╯ +``` +- `'bold'` +``` +┏━━━┓ +┃foo┃ +┗━━━┛ +``` +- `'singleDouble'` (`'single'` on top and bottom, `'double'` on right and left) +``` +╓───╖ +║foo║ +╙───╜ +``` +- `'doubleSingle'` (`'double'` on top and bottom, `'single'` on right and left) +``` +╒═══╕ +│foo│ +╘═══╛ +``` +- `'classic'` +``` ++---+ +|foo| ++---+ +``` + +Style of the box border. + +Can be any of the above predefined styles or an object with the following keys: + +```js +{ + topLeft: '+', + topRight: '+', + bottomLeft: '+', + bottomRight: '+', + horizontal: '-', + vertical: '|' +} +``` + +##### dimBorder + +Type: `boolean`\ +Default: `false` + +Reduce opacity of the border. + +##### title + +Type: `string` + +Display a title at the top of the box. +If needed, the box will horizontally expand to fit the title. + +Example: +```js +console.log(boxen('foo bar', {title: 'example'})); +/* +┌ example ┐ +│foo bar │ +└─────────┘ +*/ +``` + +##### titleAlignment + +Type: `string`\ +Default: `'left'` + +Align the title in the top bar. + +Values: +- `'left'` +```js +/* +┌ example ──────┐ +│foo bar foo bar│ +└───────────────┘ +*/ +``` +- `'center'` +```js +/* +┌─── example ───┐ +│foo bar foo bar│ +└───────────────┘ +*/ +``` +- `'right'` +```js +/* +┌────── example ┐ +│foo bar foo bar│ +└───────────────┘ +*/ +``` + +##### padding + +Type: `number | object`\ +Default: `0` + +Space between the text and box border. + +Accepts a number or an object with any of the `top`, `right`, `bottom`, `left` properties. When a number is specified, the left/right padding is 3 times the top/bottom to make it look nice. + +##### margin + +Type: `number | object`\ +Default: `0` + +Space around the box. + +Accepts a number or an object with any of the `top`, `right`, `bottom`, `left` properties. When a number is specified, the left/right margin is 3 times the top/bottom to make it look nice. + +##### float + +Type: `string`\ +Default: `'left'`\ +Values: `'right'` `'center'` `'left'` + +Float the box on the available terminal screen space. + +##### backgroundColor + +Type: `string`\ +Values: `'black'` `'red'` `'green'` `'yellow'` `'blue'` `'magenta'` `'cyan'` `'white'` `'gray'` or a hex value like `'#ff0000'` + +Color of the background. + +##### textAlignment + +Type: `string`\ +Default: `'left'`\ +Values: `'left'` `'center'` `'right'` + +Align the text in the box based on the widest line. + +## Related + +- [boxen-cli](https://github.com/sindresorhus/boxen-cli) - CLI for this module +- [cli-boxes](https://github.com/sindresorhus/cli-boxes) - Boxes for use in the terminal +- [ink-box](https://github.com/sindresorhus/ink-box) - Box component for Ink that uses this package + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 0000000..de32266 --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..6b4e0e1 --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,129 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..0478be8 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,201 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..461a4ad --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,75 @@ +{ + "_from": "brace-expansion@^1.1.7", + "_id": "brace-expansion@1.1.11", + "_inBundle": false, + "_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "_location": "/brace-expansion", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "brace-expansion@^1.1.7", + "name": "brace-expansion", + "escapedName": "brace-expansion", + "rawSpec": "^1.1.7", + "saveSpec": null, + "fetchSpec": "^1.1.7" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "_shasum": "3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "_spec": "brace-expansion@^1.1.7", + "_where": "D:\\Cricbuzzz\\node_modules\\minimatch", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "bundleDependencies": false, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "deprecated": false, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "name": "brace-expansion", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "bench": "matcha test/perf/bench.js", + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.1.11" +} diff --git a/node_modules/braces/CHANGELOG.md b/node_modules/braces/CHANGELOG.md new file mode 100644 index 0000000..36f798b --- /dev/null +++ b/node_modules/braces/CHANGELOG.md @@ -0,0 +1,184 @@ +# Release history + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +
      + Guiding Principles + +- Changelogs are for humans, not machines. +- There should be an entry for every single version. +- The same types of changes should be grouped. +- Versions and sections should be linkable. +- The latest version comes first. +- The release date of each versions is displayed. +- Mention whether you follow Semantic Versioning. + +
      + +
      + Types of changes + +Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): + +- `Added` for new features. +- `Changed` for changes in existing functionality. +- `Deprecated` for soon-to-be removed features. +- `Removed` for now removed features. +- `Fixed` for any bug fixes. +- `Security` in case of vulnerabilities. + +
      + +## [3.0.0] - 2018-04-08 + +v3.0 is a complete refactor, resulting in a faster, smaller codebase, with fewer deps, and a more accurate parser and compiler. + +**Breaking Changes** + +- The undocumented `.makeRe` method was removed + +**Non-breaking changes** + +- Caching was removed + +## [2.3.2] - 2018-04-08 + +- start refactoring +- cover sets +- better range handling + +## [2.3.1] - 2018-02-17 + +- Remove unnecessary escape in Regex. (#14) + +## [2.3.0] - 2017-10-19 + +- minor code reorganization +- optimize regex +- expose `maxLength` option + +## [2.2.1] - 2017-05-30 + +- don't condense when braces contain extglobs + +## [2.2.0] - 2017-05-28 + +- ensure word boundaries are preserved +- fixes edge case where extglob characters precede a brace pattern + +## [2.1.1] - 2017-04-27 + +- use snapdragon-node +- handle edge case +- optimizations, lint + +## [2.0.4] - 2017-04-11 + +- pass opts to compiler +- minor optimization in create method +- re-write parser handlers to remove negation regex + +## [2.0.3] - 2016-12-10 + +- use split-string +- clear queue at the end +- adds sequences example +- add unit tests + +## [2.0.2] - 2016-10-21 + +- fix comma handling in nested extglobs + +## [2.0.1] - 2016-10-20 + +- add comments +- more tests, ensure quotes are stripped + +## [2.0.0] - 2016-10-19 + +- don't expand braces inside character classes +- add quantifier pattern + +## [1.8.5] - 2016-05-21 + +- Refactor (#10) + +## [1.8.4] - 2016-04-20 + +- fixes https://github.com/jonschlinkert/micromatch/issues/66 + +## [1.8.0] - 2015-03-18 + +- adds exponent examples, tests +- fixes the first example in https://github.com/jonschlinkert/micromatch/issues/38 + +## [1.6.0] - 2015-01-30 + +- optimizations, `bash` mode: +- improve path escaping + +## [1.5.0] - 2015-01-28 + +- Merge pull request #5 from eush77/lib-files + +## [1.4.0] - 2015-01-24 + +- add extglob tests +- externalize exponent function +- better whitespace handling + +## [1.3.0] - 2015-01-24 + +- make regex patterns explicity + +## [1.1.0] - 2015-01-11 + +- don't create a match group with `makeRe` + +## [1.0.0] - 2014-12-23 + +- Merge commit '97b05f5544f8348736a8efaecf5c32bbe3e2ad6e' +- support empty brace syntax +- better bash coverage +- better support for regex strings + +## [0.1.4] - 2014-11-14 + +- improve recognition of bad args, recognize mismatched argument types +- support escaping +- remove pathname-expansion +- support whitespace in patterns + +## [0.1.0] + +- first commit + +[2.3.2]: https://github.com/micromatch/braces/compare/2.3.1...2.3.2 +[2.3.1]: https://github.com/micromatch/braces/compare/2.3.0...2.3.1 +[2.3.0]: https://github.com/micromatch/braces/compare/2.2.1...2.3.0 +[2.2.1]: https://github.com/micromatch/braces/compare/2.2.0...2.2.1 +[2.2.0]: https://github.com/micromatch/braces/compare/2.1.1...2.2.0 +[2.1.1]: https://github.com/micromatch/braces/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/micromatch/braces/compare/2.0.4...2.1.0 +[2.0.4]: https://github.com/micromatch/braces/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/micromatch/braces/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/micromatch/braces/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/micromatch/braces/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/micromatch/braces/compare/1.8.5...2.0.0 +[1.8.5]: https://github.com/micromatch/braces/compare/1.8.4...1.8.5 +[1.8.4]: https://github.com/micromatch/braces/compare/1.8.0...1.8.4 +[1.8.0]: https://github.com/micromatch/braces/compare/1.6.0...1.8.0 +[1.6.0]: https://github.com/micromatch/braces/compare/1.5.0...1.6.0 +[1.5.0]: https://github.com/micromatch/braces/compare/1.4.0...1.5.0 +[1.4.0]: https://github.com/micromatch/braces/compare/1.3.0...1.4.0 +[1.3.0]: https://github.com/micromatch/braces/compare/1.2.0...1.3.0 +[1.2.0]: https://github.com/micromatch/braces/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/micromatch/braces/compare/1.0.0...1.1.0 +[1.0.0]: https://github.com/micromatch/braces/compare/0.1.4...1.0.0 +[0.1.4]: https://github.com/micromatch/braces/compare/0.1.0...0.1.4 + +[Unreleased]: https://github.com/micromatch/braces/compare/0.1.0...HEAD +[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog \ No newline at end of file diff --git a/node_modules/braces/LICENSE b/node_modules/braces/LICENSE new file mode 100644 index 0000000..d32ab44 --- /dev/null +++ b/node_modules/braces/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/braces/README.md b/node_modules/braces/README.md new file mode 100644 index 0000000..cba2f60 --- /dev/null +++ b/node_modules/braces/README.md @@ -0,0 +1,593 @@ +# braces [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/braces.svg?style=flat)](https://www.npmjs.com/package/braces) [![NPM monthly downloads](https://img.shields.io/npm/dm/braces.svg?style=flat)](https://npmjs.org/package/braces) [![NPM total downloads](https://img.shields.io/npm/dt/braces.svg?style=flat)](https://npmjs.org/package/braces) [![Linux Build Status](https://img.shields.io/travis/micromatch/braces.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/braces) + +> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save braces +``` + +## v3.0.0 Released!! + +See the [changelog](CHANGELOG.md) for details. + +## Why use braces? + +Brace patterns make globs more powerful by adding the ability to match specific ranges and sequences of characters. + +* **Accurate** - complete support for the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/) specification (passes all of the Bash braces tests) +* **[fast and performant](#benchmarks)** - Starts fast, runs fast and [scales well](#performance) as patterns increase in complexity. +* **Organized code base** - The parser and compiler are easy to maintain and update when edge cases crop up. +* **Well-tested** - Thousands of test assertions, and passes all of the Bash, minimatch, and [brace-expansion](https://github.com/juliangruber/brace-expansion) unit tests (as of the date this was written). +* **Safer** - You shouldn't have to worry about users defining aggressive or malicious brace patterns that can break your application. Braces takes measures to prevent malicious regex that can be used for DDoS attacks (see [catastrophic backtracking](https://www.regular-expressions.info/catastrophic.html)). +* [Supports lists](#lists) - (aka "sets") `a/{b,c}/d` => `['a/b/d', 'a/c/d']` +* [Supports sequences](#sequences) - (aka "ranges") `{01..03}` => `['01', '02', '03']` +* [Supports steps](#steps) - (aka "increments") `{2..10..2}` => `['2', '4', '6', '8', '10']` +* [Supports escaping](#escaping) - To prevent evaluation of special characters. + +## Usage + +The main export is a function that takes one or more brace `patterns` and `options`. + +```js +const braces = require('braces'); +// braces(patterns[, options]); + +console.log(braces(['{01..05}', '{a..e}'])); +//=> ['(0[1-5])', '([a-e])'] + +console.log(braces(['{01..05}', '{a..e}'], { expand: true })); +//=> ['01', '02', '03', '04', '05', 'a', 'b', 'c', 'd', 'e'] +``` + +### Brace Expansion vs. Compilation + +By default, brace patterns are compiled into strings that are optimized for creating regular expressions and matching. + +**Compiled** + +```js +console.log(braces('a/{x,y,z}/b')); +//=> ['a/(x|y|z)/b'] +console.log(braces(['a/{01..20}/b', 'a/{1..5}/b'])); +//=> [ 'a/(0[1-9]|1[0-9]|20)/b', 'a/([1-5])/b' ] +``` + +**Expanded** + +Enable brace expansion by setting the `expand` option to true, or by using [braces.expand()](#expand) (returns an array similar to what you'd expect from Bash, or `echo {1..5}`, or [minimatch](https://github.com/isaacs/minimatch)): + +```js +console.log(braces('a/{x,y,z}/b', { expand: true })); +//=> ['a/x/b', 'a/y/b', 'a/z/b'] + +console.log(braces.expand('{01..10}')); +//=> ['01','02','03','04','05','06','07','08','09','10'] +``` + +### Lists + +Expand lists (like Bash "sets"): + +```js +console.log(braces('a/{foo,bar,baz}/*.js')); +//=> ['a/(foo|bar|baz)/*.js'] + +console.log(braces.expand('a/{foo,bar,baz}/*.js')); +//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js'] +``` + +### Sequences + +Expand ranges of characters (like Bash "sequences"): + +```js +console.log(braces.expand('{1..3}')); // ['1', '2', '3'] +console.log(braces.expand('a/{1..3}/b')); // ['a/1/b', 'a/2/b', 'a/3/b'] +console.log(braces('{a..c}', { expand: true })); // ['a', 'b', 'c'] +console.log(braces('foo/{a..c}', { expand: true })); // ['foo/a', 'foo/b', 'foo/c'] + +// supports zero-padded ranges +console.log(braces('a/{01..03}/b')); //=> ['a/(0[1-3])/b'] +console.log(braces('a/{001..300}/b')); //=> ['a/(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)/b'] +``` + +See [fill-range](https://github.com/jonschlinkert/fill-range) for all available range-expansion options. + +### Steppped ranges + +Steps, or increments, may be used with ranges: + +```js +console.log(braces.expand('{2..10..2}')); +//=> ['2', '4', '6', '8', '10'] + +console.log(braces('{2..10..2}')); +//=> ['(2|4|6|8|10)'] +``` + +When the [.optimize](#optimize) method is used, or [options.optimize](#optionsoptimize) is set to true, sequences are passed to [to-regex-range](https://github.com/jonschlinkert/to-regex-range) for expansion. + +### Nesting + +Brace patterns may be nested. The results of each expanded string are not sorted, and left to right order is preserved. + +**"Expanded" braces** + +```js +console.log(braces.expand('a{b,c,/{x,y}}/e')); +//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e'] + +console.log(braces.expand('a/{x,{1..5},y}/c')); +//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c'] +``` + +**"Optimized" braces** + +```js +console.log(braces('a{b,c,/{x,y}}/e')); +//=> ['a(b|c|/(x|y))/e'] + +console.log(braces('a/{x,{1..5},y}/c')); +//=> ['a/(x|([1-5])|y)/c'] +``` + +### Escaping + +**Escaping braces** + +A brace pattern will not be expanded or evaluted if _either the opening or closing brace is escaped_: + +```js +console.log(braces.expand('a\\{d,c,b}e')); +//=> ['a{d,c,b}e'] + +console.log(braces.expand('a{d,c,b\\}e')); +//=> ['a{d,c,b}e'] +``` + +**Escaping commas** + +Commas inside braces may also be escaped: + +```js +console.log(braces.expand('a{b\\,c}d')); +//=> ['a{b,c}d'] + +console.log(braces.expand('a{d\\,c,b}e')); +//=> ['ad,ce', 'abe'] +``` + +**Single items** + +Following bash conventions, a brace pattern is also not expanded when it contains a single character: + +```js +console.log(braces.expand('a{b}c')); +//=> ['a{b}c'] +``` + +## Options + +### options.maxLength + +**Type**: `Number` + +**Default**: `65,536` + +**Description**: Limit the length of the input string. Useful when the input string is generated or your application allows users to pass a string, et cetera. + +```js +console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error +``` + +### options.expand + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Generate an "expanded" brace pattern (alternatively you can use the `braces.expand()` method, which does the same thing). + +```js +console.log(braces('a/{b,c}/d', { expand: true })); +//=> [ 'a/b/d', 'a/c/d' ] +``` + +### options.nodupes + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Remove duplicates from the returned array. + +### options.rangeLimit + +**Type**: `Number` + +**Default**: `1000` + +**Description**: To prevent malicious patterns from being passed by users, an error is thrown when `braces.expand()` is used or `options.expand` is true and the generated range will exceed the `rangeLimit`. + +You can customize `options.rangeLimit` or set it to `Inifinity` to disable this altogether. + +**Examples** + +```js +// pattern exceeds the "rangeLimit", so it's optimized automatically +console.log(braces.expand('{1..1000}')); +//=> ['([1-9]|[1-9][0-9]{1,2}|1000)'] + +// pattern does not exceed "rangeLimit", so it's NOT optimized +console.log(braces.expand('{1..100}')); +//=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100'] +``` + +### options.transform + +**Type**: `Function` + +**Default**: `undefined` + +**Description**: Customize range expansion. + +**Example: Transforming non-numeric values** + +```js +const alpha = braces.expand('x/{a..e}/y', { + transform(value, index) { + // When non-numeric values are passed, "value" is a character code. + return 'foo/' + String.fromCharCode(value) + '-' + index; + } +}); +console.log(alpha); +//=> [ 'x/foo/a-0/y', 'x/foo/b-1/y', 'x/foo/c-2/y', 'x/foo/d-3/y', 'x/foo/e-4/y' ] +``` + +**Example: Transforming numeric values** + +```js +const numeric = braces.expand('{1..5}', { + transform(value) { + // when numeric values are passed, "value" is a number + return 'foo/' + value * 2; + } +}); +console.log(numeric); +//=> [ 'foo/2', 'foo/4', 'foo/6', 'foo/8', 'foo/10' ] +``` + +### options.quantifiers + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: In regular expressions, quanitifiers can be used to specify how many times a token can be repeated. For example, `a{1,3}` will match the letter `a` one to three times. + +Unfortunately, regex quantifiers happen to share the same syntax as [Bash lists](#lists) + +The `quantifiers` option tells braces to detect when [regex quantifiers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#quantifiers) are defined in the given pattern, and not to try to expand them as lists. + +**Examples** + +```js +const braces = require('braces'); +console.log(braces('a/b{1,3}/{x,y,z}')); +//=> [ 'a/b(1|3)/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true})); +//=> [ 'a/b{1,3}/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true, expand: true})); +//=> [ 'a/b{1,3}/x', 'a/b{1,3}/y', 'a/b{1,3}/z' ] +``` + +### options.unescape + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Strip backslashes that were used for escaping from the result. + +## What is "brace expansion"? + +Brace expansion is a type of parameter expansion that was made popular by unix shells for generating lists of strings, as well as regex-like matching when used alongside wildcards (globs). + +In addition to "expansion", braces are also used for matching. In other words: + +* [brace expansion](#brace-expansion) is for generating new lists +* [brace matching](#brace-matching) is for filtering existing lists + +
      +More about brace expansion (click to expand) + +There are two main types of brace expansion: + +1. **lists**: which are defined using comma-separated values inside curly braces: `{a,b,c}` +2. **sequences**: which are defined using a starting value and an ending value, separated by two dots: `a{1..3}b`. Optionally, a third argument may be passed to define a "step" or increment to use: `a{1..100..10}b`. These are also sometimes referred to as "ranges". + +Here are some example brace patterns to illustrate how they work: + +**Sets** + +``` +{a,b,c} => a b c +{a,b,c}{1,2} => a1 a2 b1 b2 c1 c2 +``` + +**Sequences** + +``` +{1..9} => 1 2 3 4 5 6 7 8 9 +{4..-4} => 4 3 2 1 0 -1 -2 -3 -4 +{1..20..3} => 1 4 7 10 13 16 19 +{a..j} => a b c d e f g h i j +{j..a} => j i h g f e d c b a +{a..z..3} => a d g j m p s v y +``` + +**Combination** + +Sets and sequences can be mixed together or used along with any other strings. + +``` +{a,b,c}{1..3} => a1 a2 a3 b1 b2 b3 c1 c2 c3 +foo/{a,b,c}/bar => foo/a/bar foo/b/bar foo/c/bar +``` + +The fact that braces can be "expanded" from relatively simple patterns makes them ideal for quickly generating test fixtures, file paths, and similar use cases. + +## Brace matching + +In addition to _expansion_, brace patterns are also useful for performing regular-expression-like matching. + +For example, the pattern `foo/{1..3}/bar` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +``` + +But not: + +``` +baz/1/qux +baz/2/qux +baz/3/qux +``` + +Braces can also be combined with [glob patterns](https://github.com/jonschlinkert/micromatch) to perform more advanced wildcard matching. For example, the pattern `*/{1..3}/*` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +baz/1/qux +baz/2/qux +baz/3/qux +``` + +## Brace matching pitfalls + +Although brace patterns offer a user-friendly way of matching ranges or sets of strings, there are also some major disadvantages and potential risks you should be aware of. + +### tldr + +**"brace bombs"** + +* brace expansion can eat up a huge amount of processing resources +* as brace patterns increase _linearly in size_, the system resources required to expand the pattern increase exponentially +* users can accidentally (or intentially) exhaust your system's resources resulting in the equivalent of a DoS attack (bonus: no programming knowledge is required!) + +For a more detailed explanation with examples, see the [geometric complexity](#geometric-complexity) section. + +### The solution + +Jump to the [performance section](#performance) to see how Braces solves this problem in comparison to other libraries. + +### Geometric complexity + +At minimum, brace patterns with sets limited to two elements have quadradic or `O(n^2)` complexity. But the complexity of the algorithm increases exponentially as the number of sets, _and elements per set_, increases, which is `O(n^c)`. + +For example, the following sets demonstrate quadratic (`O(n^2)`) complexity: + +``` +{1,2}{3,4} => (2X2) => 13 14 23 24 +{1,2}{3,4}{5,6} => (2X2X2) => 135 136 145 146 235 236 245 246 +``` + +But add an element to a set, and we get a n-fold Cartesian product with `O(n^c)` complexity: + +``` +{1,2,3}{4,5,6}{7,8,9} => (3X3X3) => 147 148 149 157 158 159 167 168 169 247 248 + 249 257 258 259 267 268 269 347 348 349 357 + 358 359 367 368 369 +``` + +Now, imagine how this complexity grows given that each element is a n-tuple: + +``` +{1..100}{1..100} => (100X100) => 10,000 elements (38.4 kB) +{1..100}{1..100}{1..100} => (100X100X100) => 1,000,000 elements (5.76 MB) +``` + +Although these examples are clearly contrived, they demonstrate how brace patterns can quickly grow out of control. + +**More information** + +Interested in learning more about brace expansion? + +* [linuxjournal/bash-brace-expansion](http://www.linuxjournal.com/content/bash-brace-expansion) +* [rosettacode/Brace_expansion](https://rosettacode.org/wiki/Brace_expansion) +* [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) + +
      + +## Performance + +Braces is not only screaming fast, it's also more accurate the other brace expansion libraries. + +### Better algorithms + +Fortunately there is a solution to the ["brace bomb" problem](#brace-matching-pitfalls): _don't expand brace patterns into an array when they're used for matching_. + +Instead, convert the pattern into an optimized regular expression. This is easier said than done, and braces is the only library that does this currently. + +**The proof is in the numbers** + +Minimatch gets exponentially slower as patterns increase in complexity, braces does not. The following results were generated using `braces()` and `minimatch.braceExpand()`, respectively. + +| **Pattern** | **braces** | **[minimatch][]** | +| --- | --- | --- | +| `{1..9007199254740991}`[^1] | `298 B` (5ms 459μs)| N/A (freezes) | +| `{1..1000000000000000}` | `41 B` (1ms 15μs) | N/A (freezes) | +| `{1..100000000000000}` | `40 B` (890μs) | N/A (freezes) | +| `{1..10000000000000}` | `39 B` (2ms 49μs) | N/A (freezes) | +| `{1..1000000000000}` | `38 B` (608μs) | N/A (freezes) | +| `{1..100000000000}` | `37 B` (397μs) | N/A (freezes) | +| `{1..10000000000}` | `35 B` (983μs) | N/A (freezes) | +| `{1..1000000000}` | `34 B` (798μs) | N/A (freezes) | +| `{1..100000000}` | `33 B` (733μs) | N/A (freezes) | +| `{1..10000000}` | `32 B` (5ms 632μs) | `78.89 MB` (16s 388ms 569μs) | +| `{1..1000000}` | `31 B` (1ms 381μs) | `6.89 MB` (1s 496ms 887μs) | +| `{1..100000}` | `30 B` (950μs) | `588.89 kB` (146ms 921μs) | +| `{1..10000}` | `29 B` (1ms 114μs) | `48.89 kB` (14ms 187μs) | +| `{1..1000}` | `28 B` (760μs) | `3.89 kB` (1ms 453μs) | +| `{1..100}` | `22 B` (345μs) | `291 B` (196μs) | +| `{1..10}` | `10 B` (533μs) | `20 B` (37μs) | +| `{1..3}` | `7 B` (190μs) | `5 B` (27μs) | + +### Faster algorithms + +When you need expansion, braces is still much faster. + +_(the following results were generated using `braces.expand()` and `minimatch.braceExpand()`, respectively)_ + +| **Pattern** | **braces** | **[minimatch][]** | +| --- | --- | --- | +| `{1..10000000}` | `78.89 MB` (2s 698ms 642μs) | `78.89 MB` (18s 601ms 974μs) | +| `{1..1000000}` | `6.89 MB` (458ms 576μs) | `6.89 MB` (1s 491ms 621μs) | +| `{1..100000}` | `588.89 kB` (20ms 728μs) | `588.89 kB` (156ms 919μs) | +| `{1..10000}` | `48.89 kB` (2ms 202μs) | `48.89 kB` (13ms 641μs) | +| `{1..1000}` | `3.89 kB` (1ms 796μs) | `3.89 kB` (1ms 958μs) | +| `{1..100}` | `291 B` (424μs) | `291 B` (211μs) | +| `{1..10}` | `20 B` (487μs) | `20 B` (72μs) | +| `{1..3}` | `5 B` (166μs) | `5 B` (27μs) | + +If you'd like to run these comparisons yourself, see [test/support/generate.js](test/support/generate.js). + +## Benchmarks + +### Running benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm benchmark +``` + +### Latest results + +Braces is more accurate, without sacrificing performance. + +```bash +# range (expanded) + braces x 29,040 ops/sec ±3.69% (91 runs sampled)) + minimatch x 4,735 ops/sec ±1.28% (90 runs sampled) + +# range (optimized for regex) + braces x 382,878 ops/sec ±0.56% (94 runs sampled) + minimatch x 1,040 ops/sec ±0.44% (93 runs sampled) + +# nested ranges (expanded) + braces x 19,744 ops/sec ±2.27% (92 runs sampled)) + minimatch x 4,579 ops/sec ±0.50% (93 runs sampled) + +# nested ranges (optimized for regex) + braces x 246,019 ops/sec ±2.02% (93 runs sampled) + minimatch x 1,028 ops/sec ±0.39% (94 runs sampled) + +# set (expanded) + braces x 138,641 ops/sec ±0.53% (95 runs sampled) + minimatch x 219,582 ops/sec ±0.98% (94 runs sampled) + +# set (optimized for regex) + braces x 388,408 ops/sec ±0.41% (95 runs sampled) + minimatch x 44,724 ops/sec ±0.91% (89 runs sampled) + +# nested sets (expanded) + braces x 84,966 ops/sec ±0.48% (94 runs sampled) + minimatch x 140,720 ops/sec ±0.37% (95 runs sampled) + +# nested sets (optimized for regex) + braces x 263,340 ops/sec ±2.06% (92 runs sampled) + minimatch x 28,714 ops/sec ±0.40% (90 runs sampled) +``` + +## About + +
      +Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
      + +
      +Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
      + +
      +Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
      + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 197 | [jonschlinkert](https://github.com/jonschlinkert) | +| 4 | [doowb](https://github.com/doowb) | +| 1 | [es128](https://github.com/es128) | +| 1 | [eush77](https://github.com/eush77) | +| 1 | [hemanth](https://github.com/hemanth) | +| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._ \ No newline at end of file diff --git a/node_modules/braces/index.js b/node_modules/braces/index.js new file mode 100644 index 0000000..0eee0f5 --- /dev/null +++ b/node_modules/braces/index.js @@ -0,0 +1,170 @@ +'use strict'; + +const stringify = require('./lib/stringify'); +const compile = require('./lib/compile'); +const expand = require('./lib/expand'); +const parse = require('./lib/parse'); + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +const braces = (input, options = {}) => { + let output = []; + + if (Array.isArray(input)) { + for (let pattern of input) { + let result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = (input, options = {}) => parse(input, options); + +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); +}; + +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + return compile(input, options); +}; + +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + + let result = expand(input, options); + + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } + + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } + + return result; +}; + +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } + + return options.expand !== true + ? braces.compile(input, options) + : braces.expand(input, options); +}; + +/** + * Expose "braces" + */ + +module.exports = braces; diff --git a/node_modules/braces/lib/compile.js b/node_modules/braces/lib/compile.js new file mode 100644 index 0000000..3e984a4 --- /dev/null +++ b/node_modules/braces/lib/compile.js @@ -0,0 +1,57 @@ +'use strict'; + +const fill = require('fill-range'); +const utils = require('./utils'); + +const compile = (ast, options = {}) => { + let walk = (node, parent = {}) => { + let invalidBlock = utils.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + return prefix + node.value; + } + + if (node.type === 'open') { + return invalid ? (prefix + node.value) : '('; + } + + if (node.type === 'close') { + return invalid ? (prefix + node.value) : ')'; + } + + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); + } + + if (node.value) { + return node.value; + } + + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); + let range = fill(...args, { ...options, wrap: false, toRegex: true }); + + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + + if (node.nodes) { + for (let child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; + + return walk(ast); +}; + +module.exports = compile; diff --git a/node_modules/braces/lib/constants.js b/node_modules/braces/lib/constants.js new file mode 100644 index 0000000..a937943 --- /dev/null +++ b/node_modules/braces/lib/constants.js @@ -0,0 +1,57 @@ +'use strict'; + +module.exports = { + MAX_LENGTH: 1024 * 64, + + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ + + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ + + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; diff --git a/node_modules/braces/lib/expand.js b/node_modules/braces/lib/expand.js new file mode 100644 index 0000000..376c748 --- /dev/null +++ b/node_modules/braces/lib/expand.js @@ -0,0 +1,113 @@ +'use strict'; + +const fill = require('fill-range'); +const stringify = require('./stringify'); +const utils = require('./utils'); + +const append = (queue = '', stash = '', enclose = false) => { + let result = []; + + queue = [].concat(queue); + stash = [].concat(stash); + + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (let item of queue) { + if (Array.isArray(item)) { + for (let value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); + } + } + } + return utils.flatten(result); +}; + +const expand = (ast, options = {}) => { + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + + let walk = (node, parent = {}) => { + node.queue = []; + + let p = parent; + let q = parent.queue; + + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } + + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } + + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); + + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + + let range = fill(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + + let enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } + + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i]; + + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } + + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } + + if (child.nodes) { + walk(child, node); + } + } + + return queue; + }; + + return utils.flatten(walk(ast)); +}; + +module.exports = expand; diff --git a/node_modules/braces/lib/parse.js b/node_modules/braces/lib/parse.js new file mode 100644 index 0000000..145ea26 --- /dev/null +++ b/node_modules/braces/lib/parse.js @@ -0,0 +1,333 @@ +'use strict'; + +const stringify = require('./stringify'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, /* ] */ + CHAR_DOUBLE_QUOTE, /* " */ + CHAR_SINGLE_QUOTE, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = require('./constants'); + +/** + * parse + */ + +const parse = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + let opts = options || {}; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + + let ast = { type: 'root', input, nodes: [] }; + let stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; + let memo = {}; + + /** + * Helpers + */ + + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } + + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + + push({ type: 'bos' }); + + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + + /** + * Invalid chars + */ + + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + + /** + * Escaped chars + */ + + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } + + /** + * Right square bracket (literal): ']' + */ + + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: 'text', value: '\\' + value }); + continue; + } + + /** + * Left square bracket: '[' + */ + + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + + let closed = true; + let next; + + while (index < length && (next = advance())) { + value += next; + + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + + if (brackets === 0) { + break; + } + } + } + + push({ type: 'text', value }); + continue; + } + + /** + * Parentheses + */ + + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } + + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } + + /** + * Quotes: '|"|` + */ + + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + let open = value; + let next; + + if (options.keepQuotes !== true) { + value = ''; + } + + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + + value += next; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Left curly brace: '{' + */ + + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + + let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + let brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } + + /** + * Right curly brace: '}' + */ + + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } + + let type = 'close'; + block = stack.pop(); + block.close = true; + + push({ type, value }); + depth--; + + block = stack[stack.length - 1]; + continue; + } + + /** + * Comma: ',' + */ + + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify(block) }]; + } + + push({ type: 'comma', value }); + block.commas++; + continue; + } + + /** + * Dot: '.' + */ + + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + let siblings = block.nodes; + + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } + + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + + block.ranges++; + block.args = []; + continue; + } + + if (prev.type === 'range') { + siblings.pop(); + + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + + push({ type: 'dot', value }); + continue; + } + + /** + * Text + */ + + push({ type: 'text', value }); + } + + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); + + push({ type: 'eos' }); + return ast; +}; + +module.exports = parse; diff --git a/node_modules/braces/lib/stringify.js b/node_modules/braces/lib/stringify.js new file mode 100644 index 0000000..414b7bc --- /dev/null +++ b/node_modules/braces/lib/stringify.js @@ -0,0 +1,32 @@ +'use strict'; + +const utils = require('./utils'); + +module.exports = (ast, options = {}) => { + let stringify = (node, parent = {}) => { + let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + + if (node.value) { + if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } + + if (node.value) { + return node.value; + } + + if (node.nodes) { + for (let child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + + return stringify(ast); +}; + diff --git a/node_modules/braces/lib/utils.js b/node_modules/braces/lib/utils.js new file mode 100644 index 0000000..e3551a6 --- /dev/null +++ b/node_modules/braces/lib/utils.js @@ -0,0 +1,112 @@ +'use strict'; + +exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; +}; + +/** + * Find a node of the given type + */ + +exports.find = (node, type) => node.nodes.find(node => node.type === type); + +/** + * Find a node of the given type + */ + +exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; +}; + +/** + * Escape the given node with '\\' before node.value + */ + +exports.escapeNode = (block, n = 0, type) => { + let node = block.nodes[n]; + if (!node) return; + + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } +}; + +/** + * Returns true if the given brace node should be enclosed in literal braces + */ + +exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a brace node is invalid. + */ + +exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a node is an open or close node + */ + +exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; + } + return node.open === true || node.close === true; +}; + +/** + * Reduce an array of text nodes. + */ + +exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; +}, []); + +/** + * Flatten an array + */ + +exports.flatten = (...args) => { + const result = []; + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + let ele = arr[i]; + Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele); + } + return result; + }; + flat(args); + return result; +}; diff --git a/node_modules/braces/package.json b/node_modules/braces/package.json new file mode 100644 index 0000000..183f327 --- /dev/null +++ b/node_modules/braces/package.json @@ -0,0 +1,123 @@ +{ + "_from": "braces@~3.0.2", + "_id": "braces@3.0.2", + "_inBundle": false, + "_integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "_location": "/braces", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "braces@~3.0.2", + "name": "braces", + "escapedName": "braces", + "rawSpec": "~3.0.2", + "saveSpec": null, + "fetchSpec": "~3.0.2" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "_shasum": "3454e1a462ee8d599e236df336cd9ea4f8afe107", + "_spec": "braces@~3.0.2", + "_where": "D:\\Cricbuzzz\\node_modules\\chokidar", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/micromatch/braces/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Brian Woodward", + "url": "https://twitter.com/doowb" + }, + { + "name": "Elan Shanker", + "url": "https://github.com/es128" + }, + { + "name": "Eugene Sharygin", + "url": "https://github.com/eush77" + }, + { + "name": "hemanth.hm", + "url": "http://h3manth.com" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + } + ], + "dependencies": { + "fill-range": "^7.0.1" + }, + "deprecated": false, + "description": "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.", + "devDependencies": { + "ansi-colors": "^3.2.4", + "bash-path": "^2.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.1.1" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "lib" + ], + "homepage": "https://github.com/micromatch/braces", + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "braces", + "expand", + "expansion", + "filepath", + "fill", + "fs", + "glob", + "globbing", + "letter", + "match", + "matches", + "matching", + "number", + "numerical", + "path", + "range", + "ranges", + "sh" + ], + "license": "MIT", + "main": "index.js", + "name": "braces", + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/braces.git" + }, + "scripts": { + "benchmark": "node benchmark", + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "lint": { + "reflinks": true + }, + "plugins": [ + "gulp-format-md" + ] + }, + "version": "3.0.2" +} diff --git a/node_modules/bytes/History.md b/node_modules/bytes/History.md new file mode 100644 index 0000000..cf6a5bb --- /dev/null +++ b/node_modules/bytes/History.md @@ -0,0 +1,87 @@ +3.1.0 / 2019-01-22 +================== + + * Add petabyte (`pb`) support + +3.0.0 / 2017-08-31 +================== + + * Change "kB" to "KB" in format output + * Remove support for Node.js 0.6 + * Remove support for ComponentJS + +2.5.0 / 2017-03-24 +================== + + * Add option "unit" + +2.4.0 / 2016-06-01 +================== + + * Add option "unitSeparator" + +2.3.0 / 2016-02-15 +================== + + * Drop partial bytes on all parsed units + * Fix non-finite numbers to `.format` to return `null` + * Fix parsing byte string that looks like hex + * perf: hoist regular expressions + +2.2.0 / 2015-11-13 +================== + + * add option "decimalPlaces" + * add option "fixedDecimals" + +2.1.0 / 2015-05-21 +================== + + * add `.format` export + * add `.parse` export + +2.0.2 / 2015-05-20 +================== + + * remove map recreation + * remove unnecessary object construction + +2.0.1 / 2015-05-07 +================== + + * fix browserify require + * remove node.extend dependency + +2.0.0 / 2015-04-12 +================== + + * add option "case" + * add option "thousandsSeparator" + * return "null" on invalid parse input + * support proper round-trip: bytes(bytes(num)) === num + * units no longer case sensitive when parsing + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +0.2.1 / 2013-04-01 +================== + + * add .component + +0.2.0 / 2012-10-28 +================== + + * bytes(200).should.eql('200b') + +0.1.0 / 2012-07-04 +================== + + * add bytes to string conversion [yields] diff --git a/node_modules/bytes/LICENSE b/node_modules/bytes/LICENSE new file mode 100644 index 0000000..63e95a9 --- /dev/null +++ b/node_modules/bytes/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/bytes/Readme.md b/node_modules/bytes/Readme.md new file mode 100644 index 0000000..6ad1ec6 --- /dev/null +++ b/node_modules/bytes/Readme.md @@ -0,0 +1,126 @@ +# Bytes utility + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```bash +$ npm install bytes +``` + +## Usage + +```js +var bytes = require('bytes'); +``` + +#### bytes.format(number value, [options]): string|null + +Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is + rounded. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number` | Value in bytes | +| options | `Object` | Conversion options | + +**Options** + +| Property | Type | Description | +|-------------------|--------|-----------------------------------------------------------------------------------------| +| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | +| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | +| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `.`... Default value to `''`. | +| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). | +| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`null` | Return null upon error. String value otherwise. | + +**Example** + +```js +bytes(1024); +// output: '1KB' + +bytes(1000); +// output: '1000B' + +bytes(1000, {thousandsSeparator: ' '}); +// output: '1 000B' + +bytes(1024 * 1.7, {decimalPlaces: 0}); +// output: '2KB' + +bytes(1024, {unitSeparator: ' '}); +// output: '1 KB' + +``` + +#### bytes.parse(string|number value): number|null + +Parse the string value into an integer in bytes. If no unit is given, or `value` +is a number, it is assumed the value is in bytes. + +Supported units and abbreviations are as follows and are case-insensitive: + + * `b` for bytes + * `kb` for kilobytes + * `mb` for megabytes + * `gb` for gigabytes + * `tb` for terabytes + * `pb` for petabytes + +The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. + +**Arguments** + +| Name | Type | Description | +|---------------|--------|--------------------| +| value | `string`|`number` | String to parse, or number in bytes. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | + +**Example** + +```js +bytes('1KB'); +// output: 1024 + +bytes('1024'); +// output: 1024 + +bytes(1024); +// output: 1KB +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master +[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master +[downloads-image]: https://badgen.net/npm/dm/bytes +[downloads-url]: https://npmjs.org/package/bytes +[npm-image]: https://badgen.net/npm/node/bytes +[npm-url]: https://npmjs.org/package/bytes +[travis-image]: https://badgen.net/travis/visionmedia/bytes.js/master +[travis-url]: https://travis-ci.org/visionmedia/bytes.js diff --git a/node_modules/bytes/index.js b/node_modules/bytes/index.js new file mode 100644 index 0000000..4975bfb --- /dev/null +++ b/node_modules/bytes/index.js @@ -0,0 +1,162 @@ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5), +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = 'PB'; + } else if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.replace(formatThousandsRegExp, thousandsSeparator); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + return Math.floor(map[unit] * floatValue); +} diff --git a/node_modules/bytes/package.json b/node_modules/bytes/package.json new file mode 100644 index 0000000..669fbb5 --- /dev/null +++ b/node_modules/bytes/package.json @@ -0,0 +1,87 @@ +{ + "_args": [ + [ + "bytes@3.1.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "bytes@3.1.0", + "_id": "bytes@3.1.0", + "_inBundle": false, + "_integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "_location": "/bytes", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "bytes@3.1.0", + "name": "bytes", + "escapedName": "bytes", + "rawSpec": "3.1.0", + "saveSpec": null, + "fetchSpec": "3.1.0" + }, + "_requiredBy": [ + "/body-parser", + "/raw-body" + ], + "_resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "_spec": "3.1.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "bugs": { + "url": "https://github.com/visionmedia/bytes.js/issues" + }, + "contributors": [ + { + "name": "Jed Watson", + "email": "jed.watson@me.com" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Utility to parse a string bytes to bytes and vice-versa", + "devDependencies": { + "eslint": "5.12.1", + "mocha": "5.2.0", + "nyc": "13.1.0" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js" + ], + "homepage": "https://github.com/visionmedia/bytes.js#readme", + "keywords": [ + "byte", + "bytes", + "utility", + "parse", + "parser", + "convert", + "converter" + ], + "license": "MIT", + "name": "bytes", + "repository": { + "type": "git", + "url": "git+https://github.com/visionmedia/bytes.js.git" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --check-leaks --reporter spec", + "test-ci": "nyc --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "version": "3.1.0" +} diff --git a/node_modules/cacheable-request/LICENSE b/node_modules/cacheable-request/LICENSE new file mode 100644 index 0000000..f27ee9b --- /dev/null +++ b/node_modules/cacheable-request/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Luke Childs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/cacheable-request/README.md b/node_modules/cacheable-request/README.md new file mode 100644 index 0000000..725e7e0 --- /dev/null +++ b/node_modules/cacheable-request/README.md @@ -0,0 +1,206 @@ +# cacheable-request + +> Wrap native HTTP requests with RFC compliant cache support + +[![Build Status](https://travis-ci.org/lukechilds/cacheable-request.svg?branch=master)](https://travis-ci.org/lukechilds/cacheable-request) +[![Coverage Status](https://coveralls.io/repos/github/lukechilds/cacheable-request/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/cacheable-request?branch=master) +[![npm](https://img.shields.io/npm/dm/cacheable-request.svg)](https://www.npmjs.com/package/cacheable-request) +[![npm](https://img.shields.io/npm/v/cacheable-request.svg)](https://www.npmjs.com/package/cacheable-request) + +[RFC 7234](http://httpwg.org/specs/rfc7234.html) compliant HTTP caching for native Node.js HTTP/HTTPS requests. Caching works out of the box in memory or is easily pluggable with a wide range of storage adapters. + +**Note:** This is a low level wrapper around the core HTTP modules, it's not a high level request library. + +## Features + +- Only stores cacheable responses as defined by RFC 7234 +- Fresh cache entries are served directly from cache +- Stale cache entries are revalidated with `If-None-Match`/`If-Modified-Since` headers +- 304 responses from revalidation requests use cached body +- Updates `Age` header on cached responses +- Can completely bypass cache on a per request basis +- In memory cache by default +- Official support for Redis, MongoDB, SQLite, PostgreSQL and MySQL storage adapters +- Easily plug in your own or third-party storage adapters +- If DB connection fails, cache is automatically bypassed ([disabled by default](#optsautomaticfailover)) +- Adds cache support to any existing HTTP code with minimal changes +- Uses [http-cache-semantics](https://github.com/pornel/http-cache-semantics) internally for HTTP RFC 7234 compliance + +## Install + +```shell +npm install cacheable-request +``` + +## Usage + +```js +const http = require('http'); +const CacheableRequest = require('cacheable-request'); + +// Then instead of +const req = http.request('http://example.com', cb); +req.end(); + +// You can do +const cacheableRequest = new CacheableRequest(http.request); +const cacheReq = cacheableRequest('http://example.com', cb); +cacheReq.on('request', req => req.end()); +// Future requests to 'example.com' will be returned from cache if still valid + +// You pass in any other http.request API compatible method to be wrapped with cache support: +const cacheableRequest = new CacheableRequest(https.request); +const cacheableRequest = new CacheableRequest(electron.net); +``` + +## Storage Adapters + +`cacheable-request` uses [Keyv](https://github.com/lukechilds/keyv) to support a wide range of storage adapters. + +For example, to use Redis as a cache backend, you just need to install the official Redis Keyv storage adapter: + +``` +npm install @keyv/redis +``` + +And then you can pass `CacheableRequest` your connection string: + +```js +const cacheableRequest = new CacheableRequest(http.request, 'redis://user:pass@localhost:6379'); +``` + +[View all official Keyv storage adapters.](https://github.com/lukechilds/keyv#official-storage-adapters) + +Keyv also supports anything that follows the Map API so it's easy to write your own storage adapter or use a third-party solution. + +e.g The following are all valid storage adapters + +```js +const storageAdapter = new Map(); +// or +const storageAdapter = require('./my-storage-adapter'); +// or +const QuickLRU = require('quick-lru'); +const storageAdapter = new QuickLRU({ maxSize: 1000 }); + +const cacheableRequest = new CacheableRequest(http.request, storageAdapter); +``` + +View the [Keyv docs](https://github.com/lukechilds/keyv) for more information on how to use storage adapters. + +## API + +### new cacheableRequest(request, [storageAdapter]) + +Returns the provided request function wrapped with cache support. + +#### request + +Type: `function` + +Request function to wrap with cache support. Should be [`http.request`](https://nodejs.org/api/http.html#http_http_request_options_callback) or a similar API compatible request function. + +#### storageAdapter + +Type: `Keyv storage adapter`
      +Default: `new Map()` + +A [Keyv](https://github.com/lukechilds/keyv) storage adapter instance, or connection string if using with an official Keyv storage adapter. + +### Instance + +#### cacheableRequest(opts, [cb]) + +Returns an event emitter. + +##### opts + +Type: `object`, `string` + +- Any of the default request functions options. +- Any [`http-cache-semantics`](https://github.com/kornelski/http-cache-semantics#constructor-options) options. +- Any of the following: + +###### opts.cache + +Type: `boolean`
      +Default: `true` + +If the cache should be used. Setting this to false will completely bypass the cache for the current request. + +###### opts.strictTtl + +Type: `boolean`
      +Default: `false` + +If set to `true` once a cached resource has expired it is deleted and will have to be re-requested. + +If set to `false` (default), after a cached resource's TTL expires it is kept in the cache and will be revalidated on the next request with `If-None-Match`/`If-Modified-Since` headers. + +###### opts.maxTtl + +Type: `number`
      +Default: `undefined` + +Limits TTL. The `number` represents milliseconds. + +###### opts.automaticFailover + +Type: `boolean`
      +Default: `false` + +When set to `true`, if the DB connection fails we will automatically fallback to a network request. DB errors will still be emitted to notify you of the problem even though the request callback may succeed. + +###### opts.forceRefresh + +Type: `boolean`
      +Default: `false` + +Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a new request and override the cache instead. + +##### cb + +Type: `function` + +The callback function which will receive the response as an argument. + +The response can be either a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or a [responselike object](https://github.com/lukechilds/responselike). The response will also have a `fromCache` property set with a boolean value. + +##### .on('request', request) + +`request` event to get the request object of the request. + +**Note:** This event will only fire if an HTTP request is actually made, not when a response is retrieved from cache. However, you should always handle the `request` event to end the request and handle any potential request errors. + +##### .on('response', response) + +`response` event to get the response object from the HTTP request or cache. + +##### .on('error', error) + +`error` event emitted in case of an error with the cache. + +Errors emitted here will be an instance of `CacheableRequest.RequestError` or `CacheableRequest.CacheError`. You will only ever receive a `RequestError` if the request function throws (normally caused by invalid user input). Normal request errors should be handled inside the `request` event. + +To properly handle all error scenarios you should use the following pattern: + +```js +cacheableRequest('example.com', cb) + .on('error', err => { + if (err instanceof CacheableRequest.CacheError) { + handleCacheError(err); // Cache error + } else if (err instanceof CacheableRequest.RequestError) { + handleRequestError(err); // Request function thrown + } + }) + .on('request', req => { + req.on('error', handleRequestError); // Request error emitted + req.end(); + }); +``` + +**Note:** Database connection errors are emitted here, however `cacheable-request` will attempt to re-request the resource and bypass the cache on a connection error. Therefore a database connection error doesn't necessarily mean the request won't be fulfilled. + +## License + +MIT © Luke Childs diff --git a/node_modules/cacheable-request/node_modules/get-stream/buffer-stream.js b/node_modules/cacheable-request/node_modules/get-stream/buffer-stream.js new file mode 100644 index 0000000..2dd7574 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/buffer-stream.js @@ -0,0 +1,52 @@ +'use strict'; +const {PassThrough: PassThroughStream} = require('stream'); + +module.exports = options => { + options = {...options}; + + const {array} = options; + let {encoding} = options; + const isBuffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || isBuffer); + } else { + encoding = encoding || 'utf8'; + } + + if (isBuffer) { + encoding = null; + } + + const stream = new PassThroughStream({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + let length = 0; + const chunks = []; + + stream.on('data', chunk => { + chunks.push(chunk); + + if (objectMode) { + length = chunks.length; + } else { + length += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return chunks; + } + + return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); + }; + + stream.getBufferedLength = () => length; + + return stream; +}; diff --git a/node_modules/cacheable-request/node_modules/get-stream/index.d.ts b/node_modules/cacheable-request/node_modules/get-stream/index.d.ts new file mode 100644 index 0000000..7b98134 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/index.d.ts @@ -0,0 +1,108 @@ +/// +import {Stream} from 'stream'; + +declare class MaxBufferErrorClass extends Error { + readonly name: 'MaxBufferError'; + constructor(); +} + +declare namespace getStream { + interface Options { + /** + Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `MaxBufferError` error. + + @default Infinity + */ + readonly maxBuffer?: number; + } + + interface OptionsWithEncoding extends Options { + /** + [Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + + @default 'utf8' + */ + readonly encoding?: EncodingType; + } + + type MaxBufferError = MaxBufferErrorClass; +} + +declare const getStream: { + /** + Get the `stream` as a string. + + @returns A promise that resolves when the end event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + + @example + ``` + import * as fs from 'fs'; + import getStream = require('get-stream'); + + (async () => { + const stream = fs.createReadStream('unicorn.txt'); + + console.log(await getStream(stream)); + // ,,))))))));, + // __)))))))))))))), + // \|/ -\(((((''''((((((((. + // -*-==//////(('' . `)))))), + // /|\ ))| o ;-. '((((( ,(, + // ( `| / ) ;))))' ,_))^;(~ + // | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + // o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + // ; ''''```` `: `:::|\,__,%% );`'; ~ + // | _ ) / `:|`----' `-' + // ______/\/~ | / / + // /~;;.____/;;' / ___--,-( `;;;/ + // / // _;______;'------~~~~~ /;;/\ / + // // | | / ; \;;,\ + // (<_ | ; /',/-----' _> + // \_| ||_ //~;~~~~~~~~~ + // `\_| (,~~ + // \~\ + // ~~ + })(); + ``` + */ + (stream: Stream, options?: getStream.OptionsWithEncoding): Promise; + + /** + Get the `stream` as a buffer. + + It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + */ + buffer( + stream: Stream, + options?: getStream.OptionsWithEncoding + ): Promise; + + /** + Get the `stream` as an array of values. + + It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + + - When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + - When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + - When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + */ + array( + stream: Stream, + options?: getStream.Options + ): Promise; + array( + stream: Stream, + options: getStream.OptionsWithEncoding<'buffer'> + ): Promise; + array( + stream: Stream, + options: getStream.OptionsWithEncoding + ): Promise; + + MaxBufferError: typeof MaxBufferErrorClass; + + // TODO: Remove this for the next major release + default: typeof getStream; +}; + +export = getStream; diff --git a/node_modules/cacheable-request/node_modules/get-stream/index.js b/node_modules/cacheable-request/node_modules/get-stream/index.js new file mode 100644 index 0000000..71f3991 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/index.js @@ -0,0 +1,60 @@ +'use strict'; +const {constants: BufferConstants} = require('buffer'); +const pump = require('pump'); +const bufferStream = require('./buffer-stream'); + +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } +} + +async function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + options = { + maxBuffer: Infinity, + ...options + }; + + const {maxBuffer} = options; + + let stream; + await new Promise((resolve, reject) => { + const rejectPromise = error => { + // Don't retrieve an oversized buffer. + if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { + error.bufferedData = stream.getBufferedValue(); + } + + reject(error); + }; + + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }); + + return stream.getBufferedValue(); +} + +module.exports = getStream; +// TODO: Remove this for the next major release +module.exports.default = getStream; +module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); +module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); +module.exports.MaxBufferError = MaxBufferError; diff --git a/node_modules/cacheable-request/node_modules/get-stream/license b/node_modules/cacheable-request/node_modules/get-stream/license new file mode 100644 index 0000000..fa7ceba --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/cacheable-request/node_modules/get-stream/package.json b/node_modules/cacheable-request/node_modules/get-stream/package.json new file mode 100644 index 0000000..17355d0 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/package.json @@ -0,0 +1,82 @@ +{ + "_from": "get-stream@^5.1.0", + "_id": "get-stream@5.2.0", + "_inBundle": false, + "_integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "_location": "/cacheable-request/get-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "get-stream@^5.1.0", + "name": "get-stream", + "escapedName": "get-stream", + "rawSpec": "^5.1.0", + "saveSpec": null, + "fetchSpec": "^5.1.0" + }, + "_requiredBy": [ + "/cacheable-request" + ], + "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "_shasum": "4966a1795ee5ace65e706c4b7beb71257d6e22d3", + "_spec": "get-stream@^5.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\cacheable-request", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/get-stream/issues" + }, + "bundleDependencies": false, + "dependencies": { + "pump": "^3.0.0" + }, + "deprecated": false, + "description": "Get a stream as a string, buffer, or array", + "devDependencies": { + "@types/node": "^12.0.7", + "ava": "^2.0.0", + "into-stream": "^5.0.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts", + "buffer-stream.js" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/get-stream#readme", + "keywords": [ + "get", + "stream", + "promise", + "concat", + "string", + "text", + "buffer", + "read", + "data", + "consume", + "readable", + "readablestream", + "array", + "object" + ], + "license": "MIT", + "name": "get-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/get-stream.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.2.0" +} diff --git a/node_modules/cacheable-request/node_modules/get-stream/readme.md b/node_modules/cacheable-request/node_modules/get-stream/readme.md new file mode 100644 index 0000000..7d7565d --- /dev/null +++ b/node_modules/cacheable-request/node_modules/get-stream/readme.md @@ -0,0 +1,124 @@ +# get-stream [![Build Status](https://travis-ci.com/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.com/github/sindresorhus/get-stream) + +> Get a stream as a string, buffer, or array + +## Install + +``` +$ npm install get-stream +``` + +## Usage + +```js +const fs = require('fs'); +const getStream = require('get-stream'); + +(async () => { + const stream = fs.createReadStream('unicorn.txt'); + + console.log(await getStream(stream)); + /* + ,,))))))));, + __)))))))))))))), + \|/ -\(((((''''((((((((. + -*-==//////(('' . `)))))), + /|\ ))| o ;-. '((((( ,(, + ( `| / ) ;))))' ,_))^;(~ + | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + ; ''''```` `: `:::|\,__,%% );`'; ~ + | _ ) / `:|`----' `-' + ______/\/~ | / / + /~;;.____/;;' / ___--,-( `;;;/ + / // _;______;'------~~~~~ /;;/\ / + // | | / ; \;;,\ + (<_ | ; /',/-----' _> + \_| ||_ //~;~~~~~~~~~ + `\_| (,~~ + \~\ + ~~ + */ +})(); +``` + +## API + +The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + +### getStream(stream, options?) + +Get the `stream` as a string. + +#### options + +Type: `object` + +##### encoding + +Type: `string`\ +Default: `'utf8'` + +[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + +##### maxBuffer + +Type: `number`\ +Default: `Infinity` + +Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `getStream.MaxBufferError` error. + +### getStream.buffer(stream, options?) + +Get the `stream` as a buffer. + +It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + +### getStream.array(stream, options?) + +Get the `stream` as an array of values. + +It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + +- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + +- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + +- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + +## Errors + +If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. + +```js +(async () => { + try { + await getStream(streamThatErrorsAtTheEnd('unicorn')); + } catch (error) { + console.log(error.bufferedData); + //=> 'unicorn' + } +})() +``` + +## FAQ + +### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? + +This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. + +## Related + +- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/cacheable-request/node_modules/lowercase-keys/index.d.ts b/node_modules/cacheable-request/node_modules/lowercase-keys/index.d.ts new file mode 100644 index 0000000..dc90a75 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/lowercase-keys/index.d.ts @@ -0,0 +1,16 @@ +/** +Lowercase the keys of an object. + +@returns A new object with the keys lowercased. + +@example +``` +import lowercaseKeys = require('lowercase-keys'); + +lowercaseKeys({FOO: true, bAr: false}); +//=> {foo: true, bar: false} +``` +*/ +declare function lowercaseKeys(object: {[key: string]: T}): {[key: string]: T}; + +export = lowercaseKeys; diff --git a/node_modules/cacheable-request/node_modules/lowercase-keys/index.js b/node_modules/cacheable-request/node_modules/lowercase-keys/index.js new file mode 100644 index 0000000..357fb8f --- /dev/null +++ b/node_modules/cacheable-request/node_modules/lowercase-keys/index.js @@ -0,0 +1,10 @@ +'use strict'; +module.exports = object => { + const result = {}; + + for (const [key, value] of Object.entries(object)) { + result[key.toLowerCase()] = value; + } + + return result; +}; diff --git a/node_modules/cacheable-request/node_modules/lowercase-keys/license b/node_modules/cacheable-request/node_modules/lowercase-keys/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/lowercase-keys/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/cacheable-request/node_modules/lowercase-keys/package.json b/node_modules/cacheable-request/node_modules/lowercase-keys/package.json new file mode 100644 index 0000000..32236f3 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/lowercase-keys/package.json @@ -0,0 +1,70 @@ +{ + "_from": "lowercase-keys@^2.0.0", + "_id": "lowercase-keys@2.0.0", + "_inBundle": false, + "_integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "_location": "/cacheable-request/lowercase-keys", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "lowercase-keys@^2.0.0", + "name": "lowercase-keys", + "escapedName": "lowercase-keys", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/cacheable-request" + ], + "_resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "_shasum": "2603e78b7b4b0006cbca2fbcc8a3202558ac9479", + "_spec": "lowercase-keys@^2.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\cacheable-request", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/lowercase-keys/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Lowercase the keys of an object", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/lowercase-keys#readme", + "keywords": [ + "object", + "assign", + "extend", + "properties", + "lowercase", + "lower-case", + "case", + "keys", + "key" + ], + "license": "MIT", + "name": "lowercase-keys", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/lowercase-keys.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.0.0" +} diff --git a/node_modules/cacheable-request/node_modules/lowercase-keys/readme.md b/node_modules/cacheable-request/node_modules/lowercase-keys/readme.md new file mode 100644 index 0000000..b1ed061 --- /dev/null +++ b/node_modules/cacheable-request/node_modules/lowercase-keys/readme.md @@ -0,0 +1,32 @@ +# lowercase-keys [![Build Status](https://travis-ci.org/sindresorhus/lowercase-keys.svg?branch=master)](https://travis-ci.org/sindresorhus/lowercase-keys) + +> Lowercase the keys of an object + + +## Install + +``` +$ npm install lowercase-keys +``` + + +## Usage + +```js +const lowercaseKeys = require('lowercase-keys'); + +lowercaseKeys({FOO: true, bAr: false}); +//=> {foo: true, bar: false} +``` + + +## API + +### lowercaseKeys(object) + +Returns a new object with the keys lowercased. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/cacheable-request/package.json b/node_modules/cacheable-request/package.json new file mode 100644 index 0000000..e09048c --- /dev/null +++ b/node_modules/cacheable-request/package.json @@ -0,0 +1,94 @@ +{ + "_from": "cacheable-request@^6.0.0", + "_id": "cacheable-request@6.1.0", + "_inBundle": false, + "_integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "_location": "/cacheable-request", + "_phantomChildren": { + "pump": "3.0.0" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "cacheable-request@^6.0.0", + "name": "cacheable-request", + "escapedName": "cacheable-request", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/got" + ], + "_resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "_shasum": "20ffb8bd162ba4be11e9567d823db651052ca912", + "_spec": "cacheable-request@^6.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\got", + "author": { + "name": "Luke Childs", + "email": "lukechilds123@gmail.com", + "url": "http://lukechilds.co.uk" + }, + "bugs": { + "url": "https://github.com/lukechilds/cacheable-request/issues" + }, + "bundleDependencies": false, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "deprecated": false, + "description": "Wrap native HTTP requests with RFC compliant cache support", + "devDependencies": { + "@keyv/sqlite": "^2.0.0", + "ava": "^1.1.0", + "coveralls": "^3.0.0", + "create-test-server": "3.0.0", + "delay": "^4.0.0", + "eslint-config-xo-lukechilds": "^1.0.0", + "nyc": "^14.1.1", + "pify": "^4.0.0", + "sqlite3": "^4.0.2", + "this": "^1.0.2", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "src" + ], + "homepage": "https://github.com/lukechilds/cacheable-request#readme", + "keywords": [ + "HTTP", + "HTTPS", + "cache", + "caching", + "layer", + "cacheable", + "RFC 7234", + "RFC", + "7234", + "compliant" + ], + "license": "MIT", + "main": "src/index.js", + "name": "cacheable-request", + "repository": { + "type": "git", + "url": "git+https://github.com/lukechilds/cacheable-request.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc ava" + }, + "version": "6.1.0", + "xo": { + "extends": "xo-lukechilds" + } +} diff --git a/node_modules/cacheable-request/src/index.js b/node_modules/cacheable-request/src/index.js new file mode 100644 index 0000000..3fcea3f --- /dev/null +++ b/node_modules/cacheable-request/src/index.js @@ -0,0 +1,251 @@ +'use strict'; + +const EventEmitter = require('events'); +const urlLib = require('url'); +const normalizeUrl = require('normalize-url'); +const getStream = require('get-stream'); +const CachePolicy = require('http-cache-semantics'); +const Response = require('responselike'); +const lowercaseKeys = require('lowercase-keys'); +const cloneResponse = require('clone-response'); +const Keyv = require('keyv'); + +class CacheableRequest { + constructor(request, cacheAdapter) { + if (typeof request !== 'function') { + throw new TypeError('Parameter `request` must be a function'); + } + + this.cache = new Keyv({ + uri: typeof cacheAdapter === 'string' && cacheAdapter, + store: typeof cacheAdapter !== 'string' && cacheAdapter, + namespace: 'cacheable-request' + }); + + return this.createCacheableRequest(request); + } + + createCacheableRequest(request) { + return (opts, cb) => { + let url; + if (typeof opts === 'string') { + url = normalizeUrlObject(urlLib.parse(opts)); + opts = {}; + } else if (opts instanceof urlLib.URL) { + url = normalizeUrlObject(urlLib.parse(opts.toString())); + opts = {}; + } else { + const [pathname, ...searchParts] = (opts.path || '').split('?'); + const search = searchParts.length > 0 ? + `?${searchParts.join('?')}` : + ''; + url = normalizeUrlObject({ ...opts, pathname, search }); + } + + opts = { + headers: {}, + method: 'GET', + cache: true, + strictTtl: false, + automaticFailover: false, + ...opts, + ...urlObjectToRequestOptions(url) + }; + opts.headers = lowercaseKeys(opts.headers); + + const ee = new EventEmitter(); + const normalizedUrlString = normalizeUrl( + urlLib.format(url), + { + stripWWW: false, + removeTrailingSlash: false, + stripAuthentication: false + } + ); + const key = `${opts.method}:${normalizedUrlString}`; + let revalidate = false; + let madeRequest = false; + + const makeRequest = opts => { + madeRequest = true; + let requestErrored = false; + let requestErrorCallback; + + const requestErrorPromise = new Promise(resolve => { + requestErrorCallback = () => { + if (!requestErrored) { + requestErrored = true; + resolve(); + } + }; + }); + + const handler = response => { + if (revalidate && !opts.forceRefresh) { + response.status = response.statusCode; + const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response); + if (!revalidatedPolicy.modified) { + const headers = revalidatedPolicy.policy.responseHeaders(); + response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url); + response.cachePolicy = revalidatedPolicy.policy; + response.fromCache = true; + } + } + + if (!response.fromCache) { + response.cachePolicy = new CachePolicy(opts, response, opts); + response.fromCache = false; + } + + let clonedResponse; + if (opts.cache && response.cachePolicy.storable()) { + clonedResponse = cloneResponse(response); + + (async () => { + try { + const bodyPromise = getStream.buffer(response); + + await Promise.race([ + requestErrorPromise, + new Promise(resolve => response.once('end', resolve)) + ]); + + if (requestErrored) { + return; + } + + const body = await bodyPromise; + + const value = { + cachePolicy: response.cachePolicy.toObject(), + url: response.url, + statusCode: response.fromCache ? revalidate.statusCode : response.statusCode, + body + }; + + let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined; + if (opts.maxTtl) { + ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl; + } + + await this.cache.set(key, value, ttl); + } catch (error) { + ee.emit('error', new CacheableRequest.CacheError(error)); + } + })(); + } else if (opts.cache && revalidate) { + (async () => { + try { + await this.cache.delete(key); + } catch (error) { + ee.emit('error', new CacheableRequest.CacheError(error)); + } + })(); + } + + ee.emit('response', clonedResponse || response); + if (typeof cb === 'function') { + cb(clonedResponse || response); + } + }; + + try { + const req = request(opts, handler); + req.once('error', requestErrorCallback); + req.once('abort', requestErrorCallback); + ee.emit('request', req); + } catch (error) { + ee.emit('error', new CacheableRequest.RequestError(error)); + } + }; + + (async () => { + const get = async opts => { + await Promise.resolve(); + + const cacheEntry = opts.cache ? await this.cache.get(key) : undefined; + if (typeof cacheEntry === 'undefined') { + return makeRequest(opts); + } + + const policy = CachePolicy.fromObject(cacheEntry.cachePolicy); + if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) { + const headers = policy.responseHeaders(); + const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url); + response.cachePolicy = policy; + response.fromCache = true; + + ee.emit('response', response); + if (typeof cb === 'function') { + cb(response); + } + } else { + revalidate = cacheEntry; + opts.headers = policy.revalidationHeaders(opts); + makeRequest(opts); + } + }; + + const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error)); + this.cache.once('error', errorHandler); + ee.on('response', () => this.cache.removeListener('error', errorHandler)); + + try { + await get(opts); + } catch (error) { + if (opts.automaticFailover && !madeRequest) { + makeRequest(opts); + } + + ee.emit('error', new CacheableRequest.CacheError(error)); + } + })(); + + return ee; + }; + } +} + +function urlObjectToRequestOptions(url) { + const options = { ...url }; + options.path = `${url.pathname || '/'}${url.search || ''}`; + delete options.pathname; + delete options.search; + return options; +} + +function normalizeUrlObject(url) { + // If url was parsed by url.parse or new URL: + // - hostname will be set + // - host will be hostname[:port] + // - port will be set if it was explicit in the parsed string + // Otherwise, url was from request options: + // - hostname or host may be set + // - host shall not have port encoded + return { + protocol: url.protocol, + auth: url.auth, + hostname: url.hostname || url.host || 'localhost', + port: url.port, + pathname: url.pathname, + search: url.search + }; +} + +CacheableRequest.RequestError = class extends Error { + constructor(error) { + super(error.message); + this.name = 'RequestError'; + Object.assign(this, error); + } +}; + +CacheableRequest.CacheError = class extends Error { + constructor(error) { + super(error.message); + this.name = 'CacheError'; + Object.assign(this, error); + } +}; + +module.exports = CacheableRequest; diff --git a/node_modules/camelcase/index.d.ts b/node_modules/camelcase/index.d.ts new file mode 100644 index 0000000..a78f60b --- /dev/null +++ b/node_modules/camelcase/index.d.ts @@ -0,0 +1,101 @@ +declare namespace camelcase { + interface Options { + /** + Uppercase the first character: `foo-bar` → `FooBar`. + + @default false + */ + readonly pascalCase?: boolean; + + /** + Preserve the consecutive uppercase characters: `foo-BAR` → `FooBAR`. + + @default false + */ + readonly preserveConsecutiveUppercase?: boolean; + + /** + The locale parameter indicates the locale to be used to convert to upper/lower case according to any locale-specific case mappings. If multiple locales are given in an array, the best available locale is used. + + Default: The host environment’s current locale. + + @example + ``` + import camelCase = require('camelcase'); + + camelCase('lorem-ipsum', {locale: 'en-US'}); + //=> 'loremIpsum' + camelCase('lorem-ipsum', {locale: 'tr-TR'}); + //=> 'loremİpsum' + camelCase('lorem-ipsum', {locale: ['en-US', 'en-GB']}); + //=> 'loremIpsum' + camelCase('lorem-ipsum', {locale: ['tr', 'TR', 'tr-TR']}); + //=> 'loremİpsum' + ``` + */ + readonly locale?: string | readonly string[]; + } +} + +/** +Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`. + +Correctly handles Unicode strings. + +@param input - String to convert to camel case. + +@example +``` +import camelCase = require('camelcase'); + +camelCase('foo-bar'); +//=> 'fooBar' + +camelCase('foo_bar'); +//=> 'fooBar' + +camelCase('Foo-Bar'); +//=> 'fooBar' + +camelCase('розовый_пушистый_единорог'); +//=> 'розовыйПушистыйЕдинорог' + +camelCase('Foo-Bar', {pascalCase: true}); +//=> 'FooBar' + +camelCase('--foo.bar', {pascalCase: false}); +//=> 'fooBar' + +camelCase('Foo-BAR', {preserveConsecutiveUppercase: true}); +//=> 'fooBAR' + +camelCase('fooBAR', {pascalCase: true, preserveConsecutiveUppercase: true})); +//=> 'FooBAR' + +camelCase('foo bar'); +//=> 'fooBar' + +console.log(process.argv[3]); +//=> '--foo-bar' +camelCase(process.argv[3]); +//=> 'fooBar' + +camelCase(['foo', 'bar']); +//=> 'fooBar' + +camelCase(['__foo__', '--bar'], {pascalCase: true}); +//=> 'FooBar' + +camelCase(['foo', 'BAR'], {pascalCase: true, preserveConsecutiveUppercase: true}) +//=> 'FooBAR' + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' +``` +*/ +declare function camelcase( + input: string | readonly string[], + options?: camelcase.Options +): string; + +export = camelcase; diff --git a/node_modules/camelcase/index.js b/node_modules/camelcase/index.js new file mode 100644 index 0000000..b501478 --- /dev/null +++ b/node_modules/camelcase/index.js @@ -0,0 +1,106 @@ +'use strict'; + +const UPPERCASE = /[\p{Lu}]/u; +const LOWERCASE = /[\p{Ll}]/u; +const LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/gu; +const IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u; +const SEPARATORS = /[_.\- ]+/; + +const LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source); +const SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu'); +const NUMBERS_AND_IDENTIFIER = new RegExp('\\d+' + IDENTIFIER.source, 'gu'); + +const preserveCamelCase = (string, locale) => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < string.length; i++) { + const character = string[i]; + + if (isLastCharLower && UPPERCASE.test(character)) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = character.toLocaleLowerCase(locale) === character && character.toLocaleUpperCase(locale) !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = character.toLocaleUpperCase(locale) === character && character.toLocaleLowerCase(locale) !== character; + } + } + + return string; +}; + +const preserveConsecutiveUppercase = input => { + LEADING_CAPITAL.lastIndex = 0; + + return input.replace(LEADING_CAPITAL, m1 => m1.toLowerCase()); +}; + +const postProcess = (input, options) => { + SEPARATORS_AND_IDENTIFIER.lastIndex = 0; + NUMBERS_AND_IDENTIFIER.lastIndex = 0; + + return input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => identifier.toLocaleUpperCase(options.locale)) + .replace(NUMBERS_AND_IDENTIFIER, m => m.toLocaleUpperCase(options.locale)); +}; + +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } + + options = { + pascalCase: false, + preserveConsecutiveUppercase: false, + ...options + }; + + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } + + if (input.length === 0) { + return ''; + } + + if (input.length === 1) { + return options.pascalCase ? input.toLocaleUpperCase(options.locale) : input.toLocaleLowerCase(options.locale); + } + + const hasUpperCase = input !== input.toLocaleLowerCase(options.locale); + + if (hasUpperCase) { + input = preserveCamelCase(input, options.locale); + } + + input = input.replace(LEADING_SEPARATORS, ''); + + if (options.preserveConsecutiveUppercase) { + input = preserveConsecutiveUppercase(input); + } else { + input = input.toLocaleLowerCase(); + } + + if (options.pascalCase) { + input = input.charAt(0).toLocaleUpperCase(options.locale) + input.slice(1); + } + + return postProcess(input, options); +}; + +module.exports = camelCase; +// TODO: Remove this for the next major release +module.exports.default = camelCase; diff --git a/node_modules/camelcase/license b/node_modules/camelcase/license new file mode 100644 index 0000000..fa7ceba --- /dev/null +++ b/node_modules/camelcase/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/camelcase/package.json b/node_modules/camelcase/package.json new file mode 100644 index 0000000..3573747 --- /dev/null +++ b/node_modules/camelcase/package.json @@ -0,0 +1,76 @@ +{ + "_from": "camelcase@^6.2.0", + "_id": "camelcase@6.2.1", + "_inBundle": false, + "_integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "_location": "/camelcase", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "camelcase@^6.2.0", + "name": "camelcase", + "escapedName": "camelcase", + "rawSpec": "^6.2.0", + "saveSpec": null, + "fetchSpec": "^6.2.0" + }, + "_requiredBy": [ + "/boxen" + ], + "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "_shasum": "250fd350cfd555d0d2160b1d51510eaf8326e86e", + "_spec": "camelcase@^6.2.0", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/camelcase/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.11.0", + "xo": "^0.28.3" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/camelcase#readme", + "keywords": [ + "camelcase", + "camel-case", + "camel", + "case", + "dash", + "hyphen", + "dot", + "underscore", + "separator", + "string", + "text", + "convert", + "pascalcase", + "pascal-case" + ], + "license": "MIT", + "name": "camelcase", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/camelcase.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "6.2.1" +} diff --git a/node_modules/camelcase/readme.md b/node_modules/camelcase/readme.md new file mode 100644 index 0000000..7d0d610 --- /dev/null +++ b/node_modules/camelcase/readme.md @@ -0,0 +1,130 @@ +# camelcase + +> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar` + +Correctly handles Unicode strings. + +If you use this on untrusted user input, don't forget to limit the length to something reasonable. + +## Install + +``` +$ npm install camelcase +``` + +*If you need to support Firefox < 78, stay on version 5 as version 6 uses regex features not available in Firefox < 78.* + +## Usage + +```js +const camelCase = require('camelcase'); + +camelCase('foo-bar'); +//=> 'fooBar' + +camelCase('foo_bar'); +//=> 'fooBar' + +camelCase('Foo-Bar'); +//=> 'fooBar' + +camelCase('розовый_пушистый_единорог'); +//=> 'розовыйПушистыйЕдинорог' + +camelCase('Foo-Bar', {pascalCase: true}); +//=> 'FooBar' + +camelCase('--foo.bar', {pascalCase: false}); +//=> 'fooBar' + +camelCase('Foo-BAR', {preserveConsecutiveUppercase: true}); +//=> 'fooBAR' + +camelCase('fooBAR', {pascalCase: true, preserveConsecutiveUppercase: true})); +//=> 'FooBAR' + +camelCase('foo bar'); +//=> 'fooBar' + +console.log(process.argv[3]); +//=> '--foo-bar' +camelCase(process.argv[3]); +//=> 'fooBar' + +camelCase(['foo', 'bar']); +//=> 'fooBar' + +camelCase(['__foo__', '--bar'], {pascalCase: true}); +//=> 'FooBar' + +camelCase(['foo', 'BAR'], {pascalCase: true, preserveConsecutiveUppercase: true}) +//=> 'FooBAR' + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' +``` + +## API + +### camelCase(input, options?) + +#### input + +Type: `string | string[]` + +String to convert to camel case. + +#### options + +Type: `object` + +##### pascalCase + +Type: `boolean`\ +Default: `false` + +Uppercase the first character: `foo-bar` → `FooBar` + +##### preserveConsecutiveUppercase + +Type: `boolean`\ +Default: `false` + +Preserve the consecutive uppercase characters: `foo-BAR` → `FooBAR`. + +##### locale + +Type: `string | string[]`\ +Default: The host environment’s current locale. + +The locale parameter indicates the locale to be used to convert to upper/lower case according to any locale-specific case mappings. If multiple locales are given in an array, the best available locale is used. + +```js +const camelCase = require('camelcase'); + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' + +camelCase('lorem-ipsum', {locale: 'tr-TR'}); +//=> 'loremİpsum' + +camelCase('lorem-ipsum', {locale: ['en-US', 'en-GB']}); +//=> 'loremIpsum' + +camelCase('lorem-ipsum', {locale: ['tr', 'TR', 'tr-TR']}); +//=> 'loremİpsum' +``` + +## camelcase for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of camelcase and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-camelcase?utm_source=npm-camelcase&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module +- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase +- [titleize](https://github.com/sindresorhus/titleize) - Capitalize every word in string +- [humanize-string](https://github.com/sindresorhus/humanize-string) - Convert a camelized/dasherized/underscored string into a humanized one +- [camelcase-keys](https://github.com/sindresorhus/camelcase-keys) - Convert object keys to camel case diff --git a/node_modules/caseless/LICENSE b/node_modules/caseless/LICENSE new file mode 100644 index 0000000..61789f4 --- /dev/null +++ b/node_modules/caseless/LICENSE @@ -0,0 +1,28 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +1. Definitions. +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +You must give any other recipients of the Work or Derivative Works a copy of this License; and +You must cause any modified files to carry prominent notices stating that You changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/caseless/README.md b/node_modules/caseless/README.md new file mode 100644 index 0000000..e5077a2 --- /dev/null +++ b/node_modules/caseless/README.md @@ -0,0 +1,45 @@ +## Caseless -- wrap an object to set and get property with caseless semantics but also preserve caseing. + +This library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manner while also preserving the caseing of headers the first time they are set. + +## Usage + +```javascript +var headers = {} + , c = caseless(headers) + ; +c.set('a-Header', 'asdf') +c.get('a-header') === 'asdf' +``` + +## has(key) + +Has takes a name and if it finds a matching header will return that header name with the preserved caseing it was set with. + +```javascript +c.has('a-header') === 'a-Header' +``` + +## set(key, value[, clobber=true]) + +Set is fairly straight forward except that if the header exists and clobber is disabled it will add `','+value` to the existing header. + +```javascript +c.set('a-Header', 'fdas') +c.set('a-HEADER', 'more', false) +c.get('a-header') === 'fdsa,more' +``` + +## swap(key) + +Swaps the casing of a header with the new one that is passed in. + +```javascript +var headers = {} + , c = caseless(headers) + ; +c.set('a-Header', 'fdas') +c.swap('a-HEADER') +c.has('a-header') === 'a-HEADER' +headers === {'a-HEADER': 'fdas'} +``` diff --git a/node_modules/caseless/index.js b/node_modules/caseless/index.js new file mode 100644 index 0000000..b194734 --- /dev/null +++ b/node_modules/caseless/index.js @@ -0,0 +1,67 @@ +function Caseless (dict) { + this.dict = dict || {} +} +Caseless.prototype.set = function (name, value, clobber) { + if (typeof name === 'object') { + for (var i in name) { + this.set(i, name[i], value) + } + } else { + if (typeof clobber === 'undefined') clobber = true + var has = this.has(name) + + if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value + else this.dict[has || name] = value + return has + } +} +Caseless.prototype.has = function (name) { + var keys = Object.keys(this.dict) + , name = name.toLowerCase() + ; + for (var i=0;i Chalk; + + /** + Detect whether the terminal supports color. + */ + interface ColorSupport { + /** + The color level used by Chalk. + */ + level: Level; + + /** + Return whether Chalk supports basic 16 colors. + */ + hasBasic: boolean; + + /** + Return whether Chalk supports ANSI 256 colors. + */ + has256: boolean; + + /** + Return whether Chalk supports Truecolor 16 million colors. + */ + has16m: boolean; + } + + interface ChalkFunction { + /** + Use a template string. + + @remarks Template literals are unsupported for nested calls (see [issue #341](https://github.com/chalk/chalk/issues/341)) + + @example + ``` + import chalk = require('chalk'); + + log(chalk` + CPU: {red ${cpu.totalPercent}%} + RAM: {green ${ram.used / ram.total * 100}%} + DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} + `); + ``` + + @example + ``` + import chalk = require('chalk'); + + log(chalk.red.bgBlack`2 + 3 = {bold ${2 + 3}}`) + ``` + */ + (text: TemplateStringsArray, ...placeholders: unknown[]): string; + + (...text: unknown[]): string; + } + + interface Chalk extends ChalkFunction { + /** + Return a new Chalk instance. + */ + Instance: Instance; + + /** + The color support for Chalk. + + By default, color support is automatically detected based on the environment. + + Levels: + - `0` - All colors disabled. + - `1` - Basic 16 colors support. + - `2` - ANSI 256 colors support. + - `3` - Truecolor 16 million colors support. + */ + level: Level; + + /** + Use HEX value to set text color. + + @param color - Hexadecimal value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.hex('#DEADED'); + ``` + */ + hex(color: string): Chalk; + + /** + Use keyword color value to set text color. + + @param color - Keyword value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.keyword('orange'); + ``` + */ + keyword(color: string): Chalk; + + /** + Use RGB values to set text color. + */ + rgb(red: number, green: number, blue: number): Chalk; + + /** + Use HSL values to set text color. + */ + hsl(hue: number, saturation: number, lightness: number): Chalk; + + /** + Use HSV values to set text color. + */ + hsv(hue: number, saturation: number, value: number): Chalk; + + /** + Use HWB values to set text color. + */ + hwb(hue: number, whiteness: number, blackness: number): Chalk; + + /** + Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set text color. + + 30 <= code && code < 38 || 90 <= code && code < 98 + For example, 31 for red, 91 for redBright. + */ + ansi(code: number): Chalk; + + /** + Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(index: number): Chalk; + + /** + Use HEX value to set background color. + + @param color - Hexadecimal value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.bgHex('#DEADED'); + ``` + */ + bgHex(color: string): Chalk; + + /** + Use keyword color value to set background color. + + @param color - Keyword value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.bgKeyword('orange'); + ``` + */ + bgKeyword(color: string): Chalk; + + /** + Use RGB values to set background color. + */ + bgRgb(red: number, green: number, blue: number): Chalk; + + /** + Use HSL values to set background color. + */ + bgHsl(hue: number, saturation: number, lightness: number): Chalk; + + /** + Use HSV values to set background color. + */ + bgHsv(hue: number, saturation: number, value: number): Chalk; + + /** + Use HWB values to set background color. + */ + bgHwb(hue: number, whiteness: number, blackness: number): Chalk; + + /** + Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set background color. + + 30 <= code && code < 38 || 90 <= code && code < 98 + For example, 31 for red, 91 for redBright. + Use the foreground code, not the background code (for example, not 41, nor 101). + */ + bgAnsi(code: number): Chalk; + + /** + Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color. + */ + bgAnsi256(index: number): Chalk; + + /** + Modifier: Resets the current color chain. + */ + readonly reset: Chalk; + + /** + Modifier: Make text bold. + */ + readonly bold: Chalk; + + /** + Modifier: Emitting only a small amount of light. + */ + readonly dim: Chalk; + + /** + Modifier: Make text italic. (Not widely supported) + */ + readonly italic: Chalk; + + /** + Modifier: Make text underline. (Not widely supported) + */ + readonly underline: Chalk; + + /** + Modifier: Inverse background and foreground colors. + */ + readonly inverse: Chalk; + + /** + Modifier: Prints the text, but makes it invisible. + */ + readonly hidden: Chalk; + + /** + Modifier: Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: Chalk; + + /** + Modifier: Prints the text only when Chalk has a color support level > 0. + Can be useful for things that are purely cosmetic. + */ + readonly visible: Chalk; + + readonly black: Chalk; + readonly red: Chalk; + readonly green: Chalk; + readonly yellow: Chalk; + readonly blue: Chalk; + readonly magenta: Chalk; + readonly cyan: Chalk; + readonly white: Chalk; + + /* + Alias for `blackBright`. + */ + readonly gray: Chalk; + + /* + Alias for `blackBright`. + */ + readonly grey: Chalk; + + readonly blackBright: Chalk; + readonly redBright: Chalk; + readonly greenBright: Chalk; + readonly yellowBright: Chalk; + readonly blueBright: Chalk; + readonly magentaBright: Chalk; + readonly cyanBright: Chalk; + readonly whiteBright: Chalk; + + readonly bgBlack: Chalk; + readonly bgRed: Chalk; + readonly bgGreen: Chalk; + readonly bgYellow: Chalk; + readonly bgBlue: Chalk; + readonly bgMagenta: Chalk; + readonly bgCyan: Chalk; + readonly bgWhite: Chalk; + + /* + Alias for `bgBlackBright`. + */ + readonly bgGray: Chalk; + + /* + Alias for `bgBlackBright`. + */ + readonly bgGrey: Chalk; + + readonly bgBlackBright: Chalk; + readonly bgRedBright: Chalk; + readonly bgGreenBright: Chalk; + readonly bgYellowBright: Chalk; + readonly bgBlueBright: Chalk; + readonly bgMagentaBright: Chalk; + readonly bgCyanBright: Chalk; + readonly bgWhiteBright: Chalk; + } +} + +/** +Main Chalk object that allows to chain styles together. +Call the last one as a method with a string argument. +Order doesn't matter, and later styles take precedent in case of a conflict. +This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`. +*/ +declare const chalk: chalk.Chalk & chalk.ChalkFunction & { + supportsColor: chalk.ColorSupport | false; + Level: chalk.Level; + Color: Color; + ForegroundColor: ForegroundColor; + BackgroundColor: BackgroundColor; + Modifiers: Modifiers; + stderr: chalk.Chalk & {supportsColor: chalk.ColorSupport | false}; +}; + +export = chalk; diff --git a/node_modules/chalk/license b/node_modules/chalk/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/chalk/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/chalk/node_modules/has-flag/index.d.ts b/node_modules/chalk/node_modules/has-flag/index.d.ts new file mode 100644 index 0000000..a0a48c8 --- /dev/null +++ b/node_modules/chalk/node_modules/has-flag/index.d.ts @@ -0,0 +1,39 @@ +/** +Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag. + +@param flag - CLI flag to look for. The `--` prefix is optional. +@param argv - CLI arguments. Default: `process.argv`. +@returns Whether the flag exists. + +@example +``` +// $ ts-node foo.ts -f --unicorn --foo=bar -- --rainbow + +// foo.ts +import hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('f'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` +*/ +declare function hasFlag(flag: string, argv?: string[]): boolean; + +export = hasFlag; diff --git a/node_modules/chalk/node_modules/has-flag/index.js b/node_modules/chalk/node_modules/has-flag/index.js new file mode 100644 index 0000000..b6f80b1 --- /dev/null +++ b/node_modules/chalk/node_modules/has-flag/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +}; diff --git a/node_modules/chalk/node_modules/has-flag/license b/node_modules/chalk/node_modules/has-flag/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/chalk/node_modules/has-flag/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/chalk/node_modules/has-flag/package.json b/node_modules/chalk/node_modules/has-flag/package.json new file mode 100644 index 0000000..b6f1c38 --- /dev/null +++ b/node_modules/chalk/node_modules/has-flag/package.json @@ -0,0 +1,78 @@ +{ + "_from": "has-flag@^4.0.0", + "_id": "has-flag@4.0.0", + "_inBundle": false, + "_integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "_location": "/chalk/has-flag", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "has-flag@^4.0.0", + "name": "has-flag", + "escapedName": "has-flag", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/chalk/supports-color" + ], + "_resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "_shasum": "944771fd9c81c81265c4d6941860da06bb59479b", + "_spec": "has-flag@^4.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\chalk\\node_modules\\supports-color", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/has-flag/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if argv has a specific flag", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/has-flag#readme", + "keywords": [ + "has", + "check", + "detect", + "contains", + "find", + "flag", + "cli", + "command-line", + "argv", + "process", + "arg", + "args", + "argument", + "arguments", + "getopt", + "minimist", + "optimist" + ], + "license": "MIT", + "name": "has-flag", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/has-flag.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.0.0" +} diff --git a/node_modules/chalk/node_modules/has-flag/readme.md b/node_modules/chalk/node_modules/has-flag/readme.md new file mode 100644 index 0000000..3f72dff --- /dev/null +++ b/node_modules/chalk/node_modules/has-flag/readme.md @@ -0,0 +1,89 @@ +# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag) + +> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag + +Correctly stops looking after an `--` argument terminator. + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      + +--- + + +## Install + +``` +$ npm install has-flag +``` + + +## Usage + +```js +// foo.js +const hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('f'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` + +``` +$ node foo.js -f --unicorn --foo=bar -- --rainbow +``` + + +## API + +### hasFlag(flag, [argv]) + +Returns a boolean for whether the flag exists. + +#### flag + +Type: `string` + +CLI flag to look for. The `--` prefix is optional. + +#### argv + +Type: `string[]`
      +Default: `process.argv` + +CLI arguments. + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/chalk/node_modules/supports-color/browser.js b/node_modules/chalk/node_modules/supports-color/browser.js new file mode 100644 index 0000000..62afa3a --- /dev/null +++ b/node_modules/chalk/node_modules/supports-color/browser.js @@ -0,0 +1,5 @@ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; diff --git a/node_modules/chalk/node_modules/supports-color/index.js b/node_modules/chalk/node_modules/supports-color/index.js new file mode 100644 index 0000000..6fada39 --- /dev/null +++ b/node_modules/chalk/node_modules/supports-color/index.js @@ -0,0 +1,135 @@ +'use strict'; +const os = require('os'); +const tty = require('tty'); +const hasFlag = require('has-flag'); + +const {env} = process; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; +} + +if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === 'false') { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; + } + + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) +}; diff --git a/node_modules/chalk/node_modules/supports-color/license b/node_modules/chalk/node_modules/supports-color/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/chalk/node_modules/supports-color/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/chalk/node_modules/supports-color/package.json b/node_modules/chalk/node_modules/supports-color/package.json new file mode 100644 index 0000000..7d50273 --- /dev/null +++ b/node_modules/chalk/node_modules/supports-color/package.json @@ -0,0 +1,85 @@ +{ + "_from": "supports-color@^7.1.0", + "_id": "supports-color@7.2.0", + "_inBundle": false, + "_integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "_location": "/chalk/supports-color", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "supports-color@^7.1.0", + "name": "supports-color", + "escapedName": "supports-color", + "rawSpec": "^7.1.0", + "saveSpec": null, + "fetchSpec": "^7.1.0" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "_shasum": "1b7dcdcb32b8138801b3e478ba6a51caa89648da", + "_spec": "supports-color@^7.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/chalk/supports-color/issues" + }, + "bundleDependencies": false, + "dependencies": { + "has-flag": "^4.0.0" + }, + "deprecated": false, + "description": "Detect whether a terminal supports color", + "devDependencies": { + "ava": "^1.4.1", + "import-fresh": "^3.0.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "browser.js" + ], + "homepage": "https://github.com/chalk/supports-color#readme", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect", + "truecolor", + "16m" + ], + "license": "MIT", + "name": "supports-color", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/supports-color.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "7.2.0" +} diff --git a/node_modules/chalk/node_modules/supports-color/readme.md b/node_modules/chalk/node_modules/supports-color/readme.md new file mode 100644 index 0000000..3654228 --- /dev/null +++ b/node_modules/chalk/node_modules/supports-color/readme.md @@ -0,0 +1,76 @@ +# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) + +> Detect whether a terminal supports color + + +## Install + +``` +$ npm install supports-color +``` + + +## Usage + +```js +const supportsColor = require('supports-color'); + +if (supportsColor.stdout) { + console.log('Terminal stdout supports color'); +} + +if (supportsColor.stdout.has256) { + console.log('Terminal stdout supports 256 colors'); +} + +if (supportsColor.stderr.has16m) { + console.log('Terminal stderr supports 16 million colors (truecolor)'); +} +``` + + +## API + +Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. + +The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: + +- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) +- `.level = 2` and `.has256 = true`: 256 color support +- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) + + +## Info + +It obeys the `--color` and `--no-color` CLI flags. + +For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. + +Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. + + +## Related + +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      + +--- diff --git a/node_modules/chalk/package.json b/node_modules/chalk/package.json new file mode 100644 index 0000000..82a8ef8 --- /dev/null +++ b/node_modules/chalk/package.json @@ -0,0 +1,101 @@ +{ + "_from": "chalk@^4.1.0", + "_id": "chalk@4.1.2", + "_inBundle": false, + "_integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "_location": "/chalk", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "chalk@^4.1.0", + "name": "chalk", + "escapedName": "chalk", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "/boxen", + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "_shasum": "aac4e2b7734a740867aeb16bf02aad556a1e7a01", + "_spec": "chalk@^4.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "bugs": { + "url": "https://github.com/chalk/chalk/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "deprecated": false, + "description": "Terminal string styling done right", + "devDependencies": { + "ava": "^2.4.0", + "coveralls": "^3.0.7", + "execa": "^4.0.0", + "import-fresh": "^3.1.0", + "matcha": "^0.7.0", + "nyc": "^15.0.0", + "resolve-from": "^5.0.0", + "tsd": "^0.7.4", + "xo": "^0.28.2" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "source", + "index.d.ts" + ], + "funding": "https://github.com/chalk/chalk?sponsor=1", + "homepage": "https://github.com/chalk/chalk#readme", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "str", + "ansi", + "style", + "styles", + "tty", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "main": "source", + "name": "chalk", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/chalk.git" + }, + "scripts": { + "bench": "matcha benchmark.js", + "test": "xo && nyc ava && tsd" + }, + "version": "4.1.2", + "xo": { + "rules": { + "unicorn/prefer-string-slice": "off", + "unicorn/prefer-includes": "off", + "@typescript-eslint/member-ordering": "off", + "no-redeclare": "off", + "unicorn/string-content": "off", + "unicorn/better-regex": "off" + } + } +} diff --git a/node_modules/chalk/readme.md b/node_modules/chalk/readme.md new file mode 100644 index 0000000..a055d21 --- /dev/null +++ b/node_modules/chalk/readme.md @@ -0,0 +1,341 @@ +

      +
      +
      + Chalk +
      +
      +
      +

      + +> Terminal string styling done right + +[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents) [![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) ![TypeScript-ready](https://img.shields.io/npm/types/chalk.svg) [![run on repl.it](https://repl.it/badge/github/chalk/chalk)](https://repl.it/github/chalk/chalk) + + + +
      + +--- + + + +--- + +
      + +## Highlights + +- Expressive API +- Highly performant +- Ability to nest styles +- [256/Truecolor color support](#256-and-truecolor-color-support) +- Auto-detects color support +- Doesn't extend `String.prototype` +- Clean and focused +- Actively maintained +- [Used by ~50,000 packages](https://www.npmjs.com/browse/depended/chalk) as of January 1, 2020 + +## Install + +```console +$ npm install chalk +``` + +## Usage + +```js +const chalk = require('chalk'); + +console.log(chalk.blue('Hello world!')); +``` + +Chalk comes with an easy to use composable API where you just chain and nest the styles you want. + +```js +const chalk = require('chalk'); +const log = console.log; + +// Combine styled and normal strings +log(chalk.blue('Hello') + ' World' + chalk.red('!')); + +// Compose multiple styles using the chainable API +log(chalk.blue.bgRed.bold('Hello world!')); + +// Pass in multiple arguments +log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); + +// Nest styles +log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); + +// Nest styles of the same type even (color, underline, background) +log(chalk.green( + 'I am a green line ' + + chalk.blue.underline.bold('with a blue substring') + + ' that becomes green again!' +)); + +// ES2015 template literal +log(` +CPU: ${chalk.red('90%')} +RAM: ${chalk.green('40%')} +DISK: ${chalk.yellow('70%')} +`); + +// ES2015 tagged template literal +log(chalk` +CPU: {red ${cpu.totalPercent}%} +RAM: {green ${ram.used / ram.total * 100}%} +DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} +`); + +// Use RGB colors in terminal emulators that support it. +log(chalk.keyword('orange')('Yay for orange colored text!')); +log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); +log(chalk.hex('#DEADED').bold('Bold gray!')); +``` + +Easily define your own themes: + +```js +const chalk = require('chalk'); + +const error = chalk.bold.red; +const warning = chalk.keyword('orange'); + +console.log(error('Error!')); +console.log(warning('Warning!')); +``` + +Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): + +```js +const name = 'Sindre'; +console.log(chalk.green('Hello %s'), name); +//=> 'Hello Sindre' +``` + +## API + +### chalk.` +Browserstack-logo-white + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/psl/data/rules.json b/node_modules/psl/data/rules.json new file mode 100644 index 0000000..0ebfff2 --- /dev/null +++ b/node_modules/psl/data/rules.json @@ -0,0 +1,8812 @@ +[ +"ac", +"com.ac", +"edu.ac", +"gov.ac", +"net.ac", +"mil.ac", +"org.ac", +"ad", +"nom.ad", +"ae", +"co.ae", +"net.ae", +"org.ae", +"sch.ae", +"ac.ae", +"gov.ae", +"mil.ae", +"aero", +"accident-investigation.aero", +"accident-prevention.aero", +"aerobatic.aero", +"aeroclub.aero", +"aerodrome.aero", +"agents.aero", +"aircraft.aero", +"airline.aero", +"airport.aero", +"air-surveillance.aero", +"airtraffic.aero", +"air-traffic-control.aero", +"ambulance.aero", +"amusement.aero", +"association.aero", +"author.aero", +"ballooning.aero", +"broker.aero", +"caa.aero", +"cargo.aero", +"catering.aero", +"certification.aero", +"championship.aero", +"charter.aero", +"civilaviation.aero", +"club.aero", +"conference.aero", +"consultant.aero", +"consulting.aero", +"control.aero", +"council.aero", +"crew.aero", +"design.aero", +"dgca.aero", +"educator.aero", +"emergency.aero", +"engine.aero", +"engineer.aero", +"entertainment.aero", +"equipment.aero", +"exchange.aero", +"express.aero", +"federation.aero", +"flight.aero", +"freight.aero", +"fuel.aero", +"gliding.aero", +"government.aero", +"groundhandling.aero", +"group.aero", +"hanggliding.aero", +"homebuilt.aero", +"insurance.aero", +"journal.aero", +"journalist.aero", +"leasing.aero", +"logistics.aero", +"magazine.aero", +"maintenance.aero", +"media.aero", +"microlight.aero", +"modelling.aero", +"navigation.aero", +"parachuting.aero", +"paragliding.aero", +"passenger-association.aero", +"pilot.aero", +"press.aero", +"production.aero", +"recreation.aero", +"repbody.aero", +"res.aero", +"research.aero", +"rotorcraft.aero", +"safety.aero", +"scientist.aero", +"services.aero", +"show.aero", +"skydiving.aero", +"software.aero", +"student.aero", +"trader.aero", +"trading.aero", +"trainer.aero", +"union.aero", +"workinggroup.aero", +"works.aero", +"af", +"gov.af", +"com.af", +"org.af", +"net.af", +"edu.af", +"ag", +"com.ag", +"org.ag", +"net.ag", +"co.ag", +"nom.ag", +"ai", +"off.ai", +"com.ai", +"net.ai", +"org.ai", +"al", +"com.al", +"edu.al", +"gov.al", +"mil.al", +"net.al", +"org.al", +"am", +"co.am", +"com.am", +"commune.am", +"net.am", +"org.am", +"ao", +"ed.ao", +"gv.ao", +"og.ao", +"co.ao", +"pb.ao", +"it.ao", +"aq", +"ar", +"com.ar", +"edu.ar", +"gob.ar", +"gov.ar", +"int.ar", +"mil.ar", +"musica.ar", +"net.ar", +"org.ar", +"tur.ar", +"arpa", +"e164.arpa", +"in-addr.arpa", +"ip6.arpa", +"iris.arpa", +"uri.arpa", +"urn.arpa", +"as", +"gov.as", +"asia", +"at", +"ac.at", +"co.at", +"gv.at", +"or.at", +"au", +"com.au", +"net.au", +"org.au", +"edu.au", +"gov.au", +"asn.au", +"id.au", +"info.au", +"conf.au", +"oz.au", +"act.au", +"nsw.au", +"nt.au", +"qld.au", +"sa.au", +"tas.au", +"vic.au", +"wa.au", +"act.edu.au", +"catholic.edu.au", +"nsw.edu.au", +"nt.edu.au", +"qld.edu.au", +"sa.edu.au", +"tas.edu.au", +"vic.edu.au", +"wa.edu.au", +"qld.gov.au", +"sa.gov.au", +"tas.gov.au", +"vic.gov.au", +"wa.gov.au", +"education.tas.edu.au", +"schools.nsw.edu.au", +"aw", +"com.aw", +"ax", +"az", +"com.az", +"net.az", +"int.az", +"gov.az", +"org.az", +"edu.az", +"info.az", +"pp.az", +"mil.az", +"name.az", +"pro.az", +"biz.az", +"ba", +"com.ba", +"edu.ba", +"gov.ba", +"mil.ba", +"net.ba", +"org.ba", +"bb", +"biz.bb", +"co.bb", +"com.bb", +"edu.bb", +"gov.bb", +"info.bb", +"net.bb", +"org.bb", +"store.bb", +"tv.bb", +"*.bd", +"be", +"ac.be", +"bf", +"gov.bf", +"bg", +"a.bg", +"b.bg", +"c.bg", +"d.bg", +"e.bg", +"f.bg", +"g.bg", +"h.bg", +"i.bg", +"j.bg", +"k.bg", +"l.bg", +"m.bg", +"n.bg", +"o.bg", +"p.bg", +"q.bg", +"r.bg", +"s.bg", +"t.bg", +"u.bg", +"v.bg", +"w.bg", +"x.bg", +"y.bg", +"z.bg", +"0.bg", +"1.bg", +"2.bg", +"3.bg", +"4.bg", +"5.bg", +"6.bg", +"7.bg", +"8.bg", +"9.bg", +"bh", +"com.bh", +"edu.bh", +"net.bh", +"org.bh", +"gov.bh", +"bi", +"co.bi", +"com.bi", +"edu.bi", +"or.bi", +"org.bi", +"biz", +"bj", +"asso.bj", +"barreau.bj", +"gouv.bj", +"bm", +"com.bm", +"edu.bm", +"gov.bm", +"net.bm", +"org.bm", +"bn", +"com.bn", +"edu.bn", +"gov.bn", +"net.bn", +"org.bn", +"bo", +"com.bo", +"edu.bo", +"gob.bo", +"int.bo", +"org.bo", +"net.bo", +"mil.bo", +"tv.bo", +"web.bo", +"academia.bo", +"agro.bo", +"arte.bo", +"blog.bo", +"bolivia.bo", +"ciencia.bo", +"cooperativa.bo", +"democracia.bo", +"deporte.bo", +"ecologia.bo", +"economia.bo", +"empresa.bo", +"indigena.bo", +"industria.bo", +"info.bo", +"medicina.bo", +"movimiento.bo", +"musica.bo", +"natural.bo", +"nombre.bo", +"noticias.bo", +"patria.bo", +"politica.bo", +"profesional.bo", +"plurinacional.bo", +"pueblo.bo", +"revista.bo", +"salud.bo", +"tecnologia.bo", +"tksat.bo", +"transporte.bo", +"wiki.bo", +"br", +"9guacu.br", +"abc.br", +"adm.br", +"adv.br", +"agr.br", +"aju.br", +"am.br", +"anani.br", +"aparecida.br", +"arq.br", +"art.br", +"ato.br", +"b.br", +"barueri.br", +"belem.br", +"bhz.br", +"bio.br", +"blog.br", +"bmd.br", +"boavista.br", +"bsb.br", +"campinagrande.br", +"campinas.br", +"caxias.br", +"cim.br", +"cng.br", +"cnt.br", +"com.br", +"contagem.br", +"coop.br", +"cri.br", +"cuiaba.br", +"curitiba.br", +"def.br", +"ecn.br", +"eco.br", +"edu.br", +"emp.br", +"eng.br", +"esp.br", +"etc.br", +"eti.br", +"far.br", +"feira.br", +"flog.br", +"floripa.br", +"fm.br", +"fnd.br", +"fortal.br", +"fot.br", +"foz.br", +"fst.br", +"g12.br", +"ggf.br", +"goiania.br", +"gov.br", +"ac.gov.br", +"al.gov.br", +"am.gov.br", +"ap.gov.br", +"ba.gov.br", +"ce.gov.br", +"df.gov.br", +"es.gov.br", +"go.gov.br", +"ma.gov.br", +"mg.gov.br", +"ms.gov.br", +"mt.gov.br", +"pa.gov.br", +"pb.gov.br", +"pe.gov.br", +"pi.gov.br", +"pr.gov.br", +"rj.gov.br", +"rn.gov.br", +"ro.gov.br", +"rr.gov.br", +"rs.gov.br", +"sc.gov.br", +"se.gov.br", +"sp.gov.br", +"to.gov.br", +"gru.br", +"imb.br", +"ind.br", +"inf.br", +"jab.br", +"jampa.br", +"jdf.br", +"joinville.br", +"jor.br", +"jus.br", +"leg.br", +"lel.br", +"londrina.br", +"macapa.br", +"maceio.br", +"manaus.br", +"maringa.br", +"mat.br", +"med.br", +"mil.br", +"morena.br", +"mp.br", +"mus.br", +"natal.br", +"net.br", +"niteroi.br", +"*.nom.br", +"not.br", +"ntr.br", +"odo.br", +"ong.br", +"org.br", +"osasco.br", +"palmas.br", +"poa.br", +"ppg.br", +"pro.br", +"psc.br", +"psi.br", +"pvh.br", +"qsl.br", +"radio.br", +"rec.br", +"recife.br", +"ribeirao.br", +"rio.br", +"riobranco.br", +"riopreto.br", +"salvador.br", +"sampa.br", +"santamaria.br", +"santoandre.br", +"saobernardo.br", +"saogonca.br", +"sjc.br", +"slg.br", +"slz.br", +"sorocaba.br", +"srv.br", +"taxi.br", +"tc.br", +"teo.br", +"the.br", +"tmp.br", +"trd.br", +"tur.br", +"tv.br", +"udi.br", +"vet.br", +"vix.br", +"vlog.br", +"wiki.br", +"zlg.br", +"bs", +"com.bs", +"net.bs", +"org.bs", +"edu.bs", +"gov.bs", +"bt", +"com.bt", +"edu.bt", +"gov.bt", +"net.bt", +"org.bt", +"bv", +"bw", +"co.bw", +"org.bw", +"by", +"gov.by", +"mil.by", +"com.by", +"of.by", +"bz", +"com.bz", +"net.bz", +"org.bz", +"edu.bz", +"gov.bz", +"ca", +"ab.ca", +"bc.ca", +"mb.ca", +"nb.ca", +"nf.ca", +"nl.ca", +"ns.ca", +"nt.ca", +"nu.ca", +"on.ca", +"pe.ca", +"qc.ca", +"sk.ca", +"yk.ca", +"gc.ca", +"cat", +"cc", +"cd", +"gov.cd", +"cf", +"cg", +"ch", +"ci", +"org.ci", +"or.ci", +"com.ci", +"co.ci", +"edu.ci", +"ed.ci", +"ac.ci", +"net.ci", +"go.ci", +"asso.ci", +"aéroport.ci", +"int.ci", +"presse.ci", +"md.ci", +"gouv.ci", +"*.ck", +"!www.ck", +"cl", +"gov.cl", +"gob.cl", +"co.cl", +"mil.cl", +"cm", +"co.cm", +"com.cm", +"gov.cm", +"net.cm", +"cn", +"ac.cn", +"com.cn", +"edu.cn", +"gov.cn", +"net.cn", +"org.cn", +"mil.cn", +"公司.cn", +"网络.cn", +"網絡.cn", +"ah.cn", +"bj.cn", +"cq.cn", +"fj.cn", +"gd.cn", +"gs.cn", +"gz.cn", +"gx.cn", +"ha.cn", +"hb.cn", +"he.cn", +"hi.cn", +"hl.cn", +"hn.cn", +"jl.cn", +"js.cn", +"jx.cn", +"ln.cn", +"nm.cn", +"nx.cn", +"qh.cn", +"sc.cn", +"sd.cn", +"sh.cn", +"sn.cn", +"sx.cn", +"tj.cn", +"xj.cn", +"xz.cn", +"yn.cn", +"zj.cn", +"hk.cn", +"mo.cn", +"tw.cn", +"co", +"arts.co", +"com.co", +"edu.co", +"firm.co", +"gov.co", +"info.co", +"int.co", +"mil.co", +"net.co", +"nom.co", +"org.co", +"rec.co", +"web.co", +"com", +"coop", +"cr", +"ac.cr", +"co.cr", +"ed.cr", +"fi.cr", +"go.cr", +"or.cr", +"sa.cr", +"cu", +"com.cu", +"edu.cu", +"org.cu", +"net.cu", +"gov.cu", +"inf.cu", +"cv", +"cw", +"com.cw", +"edu.cw", +"net.cw", +"org.cw", +"cx", +"gov.cx", +"cy", +"ac.cy", +"biz.cy", +"com.cy", +"ekloges.cy", +"gov.cy", +"ltd.cy", +"name.cy", +"net.cy", +"org.cy", +"parliament.cy", +"press.cy", +"pro.cy", +"tm.cy", +"cz", +"de", +"dj", +"dk", +"dm", +"com.dm", +"net.dm", +"org.dm", +"edu.dm", +"gov.dm", +"do", +"art.do", +"com.do", +"edu.do", +"gob.do", +"gov.do", +"mil.do", +"net.do", +"org.do", +"sld.do", +"web.do", +"dz", +"com.dz", +"org.dz", +"net.dz", +"gov.dz", +"edu.dz", +"asso.dz", +"pol.dz", +"art.dz", +"ec", +"com.ec", +"info.ec", +"net.ec", +"fin.ec", +"k12.ec", +"med.ec", +"pro.ec", +"org.ec", +"edu.ec", +"gov.ec", +"gob.ec", +"mil.ec", +"edu", +"ee", +"edu.ee", +"gov.ee", +"riik.ee", +"lib.ee", +"med.ee", +"com.ee", +"pri.ee", +"aip.ee", +"org.ee", +"fie.ee", +"eg", +"com.eg", +"edu.eg", +"eun.eg", +"gov.eg", +"mil.eg", +"name.eg", +"net.eg", +"org.eg", +"sci.eg", +"*.er", +"es", +"com.es", +"nom.es", +"org.es", +"gob.es", +"edu.es", +"et", +"com.et", +"gov.et", +"org.et", +"edu.et", +"biz.et", +"name.et", +"info.et", +"net.et", +"eu", +"fi", +"aland.fi", +"*.fj", +"*.fk", +"fm", +"fo", +"fr", +"asso.fr", +"com.fr", +"gouv.fr", +"nom.fr", +"prd.fr", +"tm.fr", +"aeroport.fr", +"avocat.fr", +"avoues.fr", +"cci.fr", +"chambagri.fr", +"chirurgiens-dentistes.fr", +"experts-comptables.fr", +"geometre-expert.fr", +"greta.fr", +"huissier-justice.fr", +"medecin.fr", +"notaires.fr", +"pharmacien.fr", +"port.fr", +"veterinaire.fr", +"ga", +"gb", +"gd", +"ge", +"com.ge", +"edu.ge", +"gov.ge", +"org.ge", +"mil.ge", +"net.ge", +"pvt.ge", +"gf", +"gg", +"co.gg", +"net.gg", +"org.gg", +"gh", +"com.gh", +"edu.gh", +"gov.gh", +"org.gh", +"mil.gh", +"gi", +"com.gi", +"ltd.gi", +"gov.gi", +"mod.gi", +"edu.gi", +"org.gi", +"gl", +"co.gl", +"com.gl", +"edu.gl", +"net.gl", +"org.gl", +"gm", +"gn", +"ac.gn", +"com.gn", +"edu.gn", +"gov.gn", +"org.gn", +"net.gn", +"gov", +"gp", +"com.gp", +"net.gp", +"mobi.gp", +"edu.gp", +"org.gp", +"asso.gp", +"gq", +"gr", +"com.gr", +"edu.gr", +"net.gr", +"org.gr", +"gov.gr", +"gs", +"gt", +"com.gt", +"edu.gt", +"gob.gt", +"ind.gt", +"mil.gt", +"net.gt", +"org.gt", +"gu", +"com.gu", +"edu.gu", +"gov.gu", +"guam.gu", +"info.gu", +"net.gu", +"org.gu", +"web.gu", +"gw", +"gy", +"co.gy", +"com.gy", +"edu.gy", +"gov.gy", +"net.gy", +"org.gy", +"hk", +"com.hk", +"edu.hk", +"gov.hk", +"idv.hk", +"net.hk", +"org.hk", +"公司.hk", +"教育.hk", +"敎育.hk", +"政府.hk", +"個人.hk", +"个人.hk", +"箇人.hk", +"網络.hk", +"网络.hk", +"组織.hk", +"網絡.hk", +"网絡.hk", +"组织.hk", +"組織.hk", +"組织.hk", +"hm", +"hn", +"com.hn", +"edu.hn", +"org.hn", +"net.hn", +"mil.hn", +"gob.hn", +"hr", +"iz.hr", +"from.hr", +"name.hr", +"com.hr", +"ht", +"com.ht", +"shop.ht", +"firm.ht", +"info.ht", +"adult.ht", +"net.ht", +"pro.ht", +"org.ht", +"med.ht", +"art.ht", +"coop.ht", +"pol.ht", +"asso.ht", +"edu.ht", +"rel.ht", +"gouv.ht", +"perso.ht", +"hu", +"co.hu", +"info.hu", +"org.hu", +"priv.hu", +"sport.hu", +"tm.hu", +"2000.hu", +"agrar.hu", +"bolt.hu", +"casino.hu", +"city.hu", +"erotica.hu", +"erotika.hu", +"film.hu", +"forum.hu", +"games.hu", +"hotel.hu", +"ingatlan.hu", +"jogasz.hu", +"konyvelo.hu", +"lakas.hu", +"media.hu", +"news.hu", +"reklam.hu", +"sex.hu", +"shop.hu", +"suli.hu", +"szex.hu", +"tozsde.hu", +"utazas.hu", +"video.hu", +"id", +"ac.id", +"biz.id", +"co.id", +"desa.id", +"go.id", +"mil.id", +"my.id", +"net.id", +"or.id", +"ponpes.id", +"sch.id", +"web.id", +"ie", +"gov.ie", +"il", +"ac.il", +"co.il", +"gov.il", +"idf.il", +"k12.il", +"muni.il", +"net.il", +"org.il", +"im", +"ac.im", +"co.im", +"com.im", +"ltd.co.im", +"net.im", +"org.im", +"plc.co.im", +"tt.im", +"tv.im", +"in", +"co.in", +"firm.in", +"net.in", +"org.in", +"gen.in", +"ind.in", +"nic.in", +"ac.in", +"edu.in", +"res.in", +"gov.in", +"mil.in", +"info", +"int", +"eu.int", +"io", +"com.io", +"iq", +"gov.iq", +"edu.iq", +"mil.iq", +"com.iq", +"org.iq", +"net.iq", +"ir", +"ac.ir", +"co.ir", +"gov.ir", +"id.ir", +"net.ir", +"org.ir", +"sch.ir", +"ایران.ir", +"ايران.ir", +"is", +"net.is", +"com.is", +"edu.is", +"gov.is", +"org.is", +"int.is", +"it", +"gov.it", +"edu.it", +"abr.it", +"abruzzo.it", +"aosta-valley.it", +"aostavalley.it", +"bas.it", +"basilicata.it", +"cal.it", +"calabria.it", +"cam.it", +"campania.it", +"emilia-romagna.it", +"emiliaromagna.it", +"emr.it", +"friuli-v-giulia.it", +"friuli-ve-giulia.it", +"friuli-vegiulia.it", +"friuli-venezia-giulia.it", +"friuli-veneziagiulia.it", +"friuli-vgiulia.it", +"friuliv-giulia.it", +"friulive-giulia.it", +"friulivegiulia.it", +"friulivenezia-giulia.it", +"friuliveneziagiulia.it", +"friulivgiulia.it", +"fvg.it", +"laz.it", +"lazio.it", +"lig.it", +"liguria.it", +"lom.it", +"lombardia.it", +"lombardy.it", +"lucania.it", +"mar.it", +"marche.it", +"mol.it", +"molise.it", +"piedmont.it", +"piemonte.it", +"pmn.it", +"pug.it", +"puglia.it", +"sar.it", +"sardegna.it", +"sardinia.it", +"sic.it", +"sicilia.it", +"sicily.it", +"taa.it", +"tos.it", +"toscana.it", +"trentin-sud-tirol.it", +"trentin-süd-tirol.it", +"trentin-sudtirol.it", +"trentin-südtirol.it", +"trentin-sued-tirol.it", +"trentin-suedtirol.it", +"trentino-a-adige.it", +"trentino-aadige.it", +"trentino-alto-adige.it", +"trentino-altoadige.it", +"trentino-s-tirol.it", +"trentino-stirol.it", +"trentino-sud-tirol.it", +"trentino-süd-tirol.it", +"trentino-sudtirol.it", +"trentino-südtirol.it", +"trentino-sued-tirol.it", +"trentino-suedtirol.it", +"trentino.it", +"trentinoa-adige.it", +"trentinoaadige.it", +"trentinoalto-adige.it", +"trentinoaltoadige.it", +"trentinos-tirol.it", +"trentinostirol.it", +"trentinosud-tirol.it", +"trentinosüd-tirol.it", +"trentinosudtirol.it", +"trentinosüdtirol.it", +"trentinosued-tirol.it", +"trentinosuedtirol.it", +"trentinsud-tirol.it", +"trentinsüd-tirol.it", +"trentinsudtirol.it", +"trentinsüdtirol.it", +"trentinsued-tirol.it", +"trentinsuedtirol.it", +"tuscany.it", +"umb.it", +"umbria.it", +"val-d-aosta.it", +"val-daosta.it", +"vald-aosta.it", +"valdaosta.it", +"valle-aosta.it", +"valle-d-aosta.it", +"valle-daosta.it", +"valleaosta.it", +"valled-aosta.it", +"valledaosta.it", +"vallee-aoste.it", +"vallée-aoste.it", +"vallee-d-aoste.it", +"vallée-d-aoste.it", +"valleeaoste.it", +"valléeaoste.it", +"valleedaoste.it", +"valléedaoste.it", +"vao.it", +"vda.it", +"ven.it", +"veneto.it", +"ag.it", +"agrigento.it", +"al.it", +"alessandria.it", +"alto-adige.it", +"altoadige.it", +"an.it", +"ancona.it", +"andria-barletta-trani.it", +"andria-trani-barletta.it", +"andriabarlettatrani.it", +"andriatranibarletta.it", +"ao.it", +"aosta.it", +"aoste.it", +"ap.it", +"aq.it", +"aquila.it", +"ar.it", +"arezzo.it", +"ascoli-piceno.it", +"ascolipiceno.it", +"asti.it", +"at.it", +"av.it", +"avellino.it", +"ba.it", +"balsan-sudtirol.it", +"balsan-südtirol.it", +"balsan-suedtirol.it", +"balsan.it", +"bari.it", +"barletta-trani-andria.it", +"barlettatraniandria.it", +"belluno.it", +"benevento.it", +"bergamo.it", +"bg.it", +"bi.it", +"biella.it", +"bl.it", +"bn.it", +"bo.it", +"bologna.it", +"bolzano-altoadige.it", +"bolzano.it", +"bozen-sudtirol.it", +"bozen-südtirol.it", +"bozen-suedtirol.it", +"bozen.it", +"br.it", +"brescia.it", +"brindisi.it", +"bs.it", +"bt.it", +"bulsan-sudtirol.it", +"bulsan-südtirol.it", +"bulsan-suedtirol.it", +"bulsan.it", +"bz.it", +"ca.it", +"cagliari.it", +"caltanissetta.it", +"campidano-medio.it", +"campidanomedio.it", +"campobasso.it", +"carbonia-iglesias.it", +"carboniaiglesias.it", +"carrara-massa.it", +"carraramassa.it", +"caserta.it", +"catania.it", +"catanzaro.it", +"cb.it", +"ce.it", +"cesena-forli.it", +"cesena-forlì.it", +"cesenaforli.it", +"cesenaforlì.it", +"ch.it", +"chieti.it", +"ci.it", +"cl.it", +"cn.it", +"co.it", +"como.it", +"cosenza.it", +"cr.it", +"cremona.it", +"crotone.it", +"cs.it", +"ct.it", +"cuneo.it", +"cz.it", +"dell-ogliastra.it", +"dellogliastra.it", +"en.it", +"enna.it", +"fc.it", +"fe.it", +"fermo.it", +"ferrara.it", +"fg.it", +"fi.it", +"firenze.it", +"florence.it", +"fm.it", +"foggia.it", +"forli-cesena.it", +"forlì-cesena.it", +"forlicesena.it", +"forlìcesena.it", +"fr.it", +"frosinone.it", +"ge.it", +"genoa.it", +"genova.it", +"go.it", +"gorizia.it", +"gr.it", +"grosseto.it", +"iglesias-carbonia.it", +"iglesiascarbonia.it", +"im.it", +"imperia.it", +"is.it", +"isernia.it", +"kr.it", +"la-spezia.it", +"laquila.it", +"laspezia.it", +"latina.it", +"lc.it", +"le.it", +"lecce.it", +"lecco.it", +"li.it", +"livorno.it", +"lo.it", +"lodi.it", +"lt.it", +"lu.it", +"lucca.it", +"macerata.it", +"mantova.it", +"massa-carrara.it", +"massacarrara.it", +"matera.it", +"mb.it", +"mc.it", +"me.it", +"medio-campidano.it", +"mediocampidano.it", +"messina.it", +"mi.it", +"milan.it", +"milano.it", +"mn.it", +"mo.it", +"modena.it", +"monza-brianza.it", +"monza-e-della-brianza.it", +"monza.it", +"monzabrianza.it", +"monzaebrianza.it", +"monzaedellabrianza.it", +"ms.it", +"mt.it", +"na.it", +"naples.it", +"napoli.it", +"no.it", +"novara.it", +"nu.it", +"nuoro.it", +"og.it", +"ogliastra.it", +"olbia-tempio.it", +"olbiatempio.it", +"or.it", +"oristano.it", +"ot.it", +"pa.it", +"padova.it", +"padua.it", +"palermo.it", +"parma.it", +"pavia.it", +"pc.it", +"pd.it", +"pe.it", +"perugia.it", +"pesaro-urbino.it", +"pesarourbino.it", +"pescara.it", +"pg.it", +"pi.it", +"piacenza.it", +"pisa.it", +"pistoia.it", +"pn.it", +"po.it", +"pordenone.it", +"potenza.it", +"pr.it", +"prato.it", +"pt.it", +"pu.it", +"pv.it", +"pz.it", +"ra.it", +"ragusa.it", +"ravenna.it", +"rc.it", +"re.it", +"reggio-calabria.it", +"reggio-emilia.it", +"reggiocalabria.it", +"reggioemilia.it", +"rg.it", +"ri.it", +"rieti.it", +"rimini.it", +"rm.it", +"rn.it", +"ro.it", +"roma.it", +"rome.it", +"rovigo.it", +"sa.it", +"salerno.it", +"sassari.it", +"savona.it", +"si.it", +"siena.it", +"siracusa.it", +"so.it", +"sondrio.it", +"sp.it", +"sr.it", +"ss.it", +"suedtirol.it", +"südtirol.it", +"sv.it", +"ta.it", +"taranto.it", +"te.it", +"tempio-olbia.it", +"tempioolbia.it", +"teramo.it", +"terni.it", +"tn.it", +"to.it", +"torino.it", +"tp.it", +"tr.it", +"trani-andria-barletta.it", +"trani-barletta-andria.it", +"traniandriabarletta.it", +"tranibarlettaandria.it", +"trapani.it", +"trento.it", +"treviso.it", +"trieste.it", +"ts.it", +"turin.it", +"tv.it", +"ud.it", +"udine.it", +"urbino-pesaro.it", +"urbinopesaro.it", +"va.it", +"varese.it", +"vb.it", +"vc.it", +"ve.it", +"venezia.it", +"venice.it", +"verbania.it", +"vercelli.it", +"verona.it", +"vi.it", +"vibo-valentia.it", +"vibovalentia.it", +"vicenza.it", +"viterbo.it", +"vr.it", +"vs.it", +"vt.it", +"vv.it", +"je", +"co.je", +"net.je", +"org.je", +"*.jm", +"jo", +"com.jo", +"org.jo", +"net.jo", +"edu.jo", +"sch.jo", +"gov.jo", +"mil.jo", +"name.jo", +"jobs", +"jp", +"ac.jp", +"ad.jp", +"co.jp", +"ed.jp", +"go.jp", +"gr.jp", +"lg.jp", +"ne.jp", +"or.jp", +"aichi.jp", +"akita.jp", +"aomori.jp", +"chiba.jp", +"ehime.jp", +"fukui.jp", +"fukuoka.jp", +"fukushima.jp", +"gifu.jp", +"gunma.jp", +"hiroshima.jp", +"hokkaido.jp", +"hyogo.jp", +"ibaraki.jp", +"ishikawa.jp", +"iwate.jp", +"kagawa.jp", +"kagoshima.jp", +"kanagawa.jp", +"kochi.jp", +"kumamoto.jp", +"kyoto.jp", +"mie.jp", +"miyagi.jp", +"miyazaki.jp", +"nagano.jp", +"nagasaki.jp", +"nara.jp", +"niigata.jp", +"oita.jp", +"okayama.jp", +"okinawa.jp", +"osaka.jp", +"saga.jp", +"saitama.jp", +"shiga.jp", +"shimane.jp", +"shizuoka.jp", +"tochigi.jp", +"tokushima.jp", +"tokyo.jp", +"tottori.jp", +"toyama.jp", +"wakayama.jp", +"yamagata.jp", +"yamaguchi.jp", +"yamanashi.jp", +"栃木.jp", +"愛知.jp", +"愛媛.jp", +"兵庫.jp", +"熊本.jp", +"茨城.jp", +"北海道.jp", +"千葉.jp", +"和歌山.jp", +"長崎.jp", +"長野.jp", +"新潟.jp", +"青森.jp", +"静岡.jp", +"東京.jp", +"石川.jp", +"埼玉.jp", +"三重.jp", +"京都.jp", +"佐賀.jp", +"大分.jp", +"大阪.jp", +"奈良.jp", +"宮城.jp", +"宮崎.jp", +"富山.jp", +"山口.jp", +"山形.jp", +"山梨.jp", +"岩手.jp", +"岐阜.jp", +"岡山.jp", +"島根.jp", +"広島.jp", +"徳島.jp", +"沖縄.jp", +"滋賀.jp", +"神奈川.jp", +"福井.jp", +"福岡.jp", +"福島.jp", +"秋田.jp", +"群馬.jp", +"香川.jp", +"高知.jp", +"鳥取.jp", +"鹿児島.jp", +"*.kawasaki.jp", +"*.kitakyushu.jp", +"*.kobe.jp", +"*.nagoya.jp", +"*.sapporo.jp", +"*.sendai.jp", +"*.yokohama.jp", +"!city.kawasaki.jp", +"!city.kitakyushu.jp", +"!city.kobe.jp", +"!city.nagoya.jp", +"!city.sapporo.jp", +"!city.sendai.jp", +"!city.yokohama.jp", +"aisai.aichi.jp", +"ama.aichi.jp", +"anjo.aichi.jp", +"asuke.aichi.jp", +"chiryu.aichi.jp", +"chita.aichi.jp", +"fuso.aichi.jp", +"gamagori.aichi.jp", +"handa.aichi.jp", +"hazu.aichi.jp", +"hekinan.aichi.jp", +"higashiura.aichi.jp", +"ichinomiya.aichi.jp", +"inazawa.aichi.jp", +"inuyama.aichi.jp", +"isshiki.aichi.jp", +"iwakura.aichi.jp", +"kanie.aichi.jp", +"kariya.aichi.jp", +"kasugai.aichi.jp", +"kira.aichi.jp", +"kiyosu.aichi.jp", +"komaki.aichi.jp", +"konan.aichi.jp", +"kota.aichi.jp", +"mihama.aichi.jp", +"miyoshi.aichi.jp", +"nishio.aichi.jp", +"nisshin.aichi.jp", +"obu.aichi.jp", +"oguchi.aichi.jp", +"oharu.aichi.jp", +"okazaki.aichi.jp", +"owariasahi.aichi.jp", +"seto.aichi.jp", +"shikatsu.aichi.jp", +"shinshiro.aichi.jp", +"shitara.aichi.jp", +"tahara.aichi.jp", +"takahama.aichi.jp", +"tobishima.aichi.jp", +"toei.aichi.jp", +"togo.aichi.jp", +"tokai.aichi.jp", +"tokoname.aichi.jp", +"toyoake.aichi.jp", +"toyohashi.aichi.jp", +"toyokawa.aichi.jp", +"toyone.aichi.jp", +"toyota.aichi.jp", +"tsushima.aichi.jp", +"yatomi.aichi.jp", +"akita.akita.jp", +"daisen.akita.jp", +"fujisato.akita.jp", +"gojome.akita.jp", +"hachirogata.akita.jp", +"happou.akita.jp", +"higashinaruse.akita.jp", +"honjo.akita.jp", +"honjyo.akita.jp", +"ikawa.akita.jp", +"kamikoani.akita.jp", +"kamioka.akita.jp", +"katagami.akita.jp", +"kazuno.akita.jp", +"kitaakita.akita.jp", +"kosaka.akita.jp", +"kyowa.akita.jp", +"misato.akita.jp", +"mitane.akita.jp", +"moriyoshi.akita.jp", +"nikaho.akita.jp", +"noshiro.akita.jp", +"odate.akita.jp", +"oga.akita.jp", +"ogata.akita.jp", +"semboku.akita.jp", +"yokote.akita.jp", +"yurihonjo.akita.jp", +"aomori.aomori.jp", +"gonohe.aomori.jp", +"hachinohe.aomori.jp", +"hashikami.aomori.jp", +"hiranai.aomori.jp", +"hirosaki.aomori.jp", +"itayanagi.aomori.jp", +"kuroishi.aomori.jp", +"misawa.aomori.jp", +"mutsu.aomori.jp", +"nakadomari.aomori.jp", +"noheji.aomori.jp", +"oirase.aomori.jp", +"owani.aomori.jp", +"rokunohe.aomori.jp", +"sannohe.aomori.jp", +"shichinohe.aomori.jp", +"shingo.aomori.jp", +"takko.aomori.jp", +"towada.aomori.jp", +"tsugaru.aomori.jp", +"tsuruta.aomori.jp", +"abiko.chiba.jp", +"asahi.chiba.jp", +"chonan.chiba.jp", +"chosei.chiba.jp", +"choshi.chiba.jp", +"chuo.chiba.jp", +"funabashi.chiba.jp", +"futtsu.chiba.jp", +"hanamigawa.chiba.jp", +"ichihara.chiba.jp", +"ichikawa.chiba.jp", +"ichinomiya.chiba.jp", +"inzai.chiba.jp", +"isumi.chiba.jp", +"kamagaya.chiba.jp", +"kamogawa.chiba.jp", +"kashiwa.chiba.jp", +"katori.chiba.jp", +"katsuura.chiba.jp", +"kimitsu.chiba.jp", +"kisarazu.chiba.jp", +"kozaki.chiba.jp", +"kujukuri.chiba.jp", +"kyonan.chiba.jp", +"matsudo.chiba.jp", +"midori.chiba.jp", +"mihama.chiba.jp", +"minamiboso.chiba.jp", +"mobara.chiba.jp", +"mutsuzawa.chiba.jp", +"nagara.chiba.jp", +"nagareyama.chiba.jp", +"narashino.chiba.jp", +"narita.chiba.jp", +"noda.chiba.jp", +"oamishirasato.chiba.jp", +"omigawa.chiba.jp", +"onjuku.chiba.jp", +"otaki.chiba.jp", +"sakae.chiba.jp", +"sakura.chiba.jp", +"shimofusa.chiba.jp", +"shirako.chiba.jp", +"shiroi.chiba.jp", +"shisui.chiba.jp", +"sodegaura.chiba.jp", +"sosa.chiba.jp", +"tako.chiba.jp", +"tateyama.chiba.jp", +"togane.chiba.jp", +"tohnosho.chiba.jp", +"tomisato.chiba.jp", +"urayasu.chiba.jp", +"yachimata.chiba.jp", +"yachiyo.chiba.jp", +"yokaichiba.chiba.jp", +"yokoshibahikari.chiba.jp", +"yotsukaido.chiba.jp", +"ainan.ehime.jp", +"honai.ehime.jp", +"ikata.ehime.jp", +"imabari.ehime.jp", +"iyo.ehime.jp", +"kamijima.ehime.jp", +"kihoku.ehime.jp", +"kumakogen.ehime.jp", +"masaki.ehime.jp", +"matsuno.ehime.jp", +"matsuyama.ehime.jp", +"namikata.ehime.jp", +"niihama.ehime.jp", +"ozu.ehime.jp", +"saijo.ehime.jp", +"seiyo.ehime.jp", +"shikokuchuo.ehime.jp", +"tobe.ehime.jp", +"toon.ehime.jp", +"uchiko.ehime.jp", +"uwajima.ehime.jp", +"yawatahama.ehime.jp", +"echizen.fukui.jp", +"eiheiji.fukui.jp", +"fukui.fukui.jp", +"ikeda.fukui.jp", +"katsuyama.fukui.jp", +"mihama.fukui.jp", +"minamiechizen.fukui.jp", +"obama.fukui.jp", +"ohi.fukui.jp", +"ono.fukui.jp", +"sabae.fukui.jp", +"sakai.fukui.jp", +"takahama.fukui.jp", +"tsuruga.fukui.jp", +"wakasa.fukui.jp", +"ashiya.fukuoka.jp", +"buzen.fukuoka.jp", +"chikugo.fukuoka.jp", +"chikuho.fukuoka.jp", +"chikujo.fukuoka.jp", +"chikushino.fukuoka.jp", +"chikuzen.fukuoka.jp", +"chuo.fukuoka.jp", +"dazaifu.fukuoka.jp", +"fukuchi.fukuoka.jp", +"hakata.fukuoka.jp", +"higashi.fukuoka.jp", +"hirokawa.fukuoka.jp", +"hisayama.fukuoka.jp", +"iizuka.fukuoka.jp", +"inatsuki.fukuoka.jp", +"kaho.fukuoka.jp", +"kasuga.fukuoka.jp", +"kasuya.fukuoka.jp", +"kawara.fukuoka.jp", +"keisen.fukuoka.jp", +"koga.fukuoka.jp", +"kurate.fukuoka.jp", +"kurogi.fukuoka.jp", +"kurume.fukuoka.jp", +"minami.fukuoka.jp", +"miyako.fukuoka.jp", +"miyama.fukuoka.jp", +"miyawaka.fukuoka.jp", +"mizumaki.fukuoka.jp", +"munakata.fukuoka.jp", +"nakagawa.fukuoka.jp", +"nakama.fukuoka.jp", +"nishi.fukuoka.jp", +"nogata.fukuoka.jp", +"ogori.fukuoka.jp", +"okagaki.fukuoka.jp", +"okawa.fukuoka.jp", +"oki.fukuoka.jp", +"omuta.fukuoka.jp", +"onga.fukuoka.jp", +"onojo.fukuoka.jp", +"oto.fukuoka.jp", +"saigawa.fukuoka.jp", +"sasaguri.fukuoka.jp", +"shingu.fukuoka.jp", +"shinyoshitomi.fukuoka.jp", +"shonai.fukuoka.jp", +"soeda.fukuoka.jp", +"sue.fukuoka.jp", +"tachiarai.fukuoka.jp", +"tagawa.fukuoka.jp", +"takata.fukuoka.jp", +"toho.fukuoka.jp", +"toyotsu.fukuoka.jp", +"tsuiki.fukuoka.jp", +"ukiha.fukuoka.jp", +"umi.fukuoka.jp", +"usui.fukuoka.jp", +"yamada.fukuoka.jp", +"yame.fukuoka.jp", +"yanagawa.fukuoka.jp", +"yukuhashi.fukuoka.jp", +"aizubange.fukushima.jp", +"aizumisato.fukushima.jp", +"aizuwakamatsu.fukushima.jp", +"asakawa.fukushima.jp", +"bandai.fukushima.jp", +"date.fukushima.jp", +"fukushima.fukushima.jp", +"furudono.fukushima.jp", +"futaba.fukushima.jp", +"hanawa.fukushima.jp", +"higashi.fukushima.jp", +"hirata.fukushima.jp", +"hirono.fukushima.jp", +"iitate.fukushima.jp", +"inawashiro.fukushima.jp", +"ishikawa.fukushima.jp", +"iwaki.fukushima.jp", +"izumizaki.fukushima.jp", +"kagamiishi.fukushima.jp", +"kaneyama.fukushima.jp", +"kawamata.fukushima.jp", +"kitakata.fukushima.jp", +"kitashiobara.fukushima.jp", +"koori.fukushima.jp", +"koriyama.fukushima.jp", +"kunimi.fukushima.jp", +"miharu.fukushima.jp", +"mishima.fukushima.jp", +"namie.fukushima.jp", +"nango.fukushima.jp", +"nishiaizu.fukushima.jp", +"nishigo.fukushima.jp", +"okuma.fukushima.jp", +"omotego.fukushima.jp", +"ono.fukushima.jp", +"otama.fukushima.jp", +"samegawa.fukushima.jp", +"shimogo.fukushima.jp", +"shirakawa.fukushima.jp", +"showa.fukushima.jp", +"soma.fukushima.jp", +"sukagawa.fukushima.jp", +"taishin.fukushima.jp", +"tamakawa.fukushima.jp", +"tanagura.fukushima.jp", +"tenei.fukushima.jp", +"yabuki.fukushima.jp", +"yamato.fukushima.jp", +"yamatsuri.fukushima.jp", +"yanaizu.fukushima.jp", +"yugawa.fukushima.jp", +"anpachi.gifu.jp", +"ena.gifu.jp", +"gifu.gifu.jp", +"ginan.gifu.jp", +"godo.gifu.jp", +"gujo.gifu.jp", +"hashima.gifu.jp", +"hichiso.gifu.jp", +"hida.gifu.jp", +"higashishirakawa.gifu.jp", +"ibigawa.gifu.jp", +"ikeda.gifu.jp", +"kakamigahara.gifu.jp", +"kani.gifu.jp", +"kasahara.gifu.jp", +"kasamatsu.gifu.jp", +"kawaue.gifu.jp", +"kitagata.gifu.jp", +"mino.gifu.jp", +"minokamo.gifu.jp", +"mitake.gifu.jp", +"mizunami.gifu.jp", +"motosu.gifu.jp", +"nakatsugawa.gifu.jp", +"ogaki.gifu.jp", +"sakahogi.gifu.jp", +"seki.gifu.jp", +"sekigahara.gifu.jp", +"shirakawa.gifu.jp", +"tajimi.gifu.jp", +"takayama.gifu.jp", +"tarui.gifu.jp", +"toki.gifu.jp", +"tomika.gifu.jp", +"wanouchi.gifu.jp", +"yamagata.gifu.jp", +"yaotsu.gifu.jp", +"yoro.gifu.jp", +"annaka.gunma.jp", +"chiyoda.gunma.jp", +"fujioka.gunma.jp", +"higashiagatsuma.gunma.jp", +"isesaki.gunma.jp", +"itakura.gunma.jp", +"kanna.gunma.jp", +"kanra.gunma.jp", +"katashina.gunma.jp", +"kawaba.gunma.jp", +"kiryu.gunma.jp", +"kusatsu.gunma.jp", +"maebashi.gunma.jp", +"meiwa.gunma.jp", +"midori.gunma.jp", +"minakami.gunma.jp", +"naganohara.gunma.jp", +"nakanojo.gunma.jp", +"nanmoku.gunma.jp", +"numata.gunma.jp", +"oizumi.gunma.jp", +"ora.gunma.jp", +"ota.gunma.jp", +"shibukawa.gunma.jp", +"shimonita.gunma.jp", +"shinto.gunma.jp", +"showa.gunma.jp", +"takasaki.gunma.jp", +"takayama.gunma.jp", +"tamamura.gunma.jp", +"tatebayashi.gunma.jp", +"tomioka.gunma.jp", +"tsukiyono.gunma.jp", +"tsumagoi.gunma.jp", +"ueno.gunma.jp", +"yoshioka.gunma.jp", +"asaminami.hiroshima.jp", +"daiwa.hiroshima.jp", +"etajima.hiroshima.jp", +"fuchu.hiroshima.jp", +"fukuyama.hiroshima.jp", +"hatsukaichi.hiroshima.jp", +"higashihiroshima.hiroshima.jp", +"hongo.hiroshima.jp", +"jinsekikogen.hiroshima.jp", +"kaita.hiroshima.jp", +"kui.hiroshima.jp", +"kumano.hiroshima.jp", +"kure.hiroshima.jp", +"mihara.hiroshima.jp", +"miyoshi.hiroshima.jp", +"naka.hiroshima.jp", +"onomichi.hiroshima.jp", +"osakikamijima.hiroshima.jp", +"otake.hiroshima.jp", +"saka.hiroshima.jp", +"sera.hiroshima.jp", +"seranishi.hiroshima.jp", +"shinichi.hiroshima.jp", +"shobara.hiroshima.jp", +"takehara.hiroshima.jp", +"abashiri.hokkaido.jp", +"abira.hokkaido.jp", +"aibetsu.hokkaido.jp", +"akabira.hokkaido.jp", +"akkeshi.hokkaido.jp", +"asahikawa.hokkaido.jp", +"ashibetsu.hokkaido.jp", +"ashoro.hokkaido.jp", +"assabu.hokkaido.jp", +"atsuma.hokkaido.jp", +"bibai.hokkaido.jp", +"biei.hokkaido.jp", +"bifuka.hokkaido.jp", +"bihoro.hokkaido.jp", +"biratori.hokkaido.jp", +"chippubetsu.hokkaido.jp", +"chitose.hokkaido.jp", +"date.hokkaido.jp", +"ebetsu.hokkaido.jp", +"embetsu.hokkaido.jp", +"eniwa.hokkaido.jp", +"erimo.hokkaido.jp", +"esan.hokkaido.jp", +"esashi.hokkaido.jp", +"fukagawa.hokkaido.jp", +"fukushima.hokkaido.jp", +"furano.hokkaido.jp", +"furubira.hokkaido.jp", +"haboro.hokkaido.jp", +"hakodate.hokkaido.jp", +"hamatonbetsu.hokkaido.jp", +"hidaka.hokkaido.jp", +"higashikagura.hokkaido.jp", +"higashikawa.hokkaido.jp", +"hiroo.hokkaido.jp", +"hokuryu.hokkaido.jp", +"hokuto.hokkaido.jp", +"honbetsu.hokkaido.jp", +"horokanai.hokkaido.jp", +"horonobe.hokkaido.jp", +"ikeda.hokkaido.jp", +"imakane.hokkaido.jp", +"ishikari.hokkaido.jp", +"iwamizawa.hokkaido.jp", +"iwanai.hokkaido.jp", +"kamifurano.hokkaido.jp", +"kamikawa.hokkaido.jp", +"kamishihoro.hokkaido.jp", +"kamisunagawa.hokkaido.jp", +"kamoenai.hokkaido.jp", +"kayabe.hokkaido.jp", +"kembuchi.hokkaido.jp", +"kikonai.hokkaido.jp", +"kimobetsu.hokkaido.jp", +"kitahiroshima.hokkaido.jp", +"kitami.hokkaido.jp", +"kiyosato.hokkaido.jp", +"koshimizu.hokkaido.jp", +"kunneppu.hokkaido.jp", +"kuriyama.hokkaido.jp", +"kuromatsunai.hokkaido.jp", +"kushiro.hokkaido.jp", +"kutchan.hokkaido.jp", +"kyowa.hokkaido.jp", +"mashike.hokkaido.jp", +"matsumae.hokkaido.jp", +"mikasa.hokkaido.jp", +"minamifurano.hokkaido.jp", +"mombetsu.hokkaido.jp", +"moseushi.hokkaido.jp", +"mukawa.hokkaido.jp", +"muroran.hokkaido.jp", +"naie.hokkaido.jp", +"nakagawa.hokkaido.jp", +"nakasatsunai.hokkaido.jp", +"nakatombetsu.hokkaido.jp", +"nanae.hokkaido.jp", +"nanporo.hokkaido.jp", +"nayoro.hokkaido.jp", +"nemuro.hokkaido.jp", +"niikappu.hokkaido.jp", +"niki.hokkaido.jp", +"nishiokoppe.hokkaido.jp", +"noboribetsu.hokkaido.jp", +"numata.hokkaido.jp", +"obihiro.hokkaido.jp", +"obira.hokkaido.jp", +"oketo.hokkaido.jp", +"okoppe.hokkaido.jp", +"otaru.hokkaido.jp", +"otobe.hokkaido.jp", +"otofuke.hokkaido.jp", +"otoineppu.hokkaido.jp", +"oumu.hokkaido.jp", +"ozora.hokkaido.jp", +"pippu.hokkaido.jp", +"rankoshi.hokkaido.jp", +"rebun.hokkaido.jp", +"rikubetsu.hokkaido.jp", +"rishiri.hokkaido.jp", +"rishirifuji.hokkaido.jp", +"saroma.hokkaido.jp", +"sarufutsu.hokkaido.jp", +"shakotan.hokkaido.jp", +"shari.hokkaido.jp", +"shibecha.hokkaido.jp", +"shibetsu.hokkaido.jp", +"shikabe.hokkaido.jp", +"shikaoi.hokkaido.jp", +"shimamaki.hokkaido.jp", +"shimizu.hokkaido.jp", +"shimokawa.hokkaido.jp", +"shinshinotsu.hokkaido.jp", +"shintoku.hokkaido.jp", +"shiranuka.hokkaido.jp", +"shiraoi.hokkaido.jp", +"shiriuchi.hokkaido.jp", +"sobetsu.hokkaido.jp", +"sunagawa.hokkaido.jp", +"taiki.hokkaido.jp", +"takasu.hokkaido.jp", +"takikawa.hokkaido.jp", +"takinoue.hokkaido.jp", +"teshikaga.hokkaido.jp", +"tobetsu.hokkaido.jp", +"tohma.hokkaido.jp", +"tomakomai.hokkaido.jp", +"tomari.hokkaido.jp", +"toya.hokkaido.jp", +"toyako.hokkaido.jp", +"toyotomi.hokkaido.jp", +"toyoura.hokkaido.jp", +"tsubetsu.hokkaido.jp", +"tsukigata.hokkaido.jp", +"urakawa.hokkaido.jp", +"urausu.hokkaido.jp", +"uryu.hokkaido.jp", +"utashinai.hokkaido.jp", +"wakkanai.hokkaido.jp", +"wassamu.hokkaido.jp", +"yakumo.hokkaido.jp", +"yoichi.hokkaido.jp", +"aioi.hyogo.jp", +"akashi.hyogo.jp", +"ako.hyogo.jp", +"amagasaki.hyogo.jp", +"aogaki.hyogo.jp", +"asago.hyogo.jp", +"ashiya.hyogo.jp", +"awaji.hyogo.jp", +"fukusaki.hyogo.jp", +"goshiki.hyogo.jp", +"harima.hyogo.jp", +"himeji.hyogo.jp", +"ichikawa.hyogo.jp", +"inagawa.hyogo.jp", +"itami.hyogo.jp", +"kakogawa.hyogo.jp", +"kamigori.hyogo.jp", +"kamikawa.hyogo.jp", +"kasai.hyogo.jp", +"kasuga.hyogo.jp", +"kawanishi.hyogo.jp", +"miki.hyogo.jp", +"minamiawaji.hyogo.jp", +"nishinomiya.hyogo.jp", +"nishiwaki.hyogo.jp", +"ono.hyogo.jp", +"sanda.hyogo.jp", +"sannan.hyogo.jp", +"sasayama.hyogo.jp", +"sayo.hyogo.jp", +"shingu.hyogo.jp", +"shinonsen.hyogo.jp", +"shiso.hyogo.jp", +"sumoto.hyogo.jp", +"taishi.hyogo.jp", +"taka.hyogo.jp", +"takarazuka.hyogo.jp", +"takasago.hyogo.jp", +"takino.hyogo.jp", +"tamba.hyogo.jp", +"tatsuno.hyogo.jp", +"toyooka.hyogo.jp", +"yabu.hyogo.jp", +"yashiro.hyogo.jp", +"yoka.hyogo.jp", +"yokawa.hyogo.jp", +"ami.ibaraki.jp", +"asahi.ibaraki.jp", +"bando.ibaraki.jp", +"chikusei.ibaraki.jp", +"daigo.ibaraki.jp", +"fujishiro.ibaraki.jp", +"hitachi.ibaraki.jp", +"hitachinaka.ibaraki.jp", +"hitachiomiya.ibaraki.jp", +"hitachiota.ibaraki.jp", +"ibaraki.ibaraki.jp", +"ina.ibaraki.jp", +"inashiki.ibaraki.jp", +"itako.ibaraki.jp", +"iwama.ibaraki.jp", +"joso.ibaraki.jp", +"kamisu.ibaraki.jp", +"kasama.ibaraki.jp", +"kashima.ibaraki.jp", +"kasumigaura.ibaraki.jp", +"koga.ibaraki.jp", +"miho.ibaraki.jp", +"mito.ibaraki.jp", +"moriya.ibaraki.jp", +"naka.ibaraki.jp", +"namegata.ibaraki.jp", +"oarai.ibaraki.jp", +"ogawa.ibaraki.jp", +"omitama.ibaraki.jp", +"ryugasaki.ibaraki.jp", +"sakai.ibaraki.jp", +"sakuragawa.ibaraki.jp", +"shimodate.ibaraki.jp", +"shimotsuma.ibaraki.jp", +"shirosato.ibaraki.jp", +"sowa.ibaraki.jp", +"suifu.ibaraki.jp", +"takahagi.ibaraki.jp", +"tamatsukuri.ibaraki.jp", +"tokai.ibaraki.jp", +"tomobe.ibaraki.jp", +"tone.ibaraki.jp", +"toride.ibaraki.jp", +"tsuchiura.ibaraki.jp", +"tsukuba.ibaraki.jp", +"uchihara.ibaraki.jp", +"ushiku.ibaraki.jp", +"yachiyo.ibaraki.jp", +"yamagata.ibaraki.jp", +"yawara.ibaraki.jp", +"yuki.ibaraki.jp", +"anamizu.ishikawa.jp", +"hakui.ishikawa.jp", +"hakusan.ishikawa.jp", +"kaga.ishikawa.jp", +"kahoku.ishikawa.jp", +"kanazawa.ishikawa.jp", +"kawakita.ishikawa.jp", +"komatsu.ishikawa.jp", +"nakanoto.ishikawa.jp", +"nanao.ishikawa.jp", +"nomi.ishikawa.jp", +"nonoichi.ishikawa.jp", +"noto.ishikawa.jp", +"shika.ishikawa.jp", +"suzu.ishikawa.jp", +"tsubata.ishikawa.jp", +"tsurugi.ishikawa.jp", +"uchinada.ishikawa.jp", +"wajima.ishikawa.jp", +"fudai.iwate.jp", +"fujisawa.iwate.jp", +"hanamaki.iwate.jp", +"hiraizumi.iwate.jp", +"hirono.iwate.jp", +"ichinohe.iwate.jp", +"ichinoseki.iwate.jp", +"iwaizumi.iwate.jp", +"iwate.iwate.jp", +"joboji.iwate.jp", +"kamaishi.iwate.jp", +"kanegasaki.iwate.jp", +"karumai.iwate.jp", +"kawai.iwate.jp", +"kitakami.iwate.jp", +"kuji.iwate.jp", +"kunohe.iwate.jp", +"kuzumaki.iwate.jp", +"miyako.iwate.jp", +"mizusawa.iwate.jp", +"morioka.iwate.jp", +"ninohe.iwate.jp", +"noda.iwate.jp", +"ofunato.iwate.jp", +"oshu.iwate.jp", +"otsuchi.iwate.jp", +"rikuzentakata.iwate.jp", +"shiwa.iwate.jp", +"shizukuishi.iwate.jp", +"sumita.iwate.jp", +"tanohata.iwate.jp", +"tono.iwate.jp", +"yahaba.iwate.jp", +"yamada.iwate.jp", +"ayagawa.kagawa.jp", +"higashikagawa.kagawa.jp", +"kanonji.kagawa.jp", +"kotohira.kagawa.jp", +"manno.kagawa.jp", +"marugame.kagawa.jp", +"mitoyo.kagawa.jp", +"naoshima.kagawa.jp", +"sanuki.kagawa.jp", +"tadotsu.kagawa.jp", +"takamatsu.kagawa.jp", +"tonosho.kagawa.jp", +"uchinomi.kagawa.jp", +"utazu.kagawa.jp", +"zentsuji.kagawa.jp", +"akune.kagoshima.jp", +"amami.kagoshima.jp", +"hioki.kagoshima.jp", +"isa.kagoshima.jp", +"isen.kagoshima.jp", +"izumi.kagoshima.jp", +"kagoshima.kagoshima.jp", +"kanoya.kagoshima.jp", +"kawanabe.kagoshima.jp", +"kinko.kagoshima.jp", +"kouyama.kagoshima.jp", +"makurazaki.kagoshima.jp", +"matsumoto.kagoshima.jp", +"minamitane.kagoshima.jp", +"nakatane.kagoshima.jp", +"nishinoomote.kagoshima.jp", +"satsumasendai.kagoshima.jp", +"soo.kagoshima.jp", +"tarumizu.kagoshima.jp", +"yusui.kagoshima.jp", +"aikawa.kanagawa.jp", +"atsugi.kanagawa.jp", +"ayase.kanagawa.jp", +"chigasaki.kanagawa.jp", +"ebina.kanagawa.jp", +"fujisawa.kanagawa.jp", +"hadano.kanagawa.jp", +"hakone.kanagawa.jp", +"hiratsuka.kanagawa.jp", +"isehara.kanagawa.jp", +"kaisei.kanagawa.jp", +"kamakura.kanagawa.jp", +"kiyokawa.kanagawa.jp", +"matsuda.kanagawa.jp", +"minamiashigara.kanagawa.jp", +"miura.kanagawa.jp", +"nakai.kanagawa.jp", +"ninomiya.kanagawa.jp", +"odawara.kanagawa.jp", +"oi.kanagawa.jp", +"oiso.kanagawa.jp", +"sagamihara.kanagawa.jp", +"samukawa.kanagawa.jp", +"tsukui.kanagawa.jp", +"yamakita.kanagawa.jp", +"yamato.kanagawa.jp", +"yokosuka.kanagawa.jp", +"yugawara.kanagawa.jp", +"zama.kanagawa.jp", +"zushi.kanagawa.jp", +"aki.kochi.jp", +"geisei.kochi.jp", +"hidaka.kochi.jp", +"higashitsuno.kochi.jp", +"ino.kochi.jp", +"kagami.kochi.jp", +"kami.kochi.jp", +"kitagawa.kochi.jp", +"kochi.kochi.jp", +"mihara.kochi.jp", +"motoyama.kochi.jp", +"muroto.kochi.jp", +"nahari.kochi.jp", +"nakamura.kochi.jp", +"nankoku.kochi.jp", +"nishitosa.kochi.jp", +"niyodogawa.kochi.jp", +"ochi.kochi.jp", +"okawa.kochi.jp", +"otoyo.kochi.jp", +"otsuki.kochi.jp", +"sakawa.kochi.jp", +"sukumo.kochi.jp", +"susaki.kochi.jp", +"tosa.kochi.jp", +"tosashimizu.kochi.jp", +"toyo.kochi.jp", +"tsuno.kochi.jp", +"umaji.kochi.jp", +"yasuda.kochi.jp", +"yusuhara.kochi.jp", +"amakusa.kumamoto.jp", +"arao.kumamoto.jp", +"aso.kumamoto.jp", +"choyo.kumamoto.jp", +"gyokuto.kumamoto.jp", +"kamiamakusa.kumamoto.jp", +"kikuchi.kumamoto.jp", +"kumamoto.kumamoto.jp", +"mashiki.kumamoto.jp", +"mifune.kumamoto.jp", +"minamata.kumamoto.jp", +"minamioguni.kumamoto.jp", +"nagasu.kumamoto.jp", +"nishihara.kumamoto.jp", +"oguni.kumamoto.jp", +"ozu.kumamoto.jp", +"sumoto.kumamoto.jp", +"takamori.kumamoto.jp", +"uki.kumamoto.jp", +"uto.kumamoto.jp", +"yamaga.kumamoto.jp", +"yamato.kumamoto.jp", +"yatsushiro.kumamoto.jp", +"ayabe.kyoto.jp", +"fukuchiyama.kyoto.jp", +"higashiyama.kyoto.jp", +"ide.kyoto.jp", +"ine.kyoto.jp", +"joyo.kyoto.jp", +"kameoka.kyoto.jp", +"kamo.kyoto.jp", +"kita.kyoto.jp", +"kizu.kyoto.jp", +"kumiyama.kyoto.jp", +"kyotamba.kyoto.jp", +"kyotanabe.kyoto.jp", +"kyotango.kyoto.jp", +"maizuru.kyoto.jp", +"minami.kyoto.jp", +"minamiyamashiro.kyoto.jp", +"miyazu.kyoto.jp", +"muko.kyoto.jp", +"nagaokakyo.kyoto.jp", +"nakagyo.kyoto.jp", +"nantan.kyoto.jp", +"oyamazaki.kyoto.jp", +"sakyo.kyoto.jp", +"seika.kyoto.jp", +"tanabe.kyoto.jp", +"uji.kyoto.jp", +"ujitawara.kyoto.jp", +"wazuka.kyoto.jp", +"yamashina.kyoto.jp", +"yawata.kyoto.jp", +"asahi.mie.jp", +"inabe.mie.jp", +"ise.mie.jp", +"kameyama.mie.jp", +"kawagoe.mie.jp", +"kiho.mie.jp", +"kisosaki.mie.jp", +"kiwa.mie.jp", +"komono.mie.jp", +"kumano.mie.jp", +"kuwana.mie.jp", +"matsusaka.mie.jp", +"meiwa.mie.jp", +"mihama.mie.jp", +"minamiise.mie.jp", +"misugi.mie.jp", +"miyama.mie.jp", +"nabari.mie.jp", +"shima.mie.jp", +"suzuka.mie.jp", +"tado.mie.jp", +"taiki.mie.jp", +"taki.mie.jp", +"tamaki.mie.jp", +"toba.mie.jp", +"tsu.mie.jp", +"udono.mie.jp", +"ureshino.mie.jp", +"watarai.mie.jp", +"yokkaichi.mie.jp", +"furukawa.miyagi.jp", +"higashimatsushima.miyagi.jp", +"ishinomaki.miyagi.jp", +"iwanuma.miyagi.jp", +"kakuda.miyagi.jp", +"kami.miyagi.jp", +"kawasaki.miyagi.jp", +"marumori.miyagi.jp", +"matsushima.miyagi.jp", +"minamisanriku.miyagi.jp", +"misato.miyagi.jp", +"murata.miyagi.jp", +"natori.miyagi.jp", +"ogawara.miyagi.jp", +"ohira.miyagi.jp", +"onagawa.miyagi.jp", +"osaki.miyagi.jp", +"rifu.miyagi.jp", +"semine.miyagi.jp", +"shibata.miyagi.jp", +"shichikashuku.miyagi.jp", +"shikama.miyagi.jp", +"shiogama.miyagi.jp", +"shiroishi.miyagi.jp", +"tagajo.miyagi.jp", +"taiwa.miyagi.jp", +"tome.miyagi.jp", +"tomiya.miyagi.jp", +"wakuya.miyagi.jp", +"watari.miyagi.jp", +"yamamoto.miyagi.jp", +"zao.miyagi.jp", +"aya.miyazaki.jp", +"ebino.miyazaki.jp", +"gokase.miyazaki.jp", +"hyuga.miyazaki.jp", +"kadogawa.miyazaki.jp", +"kawaminami.miyazaki.jp", +"kijo.miyazaki.jp", +"kitagawa.miyazaki.jp", +"kitakata.miyazaki.jp", +"kitaura.miyazaki.jp", +"kobayashi.miyazaki.jp", +"kunitomi.miyazaki.jp", +"kushima.miyazaki.jp", +"mimata.miyazaki.jp", +"miyakonojo.miyazaki.jp", +"miyazaki.miyazaki.jp", +"morotsuka.miyazaki.jp", +"nichinan.miyazaki.jp", +"nishimera.miyazaki.jp", +"nobeoka.miyazaki.jp", +"saito.miyazaki.jp", +"shiiba.miyazaki.jp", +"shintomi.miyazaki.jp", +"takaharu.miyazaki.jp", +"takanabe.miyazaki.jp", +"takazaki.miyazaki.jp", +"tsuno.miyazaki.jp", +"achi.nagano.jp", +"agematsu.nagano.jp", +"anan.nagano.jp", +"aoki.nagano.jp", +"asahi.nagano.jp", +"azumino.nagano.jp", +"chikuhoku.nagano.jp", +"chikuma.nagano.jp", +"chino.nagano.jp", +"fujimi.nagano.jp", +"hakuba.nagano.jp", +"hara.nagano.jp", +"hiraya.nagano.jp", +"iida.nagano.jp", +"iijima.nagano.jp", +"iiyama.nagano.jp", +"iizuna.nagano.jp", +"ikeda.nagano.jp", +"ikusaka.nagano.jp", +"ina.nagano.jp", +"karuizawa.nagano.jp", +"kawakami.nagano.jp", +"kiso.nagano.jp", +"kisofukushima.nagano.jp", +"kitaaiki.nagano.jp", +"komagane.nagano.jp", +"komoro.nagano.jp", +"matsukawa.nagano.jp", +"matsumoto.nagano.jp", +"miasa.nagano.jp", +"minamiaiki.nagano.jp", +"minamimaki.nagano.jp", +"minamiminowa.nagano.jp", +"minowa.nagano.jp", +"miyada.nagano.jp", +"miyota.nagano.jp", +"mochizuki.nagano.jp", +"nagano.nagano.jp", +"nagawa.nagano.jp", +"nagiso.nagano.jp", +"nakagawa.nagano.jp", +"nakano.nagano.jp", +"nozawaonsen.nagano.jp", +"obuse.nagano.jp", +"ogawa.nagano.jp", +"okaya.nagano.jp", +"omachi.nagano.jp", +"omi.nagano.jp", +"ookuwa.nagano.jp", +"ooshika.nagano.jp", +"otaki.nagano.jp", +"otari.nagano.jp", +"sakae.nagano.jp", +"sakaki.nagano.jp", +"saku.nagano.jp", +"sakuho.nagano.jp", +"shimosuwa.nagano.jp", +"shinanomachi.nagano.jp", +"shiojiri.nagano.jp", +"suwa.nagano.jp", +"suzaka.nagano.jp", +"takagi.nagano.jp", +"takamori.nagano.jp", +"takayama.nagano.jp", +"tateshina.nagano.jp", +"tatsuno.nagano.jp", +"togakushi.nagano.jp", +"togura.nagano.jp", +"tomi.nagano.jp", +"ueda.nagano.jp", +"wada.nagano.jp", +"yamagata.nagano.jp", +"yamanouchi.nagano.jp", +"yasaka.nagano.jp", +"yasuoka.nagano.jp", +"chijiwa.nagasaki.jp", +"futsu.nagasaki.jp", +"goto.nagasaki.jp", +"hasami.nagasaki.jp", +"hirado.nagasaki.jp", +"iki.nagasaki.jp", +"isahaya.nagasaki.jp", +"kawatana.nagasaki.jp", +"kuchinotsu.nagasaki.jp", +"matsuura.nagasaki.jp", +"nagasaki.nagasaki.jp", +"obama.nagasaki.jp", +"omura.nagasaki.jp", +"oseto.nagasaki.jp", +"saikai.nagasaki.jp", +"sasebo.nagasaki.jp", +"seihi.nagasaki.jp", +"shimabara.nagasaki.jp", +"shinkamigoto.nagasaki.jp", +"togitsu.nagasaki.jp", +"tsushima.nagasaki.jp", +"unzen.nagasaki.jp", +"ando.nara.jp", +"gose.nara.jp", +"heguri.nara.jp", +"higashiyoshino.nara.jp", +"ikaruga.nara.jp", +"ikoma.nara.jp", +"kamikitayama.nara.jp", +"kanmaki.nara.jp", +"kashiba.nara.jp", +"kashihara.nara.jp", +"katsuragi.nara.jp", +"kawai.nara.jp", +"kawakami.nara.jp", +"kawanishi.nara.jp", +"koryo.nara.jp", +"kurotaki.nara.jp", +"mitsue.nara.jp", +"miyake.nara.jp", +"nara.nara.jp", +"nosegawa.nara.jp", +"oji.nara.jp", +"ouda.nara.jp", +"oyodo.nara.jp", +"sakurai.nara.jp", +"sango.nara.jp", +"shimoichi.nara.jp", +"shimokitayama.nara.jp", +"shinjo.nara.jp", +"soni.nara.jp", +"takatori.nara.jp", +"tawaramoto.nara.jp", +"tenkawa.nara.jp", +"tenri.nara.jp", +"uda.nara.jp", +"yamatokoriyama.nara.jp", +"yamatotakada.nara.jp", +"yamazoe.nara.jp", +"yoshino.nara.jp", +"aga.niigata.jp", +"agano.niigata.jp", +"gosen.niigata.jp", +"itoigawa.niigata.jp", +"izumozaki.niigata.jp", +"joetsu.niigata.jp", +"kamo.niigata.jp", +"kariwa.niigata.jp", +"kashiwazaki.niigata.jp", +"minamiuonuma.niigata.jp", +"mitsuke.niigata.jp", +"muika.niigata.jp", +"murakami.niigata.jp", +"myoko.niigata.jp", +"nagaoka.niigata.jp", +"niigata.niigata.jp", +"ojiya.niigata.jp", +"omi.niigata.jp", +"sado.niigata.jp", +"sanjo.niigata.jp", +"seiro.niigata.jp", +"seirou.niigata.jp", +"sekikawa.niigata.jp", +"shibata.niigata.jp", +"tagami.niigata.jp", +"tainai.niigata.jp", +"tochio.niigata.jp", +"tokamachi.niigata.jp", +"tsubame.niigata.jp", +"tsunan.niigata.jp", +"uonuma.niigata.jp", +"yahiko.niigata.jp", +"yoita.niigata.jp", +"yuzawa.niigata.jp", +"beppu.oita.jp", +"bungoono.oita.jp", +"bungotakada.oita.jp", +"hasama.oita.jp", +"hiji.oita.jp", +"himeshima.oita.jp", +"hita.oita.jp", +"kamitsue.oita.jp", +"kokonoe.oita.jp", +"kuju.oita.jp", +"kunisaki.oita.jp", +"kusu.oita.jp", +"oita.oita.jp", +"saiki.oita.jp", +"taketa.oita.jp", +"tsukumi.oita.jp", +"usa.oita.jp", +"usuki.oita.jp", +"yufu.oita.jp", +"akaiwa.okayama.jp", +"asakuchi.okayama.jp", +"bizen.okayama.jp", +"hayashima.okayama.jp", +"ibara.okayama.jp", +"kagamino.okayama.jp", +"kasaoka.okayama.jp", +"kibichuo.okayama.jp", +"kumenan.okayama.jp", +"kurashiki.okayama.jp", +"maniwa.okayama.jp", +"misaki.okayama.jp", +"nagi.okayama.jp", +"niimi.okayama.jp", +"nishiawakura.okayama.jp", +"okayama.okayama.jp", +"satosho.okayama.jp", +"setouchi.okayama.jp", +"shinjo.okayama.jp", +"shoo.okayama.jp", +"soja.okayama.jp", +"takahashi.okayama.jp", +"tamano.okayama.jp", +"tsuyama.okayama.jp", +"wake.okayama.jp", +"yakage.okayama.jp", +"aguni.okinawa.jp", +"ginowan.okinawa.jp", +"ginoza.okinawa.jp", +"gushikami.okinawa.jp", +"haebaru.okinawa.jp", +"higashi.okinawa.jp", +"hirara.okinawa.jp", +"iheya.okinawa.jp", +"ishigaki.okinawa.jp", +"ishikawa.okinawa.jp", +"itoman.okinawa.jp", +"izena.okinawa.jp", +"kadena.okinawa.jp", +"kin.okinawa.jp", +"kitadaito.okinawa.jp", +"kitanakagusuku.okinawa.jp", +"kumejima.okinawa.jp", +"kunigami.okinawa.jp", +"minamidaito.okinawa.jp", +"motobu.okinawa.jp", +"nago.okinawa.jp", +"naha.okinawa.jp", +"nakagusuku.okinawa.jp", +"nakijin.okinawa.jp", +"nanjo.okinawa.jp", +"nishihara.okinawa.jp", +"ogimi.okinawa.jp", +"okinawa.okinawa.jp", +"onna.okinawa.jp", +"shimoji.okinawa.jp", +"taketomi.okinawa.jp", +"tarama.okinawa.jp", +"tokashiki.okinawa.jp", +"tomigusuku.okinawa.jp", +"tonaki.okinawa.jp", +"urasoe.okinawa.jp", +"uruma.okinawa.jp", +"yaese.okinawa.jp", +"yomitan.okinawa.jp", +"yonabaru.okinawa.jp", +"yonaguni.okinawa.jp", +"zamami.okinawa.jp", +"abeno.osaka.jp", +"chihayaakasaka.osaka.jp", +"chuo.osaka.jp", +"daito.osaka.jp", +"fujiidera.osaka.jp", +"habikino.osaka.jp", +"hannan.osaka.jp", +"higashiosaka.osaka.jp", +"higashisumiyoshi.osaka.jp", +"higashiyodogawa.osaka.jp", +"hirakata.osaka.jp", +"ibaraki.osaka.jp", +"ikeda.osaka.jp", +"izumi.osaka.jp", +"izumiotsu.osaka.jp", +"izumisano.osaka.jp", +"kadoma.osaka.jp", +"kaizuka.osaka.jp", +"kanan.osaka.jp", +"kashiwara.osaka.jp", +"katano.osaka.jp", +"kawachinagano.osaka.jp", +"kishiwada.osaka.jp", +"kita.osaka.jp", +"kumatori.osaka.jp", +"matsubara.osaka.jp", +"minato.osaka.jp", +"minoh.osaka.jp", +"misaki.osaka.jp", +"moriguchi.osaka.jp", +"neyagawa.osaka.jp", +"nishi.osaka.jp", +"nose.osaka.jp", +"osakasayama.osaka.jp", +"sakai.osaka.jp", +"sayama.osaka.jp", +"sennan.osaka.jp", +"settsu.osaka.jp", +"shijonawate.osaka.jp", +"shimamoto.osaka.jp", +"suita.osaka.jp", +"tadaoka.osaka.jp", +"taishi.osaka.jp", +"tajiri.osaka.jp", +"takaishi.osaka.jp", +"takatsuki.osaka.jp", +"tondabayashi.osaka.jp", +"toyonaka.osaka.jp", +"toyono.osaka.jp", +"yao.osaka.jp", +"ariake.saga.jp", +"arita.saga.jp", +"fukudomi.saga.jp", +"genkai.saga.jp", +"hamatama.saga.jp", +"hizen.saga.jp", +"imari.saga.jp", +"kamimine.saga.jp", +"kanzaki.saga.jp", +"karatsu.saga.jp", +"kashima.saga.jp", +"kitagata.saga.jp", +"kitahata.saga.jp", +"kiyama.saga.jp", +"kouhoku.saga.jp", +"kyuragi.saga.jp", +"nishiarita.saga.jp", +"ogi.saga.jp", +"omachi.saga.jp", +"ouchi.saga.jp", +"saga.saga.jp", +"shiroishi.saga.jp", +"taku.saga.jp", +"tara.saga.jp", +"tosu.saga.jp", +"yoshinogari.saga.jp", +"arakawa.saitama.jp", +"asaka.saitama.jp", +"chichibu.saitama.jp", +"fujimi.saitama.jp", +"fujimino.saitama.jp", +"fukaya.saitama.jp", +"hanno.saitama.jp", +"hanyu.saitama.jp", +"hasuda.saitama.jp", +"hatogaya.saitama.jp", +"hatoyama.saitama.jp", +"hidaka.saitama.jp", +"higashichichibu.saitama.jp", +"higashimatsuyama.saitama.jp", +"honjo.saitama.jp", +"ina.saitama.jp", +"iruma.saitama.jp", +"iwatsuki.saitama.jp", +"kamiizumi.saitama.jp", +"kamikawa.saitama.jp", +"kamisato.saitama.jp", +"kasukabe.saitama.jp", +"kawagoe.saitama.jp", +"kawaguchi.saitama.jp", +"kawajima.saitama.jp", +"kazo.saitama.jp", +"kitamoto.saitama.jp", +"koshigaya.saitama.jp", +"kounosu.saitama.jp", +"kuki.saitama.jp", +"kumagaya.saitama.jp", +"matsubushi.saitama.jp", +"minano.saitama.jp", +"misato.saitama.jp", +"miyashiro.saitama.jp", +"miyoshi.saitama.jp", +"moroyama.saitama.jp", +"nagatoro.saitama.jp", +"namegawa.saitama.jp", +"niiza.saitama.jp", +"ogano.saitama.jp", +"ogawa.saitama.jp", +"ogose.saitama.jp", +"okegawa.saitama.jp", +"omiya.saitama.jp", +"otaki.saitama.jp", +"ranzan.saitama.jp", +"ryokami.saitama.jp", +"saitama.saitama.jp", +"sakado.saitama.jp", +"satte.saitama.jp", +"sayama.saitama.jp", +"shiki.saitama.jp", +"shiraoka.saitama.jp", +"soka.saitama.jp", +"sugito.saitama.jp", +"toda.saitama.jp", +"tokigawa.saitama.jp", +"tokorozawa.saitama.jp", +"tsurugashima.saitama.jp", +"urawa.saitama.jp", +"warabi.saitama.jp", +"yashio.saitama.jp", +"yokoze.saitama.jp", +"yono.saitama.jp", +"yorii.saitama.jp", +"yoshida.saitama.jp", +"yoshikawa.saitama.jp", +"yoshimi.saitama.jp", +"aisho.shiga.jp", +"gamo.shiga.jp", +"higashiomi.shiga.jp", +"hikone.shiga.jp", +"koka.shiga.jp", +"konan.shiga.jp", +"kosei.shiga.jp", +"koto.shiga.jp", +"kusatsu.shiga.jp", +"maibara.shiga.jp", +"moriyama.shiga.jp", +"nagahama.shiga.jp", +"nishiazai.shiga.jp", +"notogawa.shiga.jp", +"omihachiman.shiga.jp", +"otsu.shiga.jp", +"ritto.shiga.jp", +"ryuoh.shiga.jp", +"takashima.shiga.jp", +"takatsuki.shiga.jp", +"torahime.shiga.jp", +"toyosato.shiga.jp", +"yasu.shiga.jp", +"akagi.shimane.jp", +"ama.shimane.jp", +"gotsu.shimane.jp", +"hamada.shimane.jp", +"higashiizumo.shimane.jp", +"hikawa.shimane.jp", +"hikimi.shimane.jp", +"izumo.shimane.jp", +"kakinoki.shimane.jp", +"masuda.shimane.jp", +"matsue.shimane.jp", +"misato.shimane.jp", +"nishinoshima.shimane.jp", +"ohda.shimane.jp", +"okinoshima.shimane.jp", +"okuizumo.shimane.jp", +"shimane.shimane.jp", +"tamayu.shimane.jp", +"tsuwano.shimane.jp", +"unnan.shimane.jp", +"yakumo.shimane.jp", +"yasugi.shimane.jp", +"yatsuka.shimane.jp", +"arai.shizuoka.jp", +"atami.shizuoka.jp", +"fuji.shizuoka.jp", +"fujieda.shizuoka.jp", +"fujikawa.shizuoka.jp", +"fujinomiya.shizuoka.jp", +"fukuroi.shizuoka.jp", +"gotemba.shizuoka.jp", +"haibara.shizuoka.jp", +"hamamatsu.shizuoka.jp", +"higashiizu.shizuoka.jp", +"ito.shizuoka.jp", +"iwata.shizuoka.jp", +"izu.shizuoka.jp", +"izunokuni.shizuoka.jp", +"kakegawa.shizuoka.jp", +"kannami.shizuoka.jp", +"kawanehon.shizuoka.jp", +"kawazu.shizuoka.jp", +"kikugawa.shizuoka.jp", +"kosai.shizuoka.jp", +"makinohara.shizuoka.jp", +"matsuzaki.shizuoka.jp", +"minamiizu.shizuoka.jp", +"mishima.shizuoka.jp", +"morimachi.shizuoka.jp", +"nishiizu.shizuoka.jp", +"numazu.shizuoka.jp", +"omaezaki.shizuoka.jp", +"shimada.shizuoka.jp", +"shimizu.shizuoka.jp", +"shimoda.shizuoka.jp", +"shizuoka.shizuoka.jp", +"susono.shizuoka.jp", +"yaizu.shizuoka.jp", +"yoshida.shizuoka.jp", +"ashikaga.tochigi.jp", +"bato.tochigi.jp", +"haga.tochigi.jp", +"ichikai.tochigi.jp", +"iwafune.tochigi.jp", +"kaminokawa.tochigi.jp", +"kanuma.tochigi.jp", +"karasuyama.tochigi.jp", +"kuroiso.tochigi.jp", +"mashiko.tochigi.jp", +"mibu.tochigi.jp", +"moka.tochigi.jp", +"motegi.tochigi.jp", +"nasu.tochigi.jp", +"nasushiobara.tochigi.jp", +"nikko.tochigi.jp", +"nishikata.tochigi.jp", +"nogi.tochigi.jp", +"ohira.tochigi.jp", +"ohtawara.tochigi.jp", +"oyama.tochigi.jp", +"sakura.tochigi.jp", +"sano.tochigi.jp", +"shimotsuke.tochigi.jp", +"shioya.tochigi.jp", +"takanezawa.tochigi.jp", +"tochigi.tochigi.jp", +"tsuga.tochigi.jp", +"ujiie.tochigi.jp", +"utsunomiya.tochigi.jp", +"yaita.tochigi.jp", +"aizumi.tokushima.jp", +"anan.tokushima.jp", +"ichiba.tokushima.jp", +"itano.tokushima.jp", +"kainan.tokushima.jp", +"komatsushima.tokushima.jp", +"matsushige.tokushima.jp", +"mima.tokushima.jp", +"minami.tokushima.jp", +"miyoshi.tokushima.jp", +"mugi.tokushima.jp", +"nakagawa.tokushima.jp", +"naruto.tokushima.jp", +"sanagochi.tokushima.jp", +"shishikui.tokushima.jp", +"tokushima.tokushima.jp", +"wajiki.tokushima.jp", +"adachi.tokyo.jp", +"akiruno.tokyo.jp", +"akishima.tokyo.jp", +"aogashima.tokyo.jp", +"arakawa.tokyo.jp", +"bunkyo.tokyo.jp", +"chiyoda.tokyo.jp", +"chofu.tokyo.jp", +"chuo.tokyo.jp", +"edogawa.tokyo.jp", +"fuchu.tokyo.jp", +"fussa.tokyo.jp", +"hachijo.tokyo.jp", +"hachioji.tokyo.jp", +"hamura.tokyo.jp", +"higashikurume.tokyo.jp", +"higashimurayama.tokyo.jp", +"higashiyamato.tokyo.jp", +"hino.tokyo.jp", +"hinode.tokyo.jp", +"hinohara.tokyo.jp", +"inagi.tokyo.jp", +"itabashi.tokyo.jp", +"katsushika.tokyo.jp", +"kita.tokyo.jp", +"kiyose.tokyo.jp", +"kodaira.tokyo.jp", +"koganei.tokyo.jp", +"kokubunji.tokyo.jp", +"komae.tokyo.jp", +"koto.tokyo.jp", +"kouzushima.tokyo.jp", +"kunitachi.tokyo.jp", +"machida.tokyo.jp", +"meguro.tokyo.jp", +"minato.tokyo.jp", +"mitaka.tokyo.jp", +"mizuho.tokyo.jp", +"musashimurayama.tokyo.jp", +"musashino.tokyo.jp", +"nakano.tokyo.jp", +"nerima.tokyo.jp", +"ogasawara.tokyo.jp", +"okutama.tokyo.jp", +"ome.tokyo.jp", +"oshima.tokyo.jp", +"ota.tokyo.jp", +"setagaya.tokyo.jp", +"shibuya.tokyo.jp", +"shinagawa.tokyo.jp", +"shinjuku.tokyo.jp", +"suginami.tokyo.jp", +"sumida.tokyo.jp", +"tachikawa.tokyo.jp", +"taito.tokyo.jp", +"tama.tokyo.jp", +"toshima.tokyo.jp", +"chizu.tottori.jp", +"hino.tottori.jp", +"kawahara.tottori.jp", +"koge.tottori.jp", +"kotoura.tottori.jp", +"misasa.tottori.jp", +"nanbu.tottori.jp", +"nichinan.tottori.jp", +"sakaiminato.tottori.jp", +"tottori.tottori.jp", +"wakasa.tottori.jp", +"yazu.tottori.jp", +"yonago.tottori.jp", +"asahi.toyama.jp", +"fuchu.toyama.jp", +"fukumitsu.toyama.jp", +"funahashi.toyama.jp", +"himi.toyama.jp", +"imizu.toyama.jp", +"inami.toyama.jp", +"johana.toyama.jp", +"kamiichi.toyama.jp", +"kurobe.toyama.jp", +"nakaniikawa.toyama.jp", +"namerikawa.toyama.jp", +"nanto.toyama.jp", +"nyuzen.toyama.jp", +"oyabe.toyama.jp", +"taira.toyama.jp", +"takaoka.toyama.jp", +"tateyama.toyama.jp", +"toga.toyama.jp", +"tonami.toyama.jp", +"toyama.toyama.jp", +"unazuki.toyama.jp", +"uozu.toyama.jp", +"yamada.toyama.jp", +"arida.wakayama.jp", +"aridagawa.wakayama.jp", +"gobo.wakayama.jp", +"hashimoto.wakayama.jp", +"hidaka.wakayama.jp", +"hirogawa.wakayama.jp", +"inami.wakayama.jp", +"iwade.wakayama.jp", +"kainan.wakayama.jp", +"kamitonda.wakayama.jp", +"katsuragi.wakayama.jp", +"kimino.wakayama.jp", +"kinokawa.wakayama.jp", +"kitayama.wakayama.jp", +"koya.wakayama.jp", +"koza.wakayama.jp", +"kozagawa.wakayama.jp", +"kudoyama.wakayama.jp", +"kushimoto.wakayama.jp", +"mihama.wakayama.jp", +"misato.wakayama.jp", +"nachikatsuura.wakayama.jp", +"shingu.wakayama.jp", +"shirahama.wakayama.jp", +"taiji.wakayama.jp", +"tanabe.wakayama.jp", +"wakayama.wakayama.jp", +"yuasa.wakayama.jp", +"yura.wakayama.jp", +"asahi.yamagata.jp", +"funagata.yamagata.jp", +"higashine.yamagata.jp", +"iide.yamagata.jp", +"kahoku.yamagata.jp", +"kaminoyama.yamagata.jp", +"kaneyama.yamagata.jp", +"kawanishi.yamagata.jp", +"mamurogawa.yamagata.jp", +"mikawa.yamagata.jp", +"murayama.yamagata.jp", +"nagai.yamagata.jp", +"nakayama.yamagata.jp", +"nanyo.yamagata.jp", +"nishikawa.yamagata.jp", +"obanazawa.yamagata.jp", +"oe.yamagata.jp", +"oguni.yamagata.jp", +"ohkura.yamagata.jp", +"oishida.yamagata.jp", +"sagae.yamagata.jp", +"sakata.yamagata.jp", +"sakegawa.yamagata.jp", +"shinjo.yamagata.jp", +"shirataka.yamagata.jp", +"shonai.yamagata.jp", +"takahata.yamagata.jp", +"tendo.yamagata.jp", +"tozawa.yamagata.jp", +"tsuruoka.yamagata.jp", +"yamagata.yamagata.jp", +"yamanobe.yamagata.jp", +"yonezawa.yamagata.jp", +"yuza.yamagata.jp", +"abu.yamaguchi.jp", +"hagi.yamaguchi.jp", +"hikari.yamaguchi.jp", +"hofu.yamaguchi.jp", +"iwakuni.yamaguchi.jp", +"kudamatsu.yamaguchi.jp", +"mitou.yamaguchi.jp", +"nagato.yamaguchi.jp", +"oshima.yamaguchi.jp", +"shimonoseki.yamaguchi.jp", +"shunan.yamaguchi.jp", +"tabuse.yamaguchi.jp", +"tokuyama.yamaguchi.jp", +"toyota.yamaguchi.jp", +"ube.yamaguchi.jp", +"yuu.yamaguchi.jp", +"chuo.yamanashi.jp", +"doshi.yamanashi.jp", +"fuefuki.yamanashi.jp", +"fujikawa.yamanashi.jp", +"fujikawaguchiko.yamanashi.jp", +"fujiyoshida.yamanashi.jp", +"hayakawa.yamanashi.jp", +"hokuto.yamanashi.jp", +"ichikawamisato.yamanashi.jp", +"kai.yamanashi.jp", +"kofu.yamanashi.jp", +"koshu.yamanashi.jp", +"kosuge.yamanashi.jp", +"minami-alps.yamanashi.jp", +"minobu.yamanashi.jp", +"nakamichi.yamanashi.jp", +"nanbu.yamanashi.jp", +"narusawa.yamanashi.jp", +"nirasaki.yamanashi.jp", +"nishikatsura.yamanashi.jp", +"oshino.yamanashi.jp", +"otsuki.yamanashi.jp", +"showa.yamanashi.jp", +"tabayama.yamanashi.jp", +"tsuru.yamanashi.jp", +"uenohara.yamanashi.jp", +"yamanakako.yamanashi.jp", +"yamanashi.yamanashi.jp", +"ke", +"ac.ke", +"co.ke", +"go.ke", +"info.ke", +"me.ke", +"mobi.ke", +"ne.ke", +"or.ke", +"sc.ke", +"kg", +"org.kg", +"net.kg", +"com.kg", +"edu.kg", +"gov.kg", +"mil.kg", +"*.kh", +"ki", +"edu.ki", +"biz.ki", +"net.ki", +"org.ki", +"gov.ki", +"info.ki", +"com.ki", +"km", +"org.km", +"nom.km", +"gov.km", +"prd.km", +"tm.km", +"edu.km", +"mil.km", +"ass.km", +"com.km", +"coop.km", +"asso.km", +"presse.km", +"medecin.km", +"notaires.km", +"pharmaciens.km", +"veterinaire.km", +"gouv.km", +"kn", +"net.kn", +"org.kn", +"edu.kn", +"gov.kn", +"kp", +"com.kp", +"edu.kp", +"gov.kp", +"org.kp", +"rep.kp", +"tra.kp", +"kr", +"ac.kr", +"co.kr", +"es.kr", +"go.kr", +"hs.kr", +"kg.kr", +"mil.kr", +"ms.kr", +"ne.kr", +"or.kr", +"pe.kr", +"re.kr", +"sc.kr", +"busan.kr", +"chungbuk.kr", +"chungnam.kr", +"daegu.kr", +"daejeon.kr", +"gangwon.kr", +"gwangju.kr", +"gyeongbuk.kr", +"gyeonggi.kr", +"gyeongnam.kr", +"incheon.kr", +"jeju.kr", +"jeonbuk.kr", +"jeonnam.kr", +"seoul.kr", +"ulsan.kr", +"kw", +"com.kw", +"edu.kw", +"emb.kw", +"gov.kw", +"ind.kw", +"net.kw", +"org.kw", +"ky", +"edu.ky", +"gov.ky", +"com.ky", +"org.ky", +"net.ky", +"kz", +"org.kz", +"edu.kz", +"net.kz", +"gov.kz", +"mil.kz", +"com.kz", +"la", +"int.la", +"net.la", +"info.la", +"edu.la", +"gov.la", +"per.la", +"com.la", +"org.la", +"lb", +"com.lb", +"edu.lb", +"gov.lb", +"net.lb", +"org.lb", +"lc", +"com.lc", +"net.lc", +"co.lc", +"org.lc", +"edu.lc", +"gov.lc", +"li", +"lk", +"gov.lk", +"sch.lk", +"net.lk", +"int.lk", +"com.lk", +"org.lk", +"edu.lk", +"ngo.lk", +"soc.lk", +"web.lk", +"ltd.lk", +"assn.lk", +"grp.lk", +"hotel.lk", +"ac.lk", +"lr", +"com.lr", +"edu.lr", +"gov.lr", +"org.lr", +"net.lr", +"ls", +"ac.ls", +"biz.ls", +"co.ls", +"edu.ls", +"gov.ls", +"info.ls", +"net.ls", +"org.ls", +"sc.ls", +"lt", +"gov.lt", +"lu", +"lv", +"com.lv", +"edu.lv", +"gov.lv", +"org.lv", +"mil.lv", +"id.lv", +"net.lv", +"asn.lv", +"conf.lv", +"ly", +"com.ly", +"net.ly", +"gov.ly", +"plc.ly", +"edu.ly", +"sch.ly", +"med.ly", +"org.ly", +"id.ly", +"ma", +"co.ma", +"net.ma", +"gov.ma", +"org.ma", +"ac.ma", +"press.ma", +"mc", +"tm.mc", +"asso.mc", +"md", +"me", +"co.me", +"net.me", +"org.me", +"edu.me", +"ac.me", +"gov.me", +"its.me", +"priv.me", +"mg", +"org.mg", +"nom.mg", +"gov.mg", +"prd.mg", +"tm.mg", +"edu.mg", +"mil.mg", +"com.mg", +"co.mg", +"mh", +"mil", +"mk", +"com.mk", +"org.mk", +"net.mk", +"edu.mk", +"gov.mk", +"inf.mk", +"name.mk", +"ml", +"com.ml", +"edu.ml", +"gouv.ml", +"gov.ml", +"net.ml", +"org.ml", +"presse.ml", +"*.mm", +"mn", +"gov.mn", +"edu.mn", +"org.mn", +"mo", +"com.mo", +"net.mo", +"org.mo", +"edu.mo", +"gov.mo", +"mobi", +"mp", +"mq", +"mr", +"gov.mr", +"ms", +"com.ms", +"edu.ms", +"gov.ms", +"net.ms", +"org.ms", +"mt", +"com.mt", +"edu.mt", +"net.mt", +"org.mt", +"mu", +"com.mu", +"net.mu", +"org.mu", +"gov.mu", +"ac.mu", +"co.mu", +"or.mu", +"museum", +"academy.museum", +"agriculture.museum", +"air.museum", +"airguard.museum", +"alabama.museum", +"alaska.museum", +"amber.museum", +"ambulance.museum", +"american.museum", +"americana.museum", +"americanantiques.museum", +"americanart.museum", +"amsterdam.museum", +"and.museum", +"annefrank.museum", +"anthro.museum", +"anthropology.museum", +"antiques.museum", +"aquarium.museum", +"arboretum.museum", +"archaeological.museum", +"archaeology.museum", +"architecture.museum", +"art.museum", +"artanddesign.museum", +"artcenter.museum", +"artdeco.museum", +"arteducation.museum", +"artgallery.museum", +"arts.museum", +"artsandcrafts.museum", +"asmatart.museum", +"assassination.museum", +"assisi.museum", +"association.museum", +"astronomy.museum", +"atlanta.museum", +"austin.museum", +"australia.museum", +"automotive.museum", +"aviation.museum", +"axis.museum", +"badajoz.museum", +"baghdad.museum", +"bahn.museum", +"bale.museum", +"baltimore.museum", +"barcelona.museum", +"baseball.museum", +"basel.museum", +"baths.museum", +"bauern.museum", +"beauxarts.museum", +"beeldengeluid.museum", +"bellevue.museum", +"bergbau.museum", +"berkeley.museum", +"berlin.museum", +"bern.museum", +"bible.museum", +"bilbao.museum", +"bill.museum", +"birdart.museum", +"birthplace.museum", +"bonn.museum", +"boston.museum", +"botanical.museum", +"botanicalgarden.museum", +"botanicgarden.museum", +"botany.museum", +"brandywinevalley.museum", +"brasil.museum", +"bristol.museum", +"british.museum", +"britishcolumbia.museum", +"broadcast.museum", +"brunel.museum", +"brussel.museum", +"brussels.museum", +"bruxelles.museum", +"building.museum", +"burghof.museum", +"bus.museum", +"bushey.museum", +"cadaques.museum", +"california.museum", +"cambridge.museum", +"can.museum", +"canada.museum", +"capebreton.museum", +"carrier.museum", +"cartoonart.museum", +"casadelamoneda.museum", +"castle.museum", +"castres.museum", +"celtic.museum", +"center.museum", +"chattanooga.museum", +"cheltenham.museum", +"chesapeakebay.museum", +"chicago.museum", +"children.museum", +"childrens.museum", +"childrensgarden.museum", +"chiropractic.museum", +"chocolate.museum", +"christiansburg.museum", +"cincinnati.museum", +"cinema.museum", +"circus.museum", +"civilisation.museum", +"civilization.museum", +"civilwar.museum", +"clinton.museum", +"clock.museum", +"coal.museum", +"coastaldefence.museum", +"cody.museum", +"coldwar.museum", +"collection.museum", +"colonialwilliamsburg.museum", +"coloradoplateau.museum", +"columbia.museum", +"columbus.museum", +"communication.museum", +"communications.museum", +"community.museum", +"computer.museum", +"computerhistory.museum", +"comunicações.museum", +"contemporary.museum", +"contemporaryart.museum", +"convent.museum", +"copenhagen.museum", +"corporation.museum", +"correios-e-telecomunicações.museum", +"corvette.museum", +"costume.museum", +"countryestate.museum", +"county.museum", +"crafts.museum", +"cranbrook.museum", +"creation.museum", +"cultural.museum", +"culturalcenter.museum", +"culture.museum", +"cyber.museum", +"cymru.museum", +"dali.museum", +"dallas.museum", +"database.museum", +"ddr.museum", +"decorativearts.museum", +"delaware.museum", +"delmenhorst.museum", +"denmark.museum", +"depot.museum", +"design.museum", +"detroit.museum", +"dinosaur.museum", +"discovery.museum", +"dolls.museum", +"donostia.museum", +"durham.museum", +"eastafrica.museum", +"eastcoast.museum", +"education.museum", +"educational.museum", +"egyptian.museum", +"eisenbahn.museum", +"elburg.museum", +"elvendrell.museum", +"embroidery.museum", +"encyclopedic.museum", +"england.museum", +"entomology.museum", +"environment.museum", +"environmentalconservation.museum", +"epilepsy.museum", +"essex.museum", +"estate.museum", +"ethnology.museum", +"exeter.museum", +"exhibition.museum", +"family.museum", +"farm.museum", +"farmequipment.museum", +"farmers.museum", +"farmstead.museum", +"field.museum", +"figueres.museum", +"filatelia.museum", +"film.museum", +"fineart.museum", +"finearts.museum", +"finland.museum", +"flanders.museum", +"florida.museum", +"force.museum", +"fortmissoula.museum", +"fortworth.museum", +"foundation.museum", +"francaise.museum", +"frankfurt.museum", +"franziskaner.museum", +"freemasonry.museum", +"freiburg.museum", +"fribourg.museum", +"frog.museum", +"fundacio.museum", +"furniture.museum", +"gallery.museum", +"garden.museum", +"gateway.museum", +"geelvinck.museum", +"gemological.museum", +"geology.museum", +"georgia.museum", +"giessen.museum", +"glas.museum", +"glass.museum", +"gorge.museum", +"grandrapids.museum", +"graz.museum", +"guernsey.museum", +"halloffame.museum", +"hamburg.museum", +"handson.museum", +"harvestcelebration.museum", +"hawaii.museum", +"health.museum", +"heimatunduhren.museum", +"hellas.museum", +"helsinki.museum", +"hembygdsforbund.museum", +"heritage.museum", +"histoire.museum", +"historical.museum", +"historicalsociety.museum", +"historichouses.museum", +"historisch.museum", +"historisches.museum", +"history.museum", +"historyofscience.museum", +"horology.museum", +"house.museum", +"humanities.museum", +"illustration.museum", +"imageandsound.museum", +"indian.museum", +"indiana.museum", +"indianapolis.museum", +"indianmarket.museum", +"intelligence.museum", +"interactive.museum", +"iraq.museum", +"iron.museum", +"isleofman.museum", +"jamison.museum", +"jefferson.museum", +"jerusalem.museum", +"jewelry.museum", +"jewish.museum", +"jewishart.museum", +"jfk.museum", +"journalism.museum", +"judaica.museum", +"judygarland.museum", +"juedisches.museum", +"juif.museum", +"karate.museum", +"karikatur.museum", +"kids.museum", +"koebenhavn.museum", +"koeln.museum", +"kunst.museum", +"kunstsammlung.museum", +"kunstunddesign.museum", +"labor.museum", +"labour.museum", +"lajolla.museum", +"lancashire.museum", +"landes.museum", +"lans.museum", +"läns.museum", +"larsson.museum", +"lewismiller.museum", +"lincoln.museum", +"linz.museum", +"living.museum", +"livinghistory.museum", +"localhistory.museum", +"london.museum", +"losangeles.museum", +"louvre.museum", +"loyalist.museum", +"lucerne.museum", +"luxembourg.museum", +"luzern.museum", +"mad.museum", +"madrid.museum", +"mallorca.museum", +"manchester.museum", +"mansion.museum", +"mansions.museum", +"manx.museum", +"marburg.museum", +"maritime.museum", +"maritimo.museum", +"maryland.museum", +"marylhurst.museum", +"media.museum", +"medical.museum", +"medizinhistorisches.museum", +"meeres.museum", +"memorial.museum", +"mesaverde.museum", +"michigan.museum", +"midatlantic.museum", +"military.museum", +"mill.museum", +"miners.museum", +"mining.museum", +"minnesota.museum", +"missile.museum", +"missoula.museum", +"modern.museum", +"moma.museum", +"money.museum", +"monmouth.museum", +"monticello.museum", +"montreal.museum", +"moscow.museum", +"motorcycle.museum", +"muenchen.museum", +"muenster.museum", +"mulhouse.museum", +"muncie.museum", +"museet.museum", +"museumcenter.museum", +"museumvereniging.museum", +"music.museum", +"national.museum", +"nationalfirearms.museum", +"nationalheritage.museum", +"nativeamerican.museum", +"naturalhistory.museum", +"naturalhistorymuseum.museum", +"naturalsciences.museum", +"nature.museum", +"naturhistorisches.museum", +"natuurwetenschappen.museum", +"naumburg.museum", +"naval.museum", +"nebraska.museum", +"neues.museum", +"newhampshire.museum", +"newjersey.museum", +"newmexico.museum", +"newport.museum", +"newspaper.museum", +"newyork.museum", +"niepce.museum", +"norfolk.museum", +"north.museum", +"nrw.museum", +"nyc.museum", +"nyny.museum", +"oceanographic.museum", +"oceanographique.museum", +"omaha.museum", +"online.museum", +"ontario.museum", +"openair.museum", +"oregon.museum", +"oregontrail.museum", +"otago.museum", +"oxford.museum", +"pacific.museum", +"paderborn.museum", +"palace.museum", +"paleo.museum", +"palmsprings.museum", +"panama.museum", +"paris.museum", +"pasadena.museum", +"pharmacy.museum", +"philadelphia.museum", +"philadelphiaarea.museum", +"philately.museum", +"phoenix.museum", +"photography.museum", +"pilots.museum", +"pittsburgh.museum", +"planetarium.museum", +"plantation.museum", +"plants.museum", +"plaza.museum", +"portal.museum", +"portland.museum", +"portlligat.museum", +"posts-and-telecommunications.museum", +"preservation.museum", +"presidio.museum", +"press.museum", +"project.museum", +"public.museum", +"pubol.museum", +"quebec.museum", +"railroad.museum", +"railway.museum", +"research.museum", +"resistance.museum", +"riodejaneiro.museum", +"rochester.museum", +"rockart.museum", +"roma.museum", +"russia.museum", +"saintlouis.museum", +"salem.museum", +"salvadordali.museum", +"salzburg.museum", +"sandiego.museum", +"sanfrancisco.museum", +"santabarbara.museum", +"santacruz.museum", +"santafe.museum", +"saskatchewan.museum", +"satx.museum", +"savannahga.museum", +"schlesisches.museum", +"schoenbrunn.museum", +"schokoladen.museum", +"school.museum", +"schweiz.museum", +"science.museum", +"scienceandhistory.museum", +"scienceandindustry.museum", +"sciencecenter.museum", +"sciencecenters.museum", +"science-fiction.museum", +"sciencehistory.museum", +"sciences.museum", +"sciencesnaturelles.museum", +"scotland.museum", +"seaport.museum", +"settlement.museum", +"settlers.museum", +"shell.museum", +"sherbrooke.museum", +"sibenik.museum", +"silk.museum", +"ski.museum", +"skole.museum", +"society.museum", +"sologne.museum", +"soundandvision.museum", +"southcarolina.museum", +"southwest.museum", +"space.museum", +"spy.museum", +"square.museum", +"stadt.museum", +"stalbans.museum", +"starnberg.museum", +"state.museum", +"stateofdelaware.museum", +"station.museum", +"steam.museum", +"steiermark.museum", +"stjohn.museum", +"stockholm.museum", +"stpetersburg.museum", +"stuttgart.museum", +"suisse.museum", +"surgeonshall.museum", +"surrey.museum", +"svizzera.museum", +"sweden.museum", +"sydney.museum", +"tank.museum", +"tcm.museum", +"technology.museum", +"telekommunikation.museum", +"television.museum", +"texas.museum", +"textile.museum", +"theater.museum", +"time.museum", +"timekeeping.museum", +"topology.museum", +"torino.museum", +"touch.museum", +"town.museum", +"transport.museum", +"tree.museum", +"trolley.museum", +"trust.museum", +"trustee.museum", +"uhren.museum", +"ulm.museum", +"undersea.museum", +"university.museum", +"usa.museum", +"usantiques.museum", +"usarts.museum", +"uscountryestate.museum", +"usculture.museum", +"usdecorativearts.museum", +"usgarden.museum", +"ushistory.museum", +"ushuaia.museum", +"uslivinghistory.museum", +"utah.museum", +"uvic.museum", +"valley.museum", +"vantaa.museum", +"versailles.museum", +"viking.museum", +"village.museum", +"virginia.museum", +"virtual.museum", +"virtuel.museum", +"vlaanderen.museum", +"volkenkunde.museum", +"wales.museum", +"wallonie.museum", +"war.museum", +"washingtondc.museum", +"watchandclock.museum", +"watch-and-clock.museum", +"western.museum", +"westfalen.museum", +"whaling.museum", +"wildlife.museum", +"williamsburg.museum", +"windmill.museum", +"workshop.museum", +"york.museum", +"yorkshire.museum", +"yosemite.museum", +"youth.museum", +"zoological.museum", +"zoology.museum", +"ירושלים.museum", +"иком.museum", +"mv", +"aero.mv", +"biz.mv", +"com.mv", +"coop.mv", +"edu.mv", +"gov.mv", +"info.mv", +"int.mv", +"mil.mv", +"museum.mv", +"name.mv", +"net.mv", +"org.mv", +"pro.mv", +"mw", +"ac.mw", +"biz.mw", +"co.mw", +"com.mw", +"coop.mw", +"edu.mw", +"gov.mw", +"int.mw", +"museum.mw", +"net.mw", +"org.mw", +"mx", +"com.mx", +"org.mx", +"gob.mx", +"edu.mx", +"net.mx", +"my", +"com.my", +"net.my", +"org.my", +"gov.my", +"edu.my", +"mil.my", +"name.my", +"mz", +"ac.mz", +"adv.mz", +"co.mz", +"edu.mz", +"gov.mz", +"mil.mz", +"net.mz", +"org.mz", +"na", +"info.na", +"pro.na", +"name.na", +"school.na", +"or.na", +"dr.na", +"us.na", +"mx.na", +"ca.na", +"in.na", +"cc.na", +"tv.na", +"ws.na", +"mobi.na", +"co.na", +"com.na", +"org.na", +"name", +"nc", +"asso.nc", +"nom.nc", +"ne", +"net", +"nf", +"com.nf", +"net.nf", +"per.nf", +"rec.nf", +"web.nf", +"arts.nf", +"firm.nf", +"info.nf", +"other.nf", +"store.nf", +"ng", +"com.ng", +"edu.ng", +"gov.ng", +"i.ng", +"mil.ng", +"mobi.ng", +"name.ng", +"net.ng", +"org.ng", +"sch.ng", +"ni", +"ac.ni", +"biz.ni", +"co.ni", +"com.ni", +"edu.ni", +"gob.ni", +"in.ni", +"info.ni", +"int.ni", +"mil.ni", +"net.ni", +"nom.ni", +"org.ni", +"web.ni", +"nl", +"no", +"fhs.no", +"vgs.no", +"fylkesbibl.no", +"folkebibl.no", +"museum.no", +"idrett.no", +"priv.no", +"mil.no", +"stat.no", +"dep.no", +"kommune.no", +"herad.no", +"aa.no", +"ah.no", +"bu.no", +"fm.no", +"hl.no", +"hm.no", +"jan-mayen.no", +"mr.no", +"nl.no", +"nt.no", +"of.no", +"ol.no", +"oslo.no", +"rl.no", +"sf.no", +"st.no", +"svalbard.no", +"tm.no", +"tr.no", +"va.no", +"vf.no", +"gs.aa.no", +"gs.ah.no", +"gs.bu.no", +"gs.fm.no", +"gs.hl.no", +"gs.hm.no", +"gs.jan-mayen.no", +"gs.mr.no", +"gs.nl.no", +"gs.nt.no", +"gs.of.no", +"gs.ol.no", +"gs.oslo.no", +"gs.rl.no", +"gs.sf.no", +"gs.st.no", +"gs.svalbard.no", +"gs.tm.no", +"gs.tr.no", +"gs.va.no", +"gs.vf.no", +"akrehamn.no", +"åkrehamn.no", +"algard.no", +"ålgård.no", +"arna.no", +"brumunddal.no", +"bryne.no", +"bronnoysund.no", +"brønnøysund.no", +"drobak.no", +"drøbak.no", +"egersund.no", +"fetsund.no", +"floro.no", +"florø.no", +"fredrikstad.no", +"hokksund.no", +"honefoss.no", +"hønefoss.no", +"jessheim.no", +"jorpeland.no", +"jørpeland.no", +"kirkenes.no", +"kopervik.no", +"krokstadelva.no", +"langevag.no", +"langevåg.no", +"leirvik.no", +"mjondalen.no", +"mjøndalen.no", +"mo-i-rana.no", +"mosjoen.no", +"mosjøen.no", +"nesoddtangen.no", +"orkanger.no", +"osoyro.no", +"osøyro.no", +"raholt.no", +"råholt.no", +"sandnessjoen.no", +"sandnessjøen.no", +"skedsmokorset.no", +"slattum.no", +"spjelkavik.no", +"stathelle.no", +"stavern.no", +"stjordalshalsen.no", +"stjørdalshalsen.no", +"tananger.no", +"tranby.no", +"vossevangen.no", +"afjord.no", +"åfjord.no", +"agdenes.no", +"al.no", +"ål.no", +"alesund.no", +"ålesund.no", +"alstahaug.no", +"alta.no", +"áltá.no", +"alaheadju.no", +"álaheadju.no", +"alvdal.no", +"amli.no", +"åmli.no", +"amot.no", +"åmot.no", +"andebu.no", +"andoy.no", +"andøy.no", +"andasuolo.no", +"ardal.no", +"årdal.no", +"aremark.no", +"arendal.no", +"ås.no", +"aseral.no", +"åseral.no", +"asker.no", +"askim.no", +"askvoll.no", +"askoy.no", +"askøy.no", +"asnes.no", +"åsnes.no", +"audnedaln.no", +"aukra.no", +"aure.no", +"aurland.no", +"aurskog-holand.no", +"aurskog-høland.no", +"austevoll.no", +"austrheim.no", +"averoy.no", +"averøy.no", +"balestrand.no", +"ballangen.no", +"balat.no", +"bálát.no", +"balsfjord.no", +"bahccavuotna.no", +"báhccavuotna.no", +"bamble.no", +"bardu.no", +"beardu.no", +"beiarn.no", +"bajddar.no", +"bájddar.no", +"baidar.no", +"báidár.no", +"berg.no", +"bergen.no", +"berlevag.no", +"berlevåg.no", +"bearalvahki.no", +"bearalváhki.no", +"bindal.no", +"birkenes.no", +"bjarkoy.no", +"bjarkøy.no", +"bjerkreim.no", +"bjugn.no", +"bodo.no", +"bodø.no", +"badaddja.no", +"bådåddjå.no", +"budejju.no", +"bokn.no", +"bremanger.no", +"bronnoy.no", +"brønnøy.no", +"bygland.no", +"bykle.no", +"barum.no", +"bærum.no", +"bo.telemark.no", +"bø.telemark.no", +"bo.nordland.no", +"bø.nordland.no", +"bievat.no", +"bievát.no", +"bomlo.no", +"bømlo.no", +"batsfjord.no", +"båtsfjord.no", +"bahcavuotna.no", +"báhcavuotna.no", +"dovre.no", +"drammen.no", +"drangedal.no", +"dyroy.no", +"dyrøy.no", +"donna.no", +"dønna.no", +"eid.no", +"eidfjord.no", +"eidsberg.no", +"eidskog.no", +"eidsvoll.no", +"eigersund.no", +"elverum.no", +"enebakk.no", +"engerdal.no", +"etne.no", +"etnedal.no", +"evenes.no", +"evenassi.no", +"evenášši.no", +"evje-og-hornnes.no", +"farsund.no", +"fauske.no", +"fuossko.no", +"fuoisku.no", +"fedje.no", +"fet.no", +"finnoy.no", +"finnøy.no", +"fitjar.no", +"fjaler.no", +"fjell.no", +"flakstad.no", +"flatanger.no", +"flekkefjord.no", +"flesberg.no", +"flora.no", +"fla.no", +"flå.no", +"folldal.no", +"forsand.no", +"fosnes.no", +"frei.no", +"frogn.no", +"froland.no", +"frosta.no", +"frana.no", +"fræna.no", +"froya.no", +"frøya.no", +"fusa.no", +"fyresdal.no", +"forde.no", +"førde.no", +"gamvik.no", +"gangaviika.no", +"gáŋgaviika.no", +"gaular.no", +"gausdal.no", +"gildeskal.no", +"gildeskål.no", +"giske.no", +"gjemnes.no", +"gjerdrum.no", +"gjerstad.no", +"gjesdal.no", +"gjovik.no", +"gjøvik.no", +"gloppen.no", +"gol.no", +"gran.no", +"grane.no", +"granvin.no", +"gratangen.no", +"grimstad.no", +"grong.no", +"kraanghke.no", +"kråanghke.no", +"grue.no", +"gulen.no", +"hadsel.no", +"halden.no", +"halsa.no", +"hamar.no", +"hamaroy.no", +"habmer.no", +"hábmer.no", +"hapmir.no", +"hápmir.no", +"hammerfest.no", +"hammarfeasta.no", +"hámmárfeasta.no", +"haram.no", +"hareid.no", +"harstad.no", +"hasvik.no", +"aknoluokta.no", +"ákŋoluokta.no", +"hattfjelldal.no", +"aarborte.no", +"haugesund.no", +"hemne.no", +"hemnes.no", +"hemsedal.no", +"heroy.more-og-romsdal.no", +"herøy.møre-og-romsdal.no", +"heroy.nordland.no", +"herøy.nordland.no", +"hitra.no", +"hjartdal.no", +"hjelmeland.no", +"hobol.no", +"hobøl.no", +"hof.no", +"hol.no", +"hole.no", +"holmestrand.no", +"holtalen.no", +"holtålen.no", +"hornindal.no", +"horten.no", +"hurdal.no", +"hurum.no", +"hvaler.no", +"hyllestad.no", +"hagebostad.no", +"hægebostad.no", +"hoyanger.no", +"høyanger.no", +"hoylandet.no", +"høylandet.no", +"ha.no", +"hå.no", +"ibestad.no", +"inderoy.no", +"inderøy.no", +"iveland.no", +"jevnaker.no", +"jondal.no", +"jolster.no", +"jølster.no", +"karasjok.no", +"karasjohka.no", +"kárášjohka.no", +"karlsoy.no", +"galsa.no", +"gálsá.no", +"karmoy.no", +"karmøy.no", +"kautokeino.no", +"guovdageaidnu.no", +"klepp.no", +"klabu.no", +"klæbu.no", +"kongsberg.no", +"kongsvinger.no", +"kragero.no", +"kragerø.no", +"kristiansand.no", +"kristiansund.no", +"krodsherad.no", +"krødsherad.no", +"kvalsund.no", +"rahkkeravju.no", +"ráhkkerávju.no", +"kvam.no", +"kvinesdal.no", +"kvinnherad.no", +"kviteseid.no", +"kvitsoy.no", +"kvitsøy.no", +"kvafjord.no", +"kvæfjord.no", +"giehtavuoatna.no", +"kvanangen.no", +"kvænangen.no", +"navuotna.no", +"návuotna.no", +"kafjord.no", +"kåfjord.no", +"gaivuotna.no", +"gáivuotna.no", +"larvik.no", +"lavangen.no", +"lavagis.no", +"loabat.no", +"loabát.no", +"lebesby.no", +"davvesiida.no", +"leikanger.no", +"leirfjord.no", +"leka.no", +"leksvik.no", +"lenvik.no", +"leangaviika.no", +"leaŋgaviika.no", +"lesja.no", +"levanger.no", +"lier.no", +"lierne.no", +"lillehammer.no", +"lillesand.no", +"lindesnes.no", +"lindas.no", +"lindås.no", +"lom.no", +"loppa.no", +"lahppi.no", +"láhppi.no", +"lund.no", +"lunner.no", +"luroy.no", +"lurøy.no", +"luster.no", +"lyngdal.no", +"lyngen.no", +"ivgu.no", +"lardal.no", +"lerdal.no", +"lærdal.no", +"lodingen.no", +"lødingen.no", +"lorenskog.no", +"lørenskog.no", +"loten.no", +"løten.no", +"malvik.no", +"masoy.no", +"måsøy.no", +"muosat.no", +"muosát.no", +"mandal.no", +"marker.no", +"marnardal.no", +"masfjorden.no", +"meland.no", +"meldal.no", +"melhus.no", +"meloy.no", +"meløy.no", +"meraker.no", +"meråker.no", +"moareke.no", +"moåreke.no", +"midsund.no", +"midtre-gauldal.no", +"modalen.no", +"modum.no", +"molde.no", +"moskenes.no", +"moss.no", +"mosvik.no", +"malselv.no", +"målselv.no", +"malatvuopmi.no", +"málatvuopmi.no", +"namdalseid.no", +"aejrie.no", +"namsos.no", +"namsskogan.no", +"naamesjevuemie.no", +"nååmesjevuemie.no", +"laakesvuemie.no", +"nannestad.no", +"narvik.no", +"narviika.no", +"naustdal.no", +"nedre-eiker.no", +"nes.akershus.no", +"nes.buskerud.no", +"nesna.no", +"nesodden.no", +"nesseby.no", +"unjarga.no", +"unjárga.no", +"nesset.no", +"nissedal.no", +"nittedal.no", +"nord-aurdal.no", +"nord-fron.no", +"nord-odal.no", +"norddal.no", +"nordkapp.no", +"davvenjarga.no", +"davvenjárga.no", +"nordre-land.no", +"nordreisa.no", +"raisa.no", +"ráisa.no", +"nore-og-uvdal.no", +"notodden.no", +"naroy.no", +"nærøy.no", +"notteroy.no", +"nøtterøy.no", +"odda.no", +"oksnes.no", +"øksnes.no", +"oppdal.no", +"oppegard.no", +"oppegård.no", +"orkdal.no", +"orland.no", +"ørland.no", +"orskog.no", +"ørskog.no", +"orsta.no", +"ørsta.no", +"os.hedmark.no", +"os.hordaland.no", +"osen.no", +"osteroy.no", +"osterøy.no", +"ostre-toten.no", +"østre-toten.no", +"overhalla.no", +"ovre-eiker.no", +"øvre-eiker.no", +"oyer.no", +"øyer.no", +"oygarden.no", +"øygarden.no", +"oystre-slidre.no", +"øystre-slidre.no", +"porsanger.no", +"porsangu.no", +"porsáŋgu.no", +"porsgrunn.no", +"radoy.no", +"radøy.no", +"rakkestad.no", +"rana.no", +"ruovat.no", +"randaberg.no", +"rauma.no", +"rendalen.no", +"rennebu.no", +"rennesoy.no", +"rennesøy.no", +"rindal.no", +"ringebu.no", +"ringerike.no", +"ringsaker.no", +"rissa.no", +"risor.no", +"risør.no", +"roan.no", +"rollag.no", +"rygge.no", +"ralingen.no", +"rælingen.no", +"rodoy.no", +"rødøy.no", +"romskog.no", +"rømskog.no", +"roros.no", +"røros.no", +"rost.no", +"røst.no", +"royken.no", +"røyken.no", +"royrvik.no", +"røyrvik.no", +"rade.no", +"råde.no", +"salangen.no", +"siellak.no", +"saltdal.no", +"salat.no", +"sálát.no", +"sálat.no", +"samnanger.no", +"sande.more-og-romsdal.no", +"sande.møre-og-romsdal.no", +"sande.vestfold.no", +"sandefjord.no", +"sandnes.no", +"sandoy.no", +"sandøy.no", +"sarpsborg.no", +"sauda.no", +"sauherad.no", +"sel.no", +"selbu.no", +"selje.no", +"seljord.no", +"sigdal.no", +"siljan.no", +"sirdal.no", +"skaun.no", +"skedsmo.no", +"ski.no", +"skien.no", +"skiptvet.no", +"skjervoy.no", +"skjervøy.no", +"skierva.no", +"skiervá.no", +"skjak.no", +"skjåk.no", +"skodje.no", +"skanland.no", +"skånland.no", +"skanit.no", +"skánit.no", +"smola.no", +"smøla.no", +"snillfjord.no", +"snasa.no", +"snåsa.no", +"snoasa.no", +"snaase.no", +"snåase.no", +"sogndal.no", +"sokndal.no", +"sola.no", +"solund.no", +"songdalen.no", +"sortland.no", +"spydeberg.no", +"stange.no", +"stavanger.no", +"steigen.no", +"steinkjer.no", +"stjordal.no", +"stjørdal.no", +"stokke.no", +"stor-elvdal.no", +"stord.no", +"stordal.no", +"storfjord.no", +"omasvuotna.no", +"strand.no", +"stranda.no", +"stryn.no", +"sula.no", +"suldal.no", +"sund.no", +"sunndal.no", +"surnadal.no", +"sveio.no", +"svelvik.no", +"sykkylven.no", +"sogne.no", +"søgne.no", +"somna.no", +"sømna.no", +"sondre-land.no", +"søndre-land.no", +"sor-aurdal.no", +"sør-aurdal.no", +"sor-fron.no", +"sør-fron.no", +"sor-odal.no", +"sør-odal.no", +"sor-varanger.no", +"sør-varanger.no", +"matta-varjjat.no", +"mátta-várjjat.no", +"sorfold.no", +"sørfold.no", +"sorreisa.no", +"sørreisa.no", +"sorum.no", +"sørum.no", +"tana.no", +"deatnu.no", +"time.no", +"tingvoll.no", +"tinn.no", +"tjeldsund.no", +"dielddanuorri.no", +"tjome.no", +"tjøme.no", +"tokke.no", +"tolga.no", +"torsken.no", +"tranoy.no", +"tranøy.no", +"tromso.no", +"tromsø.no", +"tromsa.no", +"romsa.no", +"trondheim.no", +"troandin.no", +"trysil.no", +"trana.no", +"træna.no", +"trogstad.no", +"trøgstad.no", +"tvedestrand.no", +"tydal.no", +"tynset.no", +"tysfjord.no", +"divtasvuodna.no", +"divttasvuotna.no", +"tysnes.no", +"tysvar.no", +"tysvær.no", +"tonsberg.no", +"tønsberg.no", +"ullensaker.no", +"ullensvang.no", +"ulvik.no", +"utsira.no", +"vadso.no", +"vadsø.no", +"cahcesuolo.no", +"čáhcesuolo.no", +"vaksdal.no", +"valle.no", +"vang.no", +"vanylven.no", +"vardo.no", +"vardø.no", +"varggat.no", +"várggát.no", +"vefsn.no", +"vaapste.no", +"vega.no", +"vegarshei.no", +"vegårshei.no", +"vennesla.no", +"verdal.no", +"verran.no", +"vestby.no", +"vestnes.no", +"vestre-slidre.no", +"vestre-toten.no", +"vestvagoy.no", +"vestvågøy.no", +"vevelstad.no", +"vik.no", +"vikna.no", +"vindafjord.no", +"volda.no", +"voss.no", +"varoy.no", +"værøy.no", +"vagan.no", +"vågan.no", +"voagat.no", +"vagsoy.no", +"vågsøy.no", +"vaga.no", +"vågå.no", +"valer.ostfold.no", +"våler.østfold.no", +"valer.hedmark.no", +"våler.hedmark.no", +"*.np", +"nr", +"biz.nr", +"info.nr", +"gov.nr", +"edu.nr", +"org.nr", +"net.nr", +"com.nr", +"nu", +"nz", +"ac.nz", +"co.nz", +"cri.nz", +"geek.nz", +"gen.nz", +"govt.nz", +"health.nz", +"iwi.nz", +"kiwi.nz", +"maori.nz", +"mil.nz", +"māori.nz", +"net.nz", +"org.nz", +"parliament.nz", +"school.nz", +"om", +"co.om", +"com.om", +"edu.om", +"gov.om", +"med.om", +"museum.om", +"net.om", +"org.om", +"pro.om", +"onion", +"org", +"pa", +"ac.pa", +"gob.pa", +"com.pa", +"org.pa", +"sld.pa", +"edu.pa", +"net.pa", +"ing.pa", +"abo.pa", +"med.pa", +"nom.pa", +"pe", +"edu.pe", +"gob.pe", +"nom.pe", +"mil.pe", +"org.pe", +"com.pe", +"net.pe", +"pf", +"com.pf", +"org.pf", +"edu.pf", +"*.pg", +"ph", +"com.ph", +"net.ph", +"org.ph", +"gov.ph", +"edu.ph", +"ngo.ph", +"mil.ph", +"i.ph", +"pk", +"com.pk", +"net.pk", +"edu.pk", +"org.pk", +"fam.pk", +"biz.pk", +"web.pk", +"gov.pk", +"gob.pk", +"gok.pk", +"gon.pk", +"gop.pk", +"gos.pk", +"info.pk", +"pl", +"com.pl", +"net.pl", +"org.pl", +"aid.pl", +"agro.pl", +"atm.pl", +"auto.pl", +"biz.pl", +"edu.pl", +"gmina.pl", +"gsm.pl", +"info.pl", +"mail.pl", +"miasta.pl", +"media.pl", +"mil.pl", +"nieruchomosci.pl", +"nom.pl", +"pc.pl", +"powiat.pl", +"priv.pl", +"realestate.pl", +"rel.pl", +"sex.pl", +"shop.pl", +"sklep.pl", +"sos.pl", +"szkola.pl", +"targi.pl", +"tm.pl", +"tourism.pl", +"travel.pl", +"turystyka.pl", +"gov.pl", +"ap.gov.pl", +"ic.gov.pl", +"is.gov.pl", +"us.gov.pl", +"kmpsp.gov.pl", +"kppsp.gov.pl", +"kwpsp.gov.pl", +"psp.gov.pl", +"wskr.gov.pl", +"kwp.gov.pl", +"mw.gov.pl", +"ug.gov.pl", +"um.gov.pl", +"umig.gov.pl", +"ugim.gov.pl", +"upow.gov.pl", +"uw.gov.pl", +"starostwo.gov.pl", +"pa.gov.pl", +"po.gov.pl", +"psse.gov.pl", +"pup.gov.pl", +"rzgw.gov.pl", +"sa.gov.pl", +"so.gov.pl", +"sr.gov.pl", +"wsa.gov.pl", +"sko.gov.pl", +"uzs.gov.pl", +"wiih.gov.pl", +"winb.gov.pl", +"pinb.gov.pl", +"wios.gov.pl", +"witd.gov.pl", +"wzmiuw.gov.pl", +"piw.gov.pl", +"wiw.gov.pl", +"griw.gov.pl", +"wif.gov.pl", +"oum.gov.pl", +"sdn.gov.pl", +"zp.gov.pl", +"uppo.gov.pl", +"mup.gov.pl", +"wuoz.gov.pl", +"konsulat.gov.pl", +"oirm.gov.pl", +"augustow.pl", +"babia-gora.pl", +"bedzin.pl", +"beskidy.pl", +"bialowieza.pl", +"bialystok.pl", +"bielawa.pl", +"bieszczady.pl", +"boleslawiec.pl", +"bydgoszcz.pl", +"bytom.pl", +"cieszyn.pl", +"czeladz.pl", +"czest.pl", +"dlugoleka.pl", +"elblag.pl", +"elk.pl", +"glogow.pl", +"gniezno.pl", +"gorlice.pl", +"grajewo.pl", +"ilawa.pl", +"jaworzno.pl", +"jelenia-gora.pl", +"jgora.pl", +"kalisz.pl", +"kazimierz-dolny.pl", +"karpacz.pl", +"kartuzy.pl", +"kaszuby.pl", +"katowice.pl", +"kepno.pl", +"ketrzyn.pl", +"klodzko.pl", +"kobierzyce.pl", +"kolobrzeg.pl", +"konin.pl", +"konskowola.pl", +"kutno.pl", +"lapy.pl", +"lebork.pl", +"legnica.pl", +"lezajsk.pl", +"limanowa.pl", +"lomza.pl", +"lowicz.pl", +"lubin.pl", +"lukow.pl", +"malbork.pl", +"malopolska.pl", +"mazowsze.pl", +"mazury.pl", +"mielec.pl", +"mielno.pl", +"mragowo.pl", +"naklo.pl", +"nowaruda.pl", +"nysa.pl", +"olawa.pl", +"olecko.pl", +"olkusz.pl", +"olsztyn.pl", +"opoczno.pl", +"opole.pl", +"ostroda.pl", +"ostroleka.pl", +"ostrowiec.pl", +"ostrowwlkp.pl", +"pila.pl", +"pisz.pl", +"podhale.pl", +"podlasie.pl", +"polkowice.pl", +"pomorze.pl", +"pomorskie.pl", +"prochowice.pl", +"pruszkow.pl", +"przeworsk.pl", +"pulawy.pl", +"radom.pl", +"rawa-maz.pl", +"rybnik.pl", +"rzeszow.pl", +"sanok.pl", +"sejny.pl", +"slask.pl", +"slupsk.pl", +"sosnowiec.pl", +"stalowa-wola.pl", +"skoczow.pl", +"starachowice.pl", +"stargard.pl", +"suwalki.pl", +"swidnica.pl", +"swiebodzin.pl", +"swinoujscie.pl", +"szczecin.pl", +"szczytno.pl", +"tarnobrzeg.pl", +"tgory.pl", +"turek.pl", +"tychy.pl", +"ustka.pl", +"walbrzych.pl", +"warmia.pl", +"warszawa.pl", +"waw.pl", +"wegrow.pl", +"wielun.pl", +"wlocl.pl", +"wloclawek.pl", +"wodzislaw.pl", +"wolomin.pl", +"wroclaw.pl", +"zachpomor.pl", +"zagan.pl", +"zarow.pl", +"zgora.pl", +"zgorzelec.pl", +"pm", +"pn", +"gov.pn", +"co.pn", +"org.pn", +"edu.pn", +"net.pn", +"post", +"pr", +"com.pr", +"net.pr", +"org.pr", +"gov.pr", +"edu.pr", +"isla.pr", +"pro.pr", +"biz.pr", +"info.pr", +"name.pr", +"est.pr", +"prof.pr", +"ac.pr", +"pro", +"aaa.pro", +"aca.pro", +"acct.pro", +"avocat.pro", +"bar.pro", +"cpa.pro", +"eng.pro", +"jur.pro", +"law.pro", +"med.pro", +"recht.pro", +"ps", +"edu.ps", +"gov.ps", +"sec.ps", +"plo.ps", +"com.ps", +"org.ps", +"net.ps", +"pt", +"net.pt", +"gov.pt", +"org.pt", +"edu.pt", +"int.pt", +"publ.pt", +"com.pt", +"nome.pt", +"pw", +"co.pw", +"ne.pw", +"or.pw", +"ed.pw", +"go.pw", +"belau.pw", +"py", +"com.py", +"coop.py", +"edu.py", +"gov.py", +"mil.py", +"net.py", +"org.py", +"qa", +"com.qa", +"edu.qa", +"gov.qa", +"mil.qa", +"name.qa", +"net.qa", +"org.qa", +"sch.qa", +"re", +"asso.re", +"com.re", +"nom.re", +"ro", +"arts.ro", +"com.ro", +"firm.ro", +"info.ro", +"nom.ro", +"nt.ro", +"org.ro", +"rec.ro", +"store.ro", +"tm.ro", +"www.ro", +"rs", +"ac.rs", +"co.rs", +"edu.rs", +"gov.rs", +"in.rs", +"org.rs", +"ru", +"rw", +"ac.rw", +"co.rw", +"coop.rw", +"gov.rw", +"mil.rw", +"net.rw", +"org.rw", +"sa", +"com.sa", +"net.sa", +"org.sa", +"gov.sa", +"med.sa", +"pub.sa", +"edu.sa", +"sch.sa", +"sb", +"com.sb", +"edu.sb", +"gov.sb", +"net.sb", +"org.sb", +"sc", +"com.sc", +"gov.sc", +"net.sc", +"org.sc", +"edu.sc", +"sd", +"com.sd", +"net.sd", +"org.sd", +"edu.sd", +"med.sd", +"tv.sd", +"gov.sd", +"info.sd", +"se", +"a.se", +"ac.se", +"b.se", +"bd.se", +"brand.se", +"c.se", +"d.se", +"e.se", +"f.se", +"fh.se", +"fhsk.se", +"fhv.se", +"g.se", +"h.se", +"i.se", +"k.se", +"komforb.se", +"kommunalforbund.se", +"komvux.se", +"l.se", +"lanbib.se", +"m.se", +"n.se", +"naturbruksgymn.se", +"o.se", +"org.se", +"p.se", +"parti.se", +"pp.se", +"press.se", +"r.se", +"s.se", +"t.se", +"tm.se", +"u.se", +"w.se", +"x.se", +"y.se", +"z.se", +"sg", +"com.sg", +"net.sg", +"org.sg", +"gov.sg", +"edu.sg", +"per.sg", +"sh", +"com.sh", +"net.sh", +"gov.sh", +"org.sh", +"mil.sh", +"si", +"sj", +"sk", +"sl", +"com.sl", +"net.sl", +"edu.sl", +"gov.sl", +"org.sl", +"sm", +"sn", +"art.sn", +"com.sn", +"edu.sn", +"gouv.sn", +"org.sn", +"perso.sn", +"univ.sn", +"so", +"com.so", +"edu.so", +"gov.so", +"me.so", +"net.so", +"org.so", +"sr", +"ss", +"biz.ss", +"com.ss", +"edu.ss", +"gov.ss", +"net.ss", +"org.ss", +"st", +"co.st", +"com.st", +"consulado.st", +"edu.st", +"embaixada.st", +"gov.st", +"mil.st", +"net.st", +"org.st", +"principe.st", +"saotome.st", +"store.st", +"su", +"sv", +"com.sv", +"edu.sv", +"gob.sv", +"org.sv", +"red.sv", +"sx", +"gov.sx", +"sy", +"edu.sy", +"gov.sy", +"net.sy", +"mil.sy", +"com.sy", +"org.sy", +"sz", +"co.sz", +"ac.sz", +"org.sz", +"tc", +"td", +"tel", +"tf", +"tg", +"th", +"ac.th", +"co.th", +"go.th", +"in.th", +"mi.th", +"net.th", +"or.th", +"tj", +"ac.tj", +"biz.tj", +"co.tj", +"com.tj", +"edu.tj", +"go.tj", +"gov.tj", +"int.tj", +"mil.tj", +"name.tj", +"net.tj", +"nic.tj", +"org.tj", +"test.tj", +"web.tj", +"tk", +"tl", +"gov.tl", +"tm", +"com.tm", +"co.tm", +"org.tm", +"net.tm", +"nom.tm", +"gov.tm", +"mil.tm", +"edu.tm", +"tn", +"com.tn", +"ens.tn", +"fin.tn", +"gov.tn", +"ind.tn", +"intl.tn", +"nat.tn", +"net.tn", +"org.tn", +"info.tn", +"perso.tn", +"tourism.tn", +"edunet.tn", +"rnrt.tn", +"rns.tn", +"rnu.tn", +"mincom.tn", +"agrinet.tn", +"defense.tn", +"turen.tn", +"to", +"com.to", +"gov.to", +"net.to", +"org.to", +"edu.to", +"mil.to", +"tr", +"av.tr", +"bbs.tr", +"bel.tr", +"biz.tr", +"com.tr", +"dr.tr", +"edu.tr", +"gen.tr", +"gov.tr", +"info.tr", +"mil.tr", +"k12.tr", +"kep.tr", +"name.tr", +"net.tr", +"org.tr", +"pol.tr", +"tel.tr", +"tsk.tr", +"tv.tr", +"web.tr", +"nc.tr", +"gov.nc.tr", +"tt", +"co.tt", +"com.tt", +"org.tt", +"net.tt", +"biz.tt", +"info.tt", +"pro.tt", +"int.tt", +"coop.tt", +"jobs.tt", +"mobi.tt", +"travel.tt", +"museum.tt", +"aero.tt", +"name.tt", +"gov.tt", +"edu.tt", +"tv", +"tw", +"edu.tw", +"gov.tw", +"mil.tw", +"com.tw", +"net.tw", +"org.tw", +"idv.tw", +"game.tw", +"ebiz.tw", +"club.tw", +"網路.tw", +"組織.tw", +"商業.tw", +"tz", +"ac.tz", +"co.tz", +"go.tz", +"hotel.tz", +"info.tz", +"me.tz", +"mil.tz", +"mobi.tz", +"ne.tz", +"or.tz", +"sc.tz", +"tv.tz", +"ua", +"com.ua", +"edu.ua", +"gov.ua", +"in.ua", +"net.ua", +"org.ua", +"cherkassy.ua", +"cherkasy.ua", +"chernigov.ua", +"chernihiv.ua", +"chernivtsi.ua", +"chernovtsy.ua", +"ck.ua", +"cn.ua", +"cr.ua", +"crimea.ua", +"cv.ua", +"dn.ua", +"dnepropetrovsk.ua", +"dnipropetrovsk.ua", +"dominic.ua", +"donetsk.ua", +"dp.ua", +"if.ua", +"ivano-frankivsk.ua", +"kh.ua", +"kharkiv.ua", +"kharkov.ua", +"kherson.ua", +"khmelnitskiy.ua", +"khmelnytskyi.ua", +"kiev.ua", +"kirovograd.ua", +"km.ua", +"kr.ua", +"krym.ua", +"ks.ua", +"kv.ua", +"kyiv.ua", +"lg.ua", +"lt.ua", +"lugansk.ua", +"lutsk.ua", +"lv.ua", +"lviv.ua", +"mk.ua", +"mykolaiv.ua", +"nikolaev.ua", +"od.ua", +"odesa.ua", +"odessa.ua", +"pl.ua", +"poltava.ua", +"rivne.ua", +"rovno.ua", +"rv.ua", +"sb.ua", +"sebastopol.ua", +"sevastopol.ua", +"sm.ua", +"sumy.ua", +"te.ua", +"ternopil.ua", +"uz.ua", +"uzhgorod.ua", +"vinnica.ua", +"vinnytsia.ua", +"vn.ua", +"volyn.ua", +"yalta.ua", +"zaporizhzhe.ua", +"zaporizhzhia.ua", +"zhitomir.ua", +"zhytomyr.ua", +"zp.ua", +"zt.ua", +"ug", +"co.ug", +"or.ug", +"ac.ug", +"sc.ug", +"go.ug", +"ne.ug", +"com.ug", +"org.ug", +"uk", +"ac.uk", +"co.uk", +"gov.uk", +"ltd.uk", +"me.uk", +"net.uk", +"nhs.uk", +"org.uk", +"plc.uk", +"police.uk", +"*.sch.uk", +"us", +"dni.us", +"fed.us", +"isa.us", +"kids.us", +"nsn.us", +"ak.us", +"al.us", +"ar.us", +"as.us", +"az.us", +"ca.us", +"co.us", +"ct.us", +"dc.us", +"de.us", +"fl.us", +"ga.us", +"gu.us", +"hi.us", +"ia.us", +"id.us", +"il.us", +"in.us", +"ks.us", +"ky.us", +"la.us", +"ma.us", +"md.us", +"me.us", +"mi.us", +"mn.us", +"mo.us", +"ms.us", +"mt.us", +"nc.us", +"nd.us", +"ne.us", +"nh.us", +"nj.us", +"nm.us", +"nv.us", +"ny.us", +"oh.us", +"ok.us", +"or.us", +"pa.us", +"pr.us", +"ri.us", +"sc.us", +"sd.us", +"tn.us", +"tx.us", +"ut.us", +"vi.us", +"vt.us", +"va.us", +"wa.us", +"wi.us", +"wv.us", +"wy.us", +"k12.ak.us", +"k12.al.us", +"k12.ar.us", +"k12.as.us", +"k12.az.us", +"k12.ca.us", +"k12.co.us", +"k12.ct.us", +"k12.dc.us", +"k12.de.us", +"k12.fl.us", +"k12.ga.us", +"k12.gu.us", +"k12.ia.us", +"k12.id.us", +"k12.il.us", +"k12.in.us", +"k12.ks.us", +"k12.ky.us", +"k12.la.us", +"k12.ma.us", +"k12.md.us", +"k12.me.us", +"k12.mi.us", +"k12.mn.us", +"k12.mo.us", +"k12.ms.us", +"k12.mt.us", +"k12.nc.us", +"k12.ne.us", +"k12.nh.us", +"k12.nj.us", +"k12.nm.us", +"k12.nv.us", +"k12.ny.us", +"k12.oh.us", +"k12.ok.us", +"k12.or.us", +"k12.pa.us", +"k12.pr.us", +"k12.ri.us", +"k12.sc.us", +"k12.tn.us", +"k12.tx.us", +"k12.ut.us", +"k12.vi.us", +"k12.vt.us", +"k12.va.us", +"k12.wa.us", +"k12.wi.us", +"k12.wy.us", +"cc.ak.us", +"cc.al.us", +"cc.ar.us", +"cc.as.us", +"cc.az.us", +"cc.ca.us", +"cc.co.us", +"cc.ct.us", +"cc.dc.us", +"cc.de.us", +"cc.fl.us", +"cc.ga.us", +"cc.gu.us", +"cc.hi.us", +"cc.ia.us", +"cc.id.us", +"cc.il.us", +"cc.in.us", +"cc.ks.us", +"cc.ky.us", +"cc.la.us", +"cc.ma.us", +"cc.md.us", +"cc.me.us", +"cc.mi.us", +"cc.mn.us", +"cc.mo.us", +"cc.ms.us", +"cc.mt.us", +"cc.nc.us", +"cc.nd.us", +"cc.ne.us", +"cc.nh.us", +"cc.nj.us", +"cc.nm.us", +"cc.nv.us", +"cc.ny.us", +"cc.oh.us", +"cc.ok.us", +"cc.or.us", +"cc.pa.us", +"cc.pr.us", +"cc.ri.us", +"cc.sc.us", +"cc.sd.us", +"cc.tn.us", +"cc.tx.us", +"cc.ut.us", +"cc.vi.us", +"cc.vt.us", +"cc.va.us", +"cc.wa.us", +"cc.wi.us", +"cc.wv.us", +"cc.wy.us", +"lib.ak.us", +"lib.al.us", +"lib.ar.us", +"lib.as.us", +"lib.az.us", +"lib.ca.us", +"lib.co.us", +"lib.ct.us", +"lib.dc.us", +"lib.fl.us", +"lib.ga.us", +"lib.gu.us", +"lib.hi.us", +"lib.ia.us", +"lib.id.us", +"lib.il.us", +"lib.in.us", +"lib.ks.us", +"lib.ky.us", +"lib.la.us", +"lib.ma.us", +"lib.md.us", +"lib.me.us", +"lib.mi.us", +"lib.mn.us", +"lib.mo.us", +"lib.ms.us", +"lib.mt.us", +"lib.nc.us", +"lib.nd.us", +"lib.ne.us", +"lib.nh.us", +"lib.nj.us", +"lib.nm.us", +"lib.nv.us", +"lib.ny.us", +"lib.oh.us", +"lib.ok.us", +"lib.or.us", +"lib.pa.us", +"lib.pr.us", +"lib.ri.us", +"lib.sc.us", +"lib.sd.us", +"lib.tn.us", +"lib.tx.us", +"lib.ut.us", +"lib.vi.us", +"lib.vt.us", +"lib.va.us", +"lib.wa.us", +"lib.wi.us", +"lib.wy.us", +"pvt.k12.ma.us", +"chtr.k12.ma.us", +"paroch.k12.ma.us", +"ann-arbor.mi.us", +"cog.mi.us", +"dst.mi.us", +"eaton.mi.us", +"gen.mi.us", +"mus.mi.us", +"tec.mi.us", +"washtenaw.mi.us", +"uy", +"com.uy", +"edu.uy", +"gub.uy", +"mil.uy", +"net.uy", +"org.uy", +"uz", +"co.uz", +"com.uz", +"net.uz", +"org.uz", +"va", +"vc", +"com.vc", +"net.vc", +"org.vc", +"gov.vc", +"mil.vc", +"edu.vc", +"ve", +"arts.ve", +"co.ve", +"com.ve", +"e12.ve", +"edu.ve", +"firm.ve", +"gob.ve", +"gov.ve", +"info.ve", +"int.ve", +"mil.ve", +"net.ve", +"org.ve", +"rec.ve", +"store.ve", +"tec.ve", +"web.ve", +"vg", +"vi", +"co.vi", +"com.vi", +"k12.vi", +"net.vi", +"org.vi", +"vn", +"com.vn", +"net.vn", +"org.vn", +"edu.vn", +"gov.vn", +"int.vn", +"ac.vn", +"biz.vn", +"info.vn", +"name.vn", +"pro.vn", +"health.vn", +"vu", +"com.vu", +"edu.vu", +"net.vu", +"org.vu", +"wf", +"ws", +"com.ws", +"net.ws", +"org.ws", +"gov.ws", +"edu.ws", +"yt", +"امارات", +"հայ", +"বাংলা", +"бг", +"бел", +"中国", +"中國", +"الجزائر", +"مصر", +"ею", +"موريتانيا", +"გე", +"ελ", +"香港", +"公司.香港", +"教育.香港", +"政府.香港", +"個人.香港", +"網絡.香港", +"組織.香港", +"ಭಾರತ", +"ଭାରତ", +"ভাৰত", +"भारतम्", +"भारोत", +"ڀارت", +"ഭാരതം", +"भारत", +"بارت", +"بھارت", +"భారత్", +"ભારત", +"ਭਾਰਤ", +"ভারত", +"இந்தியா", +"ایران", +"ايران", +"عراق", +"الاردن", +"한국", +"қаз", +"ලංකා", +"இலங்கை", +"المغرب", +"мкд", +"мон", +"澳門", +"澳门", +"مليسيا", +"عمان", +"پاکستان", +"پاكستان", +"فلسطين", +"срб", +"пр.срб", +"орг.срб", +"обр.срб", +"од.срб", +"упр.срб", +"ак.срб", +"рф", +"قطر", +"السعودية", +"السعودیة", +"السعودیۃ", +"السعوديه", +"سودان", +"新加坡", +"சிங்கப்பூர்", +"سورية", +"سوريا", +"ไทย", +"ศึกษา.ไทย", +"ธุรกิจ.ไทย", +"รัฐบาล.ไทย", +"ทหาร.ไทย", +"เน็ต.ไทย", +"องค์กร.ไทย", +"تونس", +"台灣", +"台湾", +"臺灣", +"укр", +"اليمن", +"xxx", +"*.ye", +"ac.za", +"agric.za", +"alt.za", +"co.za", +"edu.za", +"gov.za", +"grondar.za", +"law.za", +"mil.za", +"net.za", +"ngo.za", +"nic.za", +"nis.za", +"nom.za", +"org.za", +"school.za", +"tm.za", +"web.za", +"zm", +"ac.zm", +"biz.zm", +"co.zm", +"com.zm", +"edu.zm", +"gov.zm", +"info.zm", +"mil.zm", +"net.zm", +"org.zm", +"sch.zm", +"zw", +"ac.zw", +"co.zw", +"gov.zw", +"mil.zw", +"org.zw", +"aaa", +"aarp", +"abarth", +"abb", +"abbott", +"abbvie", +"abc", +"able", +"abogado", +"abudhabi", +"academy", +"accenture", +"accountant", +"accountants", +"aco", +"actor", +"adac", +"ads", +"adult", +"aeg", +"aetna", +"afamilycompany", +"afl", +"africa", +"agakhan", +"agency", +"aig", +"aigo", +"airbus", +"airforce", +"airtel", +"akdn", +"alfaromeo", +"alibaba", +"alipay", +"allfinanz", +"allstate", +"ally", +"alsace", +"alstom", +"amazon", +"americanexpress", +"americanfamily", +"amex", +"amfam", +"amica", +"amsterdam", +"analytics", +"android", +"anquan", +"anz", +"aol", +"apartments", +"app", +"apple", +"aquarelle", +"arab", +"aramco", +"archi", +"army", +"art", +"arte", +"asda", +"associates", +"athleta", +"attorney", +"auction", +"audi", +"audible", +"audio", +"auspost", +"author", +"auto", +"autos", +"avianca", +"aws", +"axa", +"azure", +"baby", +"baidu", +"banamex", +"bananarepublic", +"band", +"bank", +"bar", +"barcelona", +"barclaycard", +"barclays", +"barefoot", +"bargains", +"baseball", +"basketball", +"bauhaus", +"bayern", +"bbc", +"bbt", +"bbva", +"bcg", +"bcn", +"beats", +"beauty", +"beer", +"bentley", +"berlin", +"best", +"bestbuy", +"bet", +"bharti", +"bible", +"bid", +"bike", +"bing", +"bingo", +"bio", +"black", +"blackfriday", +"blockbuster", +"blog", +"bloomberg", +"blue", +"bms", +"bmw", +"bnpparibas", +"boats", +"boehringer", +"bofa", +"bom", +"bond", +"boo", +"book", +"booking", +"bosch", +"bostik", +"boston", +"bot", +"boutique", +"box", +"bradesco", +"bridgestone", +"broadway", +"broker", +"brother", +"brussels", +"budapest", +"bugatti", +"build", +"builders", +"business", +"buy", +"buzz", +"bzh", +"cab", +"cafe", +"cal", +"call", +"calvinklein", +"cam", +"camera", +"camp", +"cancerresearch", +"canon", +"capetown", +"capital", +"capitalone", +"car", +"caravan", +"cards", +"care", +"career", +"careers", +"cars", +"casa", +"case", +"caseih", +"cash", +"casino", +"catering", +"catholic", +"cba", +"cbn", +"cbre", +"cbs", +"ceb", +"center", +"ceo", +"cern", +"cfa", +"cfd", +"chanel", +"channel", +"charity", +"chase", +"chat", +"cheap", +"chintai", +"christmas", +"chrome", +"church", +"cipriani", +"circle", +"cisco", +"citadel", +"citi", +"citic", +"city", +"cityeats", +"claims", +"cleaning", +"click", +"clinic", +"clinique", +"clothing", +"cloud", +"club", +"clubmed", +"coach", +"codes", +"coffee", +"college", +"cologne", +"comcast", +"commbank", +"community", +"company", +"compare", +"computer", +"comsec", +"condos", +"construction", +"consulting", +"contact", +"contractors", +"cooking", +"cookingchannel", +"cool", +"corsica", +"country", +"coupon", +"coupons", +"courses", +"cpa", +"credit", +"creditcard", +"creditunion", +"cricket", +"crown", +"crs", +"cruise", +"cruises", +"csc", +"cuisinella", +"cymru", +"cyou", +"dabur", +"dad", +"dance", +"data", +"date", +"dating", +"datsun", +"day", +"dclk", +"dds", +"deal", +"dealer", +"deals", +"degree", +"delivery", +"dell", +"deloitte", +"delta", +"democrat", +"dental", +"dentist", +"desi", +"design", +"dev", +"dhl", +"diamonds", +"diet", +"digital", +"direct", +"directory", +"discount", +"discover", +"dish", +"diy", +"dnp", +"docs", +"doctor", +"dog", +"domains", +"dot", +"download", +"drive", +"dtv", +"dubai", +"duck", +"dunlop", +"dupont", +"durban", +"dvag", +"dvr", +"earth", +"eat", +"eco", +"edeka", +"education", +"email", +"emerck", +"energy", +"engineer", +"engineering", +"enterprises", +"epson", +"equipment", +"ericsson", +"erni", +"esq", +"estate", +"esurance", +"etisalat", +"eurovision", +"eus", +"events", +"exchange", +"expert", +"exposed", +"express", +"extraspace", +"fage", +"fail", +"fairwinds", +"faith", +"family", +"fan", +"fans", +"farm", +"farmers", +"fashion", +"fast", +"fedex", +"feedback", +"ferrari", +"ferrero", +"fiat", +"fidelity", +"fido", +"film", +"final", +"finance", +"financial", +"fire", +"firestone", +"firmdale", +"fish", +"fishing", +"fit", +"fitness", +"flickr", +"flights", +"flir", +"florist", +"flowers", +"fly", +"foo", +"food", +"foodnetwork", +"football", +"ford", +"forex", +"forsale", +"forum", +"foundation", +"fox", +"free", +"fresenius", +"frl", +"frogans", +"frontdoor", +"frontier", +"ftr", +"fujitsu", +"fujixerox", +"fun", +"fund", +"furniture", +"futbol", +"fyi", +"gal", +"gallery", +"gallo", +"gallup", +"game", +"games", +"gap", +"garden", +"gay", +"gbiz", +"gdn", +"gea", +"gent", +"genting", +"george", +"ggee", +"gift", +"gifts", +"gives", +"giving", +"glade", +"glass", +"gle", +"global", +"globo", +"gmail", +"gmbh", +"gmo", +"gmx", +"godaddy", +"gold", +"goldpoint", +"golf", +"goo", +"goodyear", +"goog", +"google", +"gop", +"got", +"grainger", +"graphics", +"gratis", +"green", +"gripe", +"grocery", +"group", +"guardian", +"gucci", +"guge", +"guide", +"guitars", +"guru", +"hair", +"hamburg", +"hangout", +"haus", +"hbo", +"hdfc", +"hdfcbank", +"health", +"healthcare", +"help", +"helsinki", +"here", +"hermes", +"hgtv", +"hiphop", +"hisamitsu", +"hitachi", +"hiv", +"hkt", +"hockey", +"holdings", +"holiday", +"homedepot", +"homegoods", +"homes", +"homesense", +"honda", +"horse", +"hospital", +"host", +"hosting", +"hot", +"hoteles", +"hotels", +"hotmail", +"house", +"how", +"hsbc", +"hughes", +"hyatt", +"hyundai", +"ibm", +"icbc", +"ice", +"icu", +"ieee", +"ifm", +"ikano", +"imamat", +"imdb", +"immo", +"immobilien", +"inc", +"industries", +"infiniti", +"ing", +"ink", +"institute", +"insurance", +"insure", +"intel", +"international", +"intuit", +"investments", +"ipiranga", +"irish", +"ismaili", +"ist", +"istanbul", +"itau", +"itv", +"iveco", +"jaguar", +"java", +"jcb", +"jcp", +"jeep", +"jetzt", +"jewelry", +"jio", +"jll", +"jmp", +"jnj", +"joburg", +"jot", +"joy", +"jpmorgan", +"jprs", +"juegos", +"juniper", +"kaufen", +"kddi", +"kerryhotels", +"kerrylogistics", +"kerryproperties", +"kfh", +"kia", +"kim", +"kinder", +"kindle", +"kitchen", +"kiwi", +"koeln", +"komatsu", +"kosher", +"kpmg", +"kpn", +"krd", +"kred", +"kuokgroup", +"kyoto", +"lacaixa", +"lamborghini", +"lamer", +"lancaster", +"lancia", +"land", +"landrover", +"lanxess", +"lasalle", +"lat", +"latino", +"latrobe", +"law", +"lawyer", +"lds", +"lease", +"leclerc", +"lefrak", +"legal", +"lego", +"lexus", +"lgbt", +"liaison", +"lidl", +"life", +"lifeinsurance", +"lifestyle", +"lighting", +"like", +"lilly", +"limited", +"limo", +"lincoln", +"linde", +"link", +"lipsy", +"live", +"living", +"lixil", +"llc", +"llp", +"loan", +"loans", +"locker", +"locus", +"loft", +"lol", +"london", +"lotte", +"lotto", +"love", +"lpl", +"lplfinancial", +"ltd", +"ltda", +"lundbeck", +"lupin", +"luxe", +"luxury", +"macys", +"madrid", +"maif", +"maison", +"makeup", +"man", +"management", +"mango", +"map", +"market", +"marketing", +"markets", +"marriott", +"marshalls", +"maserati", +"mattel", +"mba", +"mckinsey", +"med", +"media", +"meet", +"melbourne", +"meme", +"memorial", +"men", +"menu", +"merckmsd", +"metlife", +"miami", +"microsoft", +"mini", +"mint", +"mit", +"mitsubishi", +"mlb", +"mls", +"mma", +"mobile", +"moda", +"moe", +"moi", +"mom", +"monash", +"money", +"monster", +"mormon", +"mortgage", +"moscow", +"moto", +"motorcycles", +"mov", +"movie", +"msd", +"mtn", +"mtr", +"mutual", +"nab", +"nadex", +"nagoya", +"nationwide", +"natura", +"navy", +"nba", +"nec", +"netbank", +"netflix", +"network", +"neustar", +"new", +"newholland", +"news", +"next", +"nextdirect", +"nexus", +"nfl", +"ngo", +"nhk", +"nico", +"nike", +"nikon", +"ninja", +"nissan", +"nissay", +"nokia", +"northwesternmutual", +"norton", +"now", +"nowruz", +"nowtv", +"nra", +"nrw", +"ntt", +"nyc", +"obi", +"observer", +"off", +"office", +"okinawa", +"olayan", +"olayangroup", +"oldnavy", +"ollo", +"omega", +"one", +"ong", +"onl", +"online", +"onyourside", +"ooo", +"open", +"oracle", +"orange", +"organic", +"origins", +"osaka", +"otsuka", +"ott", +"ovh", +"page", +"panasonic", +"paris", +"pars", +"partners", +"parts", +"party", +"passagens", +"pay", +"pccw", +"pet", +"pfizer", +"pharmacy", +"phd", +"philips", +"phone", +"photo", +"photography", +"photos", +"physio", +"pics", +"pictet", +"pictures", +"pid", +"pin", +"ping", +"pink", +"pioneer", +"pizza", +"place", +"play", +"playstation", +"plumbing", +"plus", +"pnc", +"pohl", +"poker", +"politie", +"porn", +"pramerica", +"praxi", +"press", +"prime", +"prod", +"productions", +"prof", +"progressive", +"promo", +"properties", +"property", +"protection", +"pru", +"prudential", +"pub", +"pwc", +"qpon", +"quebec", +"quest", +"qvc", +"racing", +"radio", +"raid", +"read", +"realestate", +"realtor", +"realty", +"recipes", +"red", +"redstone", +"redumbrella", +"rehab", +"reise", +"reisen", +"reit", +"reliance", +"ren", +"rent", +"rentals", +"repair", +"report", +"republican", +"rest", +"restaurant", +"review", +"reviews", +"rexroth", +"rich", +"richardli", +"ricoh", +"rightathome", +"ril", +"rio", +"rip", +"rmit", +"rocher", +"rocks", +"rodeo", +"rogers", +"room", +"rsvp", +"rugby", +"ruhr", +"run", +"rwe", +"ryukyu", +"saarland", +"safe", +"safety", +"sakura", +"sale", +"salon", +"samsclub", +"samsung", +"sandvik", +"sandvikcoromant", +"sanofi", +"sap", +"sarl", +"sas", +"save", +"saxo", +"sbi", +"sbs", +"sca", +"scb", +"schaeffler", +"schmidt", +"scholarships", +"school", +"schule", +"schwarz", +"science", +"scjohnson", +"scor", +"scot", +"search", +"seat", +"secure", +"security", +"seek", +"select", +"sener", +"services", +"ses", +"seven", +"sew", +"sex", +"sexy", +"sfr", +"shangrila", +"sharp", +"shaw", +"shell", +"shia", +"shiksha", +"shoes", +"shop", +"shopping", +"shouji", +"show", +"showtime", +"shriram", +"silk", +"sina", +"singles", +"site", +"ski", +"skin", +"sky", +"skype", +"sling", +"smart", +"smile", +"sncf", +"soccer", +"social", +"softbank", +"software", +"sohu", +"solar", +"solutions", +"song", +"sony", +"soy", +"spa", +"space", +"sport", +"spot", +"spreadbetting", +"srl", +"stada", +"staples", +"star", +"statebank", +"statefarm", +"stc", +"stcgroup", +"stockholm", +"storage", +"store", +"stream", +"studio", +"study", +"style", +"sucks", +"supplies", +"supply", +"support", +"surf", +"surgery", +"suzuki", +"swatch", +"swiftcover", +"swiss", +"sydney", +"symantec", +"systems", +"tab", +"taipei", +"talk", +"taobao", +"target", +"tatamotors", +"tatar", +"tattoo", +"tax", +"taxi", +"tci", +"tdk", +"team", +"tech", +"technology", +"temasek", +"tennis", +"teva", +"thd", +"theater", +"theatre", +"tiaa", +"tickets", +"tienda", +"tiffany", +"tips", +"tires", +"tirol", +"tjmaxx", +"tjx", +"tkmaxx", +"tmall", +"today", +"tokyo", +"tools", +"top", +"toray", +"toshiba", +"total", +"tours", +"town", +"toyota", +"toys", +"trade", +"trading", +"training", +"travel", +"travelchannel", +"travelers", +"travelersinsurance", +"trust", +"trv", +"tube", +"tui", +"tunes", +"tushu", +"tvs", +"ubank", +"ubs", +"unicom", +"university", +"uno", +"uol", +"ups", +"vacations", +"vana", +"vanguard", +"vegas", +"ventures", +"verisign", +"versicherung", +"vet", +"viajes", +"video", +"vig", +"viking", +"villas", +"vin", +"vip", +"virgin", +"visa", +"vision", +"vistaprint", +"viva", +"vivo", +"vlaanderen", +"vodka", +"volkswagen", +"volvo", +"vote", +"voting", +"voto", +"voyage", +"vuelos", +"wales", +"walmart", +"walter", +"wang", +"wanggou", +"watch", +"watches", +"weather", +"weatherchannel", +"webcam", +"weber", +"website", +"wed", +"wedding", +"weibo", +"weir", +"whoswho", +"wien", +"wiki", +"williamhill", +"win", +"windows", +"wine", +"winners", +"wme", +"wolterskluwer", +"woodside", +"work", +"works", +"world", +"wow", +"wtc", +"wtf", +"xbox", +"xerox", +"xfinity", +"xihuan", +"xin", +"कॉम", +"セール", +"佛山", +"慈善", +"集团", +"在线", +"大众汽车", +"点看", +"คอม", +"八卦", +"موقع", +"公益", +"公司", +"香格里拉", +"网站", +"移动", +"我爱你", +"москва", +"католик", +"онлайн", +"сайт", +"联通", +"קום", +"时尚", +"微博", +"淡马锡", +"ファッション", +"орг", +"नेट", +"ストア", +"アマゾン", +"삼성", +"商标", +"商店", +"商城", +"дети", +"ポイント", +"新闻", +"工行", +"家電", +"كوم", +"中文网", +"中信", +"娱乐", +"谷歌", +"電訊盈科", +"购物", +"クラウド", +"通販", +"网店", +"संगठन", +"餐厅", +"网络", +"ком", +"亚马逊", +"诺基亚", +"食品", +"飞利浦", +"手表", +"手机", +"ارامكو", +"العليان", +"اتصالات", +"بازار", +"ابوظبي", +"كاثوليك", +"همراه", +"닷컴", +"政府", +"شبكة", +"بيتك", +"عرب", +"机构", +"组织机构", +"健康", +"招聘", +"рус", +"珠宝", +"大拿", +"みんな", +"グーグル", +"世界", +"書籍", +"网址", +"닷넷", +"コム", +"天主教", +"游戏", +"vermögensberater", +"vermögensberatung", +"企业", +"信息", +"嘉里大酒店", +"嘉里", +"广东", +"政务", +"xyz", +"yachts", +"yahoo", +"yamaxun", +"yandex", +"yodobashi", +"yoga", +"yokohama", +"you", +"youtube", +"yun", +"zappos", +"zara", +"zero", +"zip", +"zone", +"zuerich", +"cc.ua", +"inf.ua", +"ltd.ua", +"adobeaemcloud.com", +"adobeaemcloud.net", +"*.dev.adobeaemcloud.com", +"beep.pl", +"barsy.ca", +"*.compute.estate", +"*.alces.network", +"altervista.org", +"alwaysdata.net", +"cloudfront.net", +"*.compute.amazonaws.com", +"*.compute-1.amazonaws.com", +"*.compute.amazonaws.com.cn", +"us-east-1.amazonaws.com", +"cn-north-1.eb.amazonaws.com.cn", +"cn-northwest-1.eb.amazonaws.com.cn", +"elasticbeanstalk.com", +"ap-northeast-1.elasticbeanstalk.com", +"ap-northeast-2.elasticbeanstalk.com", +"ap-northeast-3.elasticbeanstalk.com", +"ap-south-1.elasticbeanstalk.com", +"ap-southeast-1.elasticbeanstalk.com", +"ap-southeast-2.elasticbeanstalk.com", +"ca-central-1.elasticbeanstalk.com", +"eu-central-1.elasticbeanstalk.com", +"eu-west-1.elasticbeanstalk.com", +"eu-west-2.elasticbeanstalk.com", +"eu-west-3.elasticbeanstalk.com", +"sa-east-1.elasticbeanstalk.com", +"us-east-1.elasticbeanstalk.com", +"us-east-2.elasticbeanstalk.com", +"us-gov-west-1.elasticbeanstalk.com", +"us-west-1.elasticbeanstalk.com", +"us-west-2.elasticbeanstalk.com", +"*.elb.amazonaws.com", +"*.elb.amazonaws.com.cn", +"s3.amazonaws.com", +"s3-ap-northeast-1.amazonaws.com", +"s3-ap-northeast-2.amazonaws.com", +"s3-ap-south-1.amazonaws.com", +"s3-ap-southeast-1.amazonaws.com", +"s3-ap-southeast-2.amazonaws.com", +"s3-ca-central-1.amazonaws.com", +"s3-eu-central-1.amazonaws.com", +"s3-eu-west-1.amazonaws.com", +"s3-eu-west-2.amazonaws.com", +"s3-eu-west-3.amazonaws.com", +"s3-external-1.amazonaws.com", +"s3-fips-us-gov-west-1.amazonaws.com", +"s3-sa-east-1.amazonaws.com", +"s3-us-gov-west-1.amazonaws.com", +"s3-us-east-2.amazonaws.com", +"s3-us-west-1.amazonaws.com", +"s3-us-west-2.amazonaws.com", +"s3.ap-northeast-2.amazonaws.com", +"s3.ap-south-1.amazonaws.com", +"s3.cn-north-1.amazonaws.com.cn", +"s3.ca-central-1.amazonaws.com", +"s3.eu-central-1.amazonaws.com", +"s3.eu-west-2.amazonaws.com", +"s3.eu-west-3.amazonaws.com", +"s3.us-east-2.amazonaws.com", +"s3.dualstack.ap-northeast-1.amazonaws.com", +"s3.dualstack.ap-northeast-2.amazonaws.com", +"s3.dualstack.ap-south-1.amazonaws.com", +"s3.dualstack.ap-southeast-1.amazonaws.com", +"s3.dualstack.ap-southeast-2.amazonaws.com", +"s3.dualstack.ca-central-1.amazonaws.com", +"s3.dualstack.eu-central-1.amazonaws.com", +"s3.dualstack.eu-west-1.amazonaws.com", +"s3.dualstack.eu-west-2.amazonaws.com", +"s3.dualstack.eu-west-3.amazonaws.com", +"s3.dualstack.sa-east-1.amazonaws.com", +"s3.dualstack.us-east-1.amazonaws.com", +"s3.dualstack.us-east-2.amazonaws.com", +"s3-website-us-east-1.amazonaws.com", +"s3-website-us-west-1.amazonaws.com", +"s3-website-us-west-2.amazonaws.com", +"s3-website-ap-northeast-1.amazonaws.com", +"s3-website-ap-southeast-1.amazonaws.com", +"s3-website-ap-southeast-2.amazonaws.com", +"s3-website-eu-west-1.amazonaws.com", +"s3-website-sa-east-1.amazonaws.com", +"s3-website.ap-northeast-2.amazonaws.com", +"s3-website.ap-south-1.amazonaws.com", +"s3-website.ca-central-1.amazonaws.com", +"s3-website.eu-central-1.amazonaws.com", +"s3-website.eu-west-2.amazonaws.com", +"s3-website.eu-west-3.amazonaws.com", +"s3-website.us-east-2.amazonaws.com", +"amsw.nl", +"t3l3p0rt.net", +"tele.amune.org", +"apigee.io", +"on-aptible.com", +"user.aseinet.ne.jp", +"gv.vc", +"d.gv.vc", +"user.party.eus", +"pimienta.org", +"poivron.org", +"potager.org", +"sweetpepper.org", +"myasustor.com", +"myfritz.net", +"*.awdev.ca", +"*.advisor.ws", +"b-data.io", +"backplaneapp.io", +"balena-devices.com", +"app.banzaicloud.io", +"betainabox.com", +"bnr.la", +"blackbaudcdn.net", +"boomla.net", +"boxfuse.io", +"square7.ch", +"bplaced.com", +"bplaced.de", +"square7.de", +"bplaced.net", +"square7.net", +"browsersafetymark.io", +"uk0.bigv.io", +"dh.bytemark.co.uk", +"vm.bytemark.co.uk", +"mycd.eu", +"carrd.co", +"crd.co", +"uwu.ai", +"ae.org", +"ar.com", +"br.com", +"cn.com", +"com.de", +"com.se", +"de.com", +"eu.com", +"gb.com", +"gb.net", +"hu.com", +"hu.net", +"jp.net", +"jpn.com", +"kr.com", +"mex.com", +"no.com", +"qc.com", +"ru.com", +"sa.com", +"se.net", +"uk.com", +"uk.net", +"us.com", +"uy.com", +"za.bz", +"za.com", +"africa.com", +"gr.com", +"in.net", +"us.org", +"co.com", +"c.la", +"certmgr.org", +"xenapponazure.com", +"discourse.group", +"virtueeldomein.nl", +"cleverapps.io", +"*.lcl.dev", +"*.stg.dev", +"c66.me", +"cloud66.ws", +"cloud66.zone", +"jdevcloud.com", +"wpdevcloud.com", +"cloudaccess.host", +"freesite.host", +"cloudaccess.net", +"cloudcontrolled.com", +"cloudcontrolapp.com", +"cloudera.site", +"trycloudflare.com", +"workers.dev", +"wnext.app", +"co.ca", +"*.otap.co", +"co.cz", +"c.cdn77.org", +"cdn77-ssl.net", +"r.cdn77.net", +"rsc.cdn77.org", +"ssl.origin.cdn77-secure.org", +"cloudns.asia", +"cloudns.biz", +"cloudns.club", +"cloudns.cc", +"cloudns.eu", +"cloudns.in", +"cloudns.info", +"cloudns.org", +"cloudns.pro", +"cloudns.pw", +"cloudns.us", +"cloudeity.net", +"cnpy.gdn", +"co.nl", +"co.no", +"webhosting.be", +"hosting-cluster.nl", +"ac.ru", +"edu.ru", +"gov.ru", +"int.ru", +"mil.ru", +"test.ru", +"dyn.cosidns.de", +"dynamisches-dns.de", +"dnsupdater.de", +"internet-dns.de", +"l-o-g-i-n.de", +"dynamic-dns.info", +"feste-ip.net", +"knx-server.net", +"static-access.net", +"realm.cz", +"*.cryptonomic.net", +"cupcake.is", +"*.customer-oci.com", +"*.oci.customer-oci.com", +"*.ocp.customer-oci.com", +"*.ocs.customer-oci.com", +"cyon.link", +"cyon.site", +"daplie.me", +"localhost.daplie.me", +"dattolocal.com", +"dattorelay.com", +"dattoweb.com", +"mydatto.com", +"dattolocal.net", +"mydatto.net", +"biz.dk", +"co.dk", +"firm.dk", +"reg.dk", +"store.dk", +"*.dapps.earth", +"*.bzz.dapps.earth", +"builtwithdark.com", +"edgestack.me", +"debian.net", +"dedyn.io", +"dnshome.de", +"online.th", +"shop.th", +"drayddns.com", +"dreamhosters.com", +"mydrobo.com", +"drud.io", +"drud.us", +"duckdns.org", +"dy.fi", +"tunk.org", +"dyndns-at-home.com", +"dyndns-at-work.com", +"dyndns-blog.com", +"dyndns-free.com", +"dyndns-home.com", +"dyndns-ip.com", +"dyndns-mail.com", +"dyndns-office.com", +"dyndns-pics.com", +"dyndns-remote.com", +"dyndns-server.com", +"dyndns-web.com", +"dyndns-wiki.com", +"dyndns-work.com", +"dyndns.biz", +"dyndns.info", +"dyndns.org", +"dyndns.tv", +"at-band-camp.net", +"ath.cx", +"barrel-of-knowledge.info", +"barrell-of-knowledge.info", +"better-than.tv", +"blogdns.com", +"blogdns.net", +"blogdns.org", +"blogsite.org", +"boldlygoingnowhere.org", +"broke-it.net", +"buyshouses.net", +"cechire.com", +"dnsalias.com", +"dnsalias.net", +"dnsalias.org", +"dnsdojo.com", +"dnsdojo.net", +"dnsdojo.org", +"does-it.net", +"doesntexist.com", +"doesntexist.org", +"dontexist.com", +"dontexist.net", +"dontexist.org", +"doomdns.com", +"doomdns.org", +"dvrdns.org", +"dyn-o-saur.com", +"dynalias.com", +"dynalias.net", +"dynalias.org", +"dynathome.net", +"dyndns.ws", +"endofinternet.net", +"endofinternet.org", +"endoftheinternet.org", +"est-a-la-maison.com", +"est-a-la-masion.com", +"est-le-patron.com", +"est-mon-blogueur.com", +"for-better.biz", +"for-more.biz", +"for-our.info", +"for-some.biz", +"for-the.biz", +"forgot.her.name", +"forgot.his.name", +"from-ak.com", +"from-al.com", +"from-ar.com", +"from-az.net", +"from-ca.com", +"from-co.net", +"from-ct.com", +"from-dc.com", +"from-de.com", +"from-fl.com", +"from-ga.com", +"from-hi.com", +"from-ia.com", +"from-id.com", +"from-il.com", +"from-in.com", +"from-ks.com", +"from-ky.com", +"from-la.net", +"from-ma.com", +"from-md.com", +"from-me.org", +"from-mi.com", +"from-mn.com", +"from-mo.com", +"from-ms.com", +"from-mt.com", +"from-nc.com", +"from-nd.com", +"from-ne.com", +"from-nh.com", +"from-nj.com", +"from-nm.com", +"from-nv.com", +"from-ny.net", +"from-oh.com", +"from-ok.com", +"from-or.com", +"from-pa.com", +"from-pr.com", +"from-ri.com", +"from-sc.com", +"from-sd.com", +"from-tn.com", +"from-tx.com", +"from-ut.com", +"from-va.com", +"from-vt.com", +"from-wa.com", +"from-wi.com", +"from-wv.com", +"from-wy.com", +"ftpaccess.cc", +"fuettertdasnetz.de", +"game-host.org", +"game-server.cc", +"getmyip.com", +"gets-it.net", +"go.dyndns.org", +"gotdns.com", +"gotdns.org", +"groks-the.info", +"groks-this.info", +"ham-radio-op.net", +"here-for-more.info", +"hobby-site.com", +"hobby-site.org", +"home.dyndns.org", +"homedns.org", +"homeftp.net", +"homeftp.org", +"homeip.net", +"homelinux.com", +"homelinux.net", +"homelinux.org", +"homeunix.com", +"homeunix.net", +"homeunix.org", +"iamallama.com", +"in-the-band.net", +"is-a-anarchist.com", +"is-a-blogger.com", +"is-a-bookkeeper.com", +"is-a-bruinsfan.org", +"is-a-bulls-fan.com", +"is-a-candidate.org", +"is-a-caterer.com", +"is-a-celticsfan.org", +"is-a-chef.com", +"is-a-chef.net", +"is-a-chef.org", +"is-a-conservative.com", +"is-a-cpa.com", +"is-a-cubicle-slave.com", +"is-a-democrat.com", +"is-a-designer.com", +"is-a-doctor.com", +"is-a-financialadvisor.com", +"is-a-geek.com", +"is-a-geek.net", +"is-a-geek.org", +"is-a-green.com", +"is-a-guru.com", +"is-a-hard-worker.com", +"is-a-hunter.com", +"is-a-knight.org", +"is-a-landscaper.com", +"is-a-lawyer.com", +"is-a-liberal.com", +"is-a-libertarian.com", +"is-a-linux-user.org", +"is-a-llama.com", +"is-a-musician.com", +"is-a-nascarfan.com", +"is-a-nurse.com", +"is-a-painter.com", +"is-a-patsfan.org", +"is-a-personaltrainer.com", +"is-a-photographer.com", +"is-a-player.com", +"is-a-republican.com", +"is-a-rockstar.com", +"is-a-socialist.com", +"is-a-soxfan.org", +"is-a-student.com", +"is-a-teacher.com", +"is-a-techie.com", +"is-a-therapist.com", +"is-an-accountant.com", +"is-an-actor.com", +"is-an-actress.com", +"is-an-anarchist.com", +"is-an-artist.com", +"is-an-engineer.com", +"is-an-entertainer.com", +"is-by.us", +"is-certified.com", +"is-found.org", +"is-gone.com", +"is-into-anime.com", +"is-into-cars.com", +"is-into-cartoons.com", +"is-into-games.com", +"is-leet.com", +"is-lost.org", +"is-not-certified.com", +"is-saved.org", +"is-slick.com", +"is-uberleet.com", +"is-very-bad.org", +"is-very-evil.org", +"is-very-good.org", +"is-very-nice.org", +"is-very-sweet.org", +"is-with-theband.com", +"isa-geek.com", +"isa-geek.net", +"isa-geek.org", +"isa-hockeynut.com", +"issmarterthanyou.com", +"isteingeek.de", +"istmein.de", +"kicks-ass.net", +"kicks-ass.org", +"knowsitall.info", +"land-4-sale.us", +"lebtimnetz.de", +"leitungsen.de", +"likes-pie.com", +"likescandy.com", +"merseine.nu", +"mine.nu", +"misconfused.org", +"mypets.ws", +"myphotos.cc", +"neat-url.com", +"office-on-the.net", +"on-the-web.tv", +"podzone.net", +"podzone.org", +"readmyblog.org", +"saves-the-whales.com", +"scrapper-site.net", +"scrapping.cc", +"selfip.biz", +"selfip.com", +"selfip.info", +"selfip.net", +"selfip.org", +"sells-for-less.com", +"sells-for-u.com", +"sells-it.net", +"sellsyourhome.org", +"servebbs.com", +"servebbs.net", +"servebbs.org", +"serveftp.net", +"serveftp.org", +"servegame.org", +"shacknet.nu", +"simple-url.com", +"space-to-rent.com", +"stuff-4-sale.org", +"stuff-4-sale.us", +"teaches-yoga.com", +"thruhere.net", +"traeumtgerade.de", +"webhop.biz", +"webhop.info", +"webhop.net", +"webhop.org", +"worse-than.tv", +"writesthisblog.com", +"ddnss.de", +"dyn.ddnss.de", +"dyndns.ddnss.de", +"dyndns1.de", +"dyn-ip24.de", +"home-webserver.de", +"dyn.home-webserver.de", +"myhome-server.de", +"ddnss.org", +"definima.net", +"definima.io", +"bci.dnstrace.pro", +"ddnsfree.com", +"ddnsgeek.com", +"giize.com", +"gleeze.com", +"kozow.com", +"loseyourip.com", +"ooguy.com", +"theworkpc.com", +"casacam.net", +"dynu.net", +"accesscam.org", +"camdvr.org", +"freeddns.org", +"mywire.org", +"webredirect.org", +"myddns.rocks", +"blogsite.xyz", +"dynv6.net", +"e4.cz", +"en-root.fr", +"mytuleap.com", +"onred.one", +"staging.onred.one", +"enonic.io", +"customer.enonic.io", +"eu.org", +"al.eu.org", +"asso.eu.org", +"at.eu.org", +"au.eu.org", +"be.eu.org", +"bg.eu.org", +"ca.eu.org", +"cd.eu.org", +"ch.eu.org", +"cn.eu.org", +"cy.eu.org", +"cz.eu.org", +"de.eu.org", +"dk.eu.org", +"edu.eu.org", +"ee.eu.org", +"es.eu.org", +"fi.eu.org", +"fr.eu.org", +"gr.eu.org", +"hr.eu.org", +"hu.eu.org", +"ie.eu.org", +"il.eu.org", +"in.eu.org", +"int.eu.org", +"is.eu.org", +"it.eu.org", +"jp.eu.org", +"kr.eu.org", +"lt.eu.org", +"lu.eu.org", +"lv.eu.org", +"mc.eu.org", +"me.eu.org", +"mk.eu.org", +"mt.eu.org", +"my.eu.org", +"net.eu.org", +"ng.eu.org", +"nl.eu.org", +"no.eu.org", +"nz.eu.org", +"paris.eu.org", +"pl.eu.org", +"pt.eu.org", +"q-a.eu.org", +"ro.eu.org", +"ru.eu.org", +"se.eu.org", +"si.eu.org", +"sk.eu.org", +"tr.eu.org", +"uk.eu.org", +"us.eu.org", +"eu-1.evennode.com", +"eu-2.evennode.com", +"eu-3.evennode.com", +"eu-4.evennode.com", +"us-1.evennode.com", +"us-2.evennode.com", +"us-3.evennode.com", +"us-4.evennode.com", +"twmail.cc", +"twmail.net", +"twmail.org", +"mymailer.com.tw", +"url.tw", +"apps.fbsbx.com", +"ru.net", +"adygeya.ru", +"bashkiria.ru", +"bir.ru", +"cbg.ru", +"com.ru", +"dagestan.ru", +"grozny.ru", +"kalmykia.ru", +"kustanai.ru", +"marine.ru", +"mordovia.ru", +"msk.ru", +"mytis.ru", +"nalchik.ru", +"nov.ru", +"pyatigorsk.ru", +"spb.ru", +"vladikavkaz.ru", +"vladimir.ru", +"abkhazia.su", +"adygeya.su", +"aktyubinsk.su", +"arkhangelsk.su", +"armenia.su", +"ashgabad.su", +"azerbaijan.su", +"balashov.su", +"bashkiria.su", +"bryansk.su", +"bukhara.su", +"chimkent.su", +"dagestan.su", +"east-kazakhstan.su", +"exnet.su", +"georgia.su", +"grozny.su", +"ivanovo.su", +"jambyl.su", +"kalmykia.su", +"kaluga.su", +"karacol.su", +"karaganda.su", +"karelia.su", +"khakassia.su", +"krasnodar.su", +"kurgan.su", +"kustanai.su", +"lenug.su", +"mangyshlak.su", +"mordovia.su", +"msk.su", +"murmansk.su", +"nalchik.su", +"navoi.su", +"north-kazakhstan.su", +"nov.su", +"obninsk.su", +"penza.su", +"pokrovsk.su", +"sochi.su", +"spb.su", +"tashkent.su", +"termez.su", +"togliatti.su", +"troitsk.su", +"tselinograd.su", +"tula.su", +"tuva.su", +"vladikavkaz.su", +"vladimir.su", +"vologda.su", +"channelsdvr.net", +"fastly-terrarium.com", +"fastlylb.net", +"map.fastlylb.net", +"freetls.fastly.net", +"map.fastly.net", +"a.prod.fastly.net", +"global.prod.fastly.net", +"a.ssl.fastly.net", +"b.ssl.fastly.net", +"global.ssl.fastly.net", +"fastpanel.direct", +"fastvps-server.com", +"fhapp.xyz", +"fedorainfracloud.org", +"fedorapeople.org", +"cloud.fedoraproject.org", +"app.os.fedoraproject.org", +"app.os.stg.fedoraproject.org", +"mydobiss.com", +"filegear.me", +"filegear-au.me", +"filegear-de.me", +"filegear-gb.me", +"filegear-ie.me", +"filegear-jp.me", +"filegear-sg.me", +"firebaseapp.com", +"flynnhub.com", +"flynnhosting.net", +"0e.vc", +"freebox-os.com", +"freeboxos.com", +"fbx-os.fr", +"fbxos.fr", +"freebox-os.fr", +"freeboxos.fr", +"freedesktop.org", +"*.futurecms.at", +"*.ex.futurecms.at", +"*.in.futurecms.at", +"futurehosting.at", +"futuremailing.at", +"*.ex.ortsinfo.at", +"*.kunden.ortsinfo.at", +"*.statics.cloud", +"service.gov.uk", +"gehirn.ne.jp", +"usercontent.jp", +"gentapps.com", +"lab.ms", +"github.io", +"githubusercontent.com", +"gitlab.io", +"glitch.me", +"lolipop.io", +"cloudapps.digital", +"london.cloudapps.digital", +"homeoffice.gov.uk", +"ro.im", +"shop.ro", +"goip.de", +"run.app", +"a.run.app", +"web.app", +"*.0emm.com", +"appspot.com", +"*.r.appspot.com", +"blogspot.ae", +"blogspot.al", +"blogspot.am", +"blogspot.ba", +"blogspot.be", +"blogspot.bg", +"blogspot.bj", +"blogspot.ca", +"blogspot.cf", +"blogspot.ch", +"blogspot.cl", +"blogspot.co.at", +"blogspot.co.id", +"blogspot.co.il", +"blogspot.co.ke", +"blogspot.co.nz", +"blogspot.co.uk", +"blogspot.co.za", +"blogspot.com", +"blogspot.com.ar", +"blogspot.com.au", +"blogspot.com.br", +"blogspot.com.by", +"blogspot.com.co", +"blogspot.com.cy", +"blogspot.com.ee", +"blogspot.com.eg", +"blogspot.com.es", +"blogspot.com.mt", +"blogspot.com.ng", +"blogspot.com.tr", +"blogspot.com.uy", +"blogspot.cv", +"blogspot.cz", +"blogspot.de", +"blogspot.dk", +"blogspot.fi", +"blogspot.fr", +"blogspot.gr", +"blogspot.hk", +"blogspot.hr", +"blogspot.hu", +"blogspot.ie", +"blogspot.in", +"blogspot.is", +"blogspot.it", +"blogspot.jp", +"blogspot.kr", +"blogspot.li", +"blogspot.lt", +"blogspot.lu", +"blogspot.md", +"blogspot.mk", +"blogspot.mr", +"blogspot.mx", +"blogspot.my", +"blogspot.nl", +"blogspot.no", +"blogspot.pe", +"blogspot.pt", +"blogspot.qa", +"blogspot.re", +"blogspot.ro", +"blogspot.rs", +"blogspot.ru", +"blogspot.se", +"blogspot.sg", +"blogspot.si", +"blogspot.sk", +"blogspot.sn", +"blogspot.td", +"blogspot.tw", +"blogspot.ug", +"blogspot.vn", +"cloudfunctions.net", +"cloud.goog", +"codespot.com", +"googleapis.com", +"googlecode.com", +"pagespeedmobilizer.com", +"publishproxy.com", +"withgoogle.com", +"withyoutube.com", +"awsmppl.com", +"fin.ci", +"free.hr", +"caa.li", +"ua.rs", +"conf.se", +"hs.zone", +"hs.run", +"hashbang.sh", +"hasura.app", +"hasura-app.io", +"hepforge.org", +"herokuapp.com", +"herokussl.com", +"myravendb.com", +"ravendb.community", +"ravendb.me", +"development.run", +"ravendb.run", +"bpl.biz", +"orx.biz", +"ng.city", +"biz.gl", +"ng.ink", +"col.ng", +"firm.ng", +"gen.ng", +"ltd.ng", +"ngo.ng", +"ng.school", +"sch.so", +"häkkinen.fi", +"*.moonscale.io", +"moonscale.net", +"iki.fi", +"dyn-berlin.de", +"in-berlin.de", +"in-brb.de", +"in-butter.de", +"in-dsl.de", +"in-dsl.net", +"in-dsl.org", +"in-vpn.de", +"in-vpn.net", +"in-vpn.org", +"biz.at", +"info.at", +"info.cx", +"ac.leg.br", +"al.leg.br", +"am.leg.br", +"ap.leg.br", +"ba.leg.br", +"ce.leg.br", +"df.leg.br", +"es.leg.br", +"go.leg.br", +"ma.leg.br", +"mg.leg.br", +"ms.leg.br", +"mt.leg.br", +"pa.leg.br", +"pb.leg.br", +"pe.leg.br", +"pi.leg.br", +"pr.leg.br", +"rj.leg.br", +"rn.leg.br", +"ro.leg.br", +"rr.leg.br", +"rs.leg.br", +"sc.leg.br", +"se.leg.br", +"sp.leg.br", +"to.leg.br", +"pixolino.com", +"ipifony.net", +"mein-iserv.de", +"test-iserv.de", +"iserv.dev", +"iobb.net", +"myjino.ru", +"*.hosting.myjino.ru", +"*.landing.myjino.ru", +"*.spectrum.myjino.ru", +"*.vps.myjino.ru", +"*.triton.zone", +"*.cns.joyent.com", +"js.org", +"kaas.gg", +"khplay.nl", +"keymachine.de", +"kinghost.net", +"uni5.net", +"knightpoint.systems", +"oya.to", +"co.krd", +"edu.krd", +"git-repos.de", +"lcube-server.de", +"svn-repos.de", +"leadpages.co", +"lpages.co", +"lpusercontent.com", +"lelux.site", +"co.business", +"co.education", +"co.events", +"co.financial", +"co.network", +"co.place", +"co.technology", +"app.lmpm.com", +"linkitools.space", +"linkyard.cloud", +"linkyard-cloud.ch", +"members.linode.com", +"nodebalancer.linode.com", +"we.bs", +"loginline.app", +"loginline.dev", +"loginline.io", +"loginline.services", +"loginline.site", +"krasnik.pl", +"leczna.pl", +"lubartow.pl", +"lublin.pl", +"poniatowa.pl", +"swidnik.pl", +"uklugs.org", +"glug.org.uk", +"lug.org.uk", +"lugs.org.uk", +"barsy.bg", +"barsy.co.uk", +"barsyonline.co.uk", +"barsycenter.com", +"barsyonline.com", +"barsy.club", +"barsy.de", +"barsy.eu", +"barsy.in", +"barsy.info", +"barsy.io", +"barsy.me", +"barsy.menu", +"barsy.mobi", +"barsy.net", +"barsy.online", +"barsy.org", +"barsy.pro", +"barsy.pub", +"barsy.shop", +"barsy.site", +"barsy.support", +"barsy.uk", +"*.magentosite.cloud", +"mayfirst.info", +"mayfirst.org", +"hb.cldmail.ru", +"miniserver.com", +"memset.net", +"cloud.metacentrum.cz", +"custom.metacentrum.cz", +"flt.cloud.muni.cz", +"usr.cloud.muni.cz", +"meteorapp.com", +"eu.meteorapp.com", +"co.pl", +"azurecontainer.io", +"azurewebsites.net", +"azure-mobile.net", +"cloudapp.net", +"mozilla-iot.org", +"bmoattachments.org", +"net.ru", +"org.ru", +"pp.ru", +"ui.nabu.casa", +"pony.club", +"of.fashion", +"on.fashion", +"of.football", +"in.london", +"of.london", +"for.men", +"and.mom", +"for.mom", +"for.one", +"for.sale", +"of.work", +"to.work", +"nctu.me", +"bitballoon.com", +"netlify.com", +"4u.com", +"ngrok.io", +"nh-serv.co.uk", +"nfshost.com", +"dnsking.ch", +"mypi.co", +"n4t.co", +"001www.com", +"ddnslive.com", +"myiphost.com", +"forumz.info", +"16-b.it", +"32-b.it", +"64-b.it", +"soundcast.me", +"tcp4.me", +"dnsup.net", +"hicam.net", +"now-dns.net", +"ownip.net", +"vpndns.net", +"dynserv.org", +"now-dns.org", +"x443.pw", +"now-dns.top", +"ntdll.top", +"freeddns.us", +"crafting.xyz", +"zapto.xyz", +"nsupdate.info", +"nerdpol.ovh", +"blogsyte.com", +"brasilia.me", +"cable-modem.org", +"ciscofreak.com", +"collegefan.org", +"couchpotatofries.org", +"damnserver.com", +"ddns.me", +"ditchyourip.com", +"dnsfor.me", +"dnsiskinky.com", +"dvrcam.info", +"dynns.com", +"eating-organic.net", +"fantasyleague.cc", +"geekgalaxy.com", +"golffan.us", +"health-carereform.com", +"homesecuritymac.com", +"homesecuritypc.com", +"hopto.me", +"ilovecollege.info", +"loginto.me", +"mlbfan.org", +"mmafan.biz", +"myactivedirectory.com", +"mydissent.net", +"myeffect.net", +"mymediapc.net", +"mypsx.net", +"mysecuritycamera.com", +"mysecuritycamera.net", +"mysecuritycamera.org", +"net-freaks.com", +"nflfan.org", +"nhlfan.net", +"no-ip.ca", +"no-ip.co.uk", +"no-ip.net", +"noip.us", +"onthewifi.com", +"pgafan.net", +"point2this.com", +"pointto.us", +"privatizehealthinsurance.net", +"quicksytes.com", +"read-books.org", +"securitytactics.com", +"serveexchange.com", +"servehumour.com", +"servep2p.com", +"servesarcasm.com", +"stufftoread.com", +"ufcfan.org", +"unusualperson.com", +"workisboring.com", +"3utilities.com", +"bounceme.net", +"ddns.net", +"ddnsking.com", +"gotdns.ch", +"hopto.org", +"myftp.biz", +"myftp.org", +"myvnc.com", +"no-ip.biz", +"no-ip.info", +"no-ip.org", +"noip.me", +"redirectme.net", +"servebeer.com", +"serveblog.net", +"servecounterstrike.com", +"serveftp.com", +"servegame.com", +"servehalflife.com", +"servehttp.com", +"serveirc.com", +"serveminecraft.net", +"servemp3.com", +"servepics.com", +"servequake.com", +"sytes.net", +"webhop.me", +"zapto.org", +"stage.nodeart.io", +"nodum.co", +"nodum.io", +"pcloud.host", +"nyc.mn", +"nom.ae", +"nom.af", +"nom.ai", +"nom.al", +"nym.by", +"nym.bz", +"nom.cl", +"nym.ec", +"nom.gd", +"nom.ge", +"nom.gl", +"nym.gr", +"nom.gt", +"nym.gy", +"nym.hk", +"nom.hn", +"nym.ie", +"nom.im", +"nom.ke", +"nym.kz", +"nym.la", +"nym.lc", +"nom.li", +"nym.li", +"nym.lt", +"nym.lu", +"nym.me", +"nom.mk", +"nym.mn", +"nym.mx", +"nom.nu", +"nym.nz", +"nym.pe", +"nym.pt", +"nom.pw", +"nom.qa", +"nym.ro", +"nom.rs", +"nom.si", +"nym.sk", +"nom.st", +"nym.su", +"nym.sx", +"nom.tj", +"nym.tw", +"nom.ug", +"nom.uy", +"nom.vc", +"nom.vg", +"static.observableusercontent.com", +"cya.gg", +"cloudycluster.net", +"nid.io", +"opencraft.hosting", +"operaunite.com", +"skygearapp.com", +"outsystemscloud.com", +"ownprovider.com", +"own.pm", +"ox.rs", +"oy.lc", +"pgfog.com", +"pagefrontapp.com", +"art.pl", +"gliwice.pl", +"krakow.pl", +"poznan.pl", +"wroc.pl", +"zakopane.pl", +"pantheonsite.io", +"gotpantheon.com", +"mypep.link", +"perspecta.cloud", +"on-web.fr", +"*.platform.sh", +"*.platformsh.site", +"dyn53.io", +"co.bn", +"xen.prgmr.com", +"priv.at", +"prvcy.page", +"*.dweb.link", +"protonet.io", +"chirurgiens-dentistes-en-france.fr", +"byen.site", +"pubtls.org", +"qualifioapp.com", +"instantcloud.cn", +"ras.ru", +"qa2.com", +"qcx.io", +"*.sys.qcx.io", +"dev-myqnapcloud.com", +"alpha-myqnapcloud.com", +"myqnapcloud.com", +"*.quipelements.com", +"vapor.cloud", +"vaporcloud.io", +"rackmaze.com", +"rackmaze.net", +"*.on-k3s.io", +"*.on-rancher.cloud", +"*.on-rio.io", +"readthedocs.io", +"rhcloud.com", +"app.render.com", +"onrender.com", +"repl.co", +"repl.run", +"resindevice.io", +"devices.resinstaging.io", +"hzc.io", +"wellbeingzone.eu", +"ptplus.fit", +"wellbeingzone.co.uk", +"git-pages.rit.edu", +"sandcats.io", +"logoip.de", +"logoip.com", +"schokokeks.net", +"gov.scot", +"scrysec.com", +"firewall-gateway.com", +"firewall-gateway.de", +"my-gateway.de", +"my-router.de", +"spdns.de", +"spdns.eu", +"firewall-gateway.net", +"my-firewall.org", +"myfirewall.org", +"spdns.org", +"biz.ua", +"co.ua", +"pp.ua", +"shiftedit.io", +"myshopblocks.com", +"shopitsite.com", +"mo-siemens.io", +"1kapp.com", +"appchizi.com", +"applinzi.com", +"sinaapp.com", +"vipsinaapp.com", +"siteleaf.net", +"bounty-full.com", +"alpha.bounty-full.com", +"beta.bounty-full.com", +"stackhero-network.com", +"static.land", +"dev.static.land", +"sites.static.land", +"apps.lair.io", +"*.stolos.io", +"spacekit.io", +"customer.speedpartner.de", +"api.stdlib.com", +"storj.farm", +"utwente.io", +"soc.srcf.net", +"user.srcf.net", +"temp-dns.com", +"applicationcloud.io", +"scapp.io", +"*.s5y.io", +"*.sensiosite.cloud", +"syncloud.it", +"diskstation.me", +"dscloud.biz", +"dscloud.me", +"dscloud.mobi", +"dsmynas.com", +"dsmynas.net", +"dsmynas.org", +"familyds.com", +"familyds.net", +"familyds.org", +"i234.me", +"myds.me", +"synology.me", +"vpnplus.to", +"direct.quickconnect.to", +"taifun-dns.de", +"gda.pl", +"gdansk.pl", +"gdynia.pl", +"med.pl", +"sopot.pl", +"edugit.org", +"telebit.app", +"telebit.io", +"*.telebit.xyz", +"gwiddle.co.uk", +"thingdustdata.com", +"cust.dev.thingdust.io", +"cust.disrec.thingdust.io", +"cust.prod.thingdust.io", +"cust.testing.thingdust.io", +"arvo.network", +"azimuth.network", +"bloxcms.com", +"townnews-staging.com", +"12hp.at", +"2ix.at", +"4lima.at", +"lima-city.at", +"12hp.ch", +"2ix.ch", +"4lima.ch", +"lima-city.ch", +"trafficplex.cloud", +"de.cool", +"12hp.de", +"2ix.de", +"4lima.de", +"lima-city.de", +"1337.pictures", +"clan.rip", +"lima-city.rocks", +"webspace.rocks", +"lima.zone", +"*.transurl.be", +"*.transurl.eu", +"*.transurl.nl", +"tuxfamily.org", +"dd-dns.de", +"diskstation.eu", +"diskstation.org", +"dray-dns.de", +"draydns.de", +"dyn-vpn.de", +"dynvpn.de", +"mein-vigor.de", +"my-vigor.de", +"my-wan.de", +"syno-ds.de", +"synology-diskstation.de", +"synology-ds.de", +"uber.space", +"*.uberspace.de", +"hk.com", +"hk.org", +"ltd.hk", +"inc.hk", +"virtualuser.de", +"virtual-user.de", +"lib.de.us", +"2038.io", +"router.management", +"v-info.info", +"voorloper.cloud", +"v.ua", +"wafflecell.com", +"*.webhare.dev", +"wedeploy.io", +"wedeploy.me", +"wedeploy.sh", +"remotewd.com", +"wmflabs.org", +"half.host", +"xnbay.com", +"u2.xnbay.com", +"u2-local.xnbay.com", +"cistron.nl", +"demon.nl", +"xs4all.space", +"yandexcloud.net", +"storage.yandexcloud.net", +"website.yandexcloud.net", +"official.academy", +"yolasite.com", +"ybo.faith", +"yombo.me", +"homelink.one", +"ybo.party", +"ybo.review", +"ybo.science", +"ybo.trade", +"nohost.me", +"noho.st", +"za.net", +"za.org", +"now.sh", +"bss.design", +"basicserver.io", +"virtualserver.io", +"site.builder.nu", +"enterprisecloud.nu" +] \ No newline at end of file diff --git a/node_modules/psl/dist/psl.js b/node_modules/psl/dist/psl.js new file mode 100644 index 0000000..bcbebed --- /dev/null +++ b/node_modules/psl/dist/psl.js @@ -0,0 +1,9623 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.psl = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= punySuffix.length) { + // return memo; + // } + //} + return rule; + }, null); +}; + + +// +// Error codes and messages. +// +exports.errorCodes = { + DOMAIN_TOO_SHORT: 'Domain name too short.', + DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.', + LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.', + LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.', + LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.', + LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.', + LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.' +}; + + +// +// Validate domain name and throw if not valid. +// +// From wikipedia: +// +// Hostnames are composed of series of labels concatenated with dots, as are all +// domain names. Each label must be between 1 and 63 characters long, and the +// entire hostname (including the delimiting dots) has a maximum of 255 chars. +// +// Allowed chars: +// +// * `a-z` +// * `0-9` +// * `-` but not as a starting or ending character +// * `.` as a separator for the textual portions of a domain name +// +// * http://en.wikipedia.org/wiki/Domain_name +// * http://en.wikipedia.org/wiki/Hostname +// +internals.validate = function (input) { + + // Before we can validate we need to take care of IDNs with unicode chars. + var ascii = Punycode.toASCII(input); + + if (ascii.length < 1) { + return 'DOMAIN_TOO_SHORT'; + } + if (ascii.length > 255) { + return 'DOMAIN_TOO_LONG'; + } + + // Check each part's length and allowed chars. + var labels = ascii.split('.'); + var label; + + for (var i = 0; i < labels.length; ++i) { + label = labels[i]; + if (!label.length) { + return 'LABEL_TOO_SHORT'; + } + if (label.length > 63) { + return 'LABEL_TOO_LONG'; + } + if (label.charAt(0) === '-') { + return 'LABEL_STARTS_WITH_DASH'; + } + if (label.charAt(label.length - 1) === '-') { + return 'LABEL_ENDS_WITH_DASH'; + } + if (!/^[a-z0-9\-]+$/.test(label)) { + return 'LABEL_INVALID_CHARS'; + } + } +}; + + +// +// Public API +// + + +// +// Parse domain. +// +exports.parse = function (input) { + + if (typeof input !== 'string') { + throw new TypeError('Domain name must be a string.'); + } + + // Force domain to lowercase. + var domain = input.slice(0).toLowerCase(); + + // Handle FQDN. + // TODO: Simply remove trailing dot? + if (domain.charAt(domain.length - 1) === '.') { + domain = domain.slice(0, domain.length - 1); + } + + // Validate and sanitise input. + var error = internals.validate(domain); + if (error) { + return { + input: input, + error: { + message: exports.errorCodes[error], + code: error + } + }; + } + + var parsed = { + input: input, + tld: null, + sld: null, + domain: null, + subdomain: null, + listed: false + }; + + var domainParts = domain.split('.'); + + // Non-Internet TLD + if (domainParts[domainParts.length - 1] === 'local') { + return parsed; + } + + var handlePunycode = function () { + + if (!/xn--/.test(domain)) { + return parsed; + } + if (parsed.domain) { + parsed.domain = Punycode.toASCII(parsed.domain); + } + if (parsed.subdomain) { + parsed.subdomain = Punycode.toASCII(parsed.subdomain); + } + return parsed; + }; + + var rule = internals.findRule(domain); + + // Unlisted tld. + if (!rule) { + if (domainParts.length < 2) { + return parsed; + } + parsed.tld = domainParts.pop(); + parsed.sld = domainParts.pop(); + parsed.domain = [parsed.sld, parsed.tld].join('.'); + if (domainParts.length) { + parsed.subdomain = domainParts.pop(); + } + return handlePunycode(); + } + + // At this point we know the public suffix is listed. + parsed.listed = true; + + var tldParts = rule.suffix.split('.'); + var privateParts = domainParts.slice(0, domainParts.length - tldParts.length); + + if (rule.exception) { + privateParts.push(tldParts.shift()); + } + + parsed.tld = tldParts.join('.'); + + if (!privateParts.length) { + return handlePunycode(); + } + + if (rule.wildcard) { + tldParts.unshift(privateParts.pop()); + parsed.tld = tldParts.join('.'); + } + + if (!privateParts.length) { + return handlePunycode(); + } + + parsed.sld = privateParts.pop(); + parsed.domain = [parsed.sld, parsed.tld].join('.'); + + if (privateParts.length) { + parsed.subdomain = privateParts.join('.'); + } + + return handlePunycode(); +}; + + +// +// Get domain. +// +exports.get = function (domain) { + + if (!domain) { + return null; + } + return exports.parse(domain).domain || null; +}; + + +// +// Check whether domain belongs to a known public suffix. +// +exports.isValid = function (domain) { + + var parsed = exports.parse(domain); + return Boolean(parsed.domain && parsed.listed); +}; + +},{"./data/rules.json":1,"punycode":3}],3:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}]},{},[2])(2) +}); diff --git a/node_modules/psl/dist/psl.min.js b/node_modules/psl/dist/psl.min.js new file mode 100644 index 0000000..f294e87 --- /dev/null +++ b/node_modules/psl/dist/psl.min.js @@ -0,0 +1 @@ +!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).psl=a()}}(function(){return function s(m,t,u){function r(o,a){if(!t[o]){if(!m[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(p)return p(o,!0);var e=new Error("Cannot find module '"+o+"'");throw e.code="MODULE_NOT_FOUND",e}var n=t[o]={exports:{}};m[o][0].call(n.exports,function(a){return r(m[o][1][a]||a)},n,n.exports,s,m,t,u)}return t[o].exports}for(var p="function"==typeof require&&require,a=0;a= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=b-y,x=Math.floor,q=String.fromCharCode;function A(a){throw new RangeError(k[a])}function l(a,o){for(var i=a.length,e=[];i--;)e[i]=o(a[i]);return e}function g(a,o){var i=a.split("@"),e="";return 1>>10&1023|55296),a=56320|1023&a),o+=q(a)}).join("")}function L(a,o){return a+22+75*(a<26)-((0!=o)<<5)}function I(a,o,i){var e=0;for(a=i?x(a/t):a>>1,a+=x(a/o);c*f>>1x((d-g)/m))&&A("overflow"),g+=u*m,!(u<(r=t<=j?y:j+f<=t?f:t-j));t+=b)m>x(d/(p=b-r))&&A("overflow"),m*=p;j=I(g-s,o=c.length+1,0==s),x(g/o)>d-h&&A("overflow"),h+=x(g/o),g%=o,c.splice(g++,0,h)}return _(c)}function j(a){var o,i,e,n,s,m,t,u,r,p,k,c,l,g,h,j=[];for(c=(a=O(a)).length,o=w,s=v,m=i=0;mx((d-i)/(l=e+1))&&A("overflow"),i+=(t-o)*l,o=t,m=0;md&&A("overflow"),k==o){for(u=i,r=b;!(u<(p=r<=s?y:s+f<=r?f:r-s));r+=b)h=u-p,g=b-p,j.push(q(L(p+h%g,0))),u=x(h/g);j.push(q(L(u,0))),s=I(i,l,e==n),i=0,++e}++i,++o}return j.join("")}if(n={version:"1.4.1",ucs2:{decode:O,encode:_},decode:h,encode:j,toASCII:function(a){return g(a,function(a){return r.test(a)?"xn--"+j(a):a})},toUnicode:function(a){return g(a,function(a){return u.test(a)?h(a.slice(4).toLowerCase()):a})}},0,o&&i)if(T.exports==o)i.exports=n;else for(s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);else a.punycode=n}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[2])(2)}); diff --git a/node_modules/psl/index.js b/node_modules/psl/index.js new file mode 100644 index 0000000..da7bc12 --- /dev/null +++ b/node_modules/psl/index.js @@ -0,0 +1,269 @@ +/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */ +'use strict'; + + +var Punycode = require('punycode'); + + +var internals = {}; + + +// +// Read rules from file. +// +internals.rules = require('./data/rules.json').map(function (rule) { + + return { + rule: rule, + suffix: rule.replace(/^(\*\.|\!)/, ''), + punySuffix: -1, + wildcard: rule.charAt(0) === '*', + exception: rule.charAt(0) === '!' + }; +}); + + +// +// Check is given string ends with `suffix`. +// +internals.endsWith = function (str, suffix) { + + return str.indexOf(suffix, str.length - suffix.length) !== -1; +}; + + +// +// Find rule for a given domain. +// +internals.findRule = function (domain) { + + var punyDomain = Punycode.toASCII(domain); + return internals.rules.reduce(function (memo, rule) { + + if (rule.punySuffix === -1){ + rule.punySuffix = Punycode.toASCII(rule.suffix); + } + if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) { + return memo; + } + // This has been commented out as it never seems to run. This is because + // sub tlds always appear after their parents and we never find a shorter + // match. + //if (memo) { + // var memoSuffix = Punycode.toASCII(memo.suffix); + // if (memoSuffix.length >= punySuffix.length) { + // return memo; + // } + //} + return rule; + }, null); +}; + + +// +// Error codes and messages. +// +exports.errorCodes = { + DOMAIN_TOO_SHORT: 'Domain name too short.', + DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.', + LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.', + LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.', + LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.', + LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.', + LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.' +}; + + +// +// Validate domain name and throw if not valid. +// +// From wikipedia: +// +// Hostnames are composed of series of labels concatenated with dots, as are all +// domain names. Each label must be between 1 and 63 characters long, and the +// entire hostname (including the delimiting dots) has a maximum of 255 chars. +// +// Allowed chars: +// +// * `a-z` +// * `0-9` +// * `-` but not as a starting or ending character +// * `.` as a separator for the textual portions of a domain name +// +// * http://en.wikipedia.org/wiki/Domain_name +// * http://en.wikipedia.org/wiki/Hostname +// +internals.validate = function (input) { + + // Before we can validate we need to take care of IDNs with unicode chars. + var ascii = Punycode.toASCII(input); + + if (ascii.length < 1) { + return 'DOMAIN_TOO_SHORT'; + } + if (ascii.length > 255) { + return 'DOMAIN_TOO_LONG'; + } + + // Check each part's length and allowed chars. + var labels = ascii.split('.'); + var label; + + for (var i = 0; i < labels.length; ++i) { + label = labels[i]; + if (!label.length) { + return 'LABEL_TOO_SHORT'; + } + if (label.length > 63) { + return 'LABEL_TOO_LONG'; + } + if (label.charAt(0) === '-') { + return 'LABEL_STARTS_WITH_DASH'; + } + if (label.charAt(label.length - 1) === '-') { + return 'LABEL_ENDS_WITH_DASH'; + } + if (!/^[a-z0-9\-]+$/.test(label)) { + return 'LABEL_INVALID_CHARS'; + } + } +}; + + +// +// Public API +// + + +// +// Parse domain. +// +exports.parse = function (input) { + + if (typeof input !== 'string') { + throw new TypeError('Domain name must be a string.'); + } + + // Force domain to lowercase. + var domain = input.slice(0).toLowerCase(); + + // Handle FQDN. + // TODO: Simply remove trailing dot? + if (domain.charAt(domain.length - 1) === '.') { + domain = domain.slice(0, domain.length - 1); + } + + // Validate and sanitise input. + var error = internals.validate(domain); + if (error) { + return { + input: input, + error: { + message: exports.errorCodes[error], + code: error + } + }; + } + + var parsed = { + input: input, + tld: null, + sld: null, + domain: null, + subdomain: null, + listed: false + }; + + var domainParts = domain.split('.'); + + // Non-Internet TLD + if (domainParts[domainParts.length - 1] === 'local') { + return parsed; + } + + var handlePunycode = function () { + + if (!/xn--/.test(domain)) { + return parsed; + } + if (parsed.domain) { + parsed.domain = Punycode.toASCII(parsed.domain); + } + if (parsed.subdomain) { + parsed.subdomain = Punycode.toASCII(parsed.subdomain); + } + return parsed; + }; + + var rule = internals.findRule(domain); + + // Unlisted tld. + if (!rule) { + if (domainParts.length < 2) { + return parsed; + } + parsed.tld = domainParts.pop(); + parsed.sld = domainParts.pop(); + parsed.domain = [parsed.sld, parsed.tld].join('.'); + if (domainParts.length) { + parsed.subdomain = domainParts.pop(); + } + return handlePunycode(); + } + + // At this point we know the public suffix is listed. + parsed.listed = true; + + var tldParts = rule.suffix.split('.'); + var privateParts = domainParts.slice(0, domainParts.length - tldParts.length); + + if (rule.exception) { + privateParts.push(tldParts.shift()); + } + + parsed.tld = tldParts.join('.'); + + if (!privateParts.length) { + return handlePunycode(); + } + + if (rule.wildcard) { + tldParts.unshift(privateParts.pop()); + parsed.tld = tldParts.join('.'); + } + + if (!privateParts.length) { + return handlePunycode(); + } + + parsed.sld = privateParts.pop(); + parsed.domain = [parsed.sld, parsed.tld].join('.'); + + if (privateParts.length) { + parsed.subdomain = privateParts.join('.'); + } + + return handlePunycode(); +}; + + +// +// Get domain. +// +exports.get = function (domain) { + + if (!domain) { + return null; + } + return exports.parse(domain).domain || null; +}; + + +// +// Check whether domain belongs to a known public suffix. +// +exports.isValid = function (domain) { + + var parsed = exports.parse(domain); + return Boolean(parsed.domain && parsed.listed); +}; diff --git a/node_modules/psl/package.json b/node_modules/psl/package.json new file mode 100644 index 0000000..42cd43a --- /dev/null +++ b/node_modules/psl/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + "psl@1.7.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "psl@1.7.0", + "_id": "psl@1.7.0", + "_inBundle": false, + "_integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", + "_location": "/psl", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "psl@1.7.0", + "name": "psl", + "escapedName": "psl", + "rawSpec": "1.7.0", + "saveSpec": null, + "fetchSpec": "1.7.0" + }, + "_requiredBy": [ + "/tough-cookie" + ], + "_resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "_spec": "1.7.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Lupo Montero", + "email": "lupomontero@gmail.com", + "url": "https://lupomontero.com/" + }, + "bugs": { + "url": "https://github.com/lupomontero/psl/issues" + }, + "description": "Domain name parser based on the Public Suffix List", + "devDependencies": { + "JSONStream": "^1.3.5", + "browserify": "^16.5.0", + "commit-and-pr": "^1.0.4", + "eslint": "^6.8.0", + "eslint-config-hapi": "^12.0.0", + "eslint-plugin-hapi": "^4.1.0", + "karma": "^4.4.1", + "karma-browserify": "^6.1.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + "karma-phantomjs-launcher": "^1.0.4", + "mocha": "^6.2.2", + "phantomjs-prebuilt": "^2.1.16", + "request": "^2.88.0", + "uglify-js": "^3.7.3", + "watchify": "^3.11.1" + }, + "homepage": "https://github.com/lupomontero/psl#readme", + "keywords": [ + "publicsuffix", + "publicsuffixlist" + ], + "license": "MIT", + "main": "index.js", + "name": "psl", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/lupomontero/psl.git" + }, + "scripts": { + "build": "browserify ./index.js --standalone=psl > ./dist/psl.js", + "changelog": "git log $(git describe --tags --abbrev=0)..HEAD --oneline --format=\"%h %s (%an <%ae>)\"", + "commit-and-pr": "commit-and-pr", + "postbuild": "cat ./dist/psl.js | uglifyjs -c -m > ./dist/psl.min.js", + "prebuild": "./scripts/update-rules.js", + "pretest": "eslint .", + "test": "mocha test && karma start ./karma.conf.js --single-run", + "watch": "mocha test --watch" + }, + "version": "1.7.0" +} diff --git a/node_modules/pstree.remy/.travis.yml b/node_modules/pstree.remy/.travis.yml new file mode 100644 index 0000000..5bf093e --- /dev/null +++ b/node_modules/pstree.remy/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +cache: + directories: + - ~/.npm +notifications: + email: false +node_js: + - '8' diff --git a/node_modules/pstree.remy/LICENSE b/node_modules/pstree.remy/LICENSE new file mode 100644 index 0000000..e83bea6 --- /dev/null +++ b/node_modules/pstree.remy/LICENSE @@ -0,0 +1,7 @@ +The MIT License (MIT) +Copyright © 2019 Remy Sharp, https://remysharp.com +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/pstree.remy/README.md b/node_modules/pstree.remy/README.md new file mode 100644 index 0000000..5f44c62 --- /dev/null +++ b/node_modules/pstree.remy/README.md @@ -0,0 +1,26 @@ +# pstree.remy + +> Cross platform ps-tree (including unix flavours without ps) + +## Installation + +```shel +npm install pstree.remy +``` + +## Usage + +```js +const psTree = psTree require('pstree.remy'); + +psTree(PID, (err, pids) => { + if (err) { + console.error(err); + } + console.log(pids) +}); + +console.log(psTree.hasPS + ? "This platform has the ps shell command" + : "This platform does not have the ps shell command"); +``` diff --git a/node_modules/pstree.remy/lib/index.js b/node_modules/pstree.remy/lib/index.js new file mode 100644 index 0000000..743e997 --- /dev/null +++ b/node_modules/pstree.remy/lib/index.js @@ -0,0 +1,37 @@ +const exec = require('child_process').exec; +const tree = require('./tree'); +const utils = require('./utils'); +var hasPS = true; + +// discover if the OS has `ps`, and therefore can use psTree +exec('ps', (error) => { + module.exports.hasPS = hasPS = !error; +}); + +module.exports = function main(pid, callback) { + if (typeof pid === 'number') { + pid = pid.toString(); + } + + if (hasPS && !process.env.NO_PS) { + return tree(pid, callback); + } + + utils + .getStat() + .then(utils.tree) + .then((tree) => utils.pidsForTree(tree, pid)) + .then((res) => + callback( + null, + res.map((p) => p.PID) + ) + ) + .catch((error) => callback(error)); +}; + +if (!module.parent) { + module.exports(process.argv[2], (e, pids) => console.log(pids)); +} + +module.exports.hasPS = hasPS; diff --git a/node_modules/pstree.remy/lib/tree.js b/node_modules/pstree.remy/lib/tree.js new file mode 100644 index 0000000..bac7cce --- /dev/null +++ b/node_modules/pstree.remy/lib/tree.js @@ -0,0 +1,37 @@ +const spawn = require('child_process').spawn; + +module.exports = function (rootPid, callback) { + const pidsOfInterest = new Set([parseInt(rootPid, 10)]); + var output = ''; + + // *nix + const ps = spawn('ps', ['-A', '-o', 'ppid,pid']); + ps.stdout.on('data', (data) => { + output += data.toString('ascii'); + }); + + ps.on('close', () => { + try { + const res = output + .split('\n') + .slice(1) + .map((_) => _.trim()) + .reduce((acc, line) => { + const pids = line.split(/\s+/); + const ppid = parseInt(pids[0], 10); + + if (pidsOfInterest.has(ppid)) { + const pid = parseInt(pids[1], 10); + acc.push(pid); + pidsOfInterest.add(pid); + } + + return acc; + }, []); + + callback(null, res); + } catch (e) { + callback(e, null); + } + }); +}; diff --git a/node_modules/pstree.remy/lib/utils.js b/node_modules/pstree.remy/lib/utils.js new file mode 100644 index 0000000..8fa5719 --- /dev/null +++ b/node_modules/pstree.remy/lib/utils.js @@ -0,0 +1,53 @@ +const spawn = require('child_process').spawn; + +module.exports = { tree, pidsForTree, getStat }; + +function getStat() { + return new Promise((resolve) => { + const command = `ls /proc | grep -E '^[0-9]+$' | xargs -I{} cat /proc/{}/stat`; + const spawned = spawn('sh', ['-c', command], { + stdio: ['pipe', 'pipe', 'pipe'], + }); + + var res = ''; + spawned.stdout.on('data', (data) => (res += data)); + spawned.on('close', () => resolve(res)); + }); +} + +function template(s) { + var stat = null; + // 'pid', 'comm', 'state', 'ppid', 'pgrp' + // %d (%s) %c %d %d + s.replace( + /(\d+) \((.*?)\)\s(.+?)\s(\d+)\s/g, + (all, PID, COMMAND, STAT, PPID) => { + stat = { PID, COMMAND, PPID, STAT }; + } + ); + + return stat; +} + +function tree(stats) { + const processes = stats.split('\n').map(template).filter(Boolean); + + return processes; +} + +function pidsForTree(tree, pid) { + if (typeof pid === 'number') { + pid = pid.toString(); + } + const parents = [pid]; + const pids = []; + + tree.forEach((proc) => { + if (parents.indexOf(proc.PPID) !== -1) { + parents.push(proc.PID); + pids.push(proc); + } + }); + + return pids; +} diff --git a/node_modules/pstree.remy/package.json b/node_modules/pstree.remy/package.json new file mode 100644 index 0000000..053b1ba --- /dev/null +++ b/node_modules/pstree.remy/package.json @@ -0,0 +1,64 @@ +{ + "_from": "pstree.remy@^1.1.8", + "_id": "pstree.remy@1.1.8", + "_inBundle": false, + "_integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "_location": "/pstree.remy", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "pstree.remy@^1.1.8", + "name": "pstree.remy", + "escapedName": "pstree.remy", + "rawSpec": "^1.1.8", + "saveSpec": null, + "fetchSpec": "^1.1.8" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "_shasum": "c242224f4a67c21f686839bbdb4ac282b8373d3a", + "_spec": "pstree.remy@^1.1.8", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "author": { + "name": "Remy Sharp" + }, + "bugs": { + "url": "https://github.com/remy/pstree/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Collects the full tree of processes from /proc", + "devDependencies": { + "tap": "^11.0.0" + }, + "directories": { + "test": "tests" + }, + "homepage": "https://github.com/remy/pstree#readme", + "keywords": [ + "ps", + "pstree", + "ps tree" + ], + "license": "MIT", + "main": "lib/index.js", + "name": "pstree.remy", + "prettier": { + "trailingComma": "es5", + "semi": true, + "singleQuote": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/remy/pstree.git" + }, + "scripts": { + "_prepublish": "npm test", + "test": "tap tests/*.test.js" + }, + "version": "1.1.8" +} diff --git a/node_modules/pstree.remy/tests/fixtures/index.js b/node_modules/pstree.remy/tests/fixtures/index.js new file mode 100644 index 0000000..4cdbcb1 --- /dev/null +++ b/node_modules/pstree.remy/tests/fixtures/index.js @@ -0,0 +1,13 @@ +const spawn = require('child_process').spawn; +function run() { + spawn( + 'sh', + ['-c', 'node -e "setInterval(() => console.log(`running`), 200)"'], + { + stdio: 'pipe', + } + ); +} + +var runCallCount = process.argv[2] || 1; +for (var i = 0; i < runCallCount; i++) run(); diff --git a/node_modules/pstree.remy/tests/fixtures/out1 b/node_modules/pstree.remy/tests/fixtures/out1 new file mode 100644 index 0000000..abfe581 --- /dev/null +++ b/node_modules/pstree.remy/tests/fixtures/out1 @@ -0,0 +1,10 @@ +1 (npm) S 0 1 1 34816 1 4210944 11112 0 0 0 45 8 0 0 20 0 10 0 330296 1089871872 11809 18446744073709551615 4194304 29343848 140726436642896 0 0 0 0 4096 2072112895 0 0 0 17 0 0 0 0 0 0 31441000 31537208 37314560 140726436650815 140726436650847 140726436650847 140726436650986 0 +15 (sh) S 1 1 1 34816 1 4210688 115 0 0 0 0 0 0 0 20 0 1 0 330372 4399104 187 18446744073709551615 94374393548800 94374393655428 140722913272992 0 0 0 0 0 65538 0 0 0 17 0 0 0 0 0 0 94374395756424 94374395761184 94374404673536 140722913278928 140722913278959 140722913278959 140722913284080 0 +16 (node) S 15 1 1 34816 1 4210688 6930 103 0 0 32 2 0 0 20 0 10 0 330373 1068478464 8412 18446744073709551615 4194304 29343848 140727228046064 0 0 0 0 4096 134300162 0 0 0 17 1 0 0 1 0 0 31441000 31537208 52584448 140727228050313 140727228050383 140727228050383 140727228055530 0 +27 (sh) S 16 1 1 34816 1 4210688 111 0 0 0 0 0 0 0 20 0 1 0 330410 4399104 193 18446744073709551615 94848235986944 94848236093572 140727019991184 0 0 0 0 0 65538 0 0 0 17 1 0 0 0 0 0 94848238194568 94848238199328 94848261660672 140727019998122 140727019998165 140727019998165 140727020003312 0 +28 (node) S 27 1 1 34816 1 4210688 3576 268 0 0 12 2 0 0 20 0 10 0 330411 930213888 6760 18446744073709551615 4194304 29343848 140726559664992 0 0 0 0 4096 134300162 0 0 0 17 1 0 0 0 0 0 31441000 31537208 32591872 140726559669117 140726559669199 140726559669199 140726559674346 0 +39 (node) S 28 1 1 34816 1 4210688 47517 0 0 0 151 9 0 0 20 0 6 0 330427 985739264 31859 18446744073709551615 4194304 29343848 140737324503920 0 0 0 0 4096 134234626 0 0 0 17 0 0 0 0 0 0 31441000 31537208 51585024 140737324510060 140737324510159 140737324510159 140737324515306 0 +45 (bash) S 0 45 45 34817 50 4210944 752 256 0 0 2 0 0 0 20 0 1 0 331039 18628608 789 18446744073709551615 4194304 5242124 140724425887696 0 0 0 65536 3670020 1266777851 0 0 0 17 1 0 0 0 0 0 7341384 7388228 30310400 140724425891678 140724425891683 140724425891683 140724425891822 0 +cat: /proc/50/stat: No such file or directory +cat: /proc/51/stat: No such file or directory +52 (xargs) S 45 50 45 34817 50 4210688 179 661 0 0 0 0 0 0 20 0 1 0 331544 4608000 346 18446744073709551615 94587588550656 94587588614028 140735223856048 0 0 0 0 0 2560 0 0 0 17 1 0 0 0 0 0 94587590711464 94587590713504 94587603169280 140735223861006 140735223861035 140735223861035 140735223861225 0 diff --git a/node_modules/pstree.remy/tests/fixtures/out2 b/node_modules/pstree.remy/tests/fixtures/out2 new file mode 100644 index 0000000..3b31137 --- /dev/null +++ b/node_modules/pstree.remy/tests/fixtures/out2 @@ -0,0 +1,29 @@ +cat: /proc/4087/stat: No such file or directory +cat: /proc/4088/stat: No such file or directory +1 (init) S 0 1 1 0 -1 4210944 9227 55994 29 319 7 5 68 16 20 0 1 0 1286281 33660928 855 18446744073709551615 1 1 0 0 0 0 0 4096 536962595 0 0 0 17 4 0 0 3 0 0 0 0 0 0 0 0 0 0 +1032 (ntpd) S 1 1032 1032 0 -1 4211008 178 0 1 0 0 0 0 0 20 0 1 0 1287033 25743360 1058 18446744073709551615 1 1 0 0 0 0 0 4096 27207 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +126 (irqbalance) S 1 126 126 0 -1 1077952832 1217 0 0 0 1 6 0 0 20 0 1 0 1286749 20189184 647 18446744073709551615 1 1 0 0 0 0 0 0 3 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +181 (mysqld) S 1 181 181 0 -1 4210944 6399 0 46 0 8 6 0 0 20 0 22 0 1286761 748453888 14476 18446744073709551615 1 1 0 0 0 0 552967 4096 26345 0 0 0 17 4 0 0 10 0 0 0 0 0 0 0 0 0 0 +194 (memcached) S 1 187 187 0 -1 4210944 252 0 4 0 0 0 0 0 20 0 6 0 1286766 333221888 648 18446744073709551615 1 1 0 0 0 0 0 4096 2 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +243 (dbus-daemon) S 1 243 243 0 -1 4211008 67 0 0 0 0 0 0 0 20 0 1 0 1286779 40087552 598 18446744073709551615 1 1 0 0 0 0 0 0 16385 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +254 (rsyslogd) S 1 254 254 0 -1 4211008 107 0 0 0 2 2 0 0 20 0 3 0 1286782 186601472 696 18446744073709551615 1 1 0 0 0 0 0 16781830 1133601 0 0 0 17 5 0 0 0 0 0 0 0 0 0 0 0 0 0 +265 (systemd-logind) S 1 265 265 0 -1 4210944 276 0 2 0 0 0 0 0 20 0 1 0 1286786 35880960 720 18446744073709551615 1 1 0 0 0 0 0 0 0 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +333 (postgres) S 1 303 303 0 -1 4210688 3169 3466 15 18 0 1 1 1 20 0 1 0 1286817 156073984 5002 18446744073709551615 1 1 0 0 0 0 0 19935232 84487 0 0 0 17 5 0 0 1 0 0 0 0 0 0 0 0 0 0 +359 (postgres) S 333 359 359 0 -1 4210752 90 0 0 0 0 0 0 0 20 0 1 0 1286822 156073984 827 18446744073709551615 1 1 0 0 0 0 0 16805888 2567 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +360 (postgres) S 333 360 360 0 -1 4210752 119 0 0 0 0 0 0 0 20 0 1 0 1286822 156073984 827 18446744073709551615 1 1 0 0 0 0 0 16791554 16901 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +361 (postgres) S 333 361 361 0 -1 4210752 87 0 0 0 0 0 0 0 20 0 1 0 1286822 156073984 827 18446744073709551615 1 1 0 0 0 0 0 16791552 16903 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +362 (postgres) S 333 362 362 0 -1 4210752 292 0 3 0 0 0 0 0 20 0 1 0 1286822 156930048 1373 18446744073709551615 1 1 0 0 0 0 0 19927040 27271 0 0 0 17 5 0 0 0 0 0 0 0 0 0 0 0 0 0 +363 (postgres) S 333 363 363 0 -1 4210752 82 0 0 0 0 0 0 0 20 0 1 0 1286822 115924992 887 18446744073709551615 1 1 0 0 0 0 0 16808450 5 0 0 0 17 5 0 0 0 0 0 0 0 0 0 0 0 0 0 +4050 (npm) S 50 50 50 34817 50 4210688 5109 0 0 0 36 3 0 0 20 0 10 0 1292968 738025472 10051 18446744073709551615 4194304 33165900 140723623956256 0 0 0 0 4096 134300162 0 0 0 17 4 0 0 0 0 0 35263056 35370992 48369664 140723623964237 140723623964294 140723623964294 140723623968712 0 +4060 (sh) S 4050 50 50 34817 50 4210688 121 0 0 0 0 0 0 0 20 0 1 0 1293007 4579328 174 18446744073709551615 94347643936768 94347644049516 140735136055088 0 0 0 0 0 65538 1 0 0 17 5 0 0 0 0 0 94347646148008 94347646153216 94347660038144 140735136063095 140735136063129 140735136063129 140735136071664 0 +4061 (node) S 4060 50 50 34817 50 4210688 6501 0 0 0 42 2 0 0 20 0 6 0 1293008 705769472 10211 18446744073709551615 4194304 33165900 140730532686288 0 0 0 0 4096 2072111671 0 0 0 17 5 0 0 0 0 0 35263056 35370992 45867008 140730532695579 140730532695657 140730532695657 140730532704200 0 +4067 (node) S 4061 50 50 34817 50 4210688 6746 221 0 0 38 3 0 0 20 0 10 0 1293051 738910208 10527 18446744073709551615 4194304 33165900 140724824971632 0 0 0 0 4096 2072111671 0 0 0 17 4 0 0 0 0 0 35263056 35370992 68595712 140724824980995 140724824981063 140724824981063 140724824989640 0 +4079 (sh) S 4067 50 50 34817 50 4210688 118 0 0 0 0 0 0 0 20 0 1 0 1293092 4579328 194 18446744073709551615 94573702131712 94573702244460 140724712357120 0 0 0 0 0 65538 1 0 0 17 4 0 0 0 0 0 94573704342952 94573704348160 94573718511616 140724712361487 140724712361583 140724712361583 140724712370160 0 +4080 (node) S 4079 50 50 34817 50 4210688 2428 0 0 0 8 1 0 0 20 0 6 0 1293093 693059584 7251 18446744073709551615 4194304 33165900 140726023392816 0 0 0 0 4096 134234626 0 0 0 17 5 0 0 0 0 0 35263056 35370992 55226368 140726023396847 140726023396935 140726023396935 140726023405512 0 +4086 (sh) S 4067 50 50 34817 50 4210688 131 244 0 0 0 0 0 0 20 0 1 0 1293143 4579328 200 18446744073709551615 94347550273536 94347550386284 140737219399136 0 0 0 0 0 65538 1 0 0 17 5 0 0 0 0 0 94347552484776 94347552489984 94347554299904 140737219403308 140737219403375 140737219403375 140737219411952 0 +4089 (xargs) S 4086 50 50 34817 50 4210688 333 1924 0 0 0 0 0 0 20 0 1 0 1293143 17600512 477 18446744073709551615 4194304 4232732 140721633759248 0 0 0 0 0 0 1 0 0 17 5 0 0 0 0 0 6331920 6332980 32182272 140721633762891 140721633762920 140721633762920 140721633771497 0 +50 (bash) S 0 50 50 34817 50 4210944 43914 1032463 9 705 44 21 4213 818 20 0 1 0 1286336 42266624 3599 18446744073709551615 4194304 5173404 140732749083280 0 0 0 65536 4 1132560123 1 0 0 17 4 0 0 410 0 0 7273968 7310504 21196800 140732749086490 140732749086517 140732749086517 140732749086702 0 +79 (acpid) S 1 79 79 0 -1 4210752 46 0 0 0 0 0 0 0 20 0 1 0 1286717 4493312 407 18446744073709551615 1 1 0 0 0 0 0 4096 16391 0 0 0 17 5 0 0 0 0 0 0 0 0 0 0 0 0 0 +83 (sshd) S 1 83 83 0 -1 4210944 354 0 27 0 0 0 0 0 20 0 1 0 1286718 62873600 1290 18446744073709551615 1 1 0 0 0 0 0 4096 81925 0 0 0 17 4 0 0 30 0 0 0 0 0 0 0 0 0 0 +94 (cron) S 1 94 94 0 -1 1077952576 103 449 0 1 0 0 0 0 20 0 1 0 1286743 24240128 559 18446744073709551615 1 1 0 0 0 0 0 0 65537 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 +95 (atd) S 1 95 95 0 -1 1077952576 28 0 0 0 0 0 0 0 20 0 1 0 1286743 19615744 41 18446744073709551615 1 1 0 0 0 0 0 0 81923 0 0 0 17 4 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/node_modules/pstree.remy/tests/index.test.js b/node_modules/pstree.remy/tests/index.test.js new file mode 100644 index 0000000..50096b9 --- /dev/null +++ b/node_modules/pstree.remy/tests/index.test.js @@ -0,0 +1,51 @@ +const tap = require('tap'); +const test = tap.test; +const readFile = require('fs').readFileSync; +const spawn = require('child_process').spawn; +const pstree = require('../'); +const { tree, pidsForTree, getStat } = require('../lib/utils'); + +if (process.platform !== 'darwin') { + test('reads from /proc', async (t) => { + const ps = await getStat(); + t.ok(ps.split('\n').length > 1); + }); +} + +test('tree for live env', async (t) => { + const pid = 4079; + const fixture = readFile(__dirname + '/fixtures/out2', 'utf8'); + const ps = await tree(fixture); + t.deepEqual( + pidsForTree(ps, pid).map((_) => _.PID), + ['4080'] + ); +}); + +function testTree(t, runCallCount) { + const sub = spawn('node', [`${__dirname}/fixtures/index.js`, runCallCount], { + stdio: 'pipe', + }); + setTimeout(() => { + const pid = sub.pid; + + pstree(pid, (error, pids) => { + pids.concat([pid]).forEach((p) => { + spawn('kill', ['-s', 'SIGTERM', p]); + }); + + // the fixture launches `sh` which launches node which is why we + // are looking for two processes. + // Important: IDKW but MacOS seems to skip the `sh` process. no idea. + t.equal(pids.length, runCallCount * 2); + t.end(); + }); + }, 1000); +} + +test('can read full process tree', (t) => { + testTree(t, 1); +}); +test('can read full process tree with multiple processes', (t) => { + testTree(t, 2); +}); diff --git a/node_modules/pump/.travis.yml b/node_modules/pump/.travis.yml new file mode 100644 index 0000000..17f9433 --- /dev/null +++ b/node_modules/pump/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.10" + +script: "npm test" diff --git a/node_modules/pump/LICENSE b/node_modules/pump/LICENSE new file mode 100644 index 0000000..757562e --- /dev/null +++ b/node_modules/pump/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/pump/README.md b/node_modules/pump/README.md new file mode 100644 index 0000000..4c81471 --- /dev/null +++ b/node_modules/pump/README.md @@ -0,0 +1,65 @@ +# pump + +pump is a small node module that pipes streams together and destroys all of them if one of them closes. + +``` +npm install pump +``` + +[![build status](http://img.shields.io/travis/mafintosh/pump.svg?style=flat)](http://travis-ci.org/mafintosh/pump) + +## What problem does it solve? + +When using standard `source.pipe(dest)` source will _not_ be destroyed if dest emits close or an error. +You are also not able to provide a callback to tell when then pipe has finished. + +pump does these two things for you + +## Usage + +Simply pass the streams you want to pipe together to pump and add an optional callback + +``` js +var pump = require('pump') +var fs = require('fs') + +var source = fs.createReadStream('/dev/random') +var dest = fs.createWriteStream('/dev/null') + +pump(source, dest, function(err) { + console.log('pipe finished', err) +}) + +setTimeout(function() { + dest.destroy() // when dest is closed pump will destroy source +}, 1000) +``` + +You can use pump to pipe more than two streams together as well + +``` js +var transform = someTransformStream() + +pump(source, transform, anotherTransform, dest, function(err) { + console.log('pipe finished', err) +}) +``` + +If `source`, `transform`, `anotherTransform` or `dest` closes all of them will be destroyed. + +Similarly to `stream.pipe()`, `pump()` returns the last stream passed in, so you can do: + +``` +return pump(s1, s2) // returns s2 +``` + +If you want to return a stream that combines *both* s1 and s2 to a single stream use +[pumpify](https://github.com/mafintosh/pumpify) instead. + +## License + +MIT + +## Related + +`pump` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/node_modules/pump/index.js b/node_modules/pump/index.js new file mode 100644 index 0000000..c15059f --- /dev/null +++ b/node_modules/pump/index.js @@ -0,0 +1,82 @@ +var once = require('once') +var eos = require('end-of-stream') +var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes + +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) + +var isFn = function (fn) { + return typeof fn === 'function' +} + +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} + +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} + +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) + + var closed = false + stream.on('close', function () { + closed = true + }) + + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) + + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true + + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want + + if (isFn(stream.destroy)) return stream.destroy() + + callback(err || new Error('stream was destroyed')) + } +} + +var call = function (fn) { + fn() +} + +var pipe = function (from, to) { + return from.pipe(to) +} + +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop + + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') + + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) + + return streams.reduce(pipe) +} + +module.exports = pump diff --git a/node_modules/pump/package.json b/node_modules/pump/package.json new file mode 100644 index 0000000..e2828d9 --- /dev/null +++ b/node_modules/pump/package.json @@ -0,0 +1,60 @@ +{ + "_from": "pump@^3.0.0", + "_id": "pump@3.0.0", + "_inBundle": false, + "_integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "_location": "/pump", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "pump@^3.0.0", + "name": "pump", + "escapedName": "pump", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/cacheable-request/get-stream", + "/get-stream" + ], + "_resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "_shasum": "b4a2116815bde2f4e1ea602354e8c75565107a64", + "_spec": "pump@^3.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\cacheable-request\\node_modules\\get-stream", + "author": { + "name": "Mathias Buus Madsen", + "email": "mathiasbuus@gmail.com" + }, + "browser": { + "fs": false + }, + "bugs": { + "url": "https://github.com/mafintosh/pump/issues" + }, + "bundleDependencies": false, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + }, + "deprecated": false, + "description": "pipe streams together and close all of them if one of them closes", + "homepage": "https://github.com/mafintosh/pump#readme", + "keywords": [ + "streams", + "pipe", + "destroy", + "callback" + ], + "license": "MIT", + "name": "pump", + "repository": { + "type": "git", + "url": "git://github.com/mafintosh/pump.git" + }, + "scripts": { + "test": "node test-browser.js && node test-node.js" + }, + "version": "3.0.0" +} diff --git a/node_modules/pump/test-browser.js b/node_modules/pump/test-browser.js new file mode 100644 index 0000000..9a06c8a --- /dev/null +++ b/node_modules/pump/test-browser.js @@ -0,0 +1,66 @@ +var stream = require('stream') +var pump = require('./index') + +var rs = new stream.Readable() +var ws = new stream.Writable() + +rs._read = function (size) { + this.push(Buffer(size).fill('abc')) +} + +ws._write = function (chunk, encoding, cb) { + setTimeout(function () { + cb() + }, 100) +} + +var toHex = function () { + var reverse = new (require('stream').Transform)() + + reverse._transform = function (chunk, enc, callback) { + reverse.push(chunk.toString('hex')) + callback() + } + + return reverse +} + +var wsClosed = false +var rsClosed = false +var callbackCalled = false + +var check = function () { + if (wsClosed && rsClosed && callbackCalled) { + console.log('test-browser.js passes') + clearTimeout(timeout) + } +} + +ws.on('finish', function () { + wsClosed = true + check() +}) + +rs.on('end', function () { + rsClosed = true + check() +}) + +var res = pump(rs, toHex(), toHex(), toHex(), ws, function () { + callbackCalled = true + check() +}) + +if (res !== ws) { + throw new Error('should return last stream') +} + +setTimeout(function () { + rs.push(null) + rs.emit('close') +}, 1000) + +var timeout = setTimeout(function () { + check() + throw new Error('timeout') +}, 5000) diff --git a/node_modules/pump/test-node.js b/node_modules/pump/test-node.js new file mode 100644 index 0000000..561251a --- /dev/null +++ b/node_modules/pump/test-node.js @@ -0,0 +1,53 @@ +var pump = require('./index') + +var rs = require('fs').createReadStream('/dev/random') +var ws = require('fs').createWriteStream('/dev/null') + +var toHex = function () { + var reverse = new (require('stream').Transform)() + + reverse._transform = function (chunk, enc, callback) { + reverse.push(chunk.toString('hex')) + callback() + } + + return reverse +} + +var wsClosed = false +var rsClosed = false +var callbackCalled = false + +var check = function () { + if (wsClosed && rsClosed && callbackCalled) { + console.log('test-node.js passes') + clearTimeout(timeout) + } +} + +ws.on('close', function () { + wsClosed = true + check() +}) + +rs.on('close', function () { + rsClosed = true + check() +}) + +var res = pump(rs, toHex(), toHex(), toHex(), ws, function () { + callbackCalled = true + check() +}) + +if (res !== ws) { + throw new Error('should return last stream') +} + +setTimeout(function () { + rs.destroy() +}, 1000) + +var timeout = setTimeout(function () { + throw new Error('timeout') +}, 5000) diff --git a/node_modules/punycode/LICENSE-MIT.txt b/node_modules/punycode/LICENSE-MIT.txt new file mode 100644 index 0000000..a41e0a7 --- /dev/null +++ b/node_modules/punycode/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/punycode/README.md b/node_modules/punycode/README.md new file mode 100644 index 0000000..ee2f9d6 --- /dev/null +++ b/node_modules/punycode/README.md @@ -0,0 +1,122 @@ +# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/codecov/c/github/bestiejs/punycode.js.svg)](https://codecov.io/gh/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) + +Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). + +The current version supports recent versions of Node.js only. It provides a CommonJS module and an ES6 module. For the old version that offers the same functionality with broader support, including Rhino, Ringo, Narwhal, and web browsers, see [v1.4.1](https://github.com/bestiejs/punycode.js/releases/tag/v1.4.1). + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install punycode --save +``` + +In [Node.js](https://nodejs.org/): + +```js +const punycode = require('punycode'); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode/package.json b/node_modules/punycode/package.json new file mode 100644 index 0000000..2ef618b --- /dev/null +++ b/node_modules/punycode/package.json @@ -0,0 +1,88 @@ +{ + "_args": [ + [ + "punycode@2.1.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "punycode@2.1.1", + "_id": "punycode@2.1.1", + "_inBundle": false, + "_integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "_location": "/punycode", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "punycode@2.1.1", + "name": "punycode", + "escapedName": "punycode", + "rawSpec": "2.1.1", + "saveSpec": null, + "fetchSpec": "2.1.1" + }, + "_requiredBy": [ + "/uri-js" + ], + "_resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "_spec": "2.1.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/bestiejs/punycode.js/issues" + }, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + } + ], + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "devDependencies": { + "codecov": "^1.0.1", + "istanbul": "^0.4.1", + "mocha": "^2.5.3" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "LICENSE-MIT.txt", + "punycode.js", + "punycode.es6.js" + ], + "homepage": "https://mths.be/punycode", + "jsnext:main": "punycode.es6.js", + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "main": "punycode.js", + "module": "punycode.es6.js", + "name": "punycode", + "repository": { + "type": "git", + "url": "git+https://github.com/bestiejs/punycode.js.git" + }, + "scripts": { + "prepublish": "node scripts/prepublish.js", + "test": "mocha tests" + }, + "version": "2.1.1" +} diff --git a/node_modules/punycode/punycode.es6.js b/node_modules/punycode/punycode.es6.js new file mode 100644 index 0000000..4610bc9 --- /dev/null +++ b/node_modules/punycode/punycode.es6.js @@ -0,0 +1,441 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + const result = []; + let length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + const parts = string.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + const labels = string.split('.'); + const encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = array => String.fromCodePoint(...array); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + let oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + let inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + let basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; +export default punycode; diff --git a/node_modules/punycode/punycode.js b/node_modules/punycode/punycode.js new file mode 100644 index 0000000..ea61fd0 --- /dev/null +++ b/node_modules/punycode/punycode.js @@ -0,0 +1,440 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + const result = []; + let length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + const parts = string.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + const labels = string.split('.'); + const encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = array => String.fromCodePoint(...array); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + let oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + let inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + let basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +module.exports = punycode; diff --git a/node_modules/pupa/index.d.ts b/node_modules/pupa/index.d.ts new file mode 100644 index 0000000..762aae0 --- /dev/null +++ b/node_modules/pupa/index.d.ts @@ -0,0 +1,32 @@ +/** +Simple micro templating. + +@param template - Text with placeholders for `data` properties. +@param data - Data to interpolate into `template`. + +@example +``` +import pupa = require('pupa'); + +pupa('The mobile number of {name} is {phone.mobile}', { + name: 'Sindre', + phone: { + mobile: '609 24 363' + } +}); +//=> 'The mobile number of Sindre is 609 24 363' + +pupa('I like {0} and {1}', ['🦄', '🐮']); +//=> 'I like 🦄 and 🐮' + +// Double braces encodes the HTML entities to avoid code injection +pupa('I like {{0}} and {{1}}', ['
      🦄
      ', '🐮']); +//=> 'I like <br>🦄</br> and <i>🐮</i>' +``` +*/ +declare function pupa( + template: string, + data: unknown[] | {[key: string]: any} +): string; + +export = pupa; diff --git a/node_modules/pupa/index.js b/node_modules/pupa/index.js new file mode 100644 index 0000000..85739eb --- /dev/null +++ b/node_modules/pupa/index.js @@ -0,0 +1,39 @@ +'use strict'; +const {htmlEscape} = require('escape-goat'); + +module.exports = (template, data) => { + if (typeof template !== 'string') { + throw new TypeError(`Expected a \`string\` in the first argument, got \`${typeof template}\``); + } + + if (typeof data !== 'object') { + throw new TypeError(`Expected an \`object\` or \`Array\` in the second argument, got \`${typeof data}\``); + } + + // The regex tries to match either a number inside `{{ }}` or a valid JS identifier or key path. + const doubleBraceRegex = /{{(\d+|[a-z$_][a-z\d$_]*?(?:\.[a-z\d$_]*?)*?)}}/gi; + + if (doubleBraceRegex.test(template)) { + template = template.replace(doubleBraceRegex, (_, key) => { + let result = data; + + for (const property of key.split('.')) { + result = result ? result[property] : ''; + } + + return htmlEscape(String(result)); + }); + } + + const braceRegex = /{(\d+|[a-z$_][a-z\d$_]*?(?:\.[a-z\d$_]*?)*?)}/gi; + + return template.replace(braceRegex, (_, key) => { + let result = data; + + for (const property of key.split('.')) { + result = result ? result[property] : ''; + } + + return String(result); + }); +}; diff --git a/node_modules/pupa/license b/node_modules/pupa/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/pupa/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/pupa/package.json b/node_modules/pupa/package.json new file mode 100644 index 0000000..444139f --- /dev/null +++ b/node_modules/pupa/package.json @@ -0,0 +1,79 @@ +{ + "_from": "pupa@^2.1.1", + "_id": "pupa@2.1.1", + "_inBundle": false, + "_integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "_location": "/pupa", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "pupa@^2.1.1", + "name": "pupa", + "escapedName": "pupa", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "_shasum": "f5e8fd4afc2c5d97828faa523549ed8744a20d62", + "_spec": "pupa@^2.1.1", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/pupa/issues" + }, + "bundleDependencies": false, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "deprecated": false, + "description": "Simple micro templating", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/pupa#readme", + "keywords": [ + "string", + "formatting", + "template", + "object", + "format", + "interpolate", + "interpolation", + "templating", + "expand", + "simple", + "replace", + "placeholders", + "values", + "transform", + "micro" + ], + "license": "MIT", + "name": "pupa", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/pupa.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.1.1" +} diff --git a/node_modules/pupa/readme.md b/node_modules/pupa/readme.md new file mode 100644 index 0000000..bb9ab18 --- /dev/null +++ b/node_modules/pupa/readme.md @@ -0,0 +1,63 @@ +# pupa [![Build Status](https://travis-ci.org/sindresorhus/pupa.svg?branch=master)](https://travis-ci.org/sindresorhus/pupa) + +> Simple micro templating + +Useful when all you need is to fill in some placeholders. + + +## Install + +``` +$ npm install pupa +``` + + +## Usage + +```js +const pupa = require('pupa'); + +pupa('The mobile number of {name} is {phone.mobile}', { + name: 'Sindre', + phone: { + mobile: '609 24 363' + } +}); +//=> 'The mobile number of Sindre is 609 24 363' + +pupa('I like {0} and {1}', ['🦄', '🐮']); +//=> 'I like 🦄 and 🐮' + +// Double braces encodes the HTML entities to avoid code injection +pupa('I like {{0}} and {{1}}', ['
      🦄
      ', '🐮']); +//=> 'I like <br>🦄</br> and <i>🐮</i>' +``` + + +## API + +### pupa(template, data) + +#### template + +Type: `string` + +Text with placeholders for `data` properties. + +#### data + +Type: `object | unknown[]` + +Data to interpolate into `template`. + + +## FAQ + +### What about template literals? + +Template literals expand on creation. This module expands the template on execution, which can be useful if either or both template and data are lazily created or user-supplied. + + +## Related + +- [pupa-cli](https://github.com/sindresorhus/pupa-cli) - CLI for this module diff --git a/node_modules/qs/.editorconfig b/node_modules/qs/.editorconfig new file mode 100644 index 0000000..a4893dd --- /dev/null +++ b/node_modules/qs/.editorconfig @@ -0,0 +1,30 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 160 + +[test/*] +max_line_length = off + +[*.md] +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[LICENSE] +indent_size = 2 +max_line_length = off diff --git a/node_modules/qs/.eslintignore b/node_modules/qs/.eslintignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/node_modules/qs/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/node_modules/qs/.eslintrc b/node_modules/qs/.eslintrc new file mode 100644 index 0000000..e3bde89 --- /dev/null +++ b/node_modules/qs/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "consistent-return": 1, + "func-name-matching": 0, + "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], + "indent": [2, 4], + "max-lines-per-function": [2, { "max": 150 }], + "max-params": [2, 14], + "max-statements": [2, 52], + "multiline-comment-style": 0, + "no-continue": 1, + "no-magic-numbers": 0, + "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], + "operator-linebreak": [2, "before"], + } +} diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md new file mode 100644 index 0000000..50505c4 --- /dev/null +++ b/node_modules/qs/CHANGELOG.md @@ -0,0 +1,256 @@ +## **6.7.0** +- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219) +- [Fix] correctly parse nested arrays (#212) +- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source +- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty` +- [Refactor] `utils`: `isBuffer`: small tweak; add tests +- [Refactor] use cached `Array.isArray` +- [Refactor] `parse`/`stringify`: make a function to normalize the options +- [Refactor] `utils`: reduce observable [[Get]]s +- [Refactor] `stringify`/`utils`: cache `Array.isArray` +- [Tests] always use `String(x)` over `x.toString()` +- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10 +- [Tests] temporarily allow coverage to fail + +## **6.6.0** +- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268) +- [New] move two-value combine to a `utils` function (#189) +- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) +- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260) +- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1` +- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided +- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269) +- [Refactor] `parse`: only need to reassign the var once +- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults +- [Refactor] add missing defaults +- [Refactor] `parse`: one less `concat` call +- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape` +- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS + +## **6.5.2** +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) +- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` + +## **6.5.1** +- [Fix] Fix parsing & compacting very deep objects (#224) +- [Refactor] name utils functions +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node +- [Tests] Use precise dist for Node.js 0.6 runtime (#225) +- [Tests] make 0.6 required, now that it’s passing +- [Tests] on `node` `v8.2`; fix npm on node 0.6 + +## **6.5.0** +- [New] add `utils.assign` +- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) +- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) +- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) +- [Fix] do not mutate `options` argument (#207) +- [Refactor] `parse`: cache index to reuse in else statement (#182) +- [Docs] add various badges to readme (#208) +- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` +- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 +- [Tests] add `editorconfig-tools` + +## **6.4.0** +- [New] `qs.stringify`: add `encodeValuesOnly` option +- [Fix] follow `allowPrototypes` option during merge (#201, #201) +- [Fix] support keys starting with brackets (#202, #200) +- [Fix] chmod a-x +- [Dev Deps] update `eslint` +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds +- [eslint] reduce warnings + +## **6.3.2** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Dev Deps] update `eslint` +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.3.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` +- [Tests] on all node minors; improve test matrix +- [Docs] document stringify option `allowDots` (#195) +- [Docs] add empty object and array values example (#195) +- [Docs] Fix minor inconsistency/typo (#192) +- [Docs] document stringify option `sort` (#191) +- [Refactor] `stringify`: throw faster with an invalid encoder +- [Refactor] remove unnecessary escapes (#184) +- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) + +## **6.3.0** +- [New] Add support for RFC 1738 (#174, #173) +- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) +- [Fix] ensure `utils.merge` handles merging two arrays +- [Refactor] only constructors should be capitalized +- [Refactor] capitalized var names are for constructors only +- [Refactor] avoid using a sparse array +- [Robustness] `formats`: cache `String#replace` +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` +- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix +- [Tests] flesh out arrayLimit/arrayFormat tests (#107) +- [Tests] skip Object.create tests when null objects are not available +- [Tests] Turn on eslint for test files (#175) + +## **6.2.3** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.2.2** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## **6.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values +- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` +- [Tests] remove `parallelshell` since it does not reliably report failures +- [Tests] up to `node` `v6.3`, `v5.12` +- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` + +## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) +- [New] pass Buffers to the encoder/decoder directly (#161) +- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) +- [Fix] fix compacting of nested sparse arrays (#150) + +## **6.1.2 +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.1.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) +- [New] allowDots option for `stringify` (#151) +- [Fix] "sort" option should work at a depth of 3 or more (#151) +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## **6.0.4** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.0.3** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) +- Revert ES6 requirement and restore support for node down to v0.8. + +## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) +- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json + +## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) +- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 + +## **5.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values + +## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) +- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string + +## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) +- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional +- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify + +## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) +- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false +- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm + +## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) +- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional + +## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) +- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" + +## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) +- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties +- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost +- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing +- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object +- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option +- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. +- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 +- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 +- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign +- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute + +## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) +- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function + +## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) +- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option + +## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) +- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/qs/LICENSE b/node_modules/qs/LICENSE new file mode 100644 index 0000000..d456948 --- /dev/null +++ b/node_modules/qs/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2014 Nathan LaFreniere and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md new file mode 100644 index 0000000..8590cfd --- /dev/null +++ b/node_modules/qs/README.md @@ -0,0 +1,570 @@ +# qs [![Version Badge][2]][1] + +[![Build Status][3]][4] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +A querystring parsing and stringifying library with some added security. + +Lead Maintainer: [Jordan Harband](https://github.com/ljharb) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var qs = require('qs'); +var assert = require('assert'); + +var obj = qs.parse('a=c'); +assert.deepEqual(obj, { a: 'c' }); + +var str = qs.stringify(obj); +assert.equal(str, 'a=c'); +``` + +### Parsing Objects + +[](#preventEval) +```javascript +qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +assert.deepEqual(qs.parse('foo[bar]=baz'), { + foo: { + bar: 'baz' + } +}); +``` + +When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: + +```javascript +var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); +assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); +``` + +By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. + +```javascript +var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); +assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); +``` + +URI encoded strings work too: + +```javascript +assert.deepEqual(qs.parse('a%5Bb%5D=c'), { + a: { b: 'c' } +}); +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { + foo: { + bar: { + baz: 'foobarbaz' + } + } +}); +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +var expected = { + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +}; +var string = 'a[b][c][d][e][f][g][h][i]=j'; +assert.deepEqual(qs.parse(string), expected); +``` + +This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: + +```javascript +var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); +assert.deepEqual(limited, { a: 'b' }); +``` + +To bypass the leading question mark, use `ignoreQueryPrefix`: + +```javascript +var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); +assert.deepEqual(prefixed, { a: 'b', c: 'd' }); +``` + +An optional delimiter can also be passed: + +```javascript +var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); +assert.deepEqual(delimited, { a: 'b', c: 'd' }); +``` + +Delimiters can be a regular expression too: + +```javascript +var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); +``` + +Option `allowDots` can be used to enable dot notation: + +```javascript +var withDots = qs.parse('a.b=c', { allowDots: true }); +assert.deepEqual(withDots, { a: { b: 'c' } }); +``` + +If you have to deal with legacy browsers or services, there's +also support for decoding percent-encoded octets as iso-8859-1: + +```javascript +var oldCharset = qs.parse('a=%A7', { charset: 'iso-8859-1' }); +assert.deepEqual(oldCharset, { a: '§' }); +``` + +Some services add an initial `utf8=✓` value to forms so that old +Internet Explorer versions are more likely to submit the form as +utf-8. Additionally, the server can check the value against wrong +encodings of the checkmark character and detect that a query string +or `application/x-www-form-urlencoded` body was *not* sent as +utf-8, eg. if the form had an `accept-charset` parameter or the +containing page had a different character set. + +**qs** supports this mechanism via the `charsetSentinel` option. +If specified, the `utf8` parameter will be omitted from the +returned object. It will be used to switch to `iso-8859-1`/`utf-8` +mode depending on how the checkmark is encoded. + +**Important**: When you specify both the `charset` option and the +`charsetSentinel` option, the `charset` will be overridden when +the request contains a `utf8` parameter from which the actual +charset can be deduced. In that sense the `charset` will behave +as the default charset rather than the authoritative charset. + +```javascript +var detectedAsUtf8 = qs.parse('utf8=%E2%9C%93&a=%C3%B8', { + charset: 'iso-8859-1', + charsetSentinel: true +}); +assert.deepEqual(detectedAsUtf8, { a: 'ø' }); + +// Browsers encode the checkmark as ✓ when submitting as iso-8859-1: +var detectedAsIso8859_1 = qs.parse('utf8=%26%2310003%3B&a=%F8', { + charset: 'utf-8', + charsetSentinel: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: 'ø' }); +``` + +If you want to decode the `&#...;` syntax to the actual character, +you can specify the `interpretNumericEntities` option as well: + +```javascript +var detectedAsIso8859_1 = qs.parse('a=%26%239786%3B', { + charset: 'iso-8859-1', + interpretNumericEntities: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: '☺' }); +``` + +It also works when the charset has been detected in `charsetSentinel` +mode. + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +var withArray = qs.parse('a[]=b&a[]=c'); +assert.deepEqual(withArray, { a: ['b', 'c'] }); +``` + +You may specify an index as well: + +```javascript +var withIndexes = qs.parse('a[1]=c&a[0]=b'); +assert.deepEqual(withIndexes, { a: ['b', 'c'] }); +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +var noSparse = qs.parse('a[1]=b&a[15]=c'); +assert.deepEqual(noSparse, { a: ['b', 'c'] }); +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +var withEmptyString = qs.parse('a[]=&a[]=b'); +assert.deepEqual(withEmptyString, { a: ['', 'b'] }); + +var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); +assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array. + +```javascript +var withMaxIndex = qs.parse('a[100]=b'); +assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); +assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); +``` + +To disable array parsing entirely, set `parseArrays` to `false`. + +```javascript +var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); +assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); +``` + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +var mixedNotation = qs.parse('a[0]=b&a[b]=c'); +assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); +``` + +You can also create arrays of objects: + +```javascript +var arraysOfObjects = qs.parse('a[][b]=c'); +assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); +``` + +Some people use comma to join array, **qs** can parse it: +```javascript +var arraysOfObjects = qs.parse('a=b,c', { comma: true }) +assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] }) +``` +(_this cannot convert nested objects, such as `a={b:1},{c:d}`_) + +### Stringifying + +[](#preventEval) +```javascript +qs.stringify(object, [options]); +``` + +When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: + +```javascript +assert.equal(qs.stringify({ a: 'b' }), 'a=b'); +assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); +``` + +This encoding can be disabled by setting the `encode` option to `false`: + +```javascript +var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); +assert.equal(unencoded, 'a[b]=c'); +``` + +Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: +```javascript +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +); +assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); +``` + +This encoding can also be replaced by a custom encoding method set as `encoder` option: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { + // Passed in values `a`, `b`, `c` + return // Return encoded string +}}) +``` + +_(Note: the `encoder` option does not apply if `encode` is `false`)_ + +Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str) { + // Passed in values `x`, `z` + return // Return decoded string +}}) +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +You may use the `arrayFormat` option to specify the format of the output array: + +```javascript +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) +// 'a[0]=b&a[1]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) +// 'a[]=b&a[]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) +// 'a=b&a=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' }) +// 'a=b,c' +``` + +When objects are stringified, by default they use bracket notation: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); +// 'a[b][c]=d&a[b][e]=f' +``` + +You may override this to use dot notation by setting the `allowDots` option to `true`: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); +// 'a.b.c=d&a.b.e=f' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +assert.equal(qs.stringify({ a: '' }), 'a='); +``` + +Key with no values (such as an empty object or array) will return nothing: + +```javascript +assert.equal(qs.stringify({ a: [] }), ''); +assert.equal(qs.stringify({ a: {} }), ''); +assert.equal(qs.stringify({ a: [{}] }), ''); +assert.equal(qs.stringify({ a: { b: []} }), ''); +assert.equal(qs.stringify({ a: { b: {}} }), ''); +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); +``` + +The query string may optionally be prepended with a question mark: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); +``` + +The delimiter may be overridden with stringify as well: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); +``` + +If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: + +```javascript +var date = new Date(7); +assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); +assert.equal( + qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), + 'a=7' +); +``` + +You may use the `sort` option to affect the order of parameter keys: + +```javascript +function alphabeticalSort(a, b) { + return a.localeCompare(b); +} +assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); +``` + +Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. +If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you +pass an array, it will be used to select properties and array indices for stringification: + +```javascript +function filterFunc(prefix, value) { + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; +} +qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); +// 'a=b&c=d&e[f]=123&e[g][0]=4' +qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); +// 'a=b&e=f' +qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); +// 'a[0]=b&a[2]=d' +``` + +### Handling of `null` values + +By default, `null` values are treated like empty strings: + +```javascript +var withNull = qs.stringify({ a: null, b: '' }); +assert.equal(withNull, 'a=&b='); +``` + +Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. + +```javascript +var equalsInsensitive = qs.parse('a&b='); +assert.deepEqual(equalsInsensitive, { a: '', b: '' }); +``` + +To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` +values have no `=` sign: + +```javascript +var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); +assert.equal(strictNull, 'a&b='); +``` + +To parse values without `=` back to `null` use the `strictNullHandling` flag: + +```javascript +var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); +assert.deepEqual(parsedStrictNull, { a: null, b: '' }); +``` + +To completely skip rendering keys with `null` values, use the `skipNulls` flag: + +```javascript +var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); +assert.equal(nullsSkipped, 'a=b'); +``` + +If you're communicating with legacy systems, you can switch to `iso-8859-1` +using the `charset` option: + +```javascript +var iso = qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }); +assert.equal(iso, '%E6=%E6'); +``` + +Characters that don't exist in `iso-8859-1` will be converted to numeric +entities, similar to what browsers do: + +```javascript +var numeric = qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }); +assert.equal(numeric, 'a=%26%239786%3B'); +``` + +You can use the `charsetSentinel` option to announce the character by +including an `utf8=✓` parameter with the proper encoding if the checkmark, +similar to what Ruby on Rails and others do when submitting forms. + +```javascript +var sentinel = qs.stringify({ a: '☺' }, { charsetSentinel: true }); +assert.equal(sentinel, 'utf8=%E2%9C%93&a=%E2%98%BA'); + +var isoSentinel = qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }); +assert.equal(isoSentinel, 'utf8=%26%2310003%3B&a=%E6'); +``` + +### Dealing with special character sets + +By default the encoding and decoding of characters is done in `utf-8`, +and `iso-8859-1` support is also built in via the `charset` parameter. + +If you wish to encode querystrings to a different character set (i.e. +[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the +[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: + +```javascript +var encoder = require('qs-iconv/encoder')('shift_jis'); +var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); +assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); +``` + +This also works for decoding of query strings: + +```javascript +var decoder = require('qs-iconv/decoder')('shift_jis'); +var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); +assert.deepEqual(obj, { a: 'こんにちは!' }); +``` + +### RFC 3986 and RFC 1738 space encoding + +RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. +In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. + +``` +assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); +``` + +[1]: https://npmjs.org/package/qs +[2]: http://versionbadg.es/ljharb/qs.svg +[3]: https://api.travis-ci.org/ljharb/qs.svg +[4]: https://travis-ci.org/ljharb/qs +[5]: https://david-dm.org/ljharb/qs.svg +[6]: https://david-dm.org/ljharb/qs +[7]: https://david-dm.org/ljharb/qs/dev-status.svg +[8]: https://david-dm.org/ljharb/qs?type=dev +[9]: https://ci.testling.com/ljharb/qs.png +[10]: https://ci.testling.com/ljharb/qs +[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: http://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/qs.svg +[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/node_modules/qs/dist/qs.js b/node_modules/qs/dist/qs.js new file mode 100644 index 0000000..17f4e60 --- /dev/null +++ b/node_modules/qs/dist/qs.js @@ -0,0 +1,782 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1) { + val = val.split(','); + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options) { + var leaf = val; + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + +},{"./utils":5}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { // eslint-disable-line func-name-matching + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { // eslint-disable-line func-name-matching + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { // eslint-disable-line func-name-matching + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + formatter: formats.formatters[formats['default']], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( // eslint-disable-line func-name-matching + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; + +},{}]},{},[2])(2) +}); diff --git a/node_modules/qs/lib/formats.js b/node_modules/qs/lib/formats.js new file mode 100644 index 0000000..df45997 --- /dev/null +++ b/node_modules/qs/lib/formats.js @@ -0,0 +1,18 @@ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +module.exports = { + 'default': 'RFC3986', + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return value; + } + }, + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js new file mode 100644 index 0000000..0d6a97d --- /dev/null +++ b/node_modules/qs/lib/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js new file mode 100644 index 0000000..d81628b --- /dev/null +++ b/node_modules/qs/lib/parse.js @@ -0,0 +1,242 @@ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: '&', + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1000, + parseArrays: true, + plainObjects: false, + strictNullHandling: false +}; + +var interpretNumericEntities = function (str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset); + val = options.decoder(part.slice(pos + 1), defaults.decoder, charset); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (val && options.comma && val.indexOf(',') > -1) { + val = val.split(','); + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options) { + var leaf = val; + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js new file mode 100644 index 0000000..7455049 --- /dev/null +++ b/node_modules/qs/lib/stringify.js @@ -0,0 +1,269 @@ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { // eslint-disable-line func-name-matching + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { // eslint-disable-line func-name-matching + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { // eslint-disable-line func-name-matching + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + formatter: formats.formatters[formats['default']], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( // eslint-disable-line func-name-matching + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js new file mode 100644 index 0000000..1b219cd --- /dev/null +++ b/node_modules/qs/lib/utils.js @@ -0,0 +1,230 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json new file mode 100644 index 0000000..860e849 --- /dev/null +++ b/node_modules/qs/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "qs@6.7.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "qs@6.7.0", + "_id": "qs@6.7.0", + "_inBundle": false, + "_integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "_location": "/qs", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "qs@6.7.0", + "name": "qs", + "escapedName": "qs", + "rawSpec": "6.7.0", + "saveSpec": null, + "fetchSpec": "6.7.0" + }, + "_requiredBy": [ + "/body-parser", + "/express" + ], + "_resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "_spec": "6.7.0", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/ljharb/qs/issues" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "dependencies": {}, + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "devDependencies": { + "@ljharb/eslint-config": "^13.1.1", + "browserify": "^16.2.3", + "covert": "^1.1.1", + "editorconfig-tools": "^0.1.1", + "eslint": "^5.15.3", + "evalmd": "^0.0.17", + "for-each": "^0.3.3", + "iconv-lite": "^0.4.24", + "mkdirp": "^0.5.1", + "object-inspect": "^1.6.0", + "qs-iconv": "^1.0.4", + "safe-publish-latest": "^1.1.2", + "safer-buffer": "^2.1.2", + "tape": "^4.10.1" + }, + "engines": { + "node": ">=0.6" + }, + "homepage": "https://github.com/ljharb/qs", + "keywords": [ + "querystring", + "qs", + "query", + "url", + "parse", + "stringify" + ], + "license": "BSD-3-Clause", + "main": "lib/index.js", + "name": "qs", + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/qs.git" + }, + "scripts": { + "coverage": "covert test", + "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", + "lint": "eslint lib/*.js test/*.js", + "postlint": "editorconfig-tools check * lib/* test/*", + "prepublish": "safe-publish-latest && npm run dist", + "pretest": "npm run --silent readme && npm run --silent lint", + "readme": "evalmd README.md", + "test": "npm run --silent coverage", + "tests-only": "node test" + }, + "version": "6.7.0" +} diff --git a/node_modules/qs/test/.eslintrc b/node_modules/qs/test/.eslintrc new file mode 100644 index 0000000..9ebbb92 --- /dev/null +++ b/node_modules/qs/test/.eslintrc @@ -0,0 +1,17 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "consistent-return": 2, + "function-paren-newline": 0, + "max-lines": 0, + "max-lines-per-function": 0, + "max-nested-callbacks": [2, 3], + "max-statements": 0, + "no-buffer-constructor": 0, + "no-extend-native": 0, + "no-magic-numbers": 0, + "object-curly-newline": 0, + "sort-keys": 0 + } +} diff --git a/node_modules/qs/test/index.js b/node_modules/qs/test/index.js new file mode 100644 index 0000000..5e6bc8f --- /dev/null +++ b/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js new file mode 100644 index 0000000..8967789 --- /dev/null +++ b/node_modules/qs/test/parse.js @@ -0,0 +1,676 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('parses jquery-param strings', function (st) { + // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8' + var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8'; + var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] }; + st.deepEqual(qs.parse(encoded), expected); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses string with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] }); + st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } }); + st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null }); + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return String(iconv.decode(SaferBuffer.from(result), 'shift_jis')); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.parse('a=b', { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('parses an iso-8859-1 string if asked to', function (st) { + st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' }); + st.end(); + }); + + var urlEncodedCheckmarkInUtf8 = '%E2%9C%93'; + var urlEncodedOSlashInUtf8 = '%C3%B8'; + var urlEncodedNumCheckmark = '%26%2310003%3B'; + var urlEncodedNumSmiley = '%26%239786%3B'; + + t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' }); + st.end(); + }); + + t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) { + st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' }); + st.end(); + }); + + t.test('should ignore an utf8 sentinel with an unknown value', function (st) { + st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, { + charset: 'iso-8859-1', + decoder: function (str, defaultDecoder, charset) { + return str ? defaultDecoder(str, defaultDecoder, charset) : null; + }, + interpretNumericEntities: true + }), { foo: null, bar: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) { + st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' }); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js new file mode 100644 index 0000000..53041c2 --- /dev/null +++ b/node_modules/qs/test/stringify.js @@ -0,0 +1,679 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('stringifies falsy values', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(null, { strictNullHandling: true }), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(0), ''); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies nested falsy values', function (st) { + st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D='); + st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D'); + st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }), + 'a=b%2Cc%2Cd', + 'comma => comma' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'comma' } + ), + 'a.b=c,d', + 'comma: stringifies with dots + comma' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', // a[0][b]=c + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', // a[][b]=c + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.stringify({ a: 'b' }, { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('respects a charset of iso-8859-1', function (st) { + st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6'); + st.end(); + }); + + t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) { + st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B'); + st.end(); + }); + + t.test('respects an explicit charset of utf-8 (the default)', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is utf-8', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }), 'utf8=%E2%9C%93&a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is iso-8859-1', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }), 'utf8=%26%2310003%3B&a=%E6'); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/qs/test/utils.js b/node_modules/qs/test/utils.js new file mode 100644 index 0000000..da31ce5 --- /dev/null +++ b/node_modules/qs/test/utils.js @@ -0,0 +1,136 @@ +'use strict'; + +var test = require('tape'); +var inspect = require('object-inspect'); +var SaferBuffer = require('safer-buffer').Buffer; +var forEach = require('for-each'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.test( + 'avoids invoking array setters unnecessarily', + { skip: typeof Object.defineProperty !== 'function' }, + function (st) { + var setCount = 0; + var getCount = 0; + var observed = []; + Object.defineProperty(observed, 0, { + get: function () { + getCount += 1; + return { bar: 'baz' }; + }, + set: function () { setCount += 1; } + }); + utils.merge(observed, [null]); + st.equal(setCount, 0); + st.equal(getCount, 1); + observed[0] = observed[0]; // eslint-disable-line no-self-assign + st.equal(setCount, 1); + st.equal(getCount, 2); + st.end(); + } + ); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); + +test('combine()', function (t) { + t.test('both arrays', function (st) { + var a = [1]; + var b = [2]; + var combined = utils.combine(a, b); + + st.deepEqual(a, [1], 'a is not mutated'); + st.deepEqual(b, [2], 'b is not mutated'); + st.notEqual(a, combined, 'a !== combined'); + st.notEqual(b, combined, 'b !== combined'); + st.deepEqual(combined, [1, 2], 'combined is a + b'); + + st.end(); + }); + + t.test('one array, one non-array', function (st) { + var aN = 1; + var a = [aN]; + var bN = 2; + var b = [bN]; + + var combinedAnB = utils.combine(aN, b); + st.deepEqual(b, [bN], 'b is not mutated'); + st.notEqual(aN, combinedAnB, 'aN + b !== aN'); + st.notEqual(a, combinedAnB, 'aN + b !== a'); + st.notEqual(bN, combinedAnB, 'aN + b !== bN'); + st.notEqual(b, combinedAnB, 'aN + b !== b'); + st.deepEqual([1, 2], combinedAnB, 'first argument is array-wrapped when not an array'); + + var combinedABn = utils.combine(a, bN); + st.deepEqual(a, [aN], 'a is not mutated'); + st.notEqual(aN, combinedABn, 'a + bN !== aN'); + st.notEqual(a, combinedABn, 'a + bN !== a'); + st.notEqual(bN, combinedABn, 'a + bN !== bN'); + st.notEqual(b, combinedABn, 'a + bN !== b'); + st.deepEqual([1, 2], combinedABn, 'second argument is array-wrapped when not an array'); + + st.end(); + }); + + t.test('neither is an array', function (st) { + var combined = utils.combine(1, 2); + st.notEqual(1, combined, '1 + 2 !== 1'); + st.notEqual(2, combined, '1 + 2 !== 2'); + st.deepEqual([1, 2], combined, 'both arguments are array-wrapped when not an array'); + + st.end(); + }); + + t.end(); +}); + +test('isBuffer()', function (t) { + forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) { + t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer'); + }); + + var fakeBuffer = { constructor: Buffer }; + t.equal(utils.isBuffer(fakeBuffer), false, 'fake buffer is not a buffer'); + + var saferBuffer = SaferBuffer.from('abc'); + t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer'); + + var buffer = Buffer.from ? Buffer.from('abc') : new Buffer('abc'); + t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer'); + t.end(); +}); diff --git a/node_modules/range-parser/HISTORY.md b/node_modules/range-parser/HISTORY.md new file mode 100644 index 0000000..70a973d --- /dev/null +++ b/node_modules/range-parser/HISTORY.md @@ -0,0 +1,56 @@ +1.2.1 / 2019-05-10 +================== + + * Improve error when `str` is not a string + +1.2.0 / 2016-06-01 +================== + + * Add `combine` option to combine overlapping ranges + +1.1.0 / 2016-05-13 +================== + + * Fix incorrectly returning -1 when there is at least one valid range + * perf: remove internal function + +1.0.3 / 2015-10-29 +================== + + * perf: enable strict mode + +1.0.2 / 2014-09-08 +================== + + * Support Node.js 0.6 + +1.0.1 / 2014-09-07 +================== + + * Move repository to jshttp + +1.0.0 / 2013-12-11 +================== + + * Add repository to package.json + * Add MIT license + +0.0.4 / 2012-06-17 +================== + + * Change ret -1 for unsatisfiable and -2 when invalid + +0.0.3 / 2012-06-17 +================== + + * Fix last-byte-pos default to len - 1 + +0.0.2 / 2012-06-14 +================== + + * Add `.type` + +0.0.1 / 2012-06-11 +================== + + * Initial release diff --git a/node_modules/range-parser/LICENSE b/node_modules/range-parser/LICENSE new file mode 100644 index 0000000..3599954 --- /dev/null +++ b/node_modules/range-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015-2016 Douglas Christopher Wilson + +```js +var parseRange = require('range-parser') +``` + +### parseRange(size, header, options) + +Parse the given `header` string where `size` is the maximum size of the resource. +An array of ranges will be returned or negative numbers indicating an error parsing. + + * `-2` signals a malformed header string + * `-1` signals an unsatisfiable range + + + +```js +// parse header from request +var range = parseRange(size, req.headers.range) + +// the type of the range +if (range.type === 'bytes') { + // the ranges + range.forEach(function (r) { + // do something with r.start and r.end + }) +} +``` + +#### Options + +These properties are accepted in the options object. + +##### combine + +Specifies if overlapping & adjacent ranges should be combined, defaults to `false`. +When `true`, ranges will be combined and returned as if they were specified that +way in the header. + + + +```js +parseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true }) +// => [ +// { start: 0, end: 10 }, +// { start: 50, end: 60 } +// ] +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/range-parser/master +[coveralls-url]: https://coveralls.io/r/jshttp/range-parser?branch=master +[node-image]: https://badgen.net/npm/node/range-parser +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/range-parser +[npm-url]: https://npmjs.org/package/range-parser +[npm-version-image]: https://badgen.net/npm/v/range-parser +[travis-image]: https://badgen.net/travis/jshttp/range-parser/master +[travis-url]: https://travis-ci.org/jshttp/range-parser diff --git a/node_modules/range-parser/index.js b/node_modules/range-parser/index.js new file mode 100644 index 0000000..b7dc5c0 --- /dev/null +++ b/node_modules/range-parser/index.js @@ -0,0 +1,162 @@ +/*! + * range-parser + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = rangeParser + +/** + * Parse "Range" header `str` relative to the given file `size`. + * + * @param {Number} size + * @param {String} str + * @param {Object} [options] + * @return {Array} + * @public + */ + +function rangeParser (size, str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string') + } + + var index = str.indexOf('=') + + if (index === -1) { + return -2 + } + + // split the range string + var arr = str.slice(index + 1).split(',') + var ranges = [] + + // add ranges type + ranges.type = str.slice(0, index) + + // parse all ranges + for (var i = 0; i < arr.length; i++) { + var range = arr[i].split('-') + var start = parseInt(range[0], 10) + var end = parseInt(range[1], 10) + + // -nnn + if (isNaN(start)) { + start = size - end + end = size - 1 + // nnn- + } else if (isNaN(end)) { + end = size - 1 + } + + // limit last-byte-pos to current length + if (end > size - 1) { + end = size - 1 + } + + // invalid or unsatisifiable + if (isNaN(start) || isNaN(end) || start > end || start < 0) { + continue + } + + // add range + ranges.push({ + start: start, + end: end + }) + } + + if (ranges.length < 1) { + // unsatisifiable + return -1 + } + + return options && options.combine + ? combineRanges(ranges) + : ranges +} + +/** + * Combine overlapping & adjacent ranges. + * @private + */ + +function combineRanges (ranges) { + var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart) + + for (var j = 0, i = 1; i < ordered.length; i++) { + var range = ordered[i] + var current = ordered[j] + + if (range.start > current.end + 1) { + // next range + ordered[++j] = range + } else if (range.end > current.end) { + // extend range + current.end = range.end + current.index = Math.min(current.index, range.index) + } + } + + // trim ordered array + ordered.length = j + 1 + + // generate combined range + var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex) + + // copy ranges type + combined.type = ranges.type + + return combined +} + +/** + * Map function to add index value to ranges. + * @private + */ + +function mapWithIndex (range, index) { + return { + start: range.start, + end: range.end, + index: index + } +} + +/** + * Map function to remove index value from ranges. + * @private + */ + +function mapWithoutIndex (range) { + return { + start: range.start, + end: range.end + } +} + +/** + * Sort function to sort ranges by index. + * @private + */ + +function sortByRangeIndex (a, b) { + return a.index - b.index +} + +/** + * Sort function to sort ranges by start position. + * @private + */ + +function sortByRangeStart (a, b) { + return a.start - b.start +} diff --git a/node_modules/range-parser/package.json b/node_modules/range-parser/package.json new file mode 100644 index 0000000..fc5a281 --- /dev/null +++ b/node_modules/range-parser/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + "range-parser@1.2.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "range-parser@1.2.1", + "_id": "range-parser@1.2.1", + "_inBundle": false, + "_integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "_location": "/range-parser", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "range-parser@1.2.1", + "name": "range-parser", + "escapedName": "range-parser", + "rawSpec": "1.2.1", + "saveSpec": null, + "fetchSpec": "1.2.1" + }, + "_requiredBy": [ + "/express", + "/send" + ], + "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "_spec": "1.2.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "bugs": { + "url": "https://github.com/jshttp/range-parser/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "James Wyatt Cready", + "email": "wyatt.cready@lanetix.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "description": "Range header field string parser", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.1.1" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/jshttp/range-parser#readme", + "keywords": [ + "range", + "parser", + "http" + ], + "license": "MIT", + "name": "range-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/range-parser.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "1.2.1" +} diff --git a/node_modules/raw-body/HISTORY.md b/node_modules/raw-body/HISTORY.md new file mode 100644 index 0000000..88c79fc --- /dev/null +++ b/node_modules/raw-body/HISTORY.md @@ -0,0 +1,270 @@ +2.4.0 / 2019-04-17 +================== + + * deps: bytes@3.1.0 + - Add petabyte (`pb`) support + * deps: http-errors@1.7.2 + - Set constructor name when possible + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: iconv-lite@0.4.24 + - Added encoding MIK + +2.3.3 / 2018-05-08 +================== + + * deps: http-errors@1.6.3 + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.0 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.23 + - Fix loading encoding with year appended + - Fix deprecation warnings on Node.js 10+ + +2.3.2 / 2017-09-09 +================== + + * deps: iconv-lite@0.4.19 + - Fix ISO-8859-1 regression + - Update Windows-1255 + +2.3.1 / 2017-09-07 +================== + + * deps: bytes@3.0.0 + * deps: http-errors@1.6.2 + - deps: depd@1.1.1 + * perf: skip buffer decoding on overage chunk + +2.3.0 / 2017-08-04 +================== + + * Add TypeScript definitions + * Use `http-errors` for standard emitted errors + * deps: bytes@2.5.0 + * deps: iconv-lite@0.4.18 + - Add support for React Native + - Add a warning if not loaded as utf-8 + - Fix CESU-8 decoding in Node.js 8 + - Improve speed of ISO-8859-1 encoding + +2.2.0 / 2017-01-02 +================== + + * deps: iconv-lite@0.4.15 + - Added encoding MS-31J + - Added encoding MS-932 + - Added encoding MS-936 + - Added encoding MS-949 + - Added encoding MS-950 + - Fix GBK/GB18030 handling of Euro character + +2.1.7 / 2016-06-19 +================== + + * deps: bytes@2.4.0 + * perf: remove double-cleanup on happy path + +2.1.6 / 2016-03-07 +================== + + * deps: bytes@2.3.0 + - Drop partial bytes on all parsed units + - Fix parsing byte string that looks like hex + +2.1.5 / 2015-11-30 +================== + + * deps: bytes@2.2.0 + * deps: iconv-lite@0.4.13 + +2.1.4 / 2015-09-27 +================== + + * Fix masking critical errors from `iconv-lite` + * deps: iconv-lite@0.4.12 + - Fix CESU-8 decoding in Node.js 4.x + +2.1.3 / 2015-09-12 +================== + + * Fix sync callback when attaching data listener causes sync read + - Node.js 0.10 compatibility issue + +2.1.2 / 2015-07-05 +================== + + * Fix error stack traces to skip `makeError` + * deps: iconv-lite@0.4.11 + - Add encoding CESU-8 + +2.1.1 / 2015-06-14 +================== + + * Use `unpipe` module for unpiping requests + +2.1.0 / 2015-05-28 +================== + + * deps: iconv-lite@0.4.10 + - Improved UTF-16 endianness detection + - Leading BOM is now removed when decoding + - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails + +2.0.2 / 2015-05-21 +================== + + * deps: bytes@2.1.0 + - Slight optimizations + +2.0.1 / 2015-05-10 +================== + + * Fix a false-positive when unpiping in Node.js 0.8 + +2.0.0 / 2015-05-08 +================== + + * Return a promise without callback instead of thunk + * deps: bytes@2.0.1 + - units no longer case sensitive when parsing + +1.3.4 / 2015-04-15 +================== + + * Fix hanging callback if request aborts during read + * deps: iconv-lite@0.4.8 + - Add encoding alias UNICODE-1-1-UTF-7 + +1.3.3 / 2015-02-08 +================== + + * deps: iconv-lite@0.4.7 + - Gracefully support enumerables on `Object.prototype` + +1.3.2 / 2015-01-20 +================== + + * deps: iconv-lite@0.4.6 + - Fix rare aliases of single-byte encodings + +1.3.1 / 2014-11-21 +================== + + * deps: iconv-lite@0.4.5 + - Fix Windows-31J and X-SJIS encoding support + +1.3.0 / 2014-07-20 +================== + + * Fully unpipe the stream on error + - Fixes `Cannot switch to old mode now` error on Node.js 0.10+ + +1.2.3 / 2014-07-20 +================== + + * deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + +1.2.2 / 2014-06-19 +================== + + * Send invalid encoding error to callback + +1.2.1 / 2014-06-15 +================== + + * deps: iconv-lite@0.4.3 + - Added encodings UTF-16BE and UTF-16 with BOM + +1.2.0 / 2014-06-13 +================== + + * Passing string as `options` interpreted as encoding + * Support all encodings from `iconv-lite` + +1.1.7 / 2014-06-12 +================== + + * use `string_decoder` module from npm + +1.1.6 / 2014-05-27 +================== + + * check encoding for old streams1 + * support node.js < 0.10.6 + +1.1.5 / 2014-05-14 +================== + + * bump bytes + +1.1.4 / 2014-04-19 +================== + + * allow true as an option + * bump bytes + +1.1.3 / 2014-03-02 +================== + + * fix case when length=null + +1.1.2 / 2013-12-01 +================== + + * be less strict on state.encoding check + +1.1.1 / 2013-11-27 +================== + + * add engines + +1.1.0 / 2013-11-27 +================== + + * add err.statusCode and err.type + * allow for encoding option to be true + * pause the stream instead of dumping on error + * throw if the stream's encoding is set + +1.0.1 / 2013-11-19 +================== + + * dont support streams1, throw if dev set encoding + +1.0.0 / 2013-11-17 +================== + + * rename `expected` option to `length` + +0.2.0 / 2013-11-15 +================== + + * republish + +0.1.1 / 2013-11-15 +================== + + * use bytes + +0.1.0 / 2013-11-11 +================== + + * generator support + +0.0.3 / 2013-10-10 +================== + + * update repo + +0.0.2 / 2013-09-14 +================== + + * dump stream on bad headers + * listen to events after defining received and buffers + +0.0.1 / 2013-09-14 +================== + + * Initial release diff --git a/node_modules/raw-body/LICENSE b/node_modules/raw-body/LICENSE new file mode 100644 index 0000000..d695c8f --- /dev/null +++ b/node_modules/raw-body/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013-2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/raw-body/README.md b/node_modules/raw-body/README.md new file mode 100644 index 0000000..2ce79d2 --- /dev/null +++ b/node_modules/raw-body/README.md @@ -0,0 +1,219 @@ +# raw-body + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] + +Gets the entire buffer of a stream either as a `Buffer` or a string. +Validates the stream's length against an expected length and maximum limit. +Ideal for parsing request bodies. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install raw-body +``` + +### TypeScript + +This module includes a [TypeScript](https://www.typescriptlang.org/) +declaration file to enable auto complete in compatible editors and type +information for TypeScript projects. This module depends on the Node.js +types, so install `@types/node`: + +```sh +$ npm install @types/node +``` + +## API + + + +```js +var getRawBody = require('raw-body') +``` + +### getRawBody(stream, [options], [callback]) + +**Returns a promise if no callback specified and global `Promise` exists.** + +Options: + +- `length` - The length of the stream. + If the contents of the stream do not add up to this length, + an `400` error code is returned. +- `limit` - The byte limit of the body. + This is the number of bytes or any string format supported by + [bytes](https://www.npmjs.com/package/bytes), + for example `1000`, `'500kb'` or `'3mb'`. + If the body ends up being larger than this limit, + a `413` error code is returned. +- `encoding` - The encoding to use to decode the body into a string. + By default, a `Buffer` instance will be returned when no encoding is specified. + Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`. + You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme). + +You can also pass a string in place of options to just specify the encoding. + +If an error occurs, the stream will be paused, everything unpiped, +and you are responsible for correctly disposing the stream. +For HTTP requests, no handling is required if you send a response. +For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks. + +## Errors + +This module creates errors depending on the error condition during reading. +The error may be an error from the underlying Node.js implementation, but is +otherwise an error created by this module, which has the following attributes: + + * `limit` - the limit in bytes + * `length` and `expected` - the expected length of the stream + * `received` - the received bytes + * `encoding` - the invalid encoding + * `status` and `statusCode` - the corresponding status code for the error + * `type` - the error type + +### Types + +The errors from this module have a `type` property which allows for the progamatic +determination of the type of error returned. + +#### encoding.unsupported + +This error will occur when the `encoding` option is specified, but the value does +not map to an encoding supported by the [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme) +module. + +#### entity.too.large + +This error will occur when the `limit` option is specified, but the stream has +an entity that is larger. + +#### request.aborted + +This error will occur when the request stream is aborted by the client before +reading the body has finished. + +#### request.size.invalid + +This error will occur when the `length` option is specified, but the stream has +emitted more bytes. + +#### stream.encoding.set + +This error will occur when the given stream has an encoding set on it, making it +a decoded stream. The stream should not have an encoding set and is expected to +emit `Buffer` objects. + +## Examples + +### Simple Express example + +```js +var contentType = require('content-type') +var express = require('express') +var getRawBody = require('raw-body') + +var app = express() + +app.use(function (req, res, next) { + getRawBody(req, { + length: req.headers['content-length'], + limit: '1mb', + encoding: contentType.parse(req).parameters.charset + }, function (err, string) { + if (err) return next(err) + req.text = string + next() + }) +}) + +// now access req.text +``` + +### Simple Koa example + +```js +var contentType = require('content-type') +var getRawBody = require('raw-body') +var koa = require('koa') + +var app = koa() + +app.use(function * (next) { + this.text = yield getRawBody(this.req, { + length: this.req.headers['content-length'], + limit: '1mb', + encoding: contentType.parse(this.req).parameters.charset + }) + yield next +}) + +// now access this.text +``` + +### Using as a promise + +To use this library as a promise, simply omit the `callback` and a promise is +returned, provided that a global `Promise` is defined. + +```js +var getRawBody = require('raw-body') +var http = require('http') + +var server = http.createServer(function (req, res) { + getRawBody(req) + .then(function (buf) { + res.statusCode = 200 + res.end(buf.length + ' bytes submitted') + }) + .catch(function (err) { + res.statusCode = 500 + res.end(err.message) + }) +}) + +server.listen(3000) +``` + +### Using with TypeScript + +```ts +import * as getRawBody from 'raw-body'; +import * as http from 'http'; + +const server = http.createServer((req, res) => { + getRawBody(req) + .then((buf) => { + res.statusCode = 200; + res.end(buf.length + ' bytes submitted'); + }) + .catch((err) => { + res.statusCode = err.statusCode; + res.end(err.message); + }); +}); + +server.listen(3000); +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/raw-body.svg +[npm-url]: https://npmjs.org/package/raw-body +[node-version-image]: https://img.shields.io/node/v/raw-body.svg +[node-version-url]: https://nodejs.org/en/download/ +[travis-image]: https://img.shields.io/travis/stream-utils/raw-body/master.svg +[travis-url]: https://travis-ci.org/stream-utils/raw-body +[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg +[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master +[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg +[downloads-url]: https://npmjs.org/package/raw-body diff --git a/node_modules/raw-body/index.d.ts b/node_modules/raw-body/index.d.ts new file mode 100644 index 0000000..dcbbebd --- /dev/null +++ b/node_modules/raw-body/index.d.ts @@ -0,0 +1,87 @@ +import { Readable } from 'stream'; + +declare namespace getRawBody { + export type Encoding = string | true; + + export interface Options { + /** + * The expected length of the stream. + */ + length?: number | string | null; + /** + * The byte limit of the body. This is the number of bytes or any string + * format supported by `bytes`, for example `1000`, `'500kb'` or `'3mb'`. + */ + limit?: number | string | null; + /** + * The encoding to use to decode the body into a string. By default, a + * `Buffer` instance will be returned when no encoding is specified. Most + * likely, you want `utf-8`, so setting encoding to `true` will decode as + * `utf-8`. You can use any type of encoding supported by `iconv-lite`. + */ + encoding?: Encoding | null; + } + + export interface RawBodyError extends Error { + /** + * The limit in bytes. + */ + limit?: number; + /** + * The expected length of the stream. + */ + length?: number; + expected?: number; + /** + * The received bytes. + */ + received?: number; + /** + * The encoding. + */ + encoding?: string; + /** + * The corresponding status code for the error. + */ + status: number; + statusCode: number; + /** + * The error type. + */ + type: string; + } +} + +/** + * Gets the entire buffer of a stream either as a `Buffer` or a string. + * Validates the stream's length against an expected length and maximum + * limit. Ideal for parsing request bodies. + */ +declare function getRawBody( + stream: Readable, + callback: (err: getRawBody.RawBodyError, body: Buffer) => void +): void; + +declare function getRawBody( + stream: Readable, + options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding, + callback: (err: getRawBody.RawBodyError, body: string) => void +): void; + +declare function getRawBody( + stream: Readable, + options: getRawBody.Options, + callback: (err: getRawBody.RawBodyError, body: Buffer) => void +): void; + +declare function getRawBody( + stream: Readable, + options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding +): Promise; + +declare function getRawBody( + stream: Readable, + options?: getRawBody.Options +): Promise; + +export = getRawBody; diff --git a/node_modules/raw-body/index.js b/node_modules/raw-body/index.js new file mode 100644 index 0000000..7fe8186 --- /dev/null +++ b/node_modules/raw-body/index.js @@ -0,0 +1,286 @@ +/*! + * raw-body + * Copyright(c) 2013-2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var createError = require('http-errors') +var iconv = require('iconv-lite') +var unpipe = require('unpipe') + +/** + * Module exports. + * @public + */ + +module.exports = getRawBody + +/** + * Module variables. + * @private + */ + +var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: / + +/** + * Get the decoder for a given encoding. + * + * @param {string} encoding + * @private + */ + +function getDecoder (encoding) { + if (!encoding) return null + + try { + return iconv.getDecoder(encoding) + } catch (e) { + // error getting decoder + if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e + + // the encoding was not found + throw createError(415, 'specified encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } +} + +/** + * Get the raw body of a stream (typically HTTP). + * + * @param {object} stream + * @param {object|string|function} [options] + * @param {function} [callback] + * @public + */ + +function getRawBody (stream, options, callback) { + var done = callback + var opts = options || {} + + if (options === true || typeof options === 'string') { + // short cut for encoding + opts = { + encoding: options + } + } + + if (typeof options === 'function') { + done = options + opts = {} + } + + // validate callback is a function, if provided + if (done !== undefined && typeof done !== 'function') { + throw new TypeError('argument callback must be a function') + } + + // require the callback without promises + if (!done && !global.Promise) { + throw new TypeError('argument callback is required') + } + + // get encoding + var encoding = opts.encoding !== true + ? opts.encoding + : 'utf-8' + + // convert the limit to an integer + var limit = bytes.parse(opts.limit) + + // convert the expected length to an integer + var length = opts.length != null && !isNaN(opts.length) + ? parseInt(opts.length, 10) + : null + + if (done) { + // classic callback style + return readStream(stream, encoding, length, limit, done) + } + + return new Promise(function executor (resolve, reject) { + readStream(stream, encoding, length, limit, function onRead (err, buf) { + if (err) return reject(err) + resolve(buf) + }) + }) +} + +/** + * Halt a stream. + * + * @param {Object} stream + * @private + */ + +function halt (stream) { + // unpipe everything from the stream + unpipe(stream) + + // pause stream + if (typeof stream.pause === 'function') { + stream.pause() + } +} + +/** + * Read the data from the stream. + * + * @param {object} stream + * @param {string} encoding + * @param {number} length + * @param {number} limit + * @param {function} callback + * @public + */ + +function readStream (stream, encoding, length, limit, callback) { + var complete = false + var sync = true + + // check the length and limit options. + // note: we intentionally leave the stream paused, + // so users should handle the stream themselves. + if (limit !== null && length !== null && length > limit) { + return done(createError(413, 'request entity too large', { + expected: length, + length: length, + limit: limit, + type: 'entity.too.large' + })) + } + + // streams1: assert request encoding is buffer. + // streams2+: assert the stream encoding is buffer. + // stream._decoder: streams1 + // state.encoding: streams2 + // state.decoder: streams2, specifically < 0.10.6 + var state = stream._readableState + if (stream._decoder || (state && (state.encoding || state.decoder))) { + // developer error + return done(createError(500, 'stream encoding should not be set', { + type: 'stream.encoding.set' + })) + } + + var received = 0 + var decoder + + try { + decoder = getDecoder(encoding) + } catch (err) { + return done(err) + } + + var buffer = decoder + ? '' + : [] + + // attach listeners + stream.on('aborted', onAborted) + stream.on('close', cleanup) + stream.on('data', onData) + stream.on('end', onEnd) + stream.on('error', onEnd) + + // mark sync section complete + sync = false + + function done () { + var args = new Array(arguments.length) + + // copy arguments + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + // mark complete + complete = true + + if (sync) { + process.nextTick(invokeCallback) + } else { + invokeCallback() + } + + function invokeCallback () { + cleanup() + + if (args[0]) { + // halt the stream on error + halt(stream) + } + + callback.apply(null, args) + } + } + + function onAborted () { + if (complete) return + + done(createError(400, 'request aborted', { + code: 'ECONNABORTED', + expected: length, + length: length, + received: received, + type: 'request.aborted' + })) + } + + function onData (chunk) { + if (complete) return + + received += chunk.length + + if (limit !== null && received > limit) { + done(createError(413, 'request entity too large', { + limit: limit, + received: received, + type: 'entity.too.large' + })) + } else if (decoder) { + buffer += decoder.write(chunk) + } else { + buffer.push(chunk) + } + } + + function onEnd (err) { + if (complete) return + if (err) return done(err) + + if (length !== null && received !== length) { + done(createError(400, 'request size did not match content length', { + expected: length, + length: length, + received: received, + type: 'request.size.invalid' + })) + } else { + var string = decoder + ? buffer + (decoder.end() || '') + : Buffer.concat(buffer) + done(null, string) + } + } + + function cleanup () { + buffer = null + + stream.removeListener('aborted', onAborted) + stream.removeListener('data', onData) + stream.removeListener('end', onEnd) + stream.removeListener('error', onEnd) + stream.removeListener('close', cleanup) + } +} diff --git a/node_modules/raw-body/package.json b/node_modules/raw-body/package.json new file mode 100644 index 0000000..0303f48 --- /dev/null +++ b/node_modules/raw-body/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "raw-body@2.4.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "raw-body@2.4.0", + "_id": "raw-body@2.4.0", + "_inBundle": false, + "_integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "_location": "/raw-body", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "raw-body@2.4.0", + "name": "raw-body", + "escapedName": "raw-body", + "rawSpec": "2.4.0", + "saveSpec": null, + "fetchSpec": "2.4.0" + }, + "_requiredBy": [ + "/body-parser" + ], + "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "_spec": "2.4.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/stream-utils/raw-body/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Raynos", + "email": "raynos2@gmail.com" + } + ], + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "description": "Get and validate the raw body of a readable stream.", + "devDependencies": { + "bluebird": "3.5.4", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "6.1.3", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.d.ts", + "index.js" + ], + "homepage": "https://github.com/stream-utils/raw-body#readme", + "license": "MIT", + "name": "raw-body", + "repository": { + "type": "git", + "url": "git+https://github.com/stream-utils/raw-body.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/" + }, + "version": "2.4.0" +} diff --git a/node_modules/rc/LICENSE.APACHE2 b/node_modules/rc/LICENSE.APACHE2 new file mode 100644 index 0000000..6366c04 --- /dev/null +++ b/node_modules/rc/LICENSE.APACHE2 @@ -0,0 +1,15 @@ +Apache License, Version 2.0 + +Copyright (c) 2011 Dominic Tarr + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/node_modules/rc/LICENSE.BSD b/node_modules/rc/LICENSE.BSD new file mode 100644 index 0000000..96bb796 --- /dev/null +++ b/node_modules/rc/LICENSE.BSD @@ -0,0 +1,26 @@ +Copyright (c) 2013, Dominic Tarr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. diff --git a/node_modules/rc/LICENSE.MIT b/node_modules/rc/LICENSE.MIT new file mode 100644 index 0000000..6eafbd7 --- /dev/null +++ b/node_modules/rc/LICENSE.MIT @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2011 Dominic Tarr + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/rc/README.md b/node_modules/rc/README.md new file mode 100644 index 0000000..e6522e2 --- /dev/null +++ b/node_modules/rc/README.md @@ -0,0 +1,227 @@ +# rc + +The non-configurable configuration loader for lazy people. + +## Usage + +The only option is to pass rc the name of your app, and your default configuration. + +```javascript +var conf = require('rc')(appname, { + //defaults go here. + port: 2468, + + //defaults which are objects will be merged, not replaced + views: { + engine: 'jade' + } +}); +``` + +`rc` will return your configuration options merged with the defaults you specify. +If you pass in a predefined defaults object, it will be mutated: + +```javascript +var conf = {}; +require('rc')(appname, conf); +``` + +If `rc` finds any config files for your app, the returned config object will have +a `configs` array containing their paths: + +```javascript +var appCfg = require('rc')(appname, conf); +appCfg.configs[0] // /etc/appnamerc +appCfg.configs[1] // /home/dominictarr/.config/appname +appCfg.config // same as appCfg.configs[appCfg.configs.length - 1] +``` + +## Standards + +Given your application name (`appname`), rc will look in all the obvious places for configuration. + + * command line arguments, parsed by minimist _(e.g. `--foo baz`, also nested: `--foo.bar=baz`)_ + * environment variables prefixed with `${appname}_` + * or use "\_\_" to indicate nested properties
      _(e.g. `appname_foo__bar__baz` => `foo.bar.baz`)_ + * if you passed an option `--config file` then from that file + * a local `.${appname}rc` or the first found looking in `./ ../ ../../ ../../../` etc. + * `$HOME/.${appname}rc` + * `$HOME/.${appname}/config` + * `$HOME/.config/${appname}` + * `$HOME/.config/${appname}/config` + * `/etc/${appname}rc` + * `/etc/${appname}/config` + * the defaults object you passed in. + +All configuration sources that were found will be flattened into one object, +so that sources **earlier** in this list override later ones. + + +## Configuration File Formats + +Configuration files (e.g. `.appnamerc`) may be in either [json](http://json.org/example) or [ini](http://en.wikipedia.org/wiki/INI_file) format. **No** file extension (`.json` or `.ini`) should be used. The example configurations below are equivalent: + + +#### Formatted as `ini` + +``` +; You can include comments in `ini` format if you want. + +dependsOn=0.10.0 + + +; `rc` has built-in support for ini sections, see? + +[commands] + www = ./commands/www + console = ./commands/repl + + +; You can even do nested sections + +[generators.options] + engine = ejs + +[generators.modules] + new = generate-new + engine = generate-backend + +``` + +#### Formatted as `json` + +```javascript +{ + // You can even comment your JSON, if you want + "dependsOn": "0.10.0", + "commands": { + "www": "./commands/www", + "console": "./commands/repl" + }, + "generators": { + "options": { + "engine": "ejs" + }, + "modules": { + "new": "generate-new", + "backend": "generate-backend" + } + } +} +``` + +Comments are stripped from JSON config via [strip-json-comments](https://github.com/sindresorhus/strip-json-comments). + +> Since ini, and env variables do not have a standard for types, your application needs be prepared for strings. + +To ensure that string representations of booleans and numbers are always converted into their proper types (especially useful if you intend to do strict `===` comparisons), consider using a module such as [parse-strings-in-object](https://github.com/anselanza/parse-strings-in-object) to wrap the config object returned from rc. + + +## Simple example demonstrating precedence +Assume you have an application like this (notice the hard-coded defaults passed to rc): +``` +const conf = require('rc')('myapp', { + port: 12345, + mode: 'test' +}); + +console.log(JSON.stringify(conf, null, 2)); +``` +You also have a file `config.json`, with these contents: +``` +{ + "port": 9000, + "foo": "from config json", + "something": "else" +} +``` +And a file `.myapprc` in the same folder, with these contents: +``` +{ + "port": "3001", + "foo": "bar" +} +``` +Here is the expected output from various commands: + +`node .` +``` +{ + "port": "3001", + "mode": "test", + "foo": "bar", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Default `mode` from hard-coded object is retained, but port is overridden by `.myapprc` file (automatically found based on appname match), and `foo` is added.* + + +`node . --foo baz` +``` +{ + "port": "3001", + "mode": "test", + "foo": "baz", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Same result as above but `foo` is overridden because command-line arguments take precedence over `.myapprc` file.* + +`node . --foo barbar --config config.json` +``` +{ + "port": 9000, + "mode": "test", + "foo": "barbar", + "something": "else", + "_": [], + "config": "config.json", + "configs": [ + "/Users/stephen/repos/conftest/.myapprc", + "config.json" + ] +} +``` +*Now the `port` comes from the `config.json` file specified (overriding the value from `.myapprc`), and `foo` value is overriden by command-line despite also being specified in the `config.json` file.* + + + +## Advanced Usage + +#### Pass in your own `argv` + +You may pass in your own `argv` as the third argument to `rc`. This is in case you want to [use your own command-line opts parser](https://github.com/dominictarr/rc/pull/12). + +```javascript +require('rc')(appname, defaults, customArgvParser); +``` + +## Pass in your own parser + +If you have a special need to use a non-standard parser, +you can do so by passing in the parser as the 4th argument. +(leave the 3rd as null to get the default args parser) + +```javascript +require('rc')(appname, defaults, null, parser); +``` + +This may also be used to force a more strict format, +such as strict, valid JSON only. + +## Note on Performance + +`rc` is running `fs.statSync`-- so make sure you don't use it in a hot code path (e.g. a request handler) + + +## License + +Multi-licensed under the two-clause BSD License, MIT License, or Apache License, version 2.0 diff --git a/node_modules/rc/browser.js b/node_modules/rc/browser.js new file mode 100644 index 0000000..8c230c5 --- /dev/null +++ b/node_modules/rc/browser.js @@ -0,0 +1,7 @@ + +// when this is loaded into the browser, +// just use the defaults... + +module.exports = function (name, defaults) { + return defaults +} diff --git a/node_modules/rc/cli.js b/node_modules/rc/cli.js new file mode 100644 index 0000000..ab05b60 --- /dev/null +++ b/node_modules/rc/cli.js @@ -0,0 +1,4 @@ +#! /usr/bin/env node +var rc = require('./index') + +console.log(JSON.stringify(rc(process.argv[2]), false, 2)) diff --git a/node_modules/rc/index.js b/node_modules/rc/index.js new file mode 100644 index 0000000..65eb47a --- /dev/null +++ b/node_modules/rc/index.js @@ -0,0 +1,53 @@ +var cc = require('./lib/utils') +var join = require('path').join +var deepExtend = require('deep-extend') +var etc = '/etc' +var win = process.platform === "win32" +var home = win + ? process.env.USERPROFILE + : process.env.HOME + +module.exports = function (name, defaults, argv, parse) { + if('string' !== typeof name) + throw new Error('rc(name): name *must* be string') + if(!argv) + argv = require('minimist')(process.argv.slice(2)) + defaults = ( + 'string' === typeof defaults + ? cc.json(defaults) : defaults + ) || {} + + parse = parse || cc.parse + + var env = cc.env(name + '_') + + var configs = [defaults] + var configFiles = [] + function addConfigFile (file) { + if (configFiles.indexOf(file) >= 0) return + var fileConfig = cc.file(file) + if (fileConfig) { + configs.push(parse(fileConfig)) + configFiles.push(file) + } + } + + // which files do we look at? + if (!win) + [join(etc, name, 'config'), + join(etc, name + 'rc')].forEach(addConfigFile) + if (home) + [join(home, '.config', name, 'config'), + join(home, '.config', name), + join(home, '.' + name, 'config'), + join(home, '.' + name + 'rc')].forEach(addConfigFile) + addConfigFile(cc.find('.'+name+'rc')) + if (env.config) addConfigFile(env.config) + if (argv.config) addConfigFile(argv.config) + + return deepExtend.apply(null, configs.concat([ + env, + argv, + configFiles.length ? {configs: configFiles, config: configFiles[configFiles.length - 1]} : undefined, + ])) +} diff --git a/node_modules/rc/lib/utils.js b/node_modules/rc/lib/utils.js new file mode 100644 index 0000000..8b3beff --- /dev/null +++ b/node_modules/rc/lib/utils.js @@ -0,0 +1,104 @@ +'use strict'; +var fs = require('fs') +var ini = require('ini') +var path = require('path') +var stripJsonComments = require('strip-json-comments') + +var parse = exports.parse = function (content) { + + //if it ends in .json or starts with { then it must be json. + //must be done this way, because ini accepts everything. + //can't just try and parse it and let it throw if it's not ini. + //everything is ini. even json with a syntax error. + + if(/^\s*{/.test(content)) + return JSON.parse(stripJsonComments(content)) + return ini.parse(content) + +} + +var file = exports.file = function () { + var args = [].slice.call(arguments).filter(function (arg) { return arg != null }) + + //path.join breaks if it's a not a string, so just skip this. + for(var i in args) + if('string' !== typeof args[i]) + return + + var file = path.join.apply(null, args) + var content + try { + return fs.readFileSync(file,'utf-8') + } catch (err) { + return + } +} + +var json = exports.json = function () { + var content = file.apply(null, arguments) + return content ? parse(content) : null +} + +var env = exports.env = function (prefix, env) { + env = env || process.env + var obj = {} + var l = prefix.length + for(var k in env) { + if(k.toLowerCase().indexOf(prefix.toLowerCase()) === 0) { + + var keypath = k.substring(l).split('__') + + // Trim empty strings from keypath array + var _emptyStringIndex + while ((_emptyStringIndex=keypath.indexOf('')) > -1) { + keypath.splice(_emptyStringIndex, 1) + } + + var cursor = obj + keypath.forEach(function _buildSubObj(_subkey,i){ + + // (check for _subkey first so we ignore empty strings) + // (check for cursor to avoid assignment to primitive objects) + if (!_subkey || typeof cursor !== 'object') + return + + // If this is the last key, just stuff the value in there + // Assigns actual value from env variable to final key + // (unless it's just an empty string- in that case use the last valid key) + if (i === keypath.length-1) + cursor[_subkey] = env[k] + + + // Build sub-object if nothing already exists at the keypath + if (cursor[_subkey] === undefined) + cursor[_subkey] = {} + + // Increment cursor used to track the object at the current depth + cursor = cursor[_subkey] + + }) + + } + + } + + return obj +} + +var find = exports.find = function () { + var rel = path.join.apply(null, [].slice.call(arguments)) + + function find(start, rel) { + var file = path.join(start, rel) + try { + fs.statSync(file) + return file + } catch (err) { + if(path.dirname(start) !== start) // root + return find(path.dirname(start), rel) + } + } + return find(process.cwd(), rel) +} + + diff --git a/node_modules/rc/node_modules/ini/LICENSE b/node_modules/rc/node_modules/ini/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/rc/node_modules/ini/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/rc/node_modules/ini/README.md b/node_modules/rc/node_modules/ini/README.md new file mode 100644 index 0000000..33df258 --- /dev/null +++ b/node_modules/rc/node_modules/ini/README.md @@ -0,0 +1,102 @@ +An ini format parser and serializer for node. + +Sections are treated as nested objects. Items before the first +heading are saved on the object directly. + +## Usage + +Consider an ini-file `config.ini` that looks like this: + + ; this comment is being ignored + scope = global + + [database] + user = dbuser + password = dbpassword + database = use_this_database + + [paths.default] + datadir = /var/lib/data + array[] = first value + array[] = second value + array[] = third value + +You can read, manipulate and write the ini-file like so: + + var fs = require('fs') + , ini = require('ini') + + var config = ini.parse(fs.readFileSync('./config.ini', 'utf-8')) + + config.scope = 'local' + config.database.database = 'use_another_database' + config.paths.default.tmpdir = '/tmp' + delete config.paths.default.datadir + config.paths.default.array.push('fourth value') + + fs.writeFileSync('./config_modified.ini', ini.stringify(config, { section: 'section' })) + +This will result in a file called `config_modified.ini` being written +to the filesystem with the following content: + + [section] + scope=local + [section.database] + user=dbuser + password=dbpassword + database=use_another_database + [section.paths.default] + tmpdir=/tmp + array[]=first value + array[]=second value + array[]=third value + array[]=fourth value + + +## API + +### decode(inistring) + +Decode the ini-style formatted `inistring` into a nested object. + +### parse(inistring) + +Alias for `decode(inistring)` + +### encode(object, [options]) + +Encode the object `object` into an ini-style formatted string. If the +optional parameter `section` is given, then all top-level properties +of the object are put into this section and the `section`-string is +prepended to all sub-sections, see the usage example above. + +The `options` object may contain the following: + +* `section` A string which will be the first `section` in the encoded + ini data. Defaults to none. +* `whitespace` Boolean to specify whether to put whitespace around the + `=` character. By default, whitespace is omitted, to be friendly to + some persnickety old parsers that don't tolerate it well. But some + find that it's more human-readable and pretty with the whitespace. + +For backwards compatibility reasons, if a `string` options is passed +in, then it is assumed to be the `section` value. + +### stringify(object, [options]) + +Alias for `encode(object, [options])` + +### safe(val) + +Escapes the string `val` such that it is safe to be used as a key or +value in an ini-file. Basically escapes quotes. For example + + ini.safe('"unsafe string"') + +would result in + + "\"unsafe string\"" + +### unsafe(val) + +Unescapes the string `val` diff --git a/node_modules/rc/node_modules/ini/ini.js b/node_modules/rc/node_modules/ini/ini.js new file mode 100644 index 0000000..b576f08 --- /dev/null +++ b/node_modules/rc/node_modules/ini/ini.js @@ -0,0 +1,206 @@ +exports.parse = exports.decode = decode + +exports.stringify = exports.encode = encode + +exports.safe = safe +exports.unsafe = unsafe + +var eol = typeof process !== 'undefined' && + process.platform === 'win32' ? '\r\n' : '\n' + +function encode (obj, opt) { + var children = [] + var out = '' + + if (typeof opt === 'string') { + opt = { + section: opt, + whitespace: false, + } + } else { + opt = opt || {} + opt.whitespace = opt.whitespace === true + } + + var separator = opt.whitespace ? ' = ' : '=' + + Object.keys(obj).forEach(function (k, _, __) { + var val = obj[k] + if (val && Array.isArray(val)) { + val.forEach(function (item) { + out += safe(k + '[]') + separator + safe(item) + '\n' + }) + } else if (val && typeof val === 'object') + children.push(k) + else + out += safe(k) + separator + safe(val) + eol + }) + + if (opt.section && out.length) + out = '[' + safe(opt.section) + ']' + eol + out + + children.forEach(function (k, _, __) { + var nk = dotSplit(k).join('\\.') + var section = (opt.section ? opt.section + '.' : '') + nk + var child = encode(obj[k], { + section: section, + whitespace: opt.whitespace, + }) + if (out.length && child.length) + out += eol + + out += child + }) + + return out +} + +function dotSplit (str) { + return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') + .replace(/\\\./g, '\u0001') + .split(/\./).map(function (part) { + return part.replace(/\1/g, '\\.') + .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') + }) +} + +function decode (str) { + var out = {} + var p = out + var section = null + // section |key = value + var re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i + var lines = str.split(/[\r\n]+/g) + + lines.forEach(function (line, _, __) { + if (!line || line.match(/^\s*[;#]/)) + return + var match = line.match(re) + if (!match) + return + if (match[1] !== undefined) { + section = unsafe(match[1]) + if (section === '__proto__') { + // not allowed + // keep parsing the section, but don't attach it. + p = {} + return + } + p = out[section] = out[section] || {} + return + } + var key = unsafe(match[2]) + if (key === '__proto__') + return + var value = match[3] ? unsafe(match[4]) : true + switch (value) { + case 'true': + case 'false': + case 'null': value = JSON.parse(value) + } + + // Convert keys with '[]' suffix to an array + if (key.length > 2 && key.slice(-2) === '[]') { + key = key.substring(0, key.length - 2) + if (key === '__proto__') + return + if (!p[key]) + p[key] = [] + else if (!Array.isArray(p[key])) + p[key] = [p[key]] + } + + // safeguard against resetting a previously defined + // array by accidentally forgetting the brackets + if (Array.isArray(p[key])) + p[key].push(value) + else + p[key] = value + }) + + // {a:{y:1},"a.b":{x:2}} --> {a:{y:1,b:{x:2}}} + // use a filter to return the keys that have to be deleted. + Object.keys(out).filter(function (k, _, __) { + if (!out[k] || + typeof out[k] !== 'object' || + Array.isArray(out[k])) + return false + + // see if the parent section is also an object. + // if so, add it to that, and mark this one for deletion + var parts = dotSplit(k) + var p = out + var l = parts.pop() + var nl = l.replace(/\\\./g, '.') + parts.forEach(function (part, _, __) { + if (part === '__proto__') + return + if (!p[part] || typeof p[part] !== 'object') + p[part] = {} + p = p[part] + }) + if (p === out && nl === l) + return false + + p[nl] = out[k] + return true + }).forEach(function (del, _, __) { + delete out[del] + }) + + return out +} + +function isQuoted (val) { + return (val.charAt(0) === '"' && val.slice(-1) === '"') || + (val.charAt(0) === "'" && val.slice(-1) === "'") +} + +function safe (val) { + return (typeof val !== 'string' || + val.match(/[=\r\n]/) || + val.match(/^\[/) || + (val.length > 1 && + isQuoted(val)) || + val !== val.trim()) + ? JSON.stringify(val) + : val.replace(/;/g, '\\;').replace(/#/g, '\\#') +} + +function unsafe (val, doUnesc) { + val = (val || '').trim() + if (isQuoted(val)) { + // remove the single quotes before calling JSON.parse + if (val.charAt(0) === "'") + val = val.substr(1, val.length - 2) + + try { + val = JSON.parse(val) + } catch (_) {} + } else { + // walk the val to find the first not-escaped ; character + var esc = false + var unesc = '' + for (var i = 0, l = val.length; i < l; i++) { + var c = val.charAt(i) + if (esc) { + if ('\\;#'.indexOf(c) !== -1) + unesc += c + else + unesc += '\\' + c + + esc = false + } else if (';#'.indexOf(c) !== -1) + break + else if (c === '\\') + esc = true + else + unesc += c + } + if (esc) + unesc += '\\' + + return unesc.trim() + } + return val +} diff --git a/node_modules/rc/node_modules/ini/package.json b/node_modules/rc/node_modules/ini/package.json new file mode 100644 index 0000000..ff5e215 --- /dev/null +++ b/node_modules/rc/node_modules/ini/package.json @@ -0,0 +1,66 @@ +{ + "_from": "ini@~1.3.0", + "_id": "ini@1.3.8", + "_inBundle": false, + "_integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "_location": "/rc/ini", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ini@~1.3.0", + "name": "ini", + "escapedName": "ini", + "rawSpec": "~1.3.0", + "saveSpec": null, + "fetchSpec": "~1.3.0" + }, + "_requiredBy": [ + "/rc" + ], + "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "_shasum": "a29da425b48806f34767a4efce397269af28432c", + "_spec": "ini@~1.3.0", + "_where": "D:\\Cricbuzzz\\node_modules\\rc", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/ini/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "An ini encoder/decoder for node", + "devDependencies": { + "eslint": "^7.9.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "tap": "14" + }, + "files": [ + "ini.js" + ], + "homepage": "https://github.com/isaacs/ini#readme", + "license": "ISC", + "main": "ini.js", + "name": "ini", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/ini.git" + }, + "scripts": { + "eslint": "eslint", + "lint": "npm run eslint -- ini.js test/*.js", + "lintfix": "npm run lint -- --fix", + "posttest": "npm run lint", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "test": "tap" + }, + "version": "1.3.8" +} diff --git a/node_modules/rc/package.json b/node_modules/rc/package.json new file mode 100644 index 0000000..d681031 --- /dev/null +++ b/node_modules/rc/package.json @@ -0,0 +1,65 @@ +{ + "_from": "rc@^1.2.8", + "_id": "rc@1.2.8", + "_inBundle": false, + "_integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "_location": "/rc", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "rc@^1.2.8", + "name": "rc", + "escapedName": "rc", + "rawSpec": "^1.2.8", + "saveSpec": null, + "fetchSpec": "^1.2.8" + }, + "_requiredBy": [ + "/registry-auth-token", + "/registry-url" + ], + "_resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "_shasum": "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed", + "_spec": "rc@^1.2.8", + "_where": "D:\\Cricbuzzz\\node_modules\\registry-auth-token", + "author": { + "name": "Dominic Tarr", + "email": "dominic.tarr@gmail.com", + "url": "dominictarr.com" + }, + "bin": { + "rc": "cli.js" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/dominictarr/rc/issues" + }, + "bundleDependencies": false, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "deprecated": false, + "description": "hardwired configuration loader", + "homepage": "https://github.com/dominictarr/rc#readme", + "keywords": [ + "config", + "rc", + "unix", + "defaults" + ], + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "main": "index.js", + "name": "rc", + "repository": { + "type": "git", + "url": "git+https://github.com/dominictarr/rc.git" + }, + "scripts": { + "test": "set -e; node test/test.js; node test/ini.js; node test/nested-env-vars.js" + }, + "version": "1.2.8" +} diff --git a/node_modules/rc/test/ini.js b/node_modules/rc/test/ini.js new file mode 100644 index 0000000..e6857f8 --- /dev/null +++ b/node_modules/rc/test/ini.js @@ -0,0 +1,16 @@ +var cc =require('../lib/utils') +var INI = require('ini') +var assert = require('assert') + +function test(obj) { + + var _json, _ini + var json = cc.parse (_json = JSON.stringify(obj)) + var ini = cc.parse (_ini = INI.stringify(obj)) + console.log(_ini, _json) + assert.deepEqual(json, ini) +} + + +test({hello: true}) + diff --git a/node_modules/rc/test/nested-env-vars.js b/node_modules/rc/test/nested-env-vars.js new file mode 100644 index 0000000..0ecd176 --- /dev/null +++ b/node_modules/rc/test/nested-env-vars.js @@ -0,0 +1,50 @@ + +var seed = Math.random(); +var n = 'rc'+ seed; +var N = 'RC'+ seed; +var assert = require('assert') + + +// Basic usage +process.env[n+'_someOpt__a'] = 42 +process.env[n+'_someOpt__x__'] = 99 +process.env[n+'_someOpt__a__b'] = 186 +process.env[n+'_someOpt__a__b__c'] = 243 +process.env[n+'_someOpt__x__y'] = 1862 +process.env[n+'_someOpt__z'] = 186577 + +// Should ignore empty strings from orphaned '__' +process.env[n+'_someOpt__z__x__'] = 18629 +process.env[n+'_someOpt__w__w__'] = 18629 + +// Leading '__' should ignore everything up to 'z' +process.env[n+'___z__i__'] = 9999 + +// should ignore case for config name section. +process.env[N+'_test_upperCase'] = 187 + +function testPrefix(prefix) { + var config = require('../')(prefix, { + option: true + }) + + console.log('\n\n------ nested-env-vars ------\n',{prefix: prefix}, '\n', config); + + assert.equal(config.option, true) + assert.equal(config.someOpt.a, 42) + assert.equal(config.someOpt.x, 99) + // Should not override `a` once it's been set + assert.equal(config.someOpt.a/*.b*/, 42) + // Should not override `x` once it's been set + assert.equal(config.someOpt.x/*.y*/, 99) + assert.equal(config.someOpt.z, 186577) + // Should not override `z` once it's been set + assert.equal(config.someOpt.z/*.x*/, 186577) + assert.equal(config.someOpt.w.w, 18629) + assert.equal(config.z.i, 9999) + + assert.equal(config.test_upperCase, 187) +} + +testPrefix(n); +testPrefix(N); diff --git a/node_modules/rc/test/test.js b/node_modules/rc/test/test.js new file mode 100644 index 0000000..4f63351 --- /dev/null +++ b/node_modules/rc/test/test.js @@ -0,0 +1,59 @@ + +var n = 'rc'+Math.random() +var assert = require('assert') + +process.env[n+'_envOption'] = 42 + +var config = require('../')(n, { + option: true +}) + +console.log(config) + +assert.equal(config.option, true) +assert.equal(config.envOption, 42) + +var customArgv = require('../')(n, { + option: true +}, { // nopt-like argv + option: false, + envOption: 24, + argv: { + remain: [], + cooked: ['--no-option', '--envOption', '24'], + original: ['--no-option', '--envOption=24'] + } +}) + +console.log(customArgv) + +assert.equal(customArgv.option, false) +assert.equal(customArgv.envOption, 24) + +var fs = require('fs') +var path = require('path') +var jsonrc = path.resolve('.' + n + 'rc'); + +fs.writeFileSync(jsonrc, [ + '{', + '// json overrides default', + '"option": false,', + '/* env overrides json */', + '"envOption": 24', + '}' +].join('\n')); + +var commentedJSON = require('../')(n, { + option: true +}) + +fs.unlinkSync(jsonrc); + +console.log(commentedJSON) + +assert.equal(commentedJSON.option, false) +assert.equal(commentedJSON.envOption, 42) + +assert.equal(commentedJSON.config, jsonrc) +assert.equal(commentedJSON.configs.length, 1) +assert.equal(commentedJSON.configs[0], jsonrc) diff --git a/node_modules/readable-stream/.npmignore b/node_modules/readable-stream/.npmignore new file mode 100644 index 0000000..6d270c6 --- /dev/null +++ b/node_modules/readable-stream/.npmignore @@ -0,0 +1,9 @@ +build/ +test/ +examples/ +fs.js +zlib.js +.zuul.yml +.nyc_output +coverage +docs/ diff --git a/node_modules/readable-stream/.travis.yml b/node_modules/readable-stream/.travis.yml new file mode 100644 index 0000000..0c5d2bc --- /dev/null +++ b/node_modules/readable-stream/.travis.yml @@ -0,0 +1,65 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.10' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.11' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.12' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 1 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 2 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 3 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 6 + env: TASK=test + - node_js: 7 + env: TASK=test + - node_js: 8 + env: TASK=test + - node_js: 6 + env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=microsoftedge BROWSER_VERSION=latest +script: "npm run $TASK" +env: + global: + - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= + - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/readable-stream/CONTRIBUTING.md b/node_modules/readable-stream/CONTRIBUTING.md new file mode 100644 index 0000000..f478d58 --- /dev/null +++ b/node_modules/readable-stream/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +* (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +* (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +* (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +* (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +## Moderation Policy + +The [Node.js Moderation Policy] applies to this WG. + +## Code of Conduct + +The [Node.js Code of Conduct][] applies to this WG. + +[Node.js Code of Conduct]: +https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md +[Node.js Moderation Policy]: +https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/node_modules/readable-stream/GOVERNANCE.md b/node_modules/readable-stream/GOVERNANCE.md new file mode 100644 index 0000000..16ffb93 --- /dev/null +++ b/node_modules/readable-stream/GOVERNANCE.md @@ -0,0 +1,136 @@ +### Streams Working Group + +The Node.js Streams is jointly governed by a Working Group +(WG) +that is responsible for high-level guidance of the project. + +The WG has final authority over this project including: + +* Technical direction +* Project governance and process (including this policy) +* Contribution policy +* GitHub repository hosting +* Conduct guidelines +* Maintaining the list of additional Collaborators + +For the current list of WG members, see the project +[README.md](./README.md#current-project-team-members). + +### Collaborators + +The readable-stream GitHub repository is +maintained by the WG and additional Collaborators who are added by the +WG on an ongoing basis. + +Individuals making significant and valuable contributions are made +Collaborators and given commit-access to the project. These +individuals are identified by the WG and their addition as +Collaborators is discussed during the WG meeting. + +_Note:_ If you make a significant contribution and are not considered +for commit-access log an issue or contact a WG member directly and it +will be brought up in the next WG meeting. + +Modifications of the contents of the readable-stream repository are +made on +a collaborative basis. Anybody with a GitHub account may propose a +modification via pull request and it will be considered by the project +Collaborators. All pull requests must be reviewed and accepted by a +Collaborator with sufficient expertise who is able to take full +responsibility for the change. In the case of pull requests proposed +by an existing Collaborator, an additional Collaborator is required +for sign-off. Consensus should be sought if additional Collaborators +participate and there is disagreement around a particular +modification. See _Consensus Seeking Process_ below for further detail +on the consensus model used for governance. + +Collaborators may opt to elevate significant or controversial +modifications, or modifications that have not found consensus to the +WG for discussion by assigning the ***WG-agenda*** tag to a pull +request or issue. The WG should serve as the final arbiter where +required. + +For the current list of Collaborators, see the project +[README.md](./README.md#members). + +### WG Membership + +WG seats are not time-limited. There is no fixed size of the WG. +However, the expected target is between 6 and 12, to ensure adequate +coverage of important areas of expertise, balanced with the ability to +make decisions efficiently. + +There is no specific set of requirements or qualifications for WG +membership beyond these rules. + +The WG may add additional members to the WG by unanimous consensus. + +A WG member may be removed from the WG by voluntary resignation, or by +unanimous consensus of all other WG members. + +Changes to WG membership should be posted in the agenda, and may be +suggested as any other agenda item (see "WG Meetings" below). + +If an addition or removal is proposed during a meeting, and the full +WG is not in attendance to participate, then the addition or removal +is added to the agenda for the subsequent meeting. This is to ensure +that all members are given the opportunity to participate in all +membership decisions. If a WG member is unable to attend a meeting +where a planned membership decision is being made, then their consent +is assumed. + +No more than 1/3 of the WG members may be affiliated with the same +employer. If removal or resignation of a WG member, or a change of +employment by a WG member, creates a situation where more than 1/3 of +the WG membership shares an employer, then the situation must be +immediately remedied by the resignation or removal of one or more WG +members affiliated with the over-represented employer(s). + +### WG Meetings + +The WG meets occasionally on a Google Hangout On Air. A designated moderator +approved by the WG runs the meeting. Each meeting should be +published to YouTube. + +Items are added to the WG agenda that are considered contentious or +are modifications of governance, contribution policy, WG membership, +or release process. + +The intention of the agenda is not to approve or review all patches; +that should happen continuously on GitHub and be handled by the larger +group of Collaborators. + +Any community member or contributor can ask that something be added to +the next meeting's agenda by logging a GitHub Issue. Any Collaborator, +WG member or the moderator can add the item to the agenda by adding +the ***WG-agenda*** tag to the issue. + +Prior to each WG meeting the moderator will share the Agenda with +members of the WG. WG members can add any items they like to the +agenda at the beginning of each meeting. The moderator and the WG +cannot veto or remove items. + +The WG may invite persons or representatives from certain projects to +participate in a non-voting capacity. + +The moderator is responsible for summarizing the discussion of each +agenda item and sends it as a pull request after the meeting. + +### Consensus Seeking Process + +The WG follows a +[Consensus +Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) +decision-making model. + +When an agenda item has appeared to reach a consensus the moderator +will ask "Does anyone object?" as a final call for dissent from the +consensus. + +If an agenda item cannot reach a consensus a WG member can call for +either a closing vote or a vote to table the issue to the next +meeting. The call for a vote must be seconded by a majority of the WG +or else the discussion will continue. Simple majority wins. + +Note that changes to WG membership require a majority consensus. See +"WG Membership" above. diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE new file mode 100644 index 0000000..2873b3b --- /dev/null +++ b/node_modules/readable-stream/LICENSE @@ -0,0 +1,47 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md new file mode 100644 index 0000000..3024d77 --- /dev/null +++ b/node_modules/readable-stream/README.md @@ -0,0 +1,57 @@ +# readable-stream + +***Node-core v7.0.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) + + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) + + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) + +```bash +npm install --save readable-stream +``` + +***Node-core streams for userland*** + +This package is a mirror of the Streams2 and Streams3 implementations in +Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v7.10.0/docs/api/stream.html). + +If you want to guarantee a stable streams base, regardless of what version of +Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). + +As of version 2.0.0 **readable-stream** uses semantic versioning. + +# Streams Working Group + +`readable-stream` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + + +## Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> +* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> + - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E diff --git a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md new file mode 100644 index 0000000..83275f1 --- /dev/null +++ b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md @@ -0,0 +1,60 @@ +# streams WG Meeting 2015-01-30 + +## Links + +* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg +* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 +* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ + +## Agenda + +Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. + +* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) +* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) +* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) +* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) + +## Minutes + +### adopt a charter + +* group: +1's all around + +### What versioning scheme should be adopted? +* group: +1’s 3.0.0 +* domenic+group: pulling in patches from other sources where appropriate +* mikeal: version independently, suggesting versions for io.js +* mikeal+domenic: work with TC to notify in advance of changes +simpler stream creation + +### streamline creation of streams +* sam: streamline creation of streams +* domenic: nice simple solution posted + but, we lose the opportunity to change the model + may not be backwards incompatible (double check keys) + + **action item:** domenic will check + +### remove implicit flowing of streams on(‘data’) +* add isFlowing / isPaused +* mikeal: worrying that we’re documenting polyfill methods – confuses users +* domenic: more reflective API is probably good, with warning labels for users +* new section for mad scientists (reflective stream access) +* calvin: name the “third state” +* mikeal: maybe borrow the name from whatwg? +* domenic: we’re missing the “third state” +* consensus: kind of difficult to name the third state +* mikeal: figure out differences in states / compat +* mathias: always flow on data – eliminates third state + * explore what it breaks + +**action items:** +* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) +* ask rod/build for infrastructure +* **chris**: explore the “flow on data” approach +* add isPaused/isFlowing +* add new docs section +* move isPaused to that section + + diff --git a/node_modules/readable-stream/duplex-browser.js b/node_modules/readable-stream/duplex-browser.js new file mode 100644 index 0000000..f8b2db8 --- /dev/null +++ b/node_modules/readable-stream/duplex-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js new file mode 100644 index 0000000..46924cb --- /dev/null +++ b/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require('./readable').Duplex diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 0000000..736693b --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,75 @@ +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +var keys = objectKeys(Writable.prototype); +for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + processNextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 0000000..d06f71f --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,26 @@ +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 0000000..a01012e --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,934 @@ +'use strict'; + +module.exports = Readable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ +var Buffer = require('safe-buffer').Buffer; +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') { + return emitter.prependListener(event, fn); + } else { + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + } +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options && typeof options.read === 'function') this._read = options.read; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var _e = new Error('stream.unshift() after end event'); + stream.emit('error', _e); + } else { + var skipAdd; + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; + + // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + processNextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + processNextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + processNextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + processNextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 0000000..cd25832 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,182 @@ +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er, data) { + done(stream, er, data); + });else done(stream); + }); +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data !== null && data !== undefined) stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('Calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 0000000..e9701f5 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,543 @@ +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ +var Buffer = require('safe-buffer').Buffer; +/**/ + +util.inherits(Writable, Stream); + +function nop() {} + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + processNextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + processNextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = Buffer.isBuffer(chunk); + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) processNextTick(cb, er);else cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) processNextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_modules/readable-stream/lib/internal/streams/BufferList.js new file mode 100644 index 0000000..82598c8 --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/BufferList.js @@ -0,0 +1,64 @@ +'use strict'; + +/**/ + +var Buffer = require('safe-buffer').Buffer; +/**/ + +module.exports = BufferList; + +function BufferList() { + this.head = null; + this.tail = null; + this.length = 0; +} + +BufferList.prototype.push = function (v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; +}; + +BufferList.prototype.unshift = function (v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; +}; + +BufferList.prototype.shift = function () { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; +}; + +BufferList.prototype.clear = function () { + this.head = this.tail = null; + this.length = 0; +}; + +BufferList.prototype.join = function (s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; +}; + +BufferList.prototype.concat = function (n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + p.data.copy(ret, i); + i += p.data.length; + p = p.next; + } + return ret; +}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_modules/readable-stream/lib/internal/streams/stream-browser.js new file mode 100644 index 0000000..9332a3f --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/stream-browser.js @@ -0,0 +1 @@ +module.exports = require('events').EventEmitter; diff --git a/node_modules/readable-stream/lib/internal/streams/stream.js b/node_modules/readable-stream/lib/internal/streams/stream.js new file mode 100644 index 0000000..ce2ad5b --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/stream.js @@ -0,0 +1 @@ +module.exports = require('stream'); diff --git a/node_modules/readable-stream/node_modules/safe-buffer/.travis.yml b/node_modules/readable-stream/node_modules/safe-buffer/.travis.yml new file mode 100644 index 0000000..7b20f28 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - 'node' + - '5' + - '4' + - '0.12' + - '0.10' diff --git a/node_modules/readable-stream/node_modules/safe-buffer/LICENSE b/node_modules/readable-stream/node_modules/safe-buffer/LICENSE new file mode 100644 index 0000000..0c068ce --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/readable-stream/node_modules/safe-buffer/README.md b/node_modules/readable-stream/node_modules/safe-buffer/README.md new file mode 100644 index 0000000..96eb387 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/README.md @@ -0,0 +1,581 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][npm-url] + +#### Safer Node.js Buffer API + +**Use the new Node.js v6 Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in Node.js v0.10, v0.12, v4.x, and v5.x.** + +**Uses the built-in implementations when available.** + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/readable-stream/node_modules/safe-buffer/browser.js b/node_modules/readable-stream/node_modules/safe-buffer/browser.js new file mode 100644 index 0000000..0bd1202 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/browser.js @@ -0,0 +1 @@ +module.exports = require('buffer') diff --git a/node_modules/readable-stream/node_modules/safe-buffer/index.js b/node_modules/readable-stream/node_modules/safe-buffer/index.js new file mode 100644 index 0000000..74a7358 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/index.js @@ -0,0 +1,58 @@ +var buffer = require('buffer') + +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + Object.keys(buffer).forEach(function (prop) { + exports[prop] = buffer[prop] + }) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +Object.keys(Buffer).forEach(function (prop) { + SafeBuffer[prop] = Buffer[prop] +}) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/readable-stream/node_modules/safe-buffer/package.json b/node_modules/readable-stream/node_modules/safe-buffer/package.json new file mode 100644 index 0000000..29dec47 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/package.json @@ -0,0 +1,63 @@ +{ + "_from": "safe-buffer@~5.0.1", + "_id": "safe-buffer@5.0.1", + "_inBundle": false, + "_integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "_location": "/readable-stream/safe-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "safe-buffer@~5.0.1", + "name": "safe-buffer", + "escapedName": "safe-buffer", + "rawSpec": "~5.0.1", + "saveSpec": null, + "fetchSpec": "~5.0.1" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "_shasum": "d263ca54696cd8a306b5ca6551e92de57918fbe7", + "_spec": "safe-buffer@~5.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\readable-stream", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "browser": "./browser.js", + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Safer Node.js Buffer API", + "devDependencies": { + "standard": "^7.0.0", + "tape": "^4.0.0", + "zuul": "^3.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "name": "safe-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "version": "5.0.1" +} diff --git a/node_modules/readable-stream/node_modules/safe-buffer/test.js b/node_modules/readable-stream/node_modules/safe-buffer/test.js new file mode 100644 index 0000000..7da8ad7 --- /dev/null +++ b/node_modules/readable-stream/node_modules/safe-buffer/test.js @@ -0,0 +1,99 @@ +var test = require('tape') +var SafeBuffer = require('./').Buffer + +test('new SafeBuffer(value) works just like Buffer', function (t) { + t.deepEqual(new SafeBuffer('hey'), new Buffer('hey')) + t.deepEqual(new SafeBuffer('hey', 'utf8'), new Buffer('hey', 'utf8')) + t.deepEqual(new SafeBuffer('686579', 'hex'), new Buffer('686579', 'hex')) + t.deepEqual(new SafeBuffer([1, 2, 3]), new Buffer([1, 2, 3])) + t.deepEqual(new SafeBuffer(new Uint8Array([1, 2, 3])), new Buffer(new Uint8Array([1, 2, 3]))) + + t.equal(typeof SafeBuffer.isBuffer, 'function') + t.equal(SafeBuffer.isBuffer(new SafeBuffer('hey')), true) + t.equal(Buffer.isBuffer(new SafeBuffer('hey')), true) + t.notOk(SafeBuffer.isBuffer({})) + + t.end() +}) + +test('SafeBuffer.from(value) converts to a Buffer', function (t) { + t.deepEqual(SafeBuffer.from('hey'), new Buffer('hey')) + t.deepEqual(SafeBuffer.from('hey', 'utf8'), new Buffer('hey', 'utf8')) + t.deepEqual(SafeBuffer.from('686579', 'hex'), new Buffer('686579', 'hex')) + t.deepEqual(SafeBuffer.from([1, 2, 3]), new Buffer([1, 2, 3])) + t.deepEqual(SafeBuffer.from(new Uint8Array([1, 2, 3])), new Buffer(new Uint8Array([1, 2, 3]))) + + t.end() +}) + +test('SafeBuffer.alloc(number) returns zeroed-out memory', function (t) { + for (var i = 0; i < 10; i++) { + var expected1 = new Buffer(1000) + expected1.fill(0) + t.deepEqual(SafeBuffer.alloc(1000), expected1) + + var expected2 = new Buffer(1000 * 1000) + expected2.fill(0) + t.deepEqual(SafeBuffer.alloc(1000 * 1000), expected2) + } + t.end() +}) + +test('SafeBuffer.allocUnsafe(number)', function (t) { + var buf = SafeBuffer.allocUnsafe(100) // unitialized memory + t.equal(buf.length, 100) + t.equal(SafeBuffer.isBuffer(buf), true) + t.equal(Buffer.isBuffer(buf), true) + t.end() +}) + +test('SafeBuffer.from() throws with number types', function (t) { + t.plan(5) + t.throws(function () { + SafeBuffer.from(0) + }) + t.throws(function () { + SafeBuffer.from(-1) + }) + t.throws(function () { + SafeBuffer.from(NaN) + }) + t.throws(function () { + SafeBuffer.from(Infinity) + }) + t.throws(function () { + SafeBuffer.from(99) + }) +}) + +test('SafeBuffer.allocUnsafe() throws with non-number types', function (t) { + t.plan(4) + t.throws(function () { + SafeBuffer.allocUnsafe('hey') + }) + t.throws(function () { + SafeBuffer.allocUnsafe('hey', 'utf8') + }) + t.throws(function () { + SafeBuffer.allocUnsafe([1, 2, 3]) + }) + t.throws(function () { + SafeBuffer.allocUnsafe({}) + }) +}) + +test('SafeBuffer.alloc() throws with non-number types', function (t) { + t.plan(4) + t.throws(function () { + SafeBuffer.alloc('hey') + }) + t.throws(function () { + SafeBuffer.alloc('hey', 'utf8') + }) + t.throws(function () { + SafeBuffer.alloc([1, 2, 3]) + }) + t.throws(function () { + SafeBuffer.alloc({}) + }) +}) diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json new file mode 100644 index 0000000..eb96fe2 --- /dev/null +++ b/node_modules/readable-stream/package.json @@ -0,0 +1,83 @@ +{ + "_from": "readable-stream@~2.2.6", + "_id": "readable-stream@2.2.11", + "_inBundle": false, + "_integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", + "_location": "/readable-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "readable-stream@~2.2.6", + "name": "readable-stream", + "escapedName": "readable-stream", + "rawSpec": "~2.2.6", + "saveSpec": null, + "fetchSpec": "~2.2.6" + }, + "_requiredBy": [ + "/stream-spigot" + ], + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", + "_shasum": "0796b31f8d7688007ff0b93a8088d34aa17c0f72", + "_spec": "readable-stream@~2.2.6", + "_where": "D:\\Cricbuzzz\\node_modules\\stream-spigot", + "browser": { + "util": false, + "./readable.js": "./readable-browser.js", + "./writable.js": "./writable-browser.js", + "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" + }, + "bugs": { + "url": "https://github.com/nodejs/readable-stream/issues" + }, + "bundleDependencies": false, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.0.1", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + }, + "deprecated": false, + "description": "Streams3, a user-land copy of the stream library from Node.js", + "devDependencies": { + "assert": "~1.4.0", + "babel-polyfill": "^6.9.1", + "buffer": "^4.9.0", + "nyc": "^6.4.0", + "tap": "~0.7.1", + "tape": "~4.5.1", + "zuul": "~3.10.0" + }, + "homepage": "https://github.com/nodejs/readable-stream#readme", + "keywords": [ + "readable", + "stream", + "pipe" + ], + "license": "MIT", + "main": "readable.js", + "name": "readable-stream", + "nyc": { + "include": [ + "lib/**.js" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream.git" + }, + "scripts": { + "browser": "npm run write-zuul && zuul --browser-retries 2 -- test/browser.js", + "cover": "nyc npm test", + "local": "zuul --local 3000 --no-coverage -- test/browser.js", + "report": "nyc report --reporter=lcov", + "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", + "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" + }, + "version": "2.2.11" +} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js new file mode 100644 index 0000000..ffd791d --- /dev/null +++ b/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require('./readable').PassThrough diff --git a/node_modules/readable-stream/readable-browser.js b/node_modules/readable-stream/readable-browser.js new file mode 100644 index 0000000..e503725 --- /dev/null +++ b/node_modules/readable-stream/readable-browser.js @@ -0,0 +1,7 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js new file mode 100644 index 0000000..ec89ec5 --- /dev/null +++ b/node_modules/readable-stream/readable.js @@ -0,0 +1,19 @@ +var Stream = require('stream'); +if (process.env.READABLE_STREAM === 'disable' && Stream) { + module.exports = Stream; + exports = module.exports = Stream.Readable; + exports.Readable = Stream.Readable; + exports.Writable = Stream.Writable; + exports.Duplex = Stream.Duplex; + exports.Transform = Stream.Transform; + exports.PassThrough = Stream.PassThrough; + exports.Stream = Stream; +} else { + exports = module.exports = require('./lib/_stream_readable.js'); + exports.Stream = Stream || exports; + exports.Readable = exports; + exports.Writable = require('./lib/_stream_writable.js'); + exports.Duplex = require('./lib/_stream_duplex.js'); + exports.Transform = require('./lib/_stream_transform.js'); + exports.PassThrough = require('./lib/_stream_passthrough.js'); +} diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js new file mode 100644 index 0000000..b1baba2 --- /dev/null +++ b/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require('./readable').Transform diff --git a/node_modules/readable-stream/writable-browser.js b/node_modules/readable-stream/writable-browser.js new file mode 100644 index 0000000..ebdde6a --- /dev/null +++ b/node_modules/readable-stream/writable-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_writable.js'); diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js new file mode 100644 index 0000000..634ddcb --- /dev/null +++ b/node_modules/readable-stream/writable.js @@ -0,0 +1,8 @@ +var Stream = require("stream") +var Writable = require("./lib/_stream_writable.js") + +if (process.env.READABLE_STREAM === 'disable') { + module.exports = Stream && Stream.Writable || Writable +} + +module.exports = Writable diff --git a/node_modules/readdirp/LICENSE b/node_modules/readdirp/LICENSE new file mode 100644 index 0000000..037cbb4 --- /dev/null +++ b/node_modules/readdirp/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/readdirp/README.md b/node_modules/readdirp/README.md new file mode 100644 index 0000000..465593c --- /dev/null +++ b/node_modules/readdirp/README.md @@ -0,0 +1,122 @@ +# readdirp [![Weekly downloads](https://img.shields.io/npm/dw/readdirp.svg)](https://github.com/paulmillr/readdirp) + +Recursive version of [fs.readdir](https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback). Exposes a **stream API** and a **promise API**. + + +```sh +npm install readdirp +``` + +```javascript +const readdirp = require('readdirp'); + +// Use streams to achieve small RAM & CPU footprint. +// 1) Streams example with for-await. +for await (const entry of readdirp('.')) { + const {path} = entry; + console.log(`${JSON.stringify({path})}`); +} + +// 2) Streams example, non for-await. +// Print out all JS files along with their size within the current folder & subfolders. +readdirp('.', {fileFilter: '*.js', alwaysStat: true}) + .on('data', (entry) => { + const {path, stats: {size}} = entry; + console.log(`${JSON.stringify({path, size})}`); + }) + // Optionally call stream.destroy() in `warn()` in order to abort and cause 'close' to be emitted + .on('warn', error => console.error('non-fatal error', error)) + .on('error', error => console.error('fatal error', error)) + .on('end', () => console.log('done')); + +// 3) Promise example. More RAM and CPU than streams / for-await. +const files = await readdirp.promise('.'); +console.log(files.map(file => file.path)); + +// Other options. +readdirp('test', { + fileFilter: '*.js', + directoryFilter: ['!.git', '!*modules'] + // directoryFilter: (di) => di.basename.length === 9 + type: 'files_directories', + depth: 1 +}); +``` + +For more examples, check out `examples` directory. + +## API + +`const stream = readdirp(root[, options])` — **Stream API** + +- Reads given root recursively and returns a `stream` of [entry infos](#entryinfo) +- Optionally can be used like `for await (const entry of stream)` with node.js 10+ (`asyncIterator`). +- `on('data', (entry) => {})` [entry info](#entryinfo) for every file / dir. +- `on('warn', (error) => {})` non-fatal `Error` that prevents a file / dir from being processed. Example: inaccessible to the user. +- `on('error', (error) => {})` fatal `Error` which also ends the stream. Example: illegal options where passed. +- `on('end')` — we are done. Called when all entries were found and no more will be emitted. +- `on('close')` — stream is destroyed via `stream.destroy()`. + Could be useful if you want to manually abort even on a non fatal error. + At that point the stream is no longer `readable` and no more entries, warning or errors are emitted +- To learn more about streams, consult the very detailed [nodejs streams documentation](https://nodejs.org/api/stream.html) + or the [stream-handbook](https://github.com/substack/stream-handbook) + +`const entries = await readdirp.promise(root[, options])` — **Promise API**. Returns a list of [entry infos](#entryinfo). + +First argument is awalys `root`, path in which to start reading and recursing into subdirectories. + +### options + +- `fileFilter: ["*.js"]`: filter to include or exclude files. A `Function`, Glob string or Array of glob strings. + - **Function**: a function that takes an entry info as a parameter and returns true to include or false to exclude the entry + - **Glob string**: a string (e.g., `*.js`) which is matched using [picomatch](https://github.com/micromatch/picomatch), so go there for more + information. Globstars (`**`) are not supported since specifying a recursive pattern for an already recursive function doesn't make sense. Negated globs (as explained in the minimatch documentation) are allowed, e.g., `!*.txt` matches everything but text files. + - **Array of glob strings**: either need to be all inclusive or all exclusive (negated) patterns otherwise an error is thrown. + `['*.json', '*.js']` includes all JavaScript and Json files. + `['!.git', '!node_modules']` includes all directories except the '.git' and 'node_modules'. + - Directories that do not pass a filter will not be recursed into. +- `directoryFilter: ['!.git']`: filter to include/exclude directories found and to recurse into. Directories that do not pass a filter will not be recursed into. +- `depth: 5`: depth at which to stop recursing even if more subdirectories are found +- `type: 'files'`: determines if data events on the stream should be emitted for `'files'` (default), `'directories'`, `'files_directories'`, or `'all'`. Setting to `'all'` will also include entries for other types of file descriptors like character devices, unix sockets and named pipes. +- `alwaysStat: false`: always return `stats` property for every file. Default is `false`, readdirp will return `Dirent` entries. Setting it to `true` can double readdir execution time - use it only when you need file `size`, `mtime` etc. Cannot be enabled on node <10.10.0. +- `lstat: false`: include symlink entries in the stream along with files. When `true`, `fs.lstat` would be used instead of `fs.stat` + +### `EntryInfo` + +Has the following properties: + +- `path: 'assets/javascripts/react.js'`: path to the file/directory (relative to given root) +- `fullPath: '/Users/dev/projects/app/assets/javascripts/react.js'`: full path to the file/directory found +- `basename: 'react.js'`: name of the file/directory +- `dirent: fs.Dirent`: built-in [dir entry object](https://nodejs.org/api/fs.html#fs_class_fs_dirent) - only with `alwaysStat: false` +- `stats: fs.Stats`: built in [stat object](https://nodejs.org/api/fs.html#fs_class_fs_stats) - only with `alwaysStat: true` + +## Changelog + +- 3.5 (Oct 13, 2020) disallows recursive directory-based symlinks. + Before, it could have entered infinite loop. +- 3.4 (Mar 19, 2020) adds support for directory-based symlinks. +- 3.3 (Dec 6, 2019) stabilizes RAM consumption and enables perf management with `highWaterMark` option. Fixes race conditions related to `for-await` looping. +- 3.2 (Oct 14, 2019) improves performance by 250% and makes streams implementation more idiomatic. +- 3.1 (Jul 7, 2019) brings `bigint` support to `stat` output on Windows. This is backwards-incompatible for some cases. Be careful. It you use it incorrectly, you'll see "TypeError: Cannot mix BigInt and other types, use explicit conversions". +- 3.0 brings huge performance improvements and stream backpressure support. +- Upgrading 2.x to 3.x: + - Signature changed from `readdirp(options)` to `readdirp(root, options)` + - Replaced callback API with promise API. + - Renamed `entryType` option to `type` + - Renamed `entryType: 'both'` to `'files_directories'` + - `EntryInfo` + - Renamed `stat` to `stats` + - Emitted only when `alwaysStat: true` + - `dirent` is emitted instead of `stats` by default with `alwaysStat: false` + - Renamed `name` to `basename` + - Removed `parentDir` and `fullParentDir` properties +- Supported node.js versions: + - 3.x: node 8+ + - 2.x: node 0.6+ + +## License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller () + +MIT License, see [LICENSE](LICENSE) file. diff --git a/node_modules/readdirp/index.d.ts b/node_modules/readdirp/index.d.ts new file mode 100644 index 0000000..cbbd76c --- /dev/null +++ b/node_modules/readdirp/index.d.ts @@ -0,0 +1,43 @@ +// TypeScript Version: 3.2 + +/// + +import * as fs from 'fs'; +import { Readable } from 'stream'; + +declare namespace readdir { + interface EntryInfo { + path: string; + fullPath: string; + basename: string; + stats?: fs.Stats; + dirent?: fs.Dirent; + } + + interface ReaddirpOptions { + root?: string; + fileFilter?: string | string[] | ((entry: EntryInfo) => boolean); + directoryFilter?: string | string[] | ((entry: EntryInfo) => boolean); + type?: 'files' | 'directories' | 'files_directories' | 'all'; + lstat?: boolean; + depth?: number; + alwaysStat?: boolean; + } + + interface ReaddirpStream extends Readable, AsyncIterable { + read(): EntryInfo; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + function promise( + root: string, + options?: ReaddirpOptions + ): Promise; +} + +declare function readdir( + root: string, + options?: readdir.ReaddirpOptions +): readdir.ReaddirpStream; + +export = readdir; diff --git a/node_modules/readdirp/index.js b/node_modules/readdirp/index.js new file mode 100644 index 0000000..cf739b2 --- /dev/null +++ b/node_modules/readdirp/index.js @@ -0,0 +1,287 @@ +'use strict'; + +const fs = require('fs'); +const { Readable } = require('stream'); +const sysPath = require('path'); +const { promisify } = require('util'); +const picomatch = require('picomatch'); + +const readdir = promisify(fs.readdir); +const stat = promisify(fs.stat); +const lstat = promisify(fs.lstat); +const realpath = promisify(fs.realpath); + +/** + * @typedef {Object} EntryInfo + * @property {String} path + * @property {String} fullPath + * @property {fs.Stats=} stats + * @property {fs.Dirent=} dirent + * @property {String} basename + */ + +const BANG = '!'; +const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); +const FILE_TYPE = 'files'; +const DIR_TYPE = 'directories'; +const FILE_DIR_TYPE = 'files_directories'; +const EVERYTHING_TYPE = 'all'; +const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; + +const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); +const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); +const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); + +const normalizeFilter = filter => { + if (filter === undefined) return; + if (typeof filter === 'function') return filter; + + if (typeof filter === 'string') { + const glob = picomatch(filter.trim()); + return entry => glob(entry.basename); + } + + if (Array.isArray(filter)) { + const positive = []; + const negative = []; + for (const item of filter) { + const trimmed = item.trim(); + if (trimmed.charAt(0) === BANG) { + negative.push(picomatch(trimmed.slice(1))); + } else { + positive.push(picomatch(trimmed)); + } + } + + if (negative.length > 0) { + if (positive.length > 0) { + return entry => + positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); + } + return entry => !negative.some(f => f(entry.basename)); + } + return entry => positive.some(f => f(entry.basename)); + } +}; + +class ReaddirpStream extends Readable { + static get defaultOptions() { + return { + root: '.', + /* eslint-disable no-unused-vars */ + fileFilter: (path) => true, + directoryFilter: (path) => true, + /* eslint-enable no-unused-vars */ + type: FILE_TYPE, + lstat: false, + depth: 2147483648, + alwaysStat: false + }; + } + + constructor(options = {}) { + super({ + objectMode: true, + autoDestroy: true, + highWaterMark: options.highWaterMark || 4096 + }); + const opts = { ...ReaddirpStream.defaultOptions, ...options }; + const { root, type } = opts; + + this._fileFilter = normalizeFilter(opts.fileFilter); + this._directoryFilter = normalizeFilter(opts.directoryFilter); + + const statMethod = opts.lstat ? lstat : stat; + // Use bigint stats if it's windows and stat() supports options (node 10+). + if (wantBigintFsStats) { + this._stat = path => statMethod(path, { bigint: true }); + } else { + this._stat = statMethod; + } + + this._maxDepth = opts.depth; + this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsEverything = type === EVERYTHING_TYPE; + this._root = sysPath.resolve(root); + this._isDirent = ('Dirent' in fs) && !opts.alwaysStat; + this._statsProp = this._isDirent ? 'dirent' : 'stats'; + this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; + + // Launch stream with one parent, the root dir. + this.parents = [this._exploreDir(root, 1)]; + this.reading = false; + this.parent = undefined; + } + + async _read(batch) { + if (this.reading) return; + this.reading = true; + + try { + while (!this.destroyed && batch > 0) { + const { path, depth, files = [] } = this.parent || {}; + + if (files.length > 0) { + const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); + for (const entry of await Promise.all(slice)) { + if (this.destroyed) return; + + const entryType = await this._getEntryType(entry); + if (entryType === 'directory' && this._directoryFilter(entry)) { + if (depth <= this._maxDepth) { + this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); + } + + if (this._wantsDir) { + this.push(entry); + batch--; + } + } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { + if (this._wantsFile) { + this.push(entry); + batch--; + } + } + } + } else { + const parent = this.parents.pop(); + if (!parent) { + this.push(null); + break; + } + this.parent = await parent; + if (this.destroyed) return; + } + } + } catch (error) { + this.destroy(error); + } finally { + this.reading = false; + } + } + + async _exploreDir(path, depth) { + let files; + try { + files = await readdir(path, this._rdOptions); + } catch (error) { + this._onError(error); + } + return { files, depth, path }; + } + + async _formatEntry(dirent, path) { + let entry; + try { + const basename = this._isDirent ? dirent.name : dirent; + const fullPath = sysPath.resolve(sysPath.join(path, basename)); + entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename }; + entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); + } catch (err) { + this._onError(err); + } + return entry; + } + + _onError(err) { + if (isNormalFlowError(err) && !this.destroyed) { + this.emit('warn', err); + } else { + this.destroy(err); + } + } + + async _getEntryType(entry) { + // entry may be undefined, because a warning or an error were emitted + // and the statsProp is undefined + const stats = entry && entry[this._statsProp]; + if (!stats) { + return; + } + if (stats.isFile()) { + return 'file'; + } + if (stats.isDirectory()) { + return 'directory'; + } + if (stats && stats.isSymbolicLink()) { + const full = entry.fullPath; + try { + const entryRealPath = await realpath(full); + const entryRealPathStats = await lstat(entryRealPath); + if (entryRealPathStats.isFile()) { + return 'file'; + } + if (entryRealPathStats.isDirectory()) { + const len = entryRealPath.length; + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) { + const recursiveError = new Error( + `Circular symlink detected: "${full}" points to "${entryRealPath}"` + ); + recursiveError.code = RECURSIVE_ERROR_CODE; + return this._onError(recursiveError); + } + return 'directory'; + } + } catch (error) { + this._onError(error); + } + } + } + + _includeAsFile(entry) { + const stats = entry && entry[this._statsProp]; + + return stats && this._wantsEverything && !stats.isDirectory(); + } +} + +/** + * @typedef {Object} ReaddirpArguments + * @property {Function=} fileFilter + * @property {Function=} directoryFilter + * @property {String=} type + * @property {Number=} depth + * @property {String=} root + * @property {Boolean=} lstat + * @property {Boolean=} bigint + */ + +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param {String} root Root directory + * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth + */ +const readdirp = (root, options = {}) => { + let type = options.entryType || options.type; + if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility + if (type) options.type = type; + if (!root) { + throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); + } else if (typeof root !== 'string') { + throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); + } else if (type && !ALL_TYPES.includes(type)) { + throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); + } + + options.root = root; + return new ReaddirpStream(options); +}; + +const readdirpPromise = (root, options = {}) => { + return new Promise((resolve, reject) => { + const files = []; + readdirp(root, options) + .on('data', entry => files.push(entry)) + .on('end', () => resolve(files)) + .on('error', error => reject(error)); + }); +}; + +readdirp.promise = readdirpPromise; +readdirp.ReaddirpStream = ReaddirpStream; +readdirp.default = readdirp; + +module.exports = readdirp; diff --git a/node_modules/readdirp/package.json b/node_modules/readdirp/package.json new file mode 100644 index 0000000..8a3f1bd --- /dev/null +++ b/node_modules/readdirp/package.json @@ -0,0 +1,158 @@ +{ + "_from": "readdirp@~3.6.0", + "_id": "readdirp@3.6.0", + "_inBundle": false, + "_integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "_location": "/readdirp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "readdirp@~3.6.0", + "name": "readdirp", + "escapedName": "readdirp", + "rawSpec": "~3.6.0", + "saveSpec": null, + "fetchSpec": "~3.6.0" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "_shasum": "74a370bd857116e245b29cc97340cd431a02a6c7", + "_spec": "readdirp@~3.6.0", + "_where": "D:\\Cricbuzzz\\node_modules\\chokidar", + "author": { + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": "thlorenz.com" + }, + "bugs": { + "url": "https://github.com/paulmillr/readdirp/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": "thlorenz.com" + }, + { + "name": "Paul Miller", + "url": "https://paulmillr.com" + } + ], + "dependencies": { + "picomatch": "^2.2.1" + }, + "deprecated": false, + "description": "Recursive version of fs.readdir with streaming API.", + "devDependencies": { + "@types/node": "^14", + "chai": "^4.2", + "chai-subset": "^1.6", + "dtslint": "^3.3.0", + "eslint": "^7.0.0", + "mocha": "^7.1.1", + "nyc": "^15.0.0", + "rimraf": "^3.0.0", + "typescript": "^4.0.3" + }, + "engines": { + "node": ">=8.10.0" + }, + "eslintConfig": { + "root": true, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 9, + "sourceType": "script" + }, + "env": { + "node": true, + "es6": true + }, + "rules": { + "array-callback-return": "error", + "no-empty": [ + "error", + { + "allowEmptyCatch": true + } + ], + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-lonely-if": "error", + "no-var": "error", + "object-shorthand": "error", + "prefer-arrow-callback": [ + "error", + { + "allowNamedFunctions": true + } + ], + "prefer-const": [ + "error", + { + "ignoreReadBeforeAssign": true + } + ], + "prefer-destructuring": [ + "error", + { + "object": true, + "array": false + } + ], + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "semi": "error", + "strict": "error", + "quotes": [ + "error", + "single" + ] + } + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/paulmillr/readdirp", + "keywords": [ + "recursive", + "fs", + "stream", + "streams", + "readdir", + "filesystem", + "find", + "filter" + ], + "license": "MIT", + "main": "index.js", + "name": "readdirp", + "nyc": { + "reporter": [ + "html", + "text" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/paulmillr/readdirp.git" + }, + "scripts": { + "dtslint": "dtslint", + "lint": "eslint --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --exit", + "nyc": "nyc", + "test": "npm run lint && nyc npm run mocha" + }, + "version": "3.6.0" +} diff --git a/node_modules/registry-auth-token/CHANGELOG.md b/node_modules/registry-auth-token/CHANGELOG.md new file mode 100644 index 0000000..e96f146 --- /dev/null +++ b/node_modules/registry-auth-token/CHANGELOG.md @@ -0,0 +1,134 @@ +# Change Log + +All notable changes will be documented in this file. + +## [4.2.0] - 2020-07-13 + +### Changes + +- Add support for `NPM_CONFIG_USERCONFIG` environment variable (Ben Sorohan) + +## [4.1.0] - 2020-01-17 + +### Changes + +- Add support for legacy auth token on the registry url (Gustav Blomér) + +## [4.0.0] - 2019-06-17 + +### BREAKING + +- Minimum node.js version requirement is now v6 + +### Changes + +- Upgraded dependencies (Espen Hovlandsdal) + +## [3.4.0] - 2019-03-20 + +### Changes + +- Enabled legacy auth token to be read from environment variable (Martin Flodin) + +## [3.3.2] - 2018-01-26 + +### Changes + +- Support password with ENV variable tokens (Nowell Strite) + +## [3.3.1] - 2017-05-02 + +### Fixes + +- Auth legacy token is basic auth (Hutson Betts) + +## [3.3.0] - 2017-04-24 + +### Changes + +- Support legacy auth token config key (Zoltan Kochan) +- Use safe-buffer module for backwards-compatible base64 encoding/decoding (Espen Hovlandsdal) +- Change to standard.js coding style (Espen Hovlandsdal) + +## [3.2.0] - 2017-04-20 + +### Changes + +- Allow passing parsed npmrc from outside (Zoltan Kochan) + +## [3.1.2] - 2017-04-07 + +### Changes + +- Avoid infinite loop on invalid URL (Zoltan Kochan) + +## [3.1.1] - 2017-04-06 + +### Changes + +- Nerf-dart URLs even if recursive is set to false (Espen Hovlandsdal) + +## [3.1.0] - 2016-10-19 + +### Changes + +- Return the password and username for Basic authorization (Zoltan Kochan) + +## [3.0.1] - 2016-08-07 + +### Changes + +- Fix recursion bug (Lukas Eipert) +- Implement alternative base64 encoding/decoding implementation for Node 6 (Lukas Eipert) + +## [3.0.0] - 2016-08-04 + +### Added + +- Support for Basic Authentication (username/password) (Lukas Eipert) + +### Changes + +- The result format of the output changed from a simple string to an object which contains the token type + +```js + // before: returns 'tokenString' + // after: returns {token: 'tokenString', type: 'Bearer'} + getAuthToken() +``` + +## [2.1.1] - 2016-07-10 + +### Changes + +- Fix infinite loop when recursively resolving registry URLs on Windows (Espen Hovlandsdal) + +## [2.1.0] - 2016-07-07 + +### Added + +- Add feature to find configured registry URL for a scope (Espen Hovlandsdal) + +## [2.0.0] - 2016-06-17 + +### Changes + +- Fix tokens defined by reference to environment variables (Dan MacTough) + +## [1.1.1] - 2016-04-26 + +### Changes + +- Fix for registries with port number in URL (Ryan Day) + +[1.1.1]: https://github.com/rexxars/registry-auth-token/compare/a5b4fe2f5ff982110eb8a813ba1b3b3c5d851af1...v1.1.1 +[2.0.0]: https://github.com/rexxars/registry-auth-token/compare/v1.1.1...v2.0.0 +[2.1.0]: https://github.com/rexxars/registry-auth-token/compare/v2.0.0...v2.1.0 +[2.1.1]: https://github.com/rexxars/registry-auth-token/compare/v2.1.0...v2.1.1 +[3.0.0]: https://github.com/rexxars/registry-auth-token/compare/v2.1.1...v3.0.0 +[3.0.1]: https://github.com/rexxars/registry-auth-token/compare/v3.0.0...v3.0.1 +[3.1.0]: https://github.com/rexxars/registry-auth-token/compare/v3.0.1...v3.1.0 +[3.1.1]: https://github.com/rexxars/registry-auth-token/compare/v3.1.0...v3.1.1 +[3.1.2]: https://github.com/rexxars/registry-auth-token/compare/v3.1.1...v3.1.2 +[3.2.0]: https://github.com/rexxars/registry-auth-token/compare/v3.1.2...v3.2.0 +[3.3.0]: https://github.com/rexxars/registry-auth-token/compare/v3.2.0...v3.3.0 diff --git a/node_modules/registry-auth-token/LICENSE b/node_modules/registry-auth-token/LICENSE new file mode 100644 index 0000000..0de12e3 --- /dev/null +++ b/node_modules/registry-auth-token/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Espen Hovlandsdal + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/registry-auth-token/README.md b/node_modules/registry-auth-token/README.md new file mode 100644 index 0000000..084dc0a --- /dev/null +++ b/node_modules/registry-auth-token/README.md @@ -0,0 +1,65 @@ +# registry-auth-token + +[![npm version](http://img.shields.io/npm/v/registry-auth-token.svg?style=flat-square)](http://browsenpm.org/package/registry-auth-token)[![Build Status](http://img.shields.io/travis/rexxars/registry-auth-token/main.svg?style=flat-square)](https://travis-ci.org/rexxars/registry-auth-token) + +Get the auth token set for an npm registry from `.npmrc`. Also allows fetching the configured registry URL for a given npm scope. + +## Installing + +``` +npm install --save registry-auth-token +``` + +## Usage + +Returns an object containing `token` and `type`, or `undefined` if no token can be found. `type` can be either `Bearer` or `Basic`. + +```js +var getAuthToken = require('registry-auth-token') +var getRegistryUrl = require('registry-auth-token/registry-url') + +// Get auth token and type for default `registry` set in `.npmrc` +console.log(getAuthToken()) // {token: 'someToken', type: 'Bearer'} + +// Get auth token for a specific registry URL +console.log(getAuthToken('//registry.foo.bar')) + +// Find the registry auth token for a given URL (with deep path): +// If registry is at `//some.host/registry` +// URL passed is `//some.host/registry/deep/path` +// Will find token the closest matching path; `//some.host/registry` +console.log(getAuthToken('//some.host/registry/deep/path', {recursive: true})) + +// Find the configured registry url for scope `@foobar`. +// Falls back to the global registry if not defined. +console.log(getRegistryUrl('@foobar')) + +// Use the npm config that is passed in +console.log(getRegistryUrl('http://registry.foobar.eu/', { + npmrc: { + 'registry': 'http://registry.foobar.eu/', + '//registry.foobar.eu/:_authToken': 'qar' + } +})) +``` + +## Return value + +```js +// If auth info can be found: +{token: 'someToken', type: 'Bearer'} + +// Or: +{token: 'someOtherToken', type: 'Basic'} + +// Or, if nothing is found: +undefined +``` + +## Security + +Please be careful when using this. Leaking your auth token is dangerous. + +## License + +MIT-licensed. See LICENSE. diff --git a/node_modules/registry-auth-token/base64.js b/node_modules/registry-auth-token/base64.js new file mode 100644 index 0000000..ff0f6cb --- /dev/null +++ b/node_modules/registry-auth-token/base64.js @@ -0,0 +1,12 @@ +function decodeBase64 (base64) { + return Buffer.from(base64, 'base64').toString('utf8') +} + +function encodeBase64 (string) { + return Buffer.from(string, 'utf8').toString('base64') +} + +module.exports = { + decodeBase64: decodeBase64, + encodeBase64: encodeBase64 +} diff --git a/node_modules/registry-auth-token/index.js b/node_modules/registry-auth-token/index.js new file mode 100644 index 0000000..28eedfd --- /dev/null +++ b/node_modules/registry-auth-token/index.js @@ -0,0 +1,142 @@ +var url = require('url') +var base64 = require('./base64') + +var decodeBase64 = base64.decodeBase64 +var encodeBase64 = base64.encodeBase64 + +var tokenKey = ':_authToken' +var legacyTokenKey = ':_auth' +var userKey = ':username' +var passwordKey = ':_password' + +module.exports = function () { + var checkUrl + var options + if (arguments.length >= 2) { + checkUrl = arguments[0] + options = arguments[1] + } else if (typeof arguments[0] === 'string') { + checkUrl = arguments[0] + } else { + options = arguments[0] + } + options = options || {} + options.npmrc = options.npmrc || require('rc')('npm', { registry: 'https://registry.npmjs.org/' }, { + config: process.env.npm_config_userconfig || process.env.NPM_CONFIG_USERCONFIG + }) + checkUrl = checkUrl || options.npmrc.registry + return getRegistryAuthInfo(checkUrl, options) || getLegacyAuthInfo(options.npmrc) +} + +function getRegistryAuthInfo (checkUrl, options) { + var parsed = url.parse(checkUrl, false, true) + var pathname + + while (pathname !== '/' && parsed.pathname !== pathname) { + pathname = parsed.pathname || '/' + + var regUrl = '//' + parsed.host + pathname.replace(/\/$/, '') + var authInfo = getAuthInfoForUrl(regUrl, options.npmrc) + if (authInfo) { + return authInfo + } + + // break if not recursive + if (!options.recursive) { + return /\/$/.test(checkUrl) + ? undefined + : getRegistryAuthInfo(url.resolve(checkUrl, '.'), options) + } + + parsed.pathname = url.resolve(normalizePath(pathname), '..') || '/' + } + + return undefined +} + +function getLegacyAuthInfo (npmrc) { + if (!npmrc._auth) { + return undefined + } + + var token = replaceEnvironmentVariable(npmrc._auth) + + return { token: token, type: 'Basic' } +} + +function normalizePath (path) { + return path[path.length - 1] === '/' ? path : path + '/' +} + +function getAuthInfoForUrl (regUrl, npmrc) { + // try to get bearer token + var bearerAuth = getBearerToken(npmrc[regUrl + tokenKey] || npmrc[regUrl + '/' + tokenKey]) + if (bearerAuth) { + return bearerAuth + } + + // try to get basic token + var username = npmrc[regUrl + userKey] || npmrc[regUrl + '/' + userKey] + var password = npmrc[regUrl + passwordKey] || npmrc[regUrl + '/' + passwordKey] + var basicAuth = getTokenForUsernameAndPassword(username, password) + if (basicAuth) { + return basicAuth + } + + var basicAuthWithToken = getLegacyAuthToken(npmrc[regUrl + legacyTokenKey] || npmrc[regUrl + '/' + legacyTokenKey]) + if (basicAuthWithToken) { + return basicAuthWithToken + } + + return undefined +} + +function replaceEnvironmentVariable (token) { + return token.replace(/^\$\{?([^}]*)\}?$/, function (fullMatch, envVar) { + return process.env[envVar] + }) +} + +function getBearerToken (tok) { + if (!tok) { + return undefined + } + + // check if bearer token is set as environment variable + var token = replaceEnvironmentVariable(tok) + + return { token: token, type: 'Bearer' } +} + +function getTokenForUsernameAndPassword (username, password) { + if (!username || !password) { + return undefined + } + + // passwords are base64 encoded, so we need to decode it + // See https://github.com/npm/npm/blob/v3.10.6/lib/config/set-credentials-by-uri.js#L26 + var pass = decodeBase64(replaceEnvironmentVariable(password)) + + // a basic auth token is base64 encoded 'username:password' + // See https://github.com/npm/npm/blob/v3.10.6/lib/config/get-credentials-by-uri.js#L70 + var token = encodeBase64(username + ':' + pass) + + // we found a basicToken token so let's exit the loop + return { + token: token, + type: 'Basic', + password: pass, + username: username + } +} + +function getLegacyAuthToken (tok) { + if (!tok) { + return undefined + } + + // check if legacy auth token is set as environment variable + var token = replaceEnvironmentVariable(tok) + + return { token: token, type: 'Basic' } +} diff --git a/node_modules/registry-auth-token/package.json b/node_modules/registry-auth-token/package.json new file mode 100644 index 0000000..b9811a1 --- /dev/null +++ b/node_modules/registry-auth-token/package.json @@ -0,0 +1,76 @@ +{ + "_from": "registry-auth-token@^4.0.0", + "_id": "registry-auth-token@4.2.1", + "_inBundle": false, + "_integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "_location": "/registry-auth-token", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "registry-auth-token@^4.0.0", + "name": "registry-auth-token", + "escapedName": "registry-auth-token", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/package-json" + ], + "_resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "_shasum": "6d7b4006441918972ccd5fedcd41dc322c79b250", + "_spec": "registry-auth-token@^4.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\package-json", + "author": { + "name": "Espen Hovlandsdal", + "email": "espen@hovlandsdal.com" + }, + "bugs": { + "url": "https://github.com/rexxars/registry-auth-token/issues" + }, + "bundleDependencies": false, + "dependencies": { + "rc": "^1.2.8" + }, + "deprecated": false, + "description": "Get the auth token set for an npm registry (if any)", + "devDependencies": { + "istanbul": "^0.4.2", + "mocha": "^6.1.4", + "require-uncached": "^1.0.2", + "standard": "^12.0.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "homepage": "https://github.com/rexxars/registry-auth-token#readme", + "keywords": [ + "npm", + "conf", + "config", + "npmconf", + "registry", + "auth", + "token", + "authtoken" + ], + "license": "MIT", + "main": "index.js", + "name": "registry-auth-token", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/rexxars/registry-auth-token.git" + }, + "scripts": { + "coverage": "istanbul cover _mocha", + "posttest": "standard", + "test": "mocha" + }, + "standard": { + "ignore": [ + "coverage/**" + ] + }, + "version": "4.2.1" +} diff --git a/node_modules/registry-auth-token/registry-url.js b/node_modules/registry-auth-token/registry-url.js new file mode 100644 index 0000000..b4532d6 --- /dev/null +++ b/node_modules/registry-auth-token/registry-url.js @@ -0,0 +1,5 @@ +module.exports = function (scope, npmrc) { + var rc = npmrc || require('rc')('npm', { registry: 'https://registry.npmjs.org/' }) + var url = rc[scope + ':registry'] || rc.registry + return url.slice(-1) === '/' ? url : url + '/' +} diff --git a/node_modules/registry-url/index.d.ts b/node_modules/registry-url/index.d.ts new file mode 100644 index 0000000..5f2c586 --- /dev/null +++ b/node_modules/registry-url/index.d.ts @@ -0,0 +1,33 @@ +declare const registryUrl: { + /** + Get the set npm registry URL. + + @param scope - Retrieve the registry URL associated with an [npm scope](https://docs.npmjs.com/misc/scope). If the provided scope is not in the user's `.npmrc` file, then `registry-url` will check for the existence of `registry`, or if that's not set, fallback to the default npm registry. + + @example + ``` + import registryUrl = require('registry-url'); + + // # .npmrc + // registry = 'https://custom-registry.com/' + + console.log(registryUrl()); + //=> 'https://custom-registry.com/' + + + // # .npmrc + // @myco:registry = 'https://custom-registry.com/' + + console.log(registryUrl('@myco')); + //=> 'https://custom-registry.com/' + ``` + */ + (scope?: string): string; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function registryUrl(scope?: string): string; + // export = registryUrl; + default: typeof registryUrl; +}; + +export = registryUrl; diff --git a/node_modules/registry-url/index.js b/node_modules/registry-url/index.js new file mode 100644 index 0000000..23ea1f8 --- /dev/null +++ b/node_modules/registry-url/index.js @@ -0,0 +1,12 @@ +'use strict'; +const rc = require('rc'); + +const registryUrl = scope => { + const result = rc('npm', {registry: 'https://registry.npmjs.org/'}); + const url = result[`${scope}:registry`] || result.config_registry || result.registry; + return url.slice(-1) === '/' ? url : `${url}/`; +}; + +module.exports = registryUrl; +// TODO: Remove this for the next major release +module.exports.default = registryUrl; diff --git a/node_modules/registry-url/license b/node_modules/registry-url/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/registry-url/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/registry-url/package.json b/node_modules/registry-url/package.json new file mode 100644 index 0000000..3ecfbcb --- /dev/null +++ b/node_modules/registry-url/package.json @@ -0,0 +1,76 @@ +{ + "_from": "registry-url@^5.0.0", + "_id": "registry-url@5.1.0", + "_inBundle": false, + "_integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "_location": "/registry-url", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "registry-url@^5.0.0", + "name": "registry-url", + "escapedName": "registry-url", + "rawSpec": "^5.0.0", + "saveSpec": null, + "fetchSpec": "^5.0.0" + }, + "_requiredBy": [ + "/package-json" + ], + "_resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "_shasum": "e98334b50d5434b81136b44ec638d9c2009c5009", + "_spec": "registry-url@^5.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\package-json", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "ava": { + "serial": true + }, + "bugs": { + "url": "https://github.com/sindresorhus/registry-url/issues" + }, + "bundleDependencies": false, + "dependencies": { + "rc": "^1.2.8" + }, + "deprecated": false, + "description": "Get the set npm registry URL", + "devDependencies": { + "ava": "^1.4.1", + "import-fresh": "^3.0.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/registry-url#readme", + "keywords": [ + "npm", + "conf", + "config", + "npmconf", + "registry", + "url", + "uri", + "scope" + ], + "license": "MIT", + "name": "registry-url", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/registry-url.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.1.0" +} diff --git a/node_modules/registry-url/readme.md b/node_modules/registry-url/readme.md new file mode 100644 index 0000000..dfcb99a --- /dev/null +++ b/node_modules/registry-url/readme.md @@ -0,0 +1,50 @@ +# registry-url [![Build Status](https://travis-ci.org/sindresorhus/registry-url.svg?branch=master)](https://travis-ci.org/sindresorhus/registry-url) + +> Get the set npm registry URL + +It's usually `https://registry.npmjs.org/`, but it's [configurable](https://docs.npmjs.com/misc/registry). + +Use this if you do anything with the npm registry as users will expect it to use their configured registry. + + +## Install + +``` +$ npm install registry-url +``` + + +## Usage + +```ini +# .npmrc +registry = 'https://custom-registry.com/' +``` + +```js +const registryUrl = require('registry-url'); + +console.log(registryUrl()); +//=> 'https://custom-registry.com/' +``` + +It can also retrieve the registry URL associated with an [npm scope](https://docs.npmjs.com/misc/scope). + +```ini +# .npmrc +@myco:registry = 'https://custom-registry.com/' +``` + +```js +const registryUrl = require('registry-url'); + +console.log(registryUrl('@myco')); +//=> 'https://custom-registry.com/' +``` + +If the provided scope is not in the user's `.npmrc` file, then `registry-url` will check for the existence of `registry`, or if that's not set, fallback to the default npm registry. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/request/CHANGELOG.md b/node_modules/request/CHANGELOG.md new file mode 100644 index 0000000..751514d --- /dev/null +++ b/node_modules/request/CHANGELOG.md @@ -0,0 +1,709 @@ +## Change Log + +### v2.87.0 (2018/05/21) +- [#2943](https://github.com/request/request/pull/2943) Replace hawk dependency with a local implemenation (#2943) (@hueniverse) + +### v2.86.0 (2018/05/15) +- [#2885](https://github.com/request/request/pull/2885) Remove redundant code (for Node.js 0.9.4 and below) and dependency (@ChALkeR) +- [#2942](https://github.com/request/request/pull/2942) Make Test GREEN Again! (@simov) +- [#2923](https://github.com/request/request/pull/2923) Alterations for failing CI tests (@gareth-robinson) + +### v2.85.0 (2018/03/12) +- [#2880](https://github.com/request/request/pull/2880) Revert "Update hawk to 7.0.7 (#2880)" (@simov) + +### v2.84.0 (2018/03/12) +- [#2793](https://github.com/request/request/pull/2793) Fixed calculation of oauth_body_hash, issue #2792 (@dvishniakov) +- [#2880](https://github.com/request/request/pull/2880) Update hawk to 7.0.7 (#2880) (@kornel-kedzierski) + +### v2.83.0 (2017/09/27) +- [#2776](https://github.com/request/request/pull/2776) Updating tough-cookie due to security fix. (#2776) (@karlnorling) + +### v2.82.0 (2017/09/19) +- [#2703](https://github.com/request/request/pull/2703) Add Node.js v8 to Travis CI (@ryysud) +- [#2751](https://github.com/request/request/pull/2751) Update of hawk and qs to latest version (#2751) (@Olivier-Moreau) +- [#2658](https://github.com/request/request/pull/2658) Fixed some text in README.md (#2658) (@Marketionist) +- [#2635](https://github.com/request/request/pull/2635) chore(package): update aws-sign2 to version 0.7.0 (#2635) (@greenkeeperio-bot) +- [#2641](https://github.com/request/request/pull/2641) Update README to simplify & update convenience methods (#2641) (@FredKSchott) +- [#2541](https://github.com/request/request/pull/2541) Add convenience method for HTTP OPTIONS (#2541) (@jamesseanwright) +- [#2605](https://github.com/request/request/pull/2605) Add promise support section to README (#2605) (@FredKSchott) +- [#2579](https://github.com/request/request/pull/2579) refactor(lint): replace eslint with standard (#2579) (@ahmadnassri) +- [#2598](https://github.com/request/request/pull/2598) Update codecov to version 2.0.2 🚀 (@greenkeeperio-bot) +- [#2590](https://github.com/request/request/pull/2590) Adds test-timing keepAlive test (@nicjansma) +- [#2589](https://github.com/request/request/pull/2589) fix tabulation on request example README.MD (@odykyi) +- [#2594](https://github.com/request/request/pull/2594) chore(dependencies): har-validator to 5.x [removes babel dep] (@ahmadnassri) + +### v2.81.0 (2017/03/09) +- [#2584](https://github.com/request/request/pull/2584) Security issue: Upgrade qs to version 6.4.0 (@sergejmueller) +- [#2578](https://github.com/request/request/pull/2578) safe-buffer doesn't zero-fill by default, its just a polyfill. (#2578) (@mikeal) +- [#2566](https://github.com/request/request/pull/2566) Timings: Tracks 'lookup', adds 'wait' time, fixes connection re-use (#2566) (@nicjansma) +- [#2574](https://github.com/request/request/pull/2574) Migrating to safe-buffer for improved security. (@mikeal) +- [#2573](https://github.com/request/request/pull/2573) fixes #2572 (@ahmadnassri) + +### v2.80.0 (2017/03/04) +- [#2571](https://github.com/request/request/pull/2571) Correctly format the Host header for IPv6 addresses (@JamesMGreene) +- [#2558](https://github.com/request/request/pull/2558) Update README.md example snippet (@FredKSchott) +- [#2221](https://github.com/request/request/pull/2221) Adding a simple Response object reference in argument specification (@calamarico) +- [#2452](https://github.com/request/request/pull/2452) Adds .timings array with DNC, TCP, request and response times (@nicjansma) +- [#2553](https://github.com/request/request/pull/2553) add ISSUE_TEMPLATE, move PR template (@FredKSchott) +- [#2539](https://github.com/request/request/pull/2539) Create PULL_REQUEST_TEMPLATE.md (@FredKSchott) +- [#2524](https://github.com/request/request/pull/2524) Update caseless to version 0.12.0 🚀 (@greenkeeperio-bot) +- [#2460](https://github.com/request/request/pull/2460) Fix wrong MIME type in example (@OwnageIsMagic) +- [#2514](https://github.com/request/request/pull/2514) Change tags to keywords in package.json (@humphd) +- [#2492](https://github.com/request/request/pull/2492) More lenient gzip decompression (@addaleax) + +### v2.79.0 (2016/11/18) +- [#2368](https://github.com/request/request/pull/2368) Fix typeof check in test-pool.js (@forivall) +- [#2394](https://github.com/request/request/pull/2394) Use `files` in package.json (@SimenB) +- [#2463](https://github.com/request/request/pull/2463) AWS support for session tokens for temporary credentials (@simov) +- [#2467](https://github.com/request/request/pull/2467) Migrate to uuid (@simov, @antialias) +- [#2459](https://github.com/request/request/pull/2459) Update taper to version 0.5.0 🚀 (@greenkeeperio-bot) +- [#2448](https://github.com/request/request/pull/2448) Make other connect timeout test more reliable too (@mscdex) + +### v2.78.0 (2016/11/03) +- [#2447](https://github.com/request/request/pull/2447) Always set request timeout on keep-alive connections (@mscdex) + +### v2.77.0 (2016/11/03) +- [#2439](https://github.com/request/request/pull/2439) Fix socket 'connect' listener handling (@mscdex) +- [#2442](https://github.com/request/request/pull/2442) 👻😱 Node.js 0.10 is unmaintained 😱👻 (@greenkeeperio-bot) +- [#2435](https://github.com/request/request/pull/2435) Add followOriginalHttpMethod to redirect to original HTTP method (@kirrg001) +- [#2414](https://github.com/request/request/pull/2414) Improve test-timeout reliability (@mscdex) + +### v2.76.0 (2016/10/25) +- [#2424](https://github.com/request/request/pull/2424) Handle buffers directly instead of using "bl" (@zertosh) +- [#2415](https://github.com/request/request/pull/2415) Re-enable timeout tests on Travis + other fixes (@mscdex) +- [#2431](https://github.com/request/request/pull/2431) Improve timeouts accuracy and node v6.8.0+ compatibility (@mscdex, @greenkeeperio-bot) +- [#2428](https://github.com/request/request/pull/2428) Update qs to version 6.3.0 🚀 (@greenkeeperio-bot) +- [#2420](https://github.com/request/request/pull/2420) change .on to .once, remove possible memory leaks (@duereg) +- [#2426](https://github.com/request/request/pull/2426) Remove "isFunction" helper in favor of "typeof" check (@zertosh) +- [#2425](https://github.com/request/request/pull/2425) Simplify "defer" helper creation (@zertosh) +- [#2402](https://github.com/request/request/pull/2402) form-data@2.1.1 breaks build 🚨 (@greenkeeperio-bot) +- [#2393](https://github.com/request/request/pull/2393) Update form-data to version 2.1.0 🚀 (@greenkeeperio-bot) + +### v2.75.0 (2016/09/17) +- [#2381](https://github.com/request/request/pull/2381) Drop support for Node 0.10 (@simov) +- [#2377](https://github.com/request/request/pull/2377) Update form-data to version 2.0.0 🚀 (@greenkeeperio-bot) +- [#2353](https://github.com/request/request/pull/2353) Add greenkeeper ignored packages (@simov) +- [#2351](https://github.com/request/request/pull/2351) Update karma-tap to version 3.0.1 🚀 (@greenkeeperio-bot) +- [#2348](https://github.com/request/request/pull/2348) form-data@1.0.1 breaks build 🚨 (@greenkeeperio-bot) +- [#2349](https://github.com/request/request/pull/2349) Check error type instead of string (@scotttrinh) + +### v2.74.0 (2016/07/22) +- [#2295](https://github.com/request/request/pull/2295) Update tough-cookie to 2.3.0 (@stash-sfdc) +- [#2280](https://github.com/request/request/pull/2280) Update karma-tap to version 2.0.1 🚀 (@greenkeeperio-bot) + +### v2.73.0 (2016/07/09) +- [#2240](https://github.com/request/request/pull/2240) Remove connectionErrorHandler to fix #1903 (@zarenner) +- [#2251](https://github.com/request/request/pull/2251) tape@4.6.0 breaks build 🚨 (@greenkeeperio-bot) +- [#2225](https://github.com/request/request/pull/2225) Update docs (@ArtskydJ) +- [#2203](https://github.com/request/request/pull/2203) Update browserify to version 13.0.1 🚀 (@greenkeeperio-bot) +- [#2275](https://github.com/request/request/pull/2275) Update karma to version 1.1.1 🚀 (@greenkeeperio-bot) +- [#2204](https://github.com/request/request/pull/2204) Add codecov.yml and disable PR comments (@simov) +- [#2212](https://github.com/request/request/pull/2212) Fix link to http.IncomingMessage documentation (@nazieb) +- [#2208](https://github.com/request/request/pull/2208) Update to form-data RC4 and pass null values to it (@simov) +- [#2207](https://github.com/request/request/pull/2207) Move aws4 require statement to the top (@simov) +- [#2199](https://github.com/request/request/pull/2199) Update karma-coverage to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#2206](https://github.com/request/request/pull/2206) Update qs to version 6.2.0 🚀 (@greenkeeperio-bot) +- [#2205](https://github.com/request/request/pull/2205) Use server-destory to close hanging sockets in tests (@simov) +- [#2200](https://github.com/request/request/pull/2200) Update karma-cli to version 1.0.0 🚀 (@greenkeeperio-bot) + +### v2.72.0 (2016/04/17) +- [#2176](https://github.com/request/request/pull/2176) Do not try to pipe Gzip responses with no body (@simov) +- [#2175](https://github.com/request/request/pull/2175) Add 'delete' alias for the 'del' API method (@simov, @MuhanZou) +- [#2172](https://github.com/request/request/pull/2172) Add support for deflate content encoding (@czardoz) +- [#2169](https://github.com/request/request/pull/2169) Add callback option (@simov) +- [#2165](https://github.com/request/request/pull/2165) Check for self.req existence inside the write method (@simov) +- [#2167](https://github.com/request/request/pull/2167) Fix TravisCI badge reference master branch (@a0viedo) + +### v2.71.0 (2016/04/12) +- [#2164](https://github.com/request/request/pull/2164) Catch errors from the underlying http module (@simov) + +### v2.70.0 (2016/04/05) +- [#2147](https://github.com/request/request/pull/2147) Update eslint to version 2.5.3 🚀 (@simov, @greenkeeperio-bot) +- [#2009](https://github.com/request/request/pull/2009) Support JSON stringify replacer argument. (@elyobo) +- [#2142](https://github.com/request/request/pull/2142) Update eslint to version 2.5.1 🚀 (@greenkeeperio-bot) +- [#2128](https://github.com/request/request/pull/2128) Update browserify-istanbul to version 2.0.0 🚀 (@greenkeeperio-bot) +- [#2115](https://github.com/request/request/pull/2115) Update eslint to version 2.3.0 🚀 (@simov, @greenkeeperio-bot) +- [#2089](https://github.com/request/request/pull/2089) Fix badges (@simov) +- [#2092](https://github.com/request/request/pull/2092) Update browserify-istanbul to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#2079](https://github.com/request/request/pull/2079) Accept read stream as body option (@simov) +- [#2070](https://github.com/request/request/pull/2070) Update bl to version 1.1.2 🚀 (@greenkeeperio-bot) +- [#2063](https://github.com/request/request/pull/2063) Up bluebird and oauth-sign (@simov) +- [#2058](https://github.com/request/request/pull/2058) Karma fixes for latest versions (@eiriksm) +- [#2057](https://github.com/request/request/pull/2057) Update contributing guidelines (@simov) +- [#2054](https://github.com/request/request/pull/2054) Update qs to version 6.1.0 🚀 (@greenkeeperio-bot) + +### v2.69.0 (2016/01/27) +- [#2041](https://github.com/request/request/pull/2041) restore aws4 as regular dependency (@rmg) + +### v2.68.0 (2016/01/27) +- [#2036](https://github.com/request/request/pull/2036) Add AWS Signature Version 4 (@simov, @mirkods) +- [#2022](https://github.com/request/request/pull/2022) Convert numeric multipart bodies to string (@simov, @feross) +- [#2024](https://github.com/request/request/pull/2024) Update har-validator dependency for nsp advisory #76 (@TylerDixon) +- [#2016](https://github.com/request/request/pull/2016) Update qs to version 6.0.2 🚀 (@greenkeeperio-bot) +- [#2007](https://github.com/request/request/pull/2007) Use the `extend` module instead of util._extend (@simov) +- [#2003](https://github.com/request/request/pull/2003) Update browserify to version 13.0.0 🚀 (@greenkeeperio-bot) +- [#1989](https://github.com/request/request/pull/1989) Update buffer-equal to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#1956](https://github.com/request/request/pull/1956) Check form-data content-length value before setting up the header (@jongyoonlee) +- [#1958](https://github.com/request/request/pull/1958) Use IncomingMessage.destroy method (@simov) +- [#1952](https://github.com/request/request/pull/1952) Adds example for Tor proxy (@prometheansacrifice) +- [#1943](https://github.com/request/request/pull/1943) Update eslint to version 1.10.3 🚀 (@simov, @greenkeeperio-bot) +- [#1924](https://github.com/request/request/pull/1924) Update eslint to version 1.10.1 🚀 (@greenkeeperio-bot) +- [#1915](https://github.com/request/request/pull/1915) Remove content-length and transfer-encoding headers from defaultProxyHeaderWhiteList (@yaxia) + +### v2.67.0 (2015/11/19) +- [#1913](https://github.com/request/request/pull/1913) Update http-signature to version 1.1.0 🚀 (@greenkeeperio-bot) + +### v2.66.0 (2015/11/18) +- [#1906](https://github.com/request/request/pull/1906) Update README URLs based on HTTP redirects (@ReadmeCritic) +- [#1905](https://github.com/request/request/pull/1905) Convert typed arrays into regular buffers (@simov) +- [#1902](https://github.com/request/request/pull/1902) node-uuid@1.4.7 breaks build 🚨 (@greenkeeperio-bot) +- [#1894](https://github.com/request/request/pull/1894) Fix tunneling after redirection from https (Original: #1881) (@simov, @falms) +- [#1893](https://github.com/request/request/pull/1893) Update eslint to version 1.9.0 🚀 (@greenkeeperio-bot) +- [#1852](https://github.com/request/request/pull/1852) Update eslint to version 1.7.3 🚀 (@simov, @greenkeeperio-bot, @paulomcnally, @michelsalib, @arbaaz, @nsklkn, @LoicMahieu, @JoshWillik, @jzaefferer, @ryanwholey, @djchie, @thisconnect, @mgenereu, @acroca, @Sebmaster, @KoltesDigital) +- [#1876](https://github.com/request/request/pull/1876) Implement loose matching for har mime types (@simov) +- [#1875](https://github.com/request/request/pull/1875) Update bluebird to version 3.0.2 🚀 (@simov, @greenkeeperio-bot) +- [#1871](https://github.com/request/request/pull/1871) Update browserify to version 12.0.1 🚀 (@greenkeeperio-bot) +- [#1866](https://github.com/request/request/pull/1866) Add missing quotes on x-token property in README (@miguelmota) +- [#1874](https://github.com/request/request/pull/1874) Fix typo in README.md (@gswalden) +- [#1860](https://github.com/request/request/pull/1860) Improve referer header tests and docs (@simov) +- [#1861](https://github.com/request/request/pull/1861) Remove redundant call to Stream constructor (@watson) +- [#1857](https://github.com/request/request/pull/1857) Fix Referer header to point to the original host name (@simov) +- [#1850](https://github.com/request/request/pull/1850) Update karma-coverage to version 0.5.3 🚀 (@greenkeeperio-bot) +- [#1847](https://github.com/request/request/pull/1847) Use node's latest version when building (@simov) +- [#1836](https://github.com/request/request/pull/1836) Tunnel: fix wrong property name (@KoltesDigital) +- [#1820](https://github.com/request/request/pull/1820) Set href as request.js uses it (@mgenereu) +- [#1840](https://github.com/request/request/pull/1840) Update http-signature to version 1.0.2 🚀 (@greenkeeperio-bot) +- [#1845](https://github.com/request/request/pull/1845) Update istanbul to version 0.4.0 🚀 (@greenkeeperio-bot) + +### v2.65.0 (2015/10/11) +- [#1833](https://github.com/request/request/pull/1833) Update aws-sign2 to version 0.6.0 🚀 (@greenkeeperio-bot) +- [#1811](https://github.com/request/request/pull/1811) Enable loose cookie parsing in tough-cookie (@Sebmaster) +- [#1830](https://github.com/request/request/pull/1830) Bring back tilde ranges for all dependencies (@simov) +- [#1821](https://github.com/request/request/pull/1821) Implement support for RFC 2617 MD5-sess algorithm. (@BigDSK) +- [#1828](https://github.com/request/request/pull/1828) Updated qs dependency to 5.2.0 (@acroca) +- [#1818](https://github.com/request/request/pull/1818) Extract `readResponseBody` method out of `onRequestResponse` (@pvoisin) +- [#1819](https://github.com/request/request/pull/1819) Run stringify once (@mgenereu) +- [#1814](https://github.com/request/request/pull/1814) Updated har-validator to version 2.0.2 (@greenkeeperio-bot) +- [#1807](https://github.com/request/request/pull/1807) Updated tough-cookie to version 2.1.0 (@greenkeeperio-bot) +- [#1800](https://github.com/request/request/pull/1800) Add caret ranges for devDependencies, except eslint (@simov) +- [#1799](https://github.com/request/request/pull/1799) Updated karma-browserify to version 4.4.0 (@greenkeeperio-bot) +- [#1797](https://github.com/request/request/pull/1797) Updated tape to version 4.2.0 (@greenkeeperio-bot) +- [#1788](https://github.com/request/request/pull/1788) Pinned all dependencies (@greenkeeperio-bot) + +### v2.64.0 (2015/09/25) +- [#1787](https://github.com/request/request/pull/1787) npm ignore examples, release.sh and disabled.appveyor.yml (@thisconnect) +- [#1775](https://github.com/request/request/pull/1775) Fix typo in README.md (@djchie) +- [#1776](https://github.com/request/request/pull/1776) Changed word 'conjuction' to read 'conjunction' in README.md (@ryanwholey) +- [#1785](https://github.com/request/request/pull/1785) Revert: Set default application/json content-type when using json option #1772 (@simov) + +### v2.63.0 (2015/09/21) +- [#1772](https://github.com/request/request/pull/1772) Set default application/json content-type when using json option (@jzaefferer) + +### v2.62.0 (2015/09/15) +- [#1768](https://github.com/request/request/pull/1768) Add node 4.0 to the list of build targets (@simov) +- [#1767](https://github.com/request/request/pull/1767) Query strings now cooperate with unix sockets (@JoshWillik) +- [#1750](https://github.com/request/request/pull/1750) Revert doc about installation of tough-cookie added in #884 (@LoicMahieu) +- [#1746](https://github.com/request/request/pull/1746) Missed comma in Readme (@nsklkn) +- [#1743](https://github.com/request/request/pull/1743) Fix options not being initialized in defaults method (@simov) + +### v2.61.0 (2015/08/19) +- [#1721](https://github.com/request/request/pull/1721) Minor fix in README.md (@arbaaz) +- [#1733](https://github.com/request/request/pull/1733) Avoid useless Buffer transformation (@michelsalib) +- [#1726](https://github.com/request/request/pull/1726) Update README.md (@paulomcnally) +- [#1715](https://github.com/request/request/pull/1715) Fix forever option in node > 0.10 #1709 (@calibr) +- [#1716](https://github.com/request/request/pull/1716) Do not create Buffer from Object in setContentLength(iojs v3.0 issue) (@calibr) +- [#1711](https://github.com/request/request/pull/1711) Add ability to detect connect timeouts (@kevinburke) +- [#1712](https://github.com/request/request/pull/1712) Set certificate expiration to August 2, 2018 (@kevinburke) +- [#1700](https://github.com/request/request/pull/1700) debug() when JSON.parse() on a response body fails (@phillipj) + +### v2.60.0 (2015/07/21) +- [#1687](https://github.com/request/request/pull/1687) Fix caseless bug - content-type not being set for multipart/form-data (@simov, @garymathews) + +### v2.59.0 (2015/07/20) +- [#1671](https://github.com/request/request/pull/1671) Add tests and docs for using the agent, agentClass, agentOptions and forever options. + Forever option defaults to using http(s).Agent in node 0.12+ (@simov) +- [#1679](https://github.com/request/request/pull/1679) Fix - do not remove OAuth param when using OAuth realm (@simov, @jhalickman) +- [#1668](https://github.com/request/request/pull/1668) updated dependencies (@deamme) +- [#1656](https://github.com/request/request/pull/1656) Fix form method (@simov) +- [#1651](https://github.com/request/request/pull/1651) Preserve HEAD method when using followAllRedirects (@simov) +- [#1652](https://github.com/request/request/pull/1652) Update `encoding` option documentation in README.md (@daniel347x) +- [#1650](https://github.com/request/request/pull/1650) Allow content-type overriding when using the `form` option (@simov) +- [#1646](https://github.com/request/request/pull/1646) Clarify the nature of setting `ca` in `agentOptions` (@jeffcharles) + +### v2.58.0 (2015/06/16) +- [#1638](https://github.com/request/request/pull/1638) Use the `extend` module to deep extend in the defaults method (@simov) +- [#1631](https://github.com/request/request/pull/1631) Move tunnel logic into separate module (@simov) +- [#1634](https://github.com/request/request/pull/1634) Fix OAuth query transport_method (@simov) +- [#1603](https://github.com/request/request/pull/1603) Add codecov (@simov) + +### v2.57.0 (2015/05/31) +- [#1615](https://github.com/request/request/pull/1615) Replace '.client' with '.socket' as the former was deprecated in 2.2.0. (@ChALkeR) + +### v2.56.0 (2015/05/28) +- [#1610](https://github.com/request/request/pull/1610) Bump module dependencies (@simov) +- [#1600](https://github.com/request/request/pull/1600) Extract the querystring logic into separate module (@simov) +- [#1607](https://github.com/request/request/pull/1607) Re-generate certificates (@simov) +- [#1599](https://github.com/request/request/pull/1599) Move getProxyFromURI logic below the check for Invaild URI (#1595) (@simov) +- [#1598](https://github.com/request/request/pull/1598) Fix the way http verbs are defined in order to please intellisense IDEs (@simov, @flannelJesus) +- [#1591](https://github.com/request/request/pull/1591) A few minor fixes: (@simov) +- [#1584](https://github.com/request/request/pull/1584) Refactor test-default tests (according to comments in #1430) (@simov) +- [#1585](https://github.com/request/request/pull/1585) Fixing documentation regarding TLS options (#1583) (@mainakae) +- [#1574](https://github.com/request/request/pull/1574) Refresh the oauth_nonce on redirect (#1573) (@simov) +- [#1570](https://github.com/request/request/pull/1570) Discovered tests that weren't properly running (@seanstrom) +- [#1569](https://github.com/request/request/pull/1569) Fix pause before response arrives (@kevinoid) +- [#1558](https://github.com/request/request/pull/1558) Emit error instead of throw (@simov) +- [#1568](https://github.com/request/request/pull/1568) Fix stall when piping gzipped response (@kevinoid) +- [#1560](https://github.com/request/request/pull/1560) Update combined-stream (@apechimp) +- [#1543](https://github.com/request/request/pull/1543) Initial support for oauth_body_hash on json payloads (@simov, @aesopwolf) +- [#1541](https://github.com/request/request/pull/1541) Fix coveralls (@simov) +- [#1540](https://github.com/request/request/pull/1540) Fix recursive defaults for convenience methods (@simov) +- [#1536](https://github.com/request/request/pull/1536) More eslint style rules (@froatsnook) +- [#1533](https://github.com/request/request/pull/1533) Adding dependency status bar to README.md (@YasharF) +- [#1539](https://github.com/request/request/pull/1539) ensure the latest version of har-validator is included (@ahmadnassri) +- [#1516](https://github.com/request/request/pull/1516) forever+pool test (@devTristan) + +### v2.55.0 (2015/04/05) +- [#1520](https://github.com/request/request/pull/1520) Refactor defaults (@simov) +- [#1525](https://github.com/request/request/pull/1525) Delete request headers with undefined value. (@froatsnook) +- [#1521](https://github.com/request/request/pull/1521) Add promise tests (@simov) +- [#1518](https://github.com/request/request/pull/1518) Fix defaults (@simov) +- [#1515](https://github.com/request/request/pull/1515) Allow static invoking of convenience methods (@simov) +- [#1505](https://github.com/request/request/pull/1505) Fix multipart boundary extraction regexp (@simov) +- [#1510](https://github.com/request/request/pull/1510) Fix basic auth form data (@simov) + +### v2.54.0 (2015/03/24) +- [#1501](https://github.com/request/request/pull/1501) HTTP Archive 1.2 support (@ahmadnassri) +- [#1486](https://github.com/request/request/pull/1486) Add a test for the forever agent (@akshayp) +- [#1500](https://github.com/request/request/pull/1500) Adding handling for no auth method and null bearer (@philberg) +- [#1498](https://github.com/request/request/pull/1498) Add table of contents in readme (@simov) +- [#1477](https://github.com/request/request/pull/1477) Add support for qs options via qsOptions key (@simov) +- [#1496](https://github.com/request/request/pull/1496) Parameters encoded to base 64 should be decoded as UTF-8, not ASCII. (@albanm) +- [#1494](https://github.com/request/request/pull/1494) Update eslint (@froatsnook) +- [#1474](https://github.com/request/request/pull/1474) Require Colon in Basic Auth (@erykwalder) +- [#1481](https://github.com/request/request/pull/1481) Fix baseUrl and redirections. (@burningtree) +- [#1469](https://github.com/request/request/pull/1469) Feature/base url (@froatsnook) +- [#1459](https://github.com/request/request/pull/1459) Add option to time request/response cycle (including rollup of redirects) (@aaron-em) +- [#1468](https://github.com/request/request/pull/1468) Re-enable io.js/node 0.12 build (@simov, @mikeal, @BBB) +- [#1442](https://github.com/request/request/pull/1442) Fixed the issue with strictSSL tests on 0.12 & io.js by explicitly setting a cipher that matches the cert. (@BBB, @nickmccurdy, @demohi, @simov, @0x4139) +- [#1460](https://github.com/request/request/pull/1460) localAddress or proxy config is lost when redirecting (@simov, @0x4139) +- [#1453](https://github.com/request/request/pull/1453) Test on Node.js 0.12 and io.js with allowed failures (@nickmccurdy, @demohi) +- [#1426](https://github.com/request/request/pull/1426) Fixing tests to pass on io.js and node 0.12 (only test-https.js stiff failing) (@mikeal) +- [#1446](https://github.com/request/request/pull/1446) Missing HTTP referer header with redirects Fixes #1038 (@simov, @guimon) +- [#1428](https://github.com/request/request/pull/1428) Deprecate Node v0.8.x (@nylen) +- [#1436](https://github.com/request/request/pull/1436) Add ability to set a requester without setting default options (@tikotzky) +- [#1435](https://github.com/request/request/pull/1435) dry up verb methods (@sethpollack) +- [#1423](https://github.com/request/request/pull/1423) Allow fully qualified multipart content-type header (@simov) +- [#1430](https://github.com/request/request/pull/1430) Fix recursive requester (@tikotzky) +- [#1429](https://github.com/request/request/pull/1429) Throw error when making HEAD request with a body (@tikotzky) +- [#1419](https://github.com/request/request/pull/1419) Add note that the project is broken in 0.12.x (@nylen) +- [#1413](https://github.com/request/request/pull/1413) Fix basic auth (@simov) +- [#1397](https://github.com/request/request/pull/1397) Improve pipe-from-file tests (@nylen) + +### v2.53.0 (2015/02/02) +- [#1396](https://github.com/request/request/pull/1396) Do not rfc3986 escape JSON bodies (@nylen, @simov) +- [#1392](https://github.com/request/request/pull/1392) Improve `timeout` option description (@watson) + +### v2.52.0 (2015/02/02) +- [#1383](https://github.com/request/request/pull/1383) Add missing HTTPS options that were not being passed to tunnel (@brichard19) (@nylen) +- [#1388](https://github.com/request/request/pull/1388) Upgrade mime-types package version (@roderickhsiao) +- [#1389](https://github.com/request/request/pull/1389) Revise Setup Tunnel Function (@seanstrom) +- [#1374](https://github.com/request/request/pull/1374) Allow explicitly disabling tunneling for proxied https destinations (@nylen) +- [#1376](https://github.com/request/request/pull/1376) Use karma-browserify for tests. Add browser test coverage reporter. (@eiriksm) +- [#1366](https://github.com/request/request/pull/1366) Refactor OAuth into separate module (@simov) +- [#1373](https://github.com/request/request/pull/1373) Rewrite tunnel test to be pure Node.js (@nylen) +- [#1371](https://github.com/request/request/pull/1371) Upgrade test reporter (@nylen) +- [#1360](https://github.com/request/request/pull/1360) Refactor basic, bearer, digest auth logic into separate class (@simov) +- [#1354](https://github.com/request/request/pull/1354) Remove circular dependency from debugging code (@nylen) +- [#1351](https://github.com/request/request/pull/1351) Move digest auth into private prototype method (@simov) +- [#1352](https://github.com/request/request/pull/1352) Update hawk dependency to ~2.3.0 (@mridgway) +- [#1353](https://github.com/request/request/pull/1353) Correct travis-ci badge (@dogancelik) +- [#1349](https://github.com/request/request/pull/1349) Make sure we return on errored browser requests. (@eiriksm) +- [#1346](https://github.com/request/request/pull/1346) getProxyFromURI Extraction Refactor (@seanstrom) +- [#1337](https://github.com/request/request/pull/1337) Standardize test ports on 6767 (@nylen) +- [#1341](https://github.com/request/request/pull/1341) Emit FormData error events as Request error events (@nylen, @rwky) +- [#1343](https://github.com/request/request/pull/1343) Clean up readme badges, and add Travis and Coveralls badges (@nylen) +- [#1345](https://github.com/request/request/pull/1345) Update README.md (@Aaron-Hartwig) +- [#1338](https://github.com/request/request/pull/1338) Always wait for server.close() callback in tests (@nylen) +- [#1342](https://github.com/request/request/pull/1342) Add mock https server and redo start of browser tests for this purpose. (@eiriksm) +- [#1339](https://github.com/request/request/pull/1339) Improve auth docs (@nylen) +- [#1335](https://github.com/request/request/pull/1335) Add support for OAuth plaintext signature method (@simov) +- [#1332](https://github.com/request/request/pull/1332) Add clean script to remove test-browser.js after the tests run (@seanstrom) +- [#1327](https://github.com/request/request/pull/1327) Fix errors generating coverage reports. (@nylen) +- [#1330](https://github.com/request/request/pull/1330) Return empty buffer upon empty response body and encoding is set to null (@seanstrom) +- [#1326](https://github.com/request/request/pull/1326) Use faster container-based infrastructure on Travis (@nylen) +- [#1315](https://github.com/request/request/pull/1315) Implement rfc3986 option (@simov, @nylen, @apoco, @DullReferenceException, @mmalecki, @oliamb, @cliffcrosland, @LewisJEllis, @eiriksm, @poislagarde) +- [#1314](https://github.com/request/request/pull/1314) Detect urlencoded form data header via regex (@simov) +- [#1317](https://github.com/request/request/pull/1317) Improve OAuth1.0 server side flow example (@simov) + +### v2.51.0 (2014/12/10) +- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov) + +### v2.50.0 (2014/12/09) +- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm) +- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde) +- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov) +- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm) +- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis) +- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland) + +### v2.49.0 (2014/11/28) +- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) +- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) +- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) +- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) +- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) +- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) + +### v2.48.0 (2014/11/12) +- [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) +- [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen) +- [#1251](https://github.com/request/request/pull/1251) Clarify that defaults() does not modify global defaults (@nylen) +- [#1250](https://github.com/request/request/pull/1250) Improve documentation for pool and maxSockets options (@nylen) +- [#1237](https://github.com/request/request/pull/1237) Documenting error handling when using streams (@vmattos) +- [#1244](https://github.com/request/request/pull/1244) Finalize changelog command (@nylen) +- [#1241](https://github.com/request/request/pull/1241) Fix typo (@alexanderGugel) +- [#1223](https://github.com/request/request/pull/1223) Show latest version number instead of "upcoming" in changelog (@nylen) +- [#1236](https://github.com/request/request/pull/1236) Document how to use custom CA in README (#1229) (@hypesystem) +- [#1228](https://github.com/request/request/pull/1228) Support for oauth with RSA-SHA1 signing (@nylen) +- [#1216](https://github.com/request/request/pull/1216) Made json and multipart options coexist (@nylen, @simov) +- [#1225](https://github.com/request/request/pull/1225) Allow header white/exclusive lists in any case. (@RReverser) + +### v2.47.0 (2014/10/26) +- [#1222](https://github.com/request/request/pull/1222) Move from mikeal/request to request/request (@nylen) +- [#1220](https://github.com/request/request/pull/1220) update qs dependency to 2.3.1 (@FredKSchott) +- [#1212](https://github.com/request/request/pull/1212) Improve tests/test-timeout.js (@nylen) +- [#1219](https://github.com/request/request/pull/1219) remove old globalAgent workaround for node 0.4 (@request) +- [#1214](https://github.com/request/request/pull/1214) Remove cruft left over from optional dependencies (@nylen) +- [#1215](https://github.com/request/request/pull/1215) Add proxyHeaderExclusiveList option for proxy-only headers. (@RReverser) +- [#1211](https://github.com/request/request/pull/1211) Allow 'Host' header instead of 'host' and remember case across redirects (@nylen) +- [#1208](https://github.com/request/request/pull/1208) Improve release script (@nylen) +- [#1213](https://github.com/request/request/pull/1213) Support for custom cookie store (@nylen, @mitsuru) +- [#1197](https://github.com/request/request/pull/1197) Clean up some code around setting the agent (@FredKSchott) +- [#1209](https://github.com/request/request/pull/1209) Improve multipart form append test (@simov) +- [#1207](https://github.com/request/request/pull/1207) Update changelog (@nylen) +- [#1185](https://github.com/request/request/pull/1185) Stream multipart/related bodies (@simov) + +### v2.46.0 (2014/10/23) +- [#1198](https://github.com/request/request/pull/1198) doc for TLS/SSL protocol options (@shawnzhu) +- [#1200](https://github.com/request/request/pull/1200) Add a Gitter chat badge to README.md (@gitter-badger) +- [#1196](https://github.com/request/request/pull/1196) Upgrade taper test reporter to v0.3.0 (@nylen) +- [#1199](https://github.com/request/request/pull/1199) Fix lint error: undeclared var i (@nylen) +- [#1191](https://github.com/request/request/pull/1191) Move self.proxy decision logic out of init and into a helper (@FredKSchott) +- [#1190](https://github.com/request/request/pull/1190) Move _buildRequest() logic back into init (@FredKSchott) +- [#1186](https://github.com/request/request/pull/1186) Support Smarter Unix URL Scheme (@FredKSchott) +- [#1178](https://github.com/request/request/pull/1178) update form documentation for new usage (@FredKSchott) +- [#1180](https://github.com/request/request/pull/1180) Enable no-mixed-requires linting rule (@nylen) +- [#1184](https://github.com/request/request/pull/1184) Don't forward authorization header across redirects to different hosts (@nylen) +- [#1183](https://github.com/request/request/pull/1183) Correct README about pre and postamble CRLF using multipart and not mult... (@netpoetica) +- [#1179](https://github.com/request/request/pull/1179) Lint tests directory (@nylen) +- [#1169](https://github.com/request/request/pull/1169) add metadata for form-data file field (@dotcypress) +- [#1173](https://github.com/request/request/pull/1173) remove optional dependencies (@seanstrom) +- [#1165](https://github.com/request/request/pull/1165) Cleanup event listeners and remove function creation from init (@FredKSchott) +- [#1174](https://github.com/request/request/pull/1174) update the request.cookie docs to have a valid cookie example (@seanstrom) +- [#1168](https://github.com/request/request/pull/1168) create a detach helper and use detach helper in replace of nextTick (@seanstrom) +- [#1171](https://github.com/request/request/pull/1171) in post can send form data and use callback (@MiroRadenovic) +- [#1159](https://github.com/request/request/pull/1159) accept charset for x-www-form-urlencoded content-type (@seanstrom) +- [#1157](https://github.com/request/request/pull/1157) Update README.md: body with json=true (@Rob--W) +- [#1164](https://github.com/request/request/pull/1164) Disable tests/test-timeout.js on Travis (@nylen) +- [#1153](https://github.com/request/request/pull/1153) Document how to run a single test (@nylen) +- [#1144](https://github.com/request/request/pull/1144) adds documentation for the "response" event within the streaming section (@tbuchok) +- [#1162](https://github.com/request/request/pull/1162) Update eslintrc file to no longer allow past errors (@FredKSchott) +- [#1155](https://github.com/request/request/pull/1155) Support/use self everywhere (@seanstrom) +- [#1161](https://github.com/request/request/pull/1161) fix no-use-before-define lint warnings (@emkay) +- [#1156](https://github.com/request/request/pull/1156) adding curly brackets to get rid of lint errors (@emkay) +- [#1151](https://github.com/request/request/pull/1151) Fix localAddress test on OS X (@nylen) +- [#1145](https://github.com/request/request/pull/1145) documentation: fix outdated reference to setCookieSync old name in README (@FredKSchott) +- [#1131](https://github.com/request/request/pull/1131) Update pool documentation (@FredKSchott) +- [#1143](https://github.com/request/request/pull/1143) Rewrite all tests to use tape (@nylen) +- [#1137](https://github.com/request/request/pull/1137) Add ability to specifiy querystring lib in options. (@jgrund) +- [#1138](https://github.com/request/request/pull/1138) allow hostname and port in place of host on uri (@cappslock) +- [#1134](https://github.com/request/request/pull/1134) Fix multiple redirects and `self.followRedirect` (@blakeembrey) +- [#1130](https://github.com/request/request/pull/1130) documentation fix: add note about npm test for contributing (@FredKSchott) +- [#1120](https://github.com/request/request/pull/1120) Support/refactor request setup tunnel (@seanstrom) +- [#1129](https://github.com/request/request/pull/1129) linting fix: convert double quote strings to use single quotes (@FredKSchott) +- [#1124](https://github.com/request/request/pull/1124) linting fix: remove unneccesary semi-colons (@FredKSchott) + +### v2.45.0 (2014/10/06) +- [#1128](https://github.com/request/request/pull/1128) Add test for setCookie regression (@nylen) +- [#1127](https://github.com/request/request/pull/1127) added tests around using objects as values in a query string (@bcoe) +- [#1103](https://github.com/request/request/pull/1103) Support/refactor request constructor (@nylen, @seanstrom) +- [#1119](https://github.com/request/request/pull/1119) add basic linting to request library (@FredKSchott) +- [#1121](https://github.com/request/request/pull/1121) Revert "Explicitly use sync versions of cookie functions" (@nylen) +- [#1118](https://github.com/request/request/pull/1118) linting fix: Restructure bad empty if statement (@FredKSchott) +- [#1117](https://github.com/request/request/pull/1117) Fix a bad check for valid URIs (@FredKSchott) +- [#1113](https://github.com/request/request/pull/1113) linting fix: space out operators (@FredKSchott) +- [#1116](https://github.com/request/request/pull/1116) Fix typo in `noProxyHost` definition (@FredKSchott) +- [#1114](https://github.com/request/request/pull/1114) linting fix: Added a `new` operator that was missing when creating and throwing a new error (@FredKSchott) +- [#1096](https://github.com/request/request/pull/1096) No_proxy support (@samcday) +- [#1107](https://github.com/request/request/pull/1107) linting-fix: remove unused variables (@FredKSchott) +- [#1112](https://github.com/request/request/pull/1112) linting fix: Make return values consistent and more straitforward (@FredKSchott) +- [#1111](https://github.com/request/request/pull/1111) linting fix: authPieces was getting redeclared (@FredKSchott) +- [#1105](https://github.com/request/request/pull/1105) Use strict mode in request (@FredKSchott) +- [#1110](https://github.com/request/request/pull/1110) linting fix: replace lazy '==' with more strict '===' (@FredKSchott) +- [#1109](https://github.com/request/request/pull/1109) linting fix: remove function call from if-else conditional statement (@FredKSchott) +- [#1102](https://github.com/request/request/pull/1102) Fix to allow setting a `requester` on recursive calls to `request.defaults` (@tikotzky) +- [#1095](https://github.com/request/request/pull/1095) Tweaking engines in package.json (@pdehaan) +- [#1082](https://github.com/request/request/pull/1082) Forward the socket event from the httpModule request (@seanstrom) +- [#972](https://github.com/request/request/pull/972) Clarify gzip handling in the README (@kevinoid) +- [#1089](https://github.com/request/request/pull/1089) Mention that encoding defaults to utf8, not Buffer (@stuartpb) +- [#1088](https://github.com/request/request/pull/1088) Fix cookie example in README.md and make it more clear (@pipi32167) +- [#1027](https://github.com/request/request/pull/1027) Add support for multipart form data in request options. (@crocket) +- [#1076](https://github.com/request/request/pull/1076) use Request.abort() to abort the request when the request has timed-out (@seanstrom) +- [#1068](https://github.com/request/request/pull/1068) add optional postamble required by .NET multipart requests (@netpoetica) + +### v2.43.0 (2014/09/18) +- [#1057](https://github.com/request/request/pull/1057) Defaults should not overwrite defined options (@davidwood) +- [#1046](https://github.com/request/request/pull/1046) Propagate datastream errors, useful in case gzip fails. (@ZJONSSON, @Janpot) +- [#1063](https://github.com/request/request/pull/1063) copy the input headers object #1060 (@finnp) +- [#1031](https://github.com/request/request/pull/1031) Explicitly use sync versions of cookie functions (@ZJONSSON) +- [#1056](https://github.com/request/request/pull/1056) Fix redirects when passing url.parse(x) as URL to convenience method (@nylen) + +### v2.42.0 (2014/09/04) +- [#1053](https://github.com/request/request/pull/1053) Fix #1051 Parse auth properly when using non-tunneling proxy (@isaacs) + +### v2.41.0 (2014/09/04) +- [#1050](https://github.com/request/request/pull/1050) Pass whitelisted headers to tunneling proxy. Organize all tunneling logic. (@isaacs, @Feldhacker) +- [#1035](https://github.com/request/request/pull/1035) souped up nodei.co badge (@rvagg) +- [#1048](https://github.com/request/request/pull/1048) Aws is now possible over a proxy (@steven-aerts) +- [#1039](https://github.com/request/request/pull/1039) extract out helper functions to a helper file (@seanstrom) +- [#1021](https://github.com/request/request/pull/1021) Support/refactor indexjs (@seanstrom) +- [#1033](https://github.com/request/request/pull/1033) Improve and document debug options (@nylen) +- [#1034](https://github.com/request/request/pull/1034) Fix readme headings (@nylen) +- [#1030](https://github.com/request/request/pull/1030) Allow recursive request.defaults (@tikotzky) +- [#1029](https://github.com/request/request/pull/1029) Fix a couple of typos (@nylen) +- [#675](https://github.com/request/request/pull/675) Checking for SSL fault on connection before reading SSL properties (@VRMink) +- [#989](https://github.com/request/request/pull/989) Added allowRedirect function. Should return true if redirect is allowed or false otherwise (@doronin) +- [#1025](https://github.com/request/request/pull/1025) [fixes #1023] Set self._ended to true once response has ended (@mridgway) +- [#1020](https://github.com/request/request/pull/1020) Add back removed debug metadata (@FredKSchott) +- [#1008](https://github.com/request/request/pull/1008) Moving to module instead of cutomer buffer concatenation. (@mikeal) +- [#770](https://github.com/request/request/pull/770) Added dependency badge for README file; (@timgluz, @mafintosh, @lalitkapoor, @stash, @bobyrizov) +- [#1016](https://github.com/request/request/pull/1016) toJSON no longer results in an infinite loop, returns simple objects (@FredKSchott) +- [#1018](https://github.com/request/request/pull/1018) Remove pre-0.4.4 HTTPS fix (@mmalecki) +- [#1006](https://github.com/request/request/pull/1006) Migrate to caseless, fixes #1001 (@mikeal) +- [#995](https://github.com/request/request/pull/995) Fix parsing array of objects (@sjonnet19) +- [#999](https://github.com/request/request/pull/999) Fix fallback for browserify for optional modules. (@eiriksm) +- [#996](https://github.com/request/request/pull/996) Wrong oauth signature when multiple same param keys exist [updated] (@bengl) + +### v2.40.0 (2014/08/06) +- [#992](https://github.com/request/request/pull/992) Fix security vulnerability. Update qs (@poeticninja) +- [#988](https://github.com/request/request/pull/988) “--” -> “—” (@upisfree) +- [#987](https://github.com/request/request/pull/987) Show optional modules as being loaded by the module that reqeusted them (@iarna) + +### v2.39.0 (2014/07/24) +- [#976](https://github.com/request/request/pull/976) Update README.md (@pvoznenko) + +### v2.38.0 (2014/07/22) +- [#952](https://github.com/request/request/pull/952) Adding support to client certificate with proxy use case (@ofirshaked) +- [#884](https://github.com/request/request/pull/884) Documented tough-cookie installation. (@wbyoung) +- [#935](https://github.com/request/request/pull/935) Correct repository url (@fritx) +- [#963](https://github.com/request/request/pull/963) Update changelog (@nylen) +- [#960](https://github.com/request/request/pull/960) Support gzip with encoding on node pre-v0.9.4 (@kevinoid) +- [#953](https://github.com/request/request/pull/953) Add async Content-Length computation when using form-data (@LoicMahieu) +- [#844](https://github.com/request/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy) +- [#946](https://github.com/request/request/pull/946) defaults: merge headers (@aj0strow) + +### v2.37.0 (2014/07/07) +- [#957](https://github.com/request/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson) +- [#955](https://github.com/request/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne) +- [#951](https://github.com/request/request/pull/951) Add support for gzip content decoding (@kevinoid) +- [#949](https://github.com/request/request/pull/949) Manually enter querystring in form option (@charlespwd) +- [#944](https://github.com/request/request/pull/944) Make request work with browserify (@eiriksm) +- [#943](https://github.com/request/request/pull/943) New mime module (@eiriksm) +- [#927](https://github.com/request/request/pull/927) Bump version of hawk dep. (@samccone) +- [#907](https://github.com/request/request/pull/907) append secureOptions to poolKey (@medovob) + +### v2.35.0 (2014/05/17) +- [#901](https://github.com/request/request/pull/901) Fixes #555 (@pigulla) +- [#897](https://github.com/request/request/pull/897) merge with default options (@vohof) +- [#891](https://github.com/request/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor) +- [#869](https://github.com/request/request/pull/869) Pipefilter test (@tgohn) +- [#866](https://github.com/request/request/pull/866) Fix typo (@dandv) +- [#861](https://github.com/request/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny) +- [#809](https://github.com/request/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700) +- [#850](https://github.com/request/request/pull/850) Fix word consistency in readme (@0xNobody) +- [#810](https://github.com/request/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil) +- [#840](https://github.com/request/request/pull/840) improve error reporting for invalid protocols (@FND) +- [#821](https://github.com/request/request/pull/821) added secureOptions back (@nw) +- [#815](https://github.com/request/request/pull/815) Create changelog based on pull requests (@lalitkapoor) + +### v2.34.0 (2014/02/18) +- [#516](https://github.com/request/request/pull/516) UNIX Socket URL Support (@lyuzashi) +- [#801](https://github.com/request/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor) +- [#802](https://github.com/request/request/pull/802) Added the Apache license to the package.json. (@keskival) +- [#793](https://github.com/request/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul) +- [#785](https://github.com/request/request/pull/785) Provide ability to override content-type when `json` option used (@vvo) +- [#781](https://github.com/request/request/pull/781) simpler isReadStream function (@joaojeronimo) + +### v2.32.0 (2014/01/16) +- [#767](https://github.com/request/request/pull/767) Use tough-cookie CookieJar sync API (@stash) +- [#764](https://github.com/request/request/pull/764) Case-insensitive authentication scheme (@bobyrizov) +- [#763](https://github.com/request/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash) +- [#744](https://github.com/request/request/pull/744) Use Cookie.parse (@lalitkapoor) +- [#757](https://github.com/request/request/pull/757) require aws-sign2 (@mafintosh) + +### v2.31.0 (2014/01/08) +- [#645](https://github.com/request/request/pull/645) update twitter api url to v1.1 (@mick) +- [#746](https://github.com/request/request/pull/746) README: Markdown code highlight (@weakish) +- [#745](https://github.com/request/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay) +- [#742](https://github.com/request/request/pull/742) Add note about JSON output body type (@iansltx) +- [#741](https://github.com/request/request/pull/741) README example is using old cookie jar api (@emkay) +- [#736](https://github.com/request/request/pull/736) Fix callback arguments documentation (@mmalecki) +- [#732](https://github.com/request/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium) +- [#730](https://github.com/request/request/pull/730) better HTTP DIGEST support (@dai-shi) +- [#728](https://github.com/request/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow) +- [#727](https://github.com/request/request/pull/727) fix requester bug (@jchris) +- [#724](https://github.com/request/request/pull/724) README.md: add custom HTTP Headers example. (@tcort) +- [#719](https://github.com/request/request/pull/719) Made a comment gender neutral. (@unsetbit) +- [#715](https://github.com/request/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub) +- [#710](https://github.com/request/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak) +- [#696](https://github.com/request/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin) +- [#694](https://github.com/request/request/pull/694) Typo in README (@VRMink) +- [#690](https://github.com/request/request/pull/690) Handle blank password in basic auth. (@diversario) +- [#682](https://github.com/request/request/pull/682) Optional dependencies (@Turbo87) +- [#683](https://github.com/request/request/pull/683) Travis CI support (@Turbo87) +- [#674](https://github.com/request/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren) +- [#666](https://github.com/request/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong) +- [#656](https://github.com/request/request/pull/656) Test case for #304. (@diversario) +- [#662](https://github.com/request/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar) +- [#659](https://github.com/request/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm) +- [#630](https://github.com/request/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl) +- [#619](https://github.com/request/request/pull/619) decouple things a bit (@joaojeronimo) +- [#613](https://github.com/request/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander) +- [#605](https://github.com/request/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker) +- [#596](https://github.com/request/request/pull/596) Global agent is being used when pool is specified (@Cauldrath) +- [#594](https://github.com/request/request/pull/594) Emit complete event when there is no callback (@RomainLK) +- [#601](https://github.com/request/request/pull/601) Fixed a small typo (@michalstanko) +- [#589](https://github.com/request/request/pull/589) Prevent setting headers after they are sent (@geek) +- [#587](https://github.com/request/request/pull/587) Global cookie jar disabled by default (@threepointone) +- [#544](https://github.com/request/request/pull/544) Update http-signature version. (@davidlehn) +- [#581](https://github.com/request/request/pull/581) Fix spelling of "ignoring." (@bigeasy) +- [#568](https://github.com/request/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette) +- [#564](https://github.com/request/request/pull/564) Fix redirections (@criloz) +- [#541](https://github.com/request/request/pull/541) The exported request function doesn't have an auth method (@tschaub) +- [#542](https://github.com/request/request/pull/542) Expose Request class (@regality) +- [#536](https://github.com/request/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando) +- [#532](https://github.com/request/request/pull/532) fix typo (@fredericosilva) +- [#497](https://github.com/request/request/pull/497) Added redirect event (@Cauldrath) +- [#503](https://github.com/request/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi) +- [#521](https://github.com/request/request/pull/521) Improving test-localAddress.js (@noway) +- [#529](https://github.com/request/request/pull/529) dependencies versions bump (@jodaka) +- [#523](https://github.com/request/request/pull/523) Updating dependencies (@noway) +- [#520](https://github.com/request/request/pull/520) Fixing test-tunnel.js (@noway) +- [#519](https://github.com/request/request/pull/519) Update internal path state on post-creation QS changes (@jblebrun) +- [#510](https://github.com/request/request/pull/510) Add HTTP Signature support. (@davidlehn) +- [#502](https://github.com/request/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen) +- [#508](https://github.com/request/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs) +- [#512](https://github.com/request/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1) +- [#513](https://github.com/request/request/pull/513) add 'localAddress' support (@yyfrankyy) +- [#498](https://github.com/request/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins) +- [#490](https://github.com/request/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas) +- [#479](https://github.com/request/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH) +- [#475](https://github.com/request/request/pull/475) Use `unescape` from `querystring` (@shimaore) +- [#473](https://github.com/request/request/pull/473) V0.10 compat (@isaacs) +- [#471](https://github.com/request/request/pull/471) Using querystring library from visionmedia (@kbackowski) +- [#461](https://github.com/request/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin) +- [#460](https://github.com/request/request/pull/460) hawk 0.10.0 (@hueniverse) +- [#462](https://github.com/request/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya) +- [#456](https://github.com/request/request/pull/456) hawk 0.9.0 (@hueniverse) +- [#429](https://github.com/request/request/pull/429) Copy options before adding callback. (@nrn, @nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) +- [#454](https://github.com/request/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh) +- [#310](https://github.com/request/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann, @isaacs, @mscdex) +- [#413](https://github.com/request/request/pull/413) rename googledoodle.png to .jpg (@nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) +- [#448](https://github.com/request/request/pull/448) Convenience method for PATCH (@mloar) +- [#444](https://github.com/request/request/pull/444) protect against double callbacks on error path (@spollack) +- [#433](https://github.com/request/request/pull/433) Added support for HTTPS cert & key (@mmalecki) +- [#430](https://github.com/request/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf) +- [#415](https://github.com/request/request/pull/415) Fixed a typo. (@jerem) +- [#338](https://github.com/request/request/pull/338) Add more auth options, including digest support (@nylen) +- [#403](https://github.com/request/request/pull/403) Optimize environment lookup to happen once only (@mmalecki) +- [#398](https://github.com/request/request/pull/398) Add more reporting to tests (@mmalecki) +- [#388](https://github.com/request/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23) +- [#381](https://github.com/request/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro) +- [#380](https://github.com/request/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-) +- [#376](https://github.com/request/request/pull/376) Headers lost on redirect (@kapetan) +- [#375](https://github.com/request/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock) +- [#374](https://github.com/request/request/pull/374) Correct Host header for proxy tunnel CONNECT (@youurayy) +- [#370](https://github.com/request/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge) +- [#369](https://github.com/request/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge) +- [#344](https://github.com/request/request/pull/344) Make AWS auth signing find headers correctly (@nlf) +- [#363](https://github.com/request/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall) +- [#362](https://github.com/request/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall) +- [#361](https://github.com/request/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins) +- [#360](https://github.com/request/request/pull/360) Delete self._form along with everything else on redirect (@jgautier) +- [#355](https://github.com/request/request/pull/355) stop sending erroneous headers on redirected requests (@azylman) +- [#332](https://github.com/request/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup) +- [#343](https://github.com/request/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nlf) +- [#320](https://github.com/request/request/pull/320) request.defaults() doesn't need to wrap jar() (@StuartHarris) +- [#322](https://github.com/request/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo) +- [#326](https://github.com/request/request/pull/326) Do not try to remove listener from an undefined connection (@CartoDB) +- [#318](https://github.com/request/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs) +- [#317](https://github.com/request/request/pull/317) Workaround for #313 (@isaacs) +- [#293](https://github.com/request/request/pull/293) Allow parser errors to bubble up to request (@mscdex) +- [#290](https://github.com/request/request/pull/290) A test for #289 (@isaacs) +- [#280](https://github.com/request/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1) +- [#207](https://github.com/request/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs) +- [#214](https://github.com/request/request/pull/214) documenting additional behavior of json option (@jphaas, @vpulim) +- [#272](https://github.com/request/request/pull/272) Boundary begins with CRLF? (@elspoono, @timshadel, @naholyr, @nanodocumet, @TehShrike) +- [#284](https://github.com/request/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry) +- [#241](https://github.com/request/request/pull/241) Composability updates suggested by issue #239 (@polotek) +- [#282](https://github.com/request/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock) +- [#279](https://github.com/request/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin) +- [#273](https://github.com/request/request/pull/273) Pipe back pressure issue (@mafintosh) +- [#268](https://github.com/request/request/pull/268) I'm not OCD seriously (@TehShrike) +- [#263](https://github.com/request/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet) +- [#265](https://github.com/request/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr) +- [#262](https://github.com/request/request/pull/262) JSON test should check for equality (@timshadel) +- [#261](https://github.com/request/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel) +- [#249](https://github.com/request/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges, @polotek, @zephrax, @jeromegn) +- [#255](https://github.com/request/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1) +- [#260](https://github.com/request/request/pull/260) fixed just another leak of 'i' (@sreuter) +- [#246](https://github.com/request/request/pull/246) Fixing the set-cookie header (@jeromegn) +- [#243](https://github.com/request/request/pull/243) Dynamic boundary (@zephrax) +- [#240](https://github.com/request/request/pull/240) don't error when null is passed for options (@polotek) +- [#211](https://github.com/request/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso, @vpulim) +- [#224](https://github.com/request/request/pull/224) Multipart content-type change (@janjongboom) +- [#217](https://github.com/request/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup) +- [#203](https://github.com/request/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@vpulim) +- [#199](https://github.com/request/request/pull/199) Tunnel (@isaacs) +- [#198](https://github.com/request/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs) +- [#197](https://github.com/request/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs) +- [#193](https://github.com/request/request/pull/193) Fixes GH-119 (@goatslacker) +- [#188](https://github.com/request/request/pull/188) Add abort support to the returned request (@itay) +- [#176](https://github.com/request/request/pull/176) Querystring option (@csainty) +- [#182](https://github.com/request/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63) +- [#180](https://github.com/request/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63) +- [#179](https://github.com/request/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack) +- [#177](https://github.com/request/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63) +- [#170](https://github.com/request/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes) +- [#168](https://github.com/request/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby) +- [#161](https://github.com/request/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou) +- [#162](https://github.com/request/request/pull/162) Fix issue #159 (@dpetukhov) +- [#90](https://github.com/request/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes) +- [#148](https://github.com/request/request/pull/148) Retry Agent (@thejh) +- [#146](https://github.com/request/request/pull/146) Multipart should respect content-type if previously set (@apeace) +- [#144](https://github.com/request/request/pull/144) added "form" option to readme (@petejkim) +- [#133](https://github.com/request/request/pull/133) Fixed cookies parsing (@afanasy) +- [#135](https://github.com/request/request/pull/135) host vs hostname (@iangreenleaf) +- [#132](https://github.com/request/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson) +- [#112](https://github.com/request/request/pull/112) Support using a custom http-like module (@jhs) +- [#104](https://github.com/request/request/pull/104) Cookie handling contains bugs (@janjongboom) +- [#121](https://github.com/request/request/pull/121) Another patch for cookie handling regression (@jhurliman) +- [#117](https://github.com/request/request/pull/117) Remove the global `i` (@3rd-Eden) +- [#110](https://github.com/request/request/pull/110) Update to Iris Couch URL (@jhs) +- [#86](https://github.com/request/request/pull/86) Can't post binary to multipart requests (@kkaefer) +- [#105](https://github.com/request/request/pull/105) added test for proxy option. (@dominictarr) +- [#102](https://github.com/request/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex) +- [#97](https://github.com/request/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs) +- [#96](https://github.com/request/request/pull/96) Authless parsed url host support (@isaacs) +- [#81](https://github.com/request/request/pull/81) Enhance redirect handling (@danmactough) +- [#78](https://github.com/request/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs) +- [#76](https://github.com/request/request/pull/76) Bug when a request fails and a timeout is set (@Marsup) +- [#70](https://github.com/request/request/pull/70) add test script to package.json (@isaacs, @aheckmann) +- [#73](https://github.com/request/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs) +- [#69](https://github.com/request/request/pull/69) Flatten chunked requests properly (@isaacs) +- [#67](https://github.com/request/request/pull/67) fixed global variable leaks (@aheckmann) +- [#66](https://github.com/request/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod) +- [#53](https://github.com/request/request/pull/53) Parse json: Issue #51 (@benatkin) +- [#45](https://github.com/request/request/pull/45) Added timeout option (@mbrevoort) +- [#35](https://github.com/request/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli) +- [#31](https://github.com/request/request/pull/31) Error on piping a request to a destination (@tobowers) \ No newline at end of file diff --git a/node_modules/request/LICENSE b/node_modules/request/LICENSE new file mode 100644 index 0000000..a4a9aee --- /dev/null +++ b/node_modules/request/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/request/README.md b/node_modules/request/README.md new file mode 100644 index 0000000..b91623d --- /dev/null +++ b/node_modules/request/README.md @@ -0,0 +1,1097 @@ + +# Request - Simplified HTTP client + +[![npm package](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/) + +[![Build status](https://img.shields.io/travis/request/request/master.svg?style=flat-square)](https://travis-ci.org/request/request) +[![Coverage](https://img.shields.io/codecov/c/github/request/request.svg?style=flat-square)](https://codecov.io/github/request/request?branch=master) +[![Coverage](https://img.shields.io/coveralls/request/request.svg?style=flat-square)](https://coveralls.io/r/request/request) +[![Dependency Status](https://img.shields.io/david/request/request.svg?style=flat-square)](https://david-dm.org/request/request) +[![Known Vulnerabilities](https://snyk.io/test/npm/request/badge.svg?style=flat-square)](https://snyk.io/test/npm/request) +[![Gitter](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/request/request?utm_source=badge) + + +## Super simple to use + +Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. + +```js +var request = require('request'); +request('http://www.google.com', function (error, response, body) { + console.log('error:', error); // Print the error if one occurred + console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received + console.log('body:', body); // Print the HTML for the Google homepage. +}); +``` + + +## Table of contents + +- [Streaming](#streaming) +- [Promises & Async/Await](#promises--asyncawait) +- [Forms](#forms) +- [HTTP Authentication](#http-authentication) +- [Custom HTTP Headers](#custom-http-headers) +- [OAuth Signing](#oauth-signing) +- [Proxies](#proxies) +- [Unix Domain Sockets](#unix-domain-sockets) +- [TLS/SSL Protocol](#tlsssl-protocol) +- [Support for HAR 1.2](#support-for-har-12) +- [**All Available Options**](#requestoptions-callback) + +Request also offers [convenience methods](#convenience-methods) like +`request.defaults` and `request.post`, and there are +lots of [usage examples](#examples) and several +[debugging techniques](#debugging). + + +--- + + +## Streaming + +You can stream any response to a file stream. + +```js +request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) +``` + +You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). + +```js +fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) +``` + +Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. + +```js +request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) +``` + +Request emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage). + +```js +request + .get('http://google.com/img.png') + .on('response', function(response) { + console.log(response.statusCode) // 200 + console.log(response.headers['content-type']) // 'image/png' + }) + .pipe(request.put('http://mysite.com/img.png')) +``` + +To easily handle errors when streaming requests, listen to the `error` event before piping: + +```js +request + .get('http://mysite.com/doodle.png') + .on('error', function(err) { + console.log(err) + }) + .pipe(fs.createWriteStream('doodle.png')) +``` + +Now let’s get fancy. + +```js +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + if (req.method === 'PUT') { + req.pipe(request.put('http://mysite.com/doodle.png')) + } else if (req.method === 'GET' || req.method === 'HEAD') { + request.get('http://mysite.com/doodle.png').pipe(resp) + } + } +}) +``` + +You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: + +```js +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + var x = request('http://mysite.com/doodle.png') + req.pipe(x) + x.pipe(resp) + } +}) +``` + +And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) + +```js +req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) +``` + +Also, none of this new functionality conflicts with requests previous features, it just expands them. + +```js +var r = request.defaults({'proxy':'http://localproxy.com'}) + +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + r.get('http://google.com/doodle.png').pipe(resp) + } +}) +``` + +You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. + +[back to top](#table-of-contents) + + +--- + + +## Promises & Async/Await + +`request` supports both streaming and callback interfaces natively. If you'd like `request` to return a Promise instead, you can use an alternative interface wrapper for `request`. These wrappers can be useful if you prefer to work with Promises, or if you'd like to use `async`/`await` in ES2017. + +Several alternative interfaces are provided by the request team, including: +- [`request-promise`](https://github.com/request/request-promise) (uses [Bluebird](https://github.com/petkaantonov/bluebird) Promises) +- [`request-promise-native`](https://github.com/request/request-promise-native) (uses native Promises) +- [`request-promise-any`](https://github.com/request/request-promise-any) (uses [any-promise](https://www.npmjs.com/package/any-promise) Promises) + + +[back to top](#table-of-contents) + + +--- + + +## Forms + +`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. + + +#### application/x-www-form-urlencoded (URL-Encoded Forms) + +URL-encoded forms are simple. + +```js +request.post('http://service.com/upload', {form:{key:'value'}}) +// or +request.post('http://service.com/upload').form({key:'value'}) +// or +request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ }) +``` + + +#### multipart/form-data (Multipart Form Uploads) + +For `multipart/form-data` we use the [form-data](https://github.com/form-data/form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option. + + +```js +var formData = { + // Pass a simple key-value pair + my_field: 'my_value', + // Pass data via Buffers + my_buffer: Buffer.from([1, 2, 3]), + // Pass data via Streams + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), + // Pass multiple values /w an Array + attachments: [ + fs.createReadStream(__dirname + '/attachment1.jpg'), + fs.createReadStream(__dirname + '/attachment2.jpg') + ], + // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} + // Use case: for some types of streams, you'll need to provide "file"-related information manually. + // See the `form-data` README for more information about options: https://github.com/form-data/form-data + custom_file: { + value: fs.createReadStream('/dev/urandom'), + options: { + filename: 'topsecret.jpg', + contentType: 'image/jpeg' + } + } +}; +request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) + +```js +// NOTE: Advanced use-case, for normal use see 'formData' usage above +var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...}) +var form = r.form(); +form.append('my_field', 'my_value'); +form.append('my_buffer', Buffer.from([1, 2, 3])); +form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'}); +``` +See the [form-data README](https://github.com/form-data/form-data) for more information & examples. + + +#### multipart/related + +Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options. + +```js + request({ + method: 'PUT', + preambleCRLF: true, + postambleCRLF: true, + uri: 'http://service.com/upload', + multipart: [ + { + 'content-type': 'application/json', + body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + }, + { body: 'I am an attachment' }, + { body: fs.createReadStream('image.png') } + ], + // alternatively pass an object containing additional options + multipart: { + chunked: false, + data: [ + { + 'content-type': 'application/json', + body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + }, + { body: 'I am an attachment' } + ] + } + }, + function (error, response, body) { + if (error) { + return console.error('upload failed:', error); + } + console.log('Upload successful! Server responded with:', body); + }) +``` + +[back to top](#table-of-contents) + + +--- + + +## HTTP Authentication + +```js +request.get('http://some.server.com/').auth('username', 'password', false); +// or +request.get('http://some.server.com/', { + 'auth': { + 'user': 'username', + 'pass': 'password', + 'sendImmediately': false + } +}); +// or +request.get('http://some.server.com/').auth(null, null, true, 'bearerToken'); +// or +request.get('http://some.server.com/', { + 'auth': { + 'bearer': 'bearerToken' + } +}); +``` + +If passed as an option, `auth` should be a hash containing values: + +- `user` || `username` +- `pass` || `password` +- `sendImmediately` (optional) +- `bearer` (optional) + +The method form takes parameters +`auth(username, password, sendImmediately, bearer)`. + +`sendImmediately` defaults to `true`, which causes a basic or bearer +authentication header to be sent. If `sendImmediately` is `false`, then +`request` will retry with a proper authentication header after receiving a +`401` response from the server (which must contain a `WWW-Authenticate` header +indicating the required authentication method). + +Note that you can also specify basic authentication using the URL itself, as +detailed in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt). Simply pass the +`user:password` before the host with an `@` sign: + +```js +var username = 'username', + password = 'password', + url = 'http://' + username + ':' + password + '@some.server.com'; + +request({url: url}, function (error, response, body) { + // Do more stuff with 'body' here +}); +``` + +Digest authentication is supported, but it only works with `sendImmediately` +set to `false`; otherwise `request` will send basic authentication on the +initial request, which will probably cause the request to fail. + +Bearer authentication is supported, and is activated when the `bearer` value is +available. The value may be either a `String` or a `Function` returning a +`String`. Using a function to supply the bearer token is particularly useful if +used in conjunction with `defaults` to allow a single function to supply the +last known token at the time of sending a request, or to compute one on the fly. + +[back to top](#table-of-contents) + + +--- + + +## Custom HTTP Headers + +HTTP Headers, such as `User-Agent`, can be set in the `options` object. +In the example below, we call the github API to find out the number +of stars and forks for the request repository. This requires a +custom `User-Agent` header as well as https. + +```js +var request = require('request'); + +var options = { + url: 'https://api.github.com/repos/request/request', + headers: { + 'User-Agent': 'request' + } +}; + +function callback(error, response, body) { + if (!error && response.statusCode == 200) { + var info = JSON.parse(body); + console.log(info.stargazers_count + " Stars"); + console.log(info.forks_count + " Forks"); + } +} + +request(options, callback); +``` + +[back to top](#table-of-contents) + + +--- + + +## OAuth Signing + +[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The +default signing algorithm is +[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2): + +```js +// OAuth1.0 - 3-legged server side flow (Twitter example) +// step 1 +var qs = require('querystring') + , oauth = + { callback: 'http://mysite.com/callback/' + , consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + } + , url = 'https://api.twitter.com/oauth/request_token' + ; +request.post({url:url, oauth:oauth}, function (e, r, body) { + // Ideally, you would take the body in the response + // and construct a URL that a user clicks on (like a sign in button). + // The verifier is only available in the response after a user has + // verified with twitter that they are authorizing your app. + + // step 2 + var req_data = qs.parse(body) + var uri = 'https://api.twitter.com/oauth/authenticate' + + '?' + qs.stringify({oauth_token: req_data.oauth_token}) + // redirect the user to the authorize uri + + // step 3 + // after the user is redirected back to your server + var auth_data = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: auth_data.oauth_token + , token_secret: req_data.oauth_token_secret + , verifier: auth_data.oauth_verifier + } + , url = 'https://api.twitter.com/oauth/access_token' + ; + request.post({url:url, oauth:oauth}, function (e, r, body) { + // ready to make signed requests on behalf of the user + var perm_data = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: perm_data.oauth_token + , token_secret: perm_data.oauth_token_secret + } + , url = 'https://api.twitter.com/1.1/users/show.json' + , qs = + { screen_name: perm_data.screen_name + , user_id: perm_data.user_id + } + ; + request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, user) { + console.log(user) + }) + }) +}) +``` + +For [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make +the following changes to the OAuth options object: +* Pass `signature_method : 'RSA-SHA1'` +* Instead of `consumer_secret`, specify a `private_key` string in + [PEM format](http://how2ssl.com/articles/working_with_pem_files/) + +For [PLAINTEXT signing](http://oauth.net/core/1.0/#anchor22), make +the following changes to the OAuth options object: +* Pass `signature_method : 'PLAINTEXT'` + +To send OAuth parameters via query params or in a post body as described in The +[Consumer Request Parameters](http://oauth.net/core/1.0/#consumer_req_param) +section of the oauth1 spec: +* Pass `transport_method : 'query'` or `transport_method : 'body'` in the OAuth + options object. +* `transport_method` defaults to `'header'` + +To use [Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html) you can either +* Manually generate the body hash and pass it as a string `body_hash: '...'` +* Automatically generate the body hash by passing `body_hash: true` + +[back to top](#table-of-contents) + + +--- + + +## Proxies + +If you specify a `proxy` option, then the request (and any subsequent +redirects) will be sent via a connection to the proxy server. + +If your endpoint is an `https` url, and you are using a proxy, then +request will send a `CONNECT` request to the proxy server *first*, and +then use the supplied connection to connect to the endpoint. + +That is, first it will make a request like: + +``` +HTTP/1.1 CONNECT endpoint-server.com:80 +Host: proxy-server.com +User-Agent: whatever user agent you specify +``` + +and then the proxy server make a TCP connection to `endpoint-server` +on port `80`, and return a response that looks like: + +``` +HTTP/1.1 200 OK +``` + +At this point, the connection is left open, and the client is +communicating directly with the `endpoint-server.com` machine. + +See [the wikipedia page on HTTP Tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel) +for more information. + +By default, when proxying `http` traffic, request will simply make a +standard proxied `http` request. This is done by making the `url` +section of the initial line of the request a fully qualified url to +the endpoint. + +For example, it will make a single request that looks like: + +``` +HTTP/1.1 GET http://endpoint-server.com/some-url +Host: proxy-server.com +Other-Headers: all go here + +request body or whatever +``` + +Because a pure "http over http" tunnel offers no additional security +or other features, it is generally simpler to go with a +straightforward HTTP proxy in this case. However, if you would like +to force a tunneling proxy, you may set the `tunnel` option to `true`. + +You can also make a standard proxied `http` request by explicitly setting +`tunnel : false`, but **note that this will allow the proxy to see the traffic +to/from the destination server**. + +If you are using a tunneling proxy, you may set the +`proxyHeaderWhiteList` to share certain headers with the proxy. + +You can also set the `proxyHeaderExclusiveList` to share certain +headers only with the proxy and not with destination host. + +By default, this set is: + +``` +accept +accept-charset +accept-encoding +accept-language +accept-ranges +cache-control +content-encoding +content-language +content-length +content-location +content-md5 +content-range +content-type +connection +date +expect +max-forwards +pragma +proxy-authorization +referer +te +transfer-encoding +user-agent +via +``` + +Note that, when using a tunneling proxy, the `proxy-authorization` +header and any headers from custom `proxyHeaderExclusiveList` are +*never* sent to the endpoint server, but only to the proxy server. + + +### Controlling proxy behaviour using environment variables + +The following environment variables are respected by `request`: + + * `HTTP_PROXY` / `http_proxy` + * `HTTPS_PROXY` / `https_proxy` + * `NO_PROXY` / `no_proxy` + +When `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request. + +`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables. + +Here's some examples of valid `no_proxy` values: + + * `google.com` - don't proxy HTTP/HTTPS requests to Google. + * `google.com:443` - don't proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google. + * `google.com:443, yahoo.com:80` - don't proxy HTTPS requests to Google, and don't proxy HTTP requests to Yahoo! + * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether. + +[back to top](#table-of-contents) + + +--- + + +## UNIX Domain Sockets + +`request` supports making requests to [UNIX Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme: + +```js +/* Pattern */ 'http://unix:SOCKET:PATH' +/* Example */ request.get('http://unix:/absolute/path/to/unix.socket:/request/path') +``` + +Note: The `SOCKET` path is assumed to be absolute to the root of the host file system. + +[back to top](#table-of-contents) + + +--- + + +## TLS/SSL Protocol + +TLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be +set directly in `options` object, in the `agentOptions` property of the `options` object, or even in `https.globalAgent.options`. Keep in mind that, although `agentOptions` allows for a slightly wider range of configurations, the recommended way is via `options` object directly, as using `agentOptions` or `https.globalAgent.options` would not be applied in the same way in proxied environments (as data travels through a TLS connection instead of an http/https agent). + +```js +var fs = require('fs') + , path = require('path') + , certFile = path.resolve(__dirname, 'ssl/client.crt') + , keyFile = path.resolve(__dirname, 'ssl/client.key') + , caFile = path.resolve(__dirname, 'ssl/ca.cert.pem') + , request = require('request'); + +var options = { + url: 'https://api.some-server.com/', + cert: fs.readFileSync(certFile), + key: fs.readFileSync(keyFile), + passphrase: 'password', + ca: fs.readFileSync(caFile) +}; + +request.get(options); +``` + +### Using `options.agentOptions` + +In the example below, we call an API that requires client side SSL certificate +(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol: + +```js +var fs = require('fs') + , path = require('path') + , certFile = path.resolve(__dirname, 'ssl/client.crt') + , keyFile = path.resolve(__dirname, 'ssl/client.key') + , request = require('request'); + +var options = { + url: 'https://api.some-server.com/', + agentOptions: { + cert: fs.readFileSync(certFile), + key: fs.readFileSync(keyFile), + // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format: + // pfx: fs.readFileSync(pfxFilePath), + passphrase: 'password', + securityOptions: 'SSL_OP_NO_SSLv3' + } +}; + +request.get(options); +``` + +It is able to force using SSLv3 only by specifying `secureProtocol`: + +```js +request.get({ + url: 'https://api.some-server.com/', + agentOptions: { + secureProtocol: 'SSLv3_method' + } +}); +``` + +It is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs). +This can be useful, for example, when using self-signed certificates. +To require a different root certificate, you can specify the signing CA by adding the contents of the CA's certificate file to the `agentOptions`. +The certificate the domain presents must be signed by the root certificate specified: + +```js +request.get({ + url: 'https://api.some-server.com/', + agentOptions: { + ca: fs.readFileSync('ca.cert.pem') + } +}); +``` + +[back to top](#table-of-contents) + + +--- + +## Support for HAR 1.2 + +The `options.har` property will override the values: `url`, `method`, `qs`, `headers`, `form`, `formData`, `body`, `json`, as well as construct multipart data and read files from disk when `request.postData.params[].fileName` is present without a matching `value`. + +A validation step will check if the HAR Request format matches the latest spec (v1.2) and will skip parsing if not matching. + +```js + var request = require('request') + request({ + // will be ignored + method: 'GET', + uri: 'http://www.google.com', + + // HTTP Archive Request Object + har: { + url: 'http://www.mockbin.com/har', + method: 'POST', + headers: [ + { + name: 'content-type', + value: 'application/x-www-form-urlencoded' + } + ], + postData: { + mimeType: 'application/x-www-form-urlencoded', + params: [ + { + name: 'foo', + value: 'bar' + }, + { + name: 'hello', + value: 'world' + } + ] + } + } + }) + + // a POST request will be sent to http://www.mockbin.com + // with body an application/x-www-form-urlencoded body: + // foo=bar&hello=world +``` + +[back to top](#table-of-contents) + + +--- + +## request(options, callback) + +The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. + +- `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` +- `baseUrl` - fully qualified uri string used as the base url. Most useful with `request.defaults`, for example when you want to do many requests to the same domain. If `baseUrl` is `https://example.com/api/`, then requesting `/end/point?test=true` will fetch `https://example.com/api/end/point?test=true`. When `baseUrl` is given, `uri` must also be a string. +- `method` - http method (default: `"GET"`) +- `headers` - http headers (default: `{}`) + +--- + +- `qs` - object containing querystring values to be appended to the `uri` +- `qsParseOptions` - object containing options to pass to the [qs.parse](https://github.com/hapijs/qs#parsing-objects) method. Alternatively pass options to the [querystring.parse](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_parse_str_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}` +- `qsStringifyOptions` - object containing options to pass to the [qs.stringify](https://github.com/hapijs/qs#stringifying) method. Alternatively pass options to the [querystring.stringify](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}`. For example, to change the way arrays are converted to query strings using the `qs` module pass the `arrayFormat` option with one of `indices|brackets|repeat` +- `useQuerystring` - if true, use `querystring` to stringify and parse + querystrings, otherwise use `qs` (default: `false`). Set this option to + `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the + default `foo[0]=bar&foo[1]=baz`. + +--- + +- `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer`, `String` or `ReadStream`. If `json` is `true`, then `body` must be a JSON-serializable object. +- `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above. +- `formData` - data to pass for a `multipart/form-data` request. See + [Forms](#forms) section above. +- `multipart` - array of objects which contain their own headers and `body` + attributes. Sends a `multipart/related` request. See [Forms](#forms) section + above. + - Alternatively you can pass in an object `{chunked: false, data: []}` where + `chunked` is used to specify whether the request is sent in + [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) + In non-chunked requests, data items with body streams are not allowed. +- `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request. +- `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request. +- `json` - sets `body` to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. +- `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body. +- `jsonReplacer` - a [replacer function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that will be passed to `JSON.stringify()` when stringifying a JSON request body. + +--- + +- `auth` - a hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above. +- `oauth` - options for OAuth HMAC-SHA1 signing. See documentation above. +- `hawk` - options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). +- `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`, and optionally `session` (note that this only works for services that require session as part of the canonical string). Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services). If you want to use AWS sign version 4 use the parameter `sign_version` with value `4` otherwise the default is version 2. If you are using SigV4, you can also include a `service` property that specifies the service name. **Note:** you need to `npm install aws4` first. +- `httpSignature` - options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. + +--- + +- `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise. +- `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) +- `followOriginalHttpMethod` - by default we redirect to HTTP method GET. you can enable this property to redirect to the original HTTP method (default: `false`) +- `maxRedirects` - the maximum number of redirects to follow (default: `10`) +- `removeRefererHeader` - removes the referer header when a redirect happens (default: `false`). **Note:** if true, referer header set in the initial request is preserved during redirect chain. + +--- + +- `encoding` - encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default). (**Note:** if you expect binary data, you should set `encoding: null`.) +- `gzip` - if `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below. +- `jar` - if `true`, remember cookies for future use (or define your custom cookie jar; see examples section) + +--- + +- `agent` - `http(s).Agent` instance to use +- `agentClass` - alternatively specify your agent's class name +- `agentOptions` - and pass its options. **Note:** for HTTPS see [tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback) and the [documentation above](#using-optionsagentoptions). +- `forever` - set to `true` to use the [forever-agent](https://github.com/request/forever-agent) **Note:** Defaults to `http(s).Agent({keepAlive:true})` in node 0.12+ +- `pool` - an object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as your options allow for it). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool. **Note:** `pool` is used only when the `agent` option is not specified. + - A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`). + - Note that if you are sending multiple requests in a loop and creating + multiple new `pool` objects, `maxSockets` will not work as intended. To + work around this, either use [`request.defaults`](#requestdefaultsoptions) + with your pool options or create the pool object with the `maxSockets` + property outside of the loop. +- `timeout` - integer containing the number of milliseconds to wait for a +server to send response headers (and start the response body) before aborting +the request. Note that if the underlying TCP connection cannot be established, +the OS-wide TCP connection timeout will overrule the `timeout` option ([the +default in Linux can be anywhere from 20-120 seconds][linux-timeout]). + +[linux-timeout]: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout + +--- + +- `localAddress` - local interface to bind for network connections. +- `proxy` - an HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) +- `strictSSL` - if `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. +- `tunnel` - controls the behavior of + [HTTP `CONNECT` tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling) + as follows: + - `undefined` (default) - `true` if the destination is `https`, `false` otherwise + - `true` - always tunnel to the destination by making a `CONNECT` request to + the proxy + - `false` - request the destination as a `GET` request. +- `proxyHeaderWhiteList` - a whitelist of headers to send to a + tunneling proxy. +- `proxyHeaderExclusiveList` - a whitelist of headers to send + exclusively to a tunneling proxy and not to destination. + +--- + +- `time` - if `true`, the request-response cycle (including all redirects) is timed at millisecond resolution. When set, the following properties are added to the response object: + - `elapsedTime` Duration of the entire request/response in milliseconds (*deprecated*). + - `responseStartTime` Timestamp when the response began (in Unix Epoch milliseconds) (*deprecated*). + - `timingStart` Timestamp of the start of the request (in Unix Epoch milliseconds). + - `timings` Contains event timestamps in millisecond resolution relative to `timingStart`. If there were redirects, the properties reflect the timings of the final request in the redirect chain: + - `socket` Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_socket) module's `socket` event fires. This happens when the socket is assigned to the request. + - `lookup` Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_lookup) module's `lookup` event fires. This happens when the DNS has been resolved. + - `connect`: Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_connect) module's `connect` event fires. This happens when the server acknowledges the TCP connection. + - `response`: Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_response) module's `response` event fires. This happens when the first bytes are received from the server. + - `end`: Relative timestamp when the last bytes of the response are received. + - `timingPhases` Contains the durations of each request phase. If there were redirects, the properties reflect the timings of the final request in the redirect chain: + - `wait`: Duration of socket initialization (`timings.socket`) + - `dns`: Duration of DNS lookup (`timings.lookup` - `timings.socket`) + - `tcp`: Duration of TCP connection (`timings.connect` - `timings.socket`) + - `firstByte`: Duration of HTTP server response (`timings.response` - `timings.connect`) + - `download`: Duration of HTTP download (`timings.end` - `timings.response`) + - `total`: Duration entire HTTP round-trip (`timings.end`) + +- `har` - a [HAR 1.2 Request Object](http://www.softwareishard.com/blog/har-12-spec/#request), will be processed from HAR format into options overwriting matching values *(see the [HAR 1.2 section](#support-for-har-1.2) for details)* +- `callback` - alternatively pass the request's callback in the options object + +The callback argument gets 3 arguments: + +1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) +2. An [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) object (Response object) +3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) + +[back to top](#table-of-contents) + + +--- + +## Convenience methods + +There are also shorthand methods for different HTTP METHODs and some other conveniences. + + +### request.defaults(options) + +This method **returns a wrapper** around the normal request API that defaults +to whatever options you pass to it. + +**Note:** `request.defaults()` **does not** modify the global request API; +instead, it **returns a wrapper** that has your default settings applied to it. + +**Note:** You can call `.defaults()` on the wrapper that is returned from +`request.defaults` to add/override defaults that were previously defaulted. + +For example: +```js +//requests using baseRequest() will set the 'x-token' header +var baseRequest = request.defaults({ + headers: {'x-token': 'my-token'} +}) + +//requests using specialRequest() will include the 'x-token' header set in +//baseRequest and will also include the 'special' header +var specialRequest = baseRequest.defaults({ + headers: {special: 'special value'} +}) +``` + +### request.METHOD() + +These HTTP method convenience functions act just like `request()` but with a default method already set for you: + +- *request.get()*: Defaults to `method: "GET"`. +- *request.post()*: Defaults to `method: "POST"`. +- *request.put()*: Defaults to `method: "PUT"`. +- *request.patch()*: Defaults to `method: "PATCH"`. +- *request.del() / request.delete()*: Defaults to `method: "DELETE"`. +- *request.head()*: Defaults to `method: "HEAD"`. +- *request.options()*: Defaults to `method: "OPTIONS"`. + +### request.cookie() + +Function that creates a new cookie. + +```js +request.cookie('key1=value1') +``` +### request.jar() + +Function that creates a new cookie jar. + +```js +request.jar() +``` + +[back to top](#table-of-contents) + + +--- + + +## Debugging + +There are at least three ways to debug the operation of `request`: + +1. Launch the node process like `NODE_DEBUG=request node script.js` + (`lib,request,otherlib` works too). + +2. Set `require('request').debug = true` at any time (this does the same thing + as #1). + +3. Use the [request-debug module](https://github.com/request/request-debug) to + view request and response headers and bodies. + +[back to top](#table-of-contents) + + +--- + +## Timeouts + +Most requests to external servers should have a timeout attached, in case the +server is not responding in a timely manner. Without a timeout, your code may +have a socket open/consume resources for minutes or more. + +There are two main types of timeouts: **connection timeouts** and **read +timeouts**. A connect timeout occurs if the timeout is hit while your client is +attempting to establish a connection to a remote machine (corresponding to the +[connect() call][connect] on the socket). A read timeout occurs any time the +server is too slow to send back a part of the response. + +These two situations have widely different implications for what went wrong +with the request, so it's useful to be able to distinguish them. You can detect +timeout errors by checking `err.code` for an 'ETIMEDOUT' value. Further, you +can detect whether the timeout was a connection timeout by checking if the +`err.connect` property is set to `true`. + +```js +request.get('http://10.255.255.1', {timeout: 1500}, function(err) { + console.log(err.code === 'ETIMEDOUT'); + // Set to `true` if the timeout was a connection timeout, `false` or + // `undefined` otherwise. + console.log(err.connect === true); + process.exit(0); +}); +``` + +[connect]: http://linux.die.net/man/2/connect + +## Examples: + +```js + var request = require('request') + , rand = Math.floor(Math.random()*100000000).toString() + ; + request( + { method: 'PUT' + , uri: 'http://mikeal.iriscouch.com/testjs/' + rand + , multipart: + [ { 'content-type': 'application/json' + , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + } + , { body: 'I am an attachment' } + ] + } + , function (error, response, body) { + if(response.statusCode == 201){ + console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) + } else { + console.log('error: '+ response.statusCode) + console.log(body) + } + } + ) +``` + +For backwards-compatibility, response compression is not supported by default. +To accept gzip-compressed responses, set the `gzip` option to `true`. Note +that the body data passed through `request` is automatically decompressed +while the response object is unmodified and will contain compressed data if +the server sent a compressed response. + +```js + var request = require('request') + request( + { method: 'GET' + , uri: 'http://www.google.com' + , gzip: true + } + , function (error, response, body) { + // body is the decompressed response body + console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity')) + console.log('the decoded data is: ' + body) + } + ) + .on('data', function(data) { + // decompressed data as it is received + console.log('decoded chunk: ' + data) + }) + .on('response', function(response) { + // unmodified http.IncomingMessage object + response.on('data', function(data) { + // compressed data as it is received + console.log('received ' + data.length + ' bytes of compressed data') + }) + }) +``` + +Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). + +```js +var request = request.defaults({jar: true}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` + +To use a custom cookie jar (instead of `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) + +```js +var j = request.jar() +var request = request.defaults({jar:j}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` + +OR + +```js +var j = request.jar(); +var cookie = request.cookie('key1=value1'); +var url = 'http://www.google.com'; +j.setCookie(cookie, url); +request({url: url, jar: j}, function () { + request('http://images.google.com') +}) +``` + +To use a custom cookie store (such as a +[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore) +which supports saving to and restoring from JSON files), pass it as a parameter +to `request.jar()`: + +```js +var FileCookieStore = require('tough-cookie-filestore'); +// NOTE - currently the 'cookies.json' file must already exist! +var j = request.jar(new FileCookieStore('cookies.json')); +request = request.defaults({ jar : j }) +request('http://www.google.com', function() { + request('http://images.google.com') +}) +``` + +The cookie store must be a +[`tough-cookie`](https://github.com/SalesforceEng/tough-cookie) +store and it must support synchronous operations; see the +[`CookieStore` API docs](https://github.com/SalesforceEng/tough-cookie#cookiestore-api) +for details. + +To inspect your cookie jar after a request: + +```js +var j = request.jar() +request({url: 'http://www.google.com', jar: j}, function () { + var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..." + var cookies = j.getCookies(url); + // [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...] +}) +``` + +[back to top](#table-of-contents) diff --git a/node_modules/request/index.js b/node_modules/request/index.js new file mode 100644 index 0000000..f9b480a --- /dev/null +++ b/node_modules/request/index.js @@ -0,0 +1,155 @@ +// Copyright 2010-2012 Mikeal Rogers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict' + +var extend = require('extend') +var cookies = require('./lib/cookies') +var helpers = require('./lib/helpers') + +var paramsHaveRequestBody = helpers.paramsHaveRequestBody + +// organize params for patch, post, put, head, del +function initParams (uri, options, callback) { + if (typeof options === 'function') { + callback = options + } + + var params = {} + if (typeof options === 'object') { + extend(params, options, {uri: uri}) + } else if (typeof uri === 'string') { + extend(params, {uri: uri}) + } else { + extend(params, uri) + } + + params.callback = callback || params.callback + return params +} + +function request (uri, options, callback) { + if (typeof uri === 'undefined') { + throw new Error('undefined is not a valid uri or options object.') + } + + var params = initParams(uri, options, callback) + + if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { + throw new Error('HTTP HEAD requests MUST NOT include a request body.') + } + + return new request.Request(params) +} + +function verbFunc (verb) { + var method = verb.toUpperCase() + return function (uri, options, callback) { + var params = initParams(uri, options, callback) + params.method = method + return request(params, params.callback) + } +} + +// define like this to please codeintel/intellisense IDEs +request.get = verbFunc('get') +request.head = verbFunc('head') +request.options = verbFunc('options') +request.post = verbFunc('post') +request.put = verbFunc('put') +request.patch = verbFunc('patch') +request.del = verbFunc('delete') +request['delete'] = verbFunc('delete') + +request.jar = function (store) { + return cookies.jar(store) +} + +request.cookie = function (str) { + return cookies.parse(str) +} + +function wrapRequestMethod (method, options, requester, verb) { + return function (uri, opts, callback) { + var params = initParams(uri, opts, callback) + + var target = {} + extend(true, target, options, params) + + target.pool = params.pool || options.pool + + if (verb) { + target.method = verb.toUpperCase() + } + + if (typeof requester === 'function') { + method = requester + } + + return method(target, target.callback) + } +} + +request.defaults = function (options, requester) { + var self = this + + options = options || {} + + if (typeof options === 'function') { + requester = options + options = {} + } + + var defaults = wrapRequestMethod(self, options, requester) + + var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete'] + verbs.forEach(function (verb) { + defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb) + }) + + defaults.cookie = wrapRequestMethod(self.cookie, options, requester) + defaults.jar = self.jar + defaults.defaults = self.defaults + return defaults +} + +request.forever = function (agentOptions, optionsArg) { + var options = {} + if (optionsArg) { + extend(options, optionsArg) + } + if (agentOptions) { + options.agentOptions = agentOptions + } + + options.forever = true + return request.defaults(options) +} + +// Exports + +module.exports = request +request.Request = require('./request') +request.initParams = initParams + +// Backwards compatibility for request.debug +Object.defineProperty(request, 'debug', { + enumerable: true, + get: function () { + return request.Request.debug + }, + set: function (debug) { + request.Request.debug = debug + } +}) diff --git a/node_modules/request/lib/auth.js b/node_modules/request/lib/auth.js new file mode 100644 index 0000000..f5edf32 --- /dev/null +++ b/node_modules/request/lib/auth.js @@ -0,0 +1,167 @@ +'use strict' + +var caseless = require('caseless') +var uuid = require('uuid/v4') +var helpers = require('./helpers') + +var md5 = helpers.md5 +var toBase64 = helpers.toBase64 + +function Auth (request) { + // define all public properties here + this.request = request + this.hasAuth = false + this.sentAuth = false + this.bearerToken = null + this.user = null + this.pass = null +} + +Auth.prototype.basic = function (user, pass, sendImmediately) { + var self = this + if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { + self.request.emit('error', new Error('auth() received invalid user or password')) + } + self.user = user + self.pass = pass + self.hasAuth = true + var header = user + ':' + (pass || '') + if (sendImmediately || typeof sendImmediately === 'undefined') { + var authHeader = 'Basic ' + toBase64(header) + self.sentAuth = true + return authHeader + } +} + +Auth.prototype.bearer = function (bearer, sendImmediately) { + var self = this + self.bearerToken = bearer + self.hasAuth = true + if (sendImmediately || typeof sendImmediately === 'undefined') { + if (typeof bearer === 'function') { + bearer = bearer() + } + var authHeader = 'Bearer ' + (bearer || '') + self.sentAuth = true + return authHeader + } +} + +Auth.prototype.digest = function (method, path, authHeader) { + // TODO: More complete implementation of RFC 2617. + // - handle challenge.domain + // - support qop="auth-int" only + // - handle Authentication-Info (not necessarily?) + // - check challenge.stale (not necessarily?) + // - increase nc (not necessarily?) + // For reference: + // http://tools.ietf.org/html/rfc2617#section-3 + // https://github.com/bagder/curl/blob/master/lib/http_digest.c + + var self = this + + var challenge = {} + var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi + for (;;) { + var match = re.exec(authHeader) + if (!match) { + break + } + challenge[match[1]] = match[2] || match[3] + } + + /** + * RFC 2617: handle both MD5 and MD5-sess algorithms. + * + * If the algorithm directive's value is "MD5" or unspecified, then HA1 is + * HA1=MD5(username:realm:password) + * If the algorithm directive's value is "MD5-sess", then HA1 is + * HA1=MD5(MD5(username:realm:password):nonce:cnonce) + */ + var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) { + var ha1 = md5(user + ':' + realm + ':' + pass) + if (algorithm && algorithm.toLowerCase() === 'md5-sess') { + return md5(ha1 + ':' + nonce + ':' + cnonce) + } else { + return ha1 + } + } + + var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' + var nc = qop && '00000001' + var cnonce = qop && uuid().replace(/-/g, '') + var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce) + var ha2 = md5(method + ':' + path) + var digestResponse = qop + ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) + : md5(ha1 + ':' + challenge.nonce + ':' + ha2) + var authValues = { + username: self.user, + realm: challenge.realm, + nonce: challenge.nonce, + uri: path, + qop: qop, + response: digestResponse, + nc: nc, + cnonce: cnonce, + algorithm: challenge.algorithm, + opaque: challenge.opaque + } + + authHeader = [] + for (var k in authValues) { + if (authValues[k]) { + if (k === 'qop' || k === 'nc' || k === 'algorithm') { + authHeader.push(k + '=' + authValues[k]) + } else { + authHeader.push(k + '="' + authValues[k] + '"') + } + } + } + authHeader = 'Digest ' + authHeader.join(', ') + self.sentAuth = true + return authHeader +} + +Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { + var self = this + var request = self.request + + var authHeader + if (bearer === undefined && user === undefined) { + self.request.emit('error', new Error('no auth mechanism defined')) + } else if (bearer !== undefined) { + authHeader = self.bearer(bearer, sendImmediately) + } else { + authHeader = self.basic(user, pass, sendImmediately) + } + if (authHeader) { + request.setHeader('authorization', authHeader) + } +} + +Auth.prototype.onResponse = function (response) { + var self = this + var request = self.request + + if (!self.hasAuth || self.sentAuth) { return null } + + var c = caseless(response.headers) + + var authHeader = c.get('www-authenticate') + var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() + request.debug('reauth', authVerb) + + switch (authVerb) { + case 'basic': + return self.basic(self.user, self.pass, true) + + case 'bearer': + return self.bearer(self.bearerToken, true) + + case 'digest': + return self.digest(request.method, request.path, authHeader) + } +} + +exports.Auth = Auth diff --git a/node_modules/request/lib/cookies.js b/node_modules/request/lib/cookies.js new file mode 100644 index 0000000..bd5d46b --- /dev/null +++ b/node_modules/request/lib/cookies.js @@ -0,0 +1,38 @@ +'use strict' + +var tough = require('tough-cookie') + +var Cookie = tough.Cookie +var CookieJar = tough.CookieJar + +exports.parse = function (str) { + if (str && str.uri) { + str = str.uri + } + if (typeof str !== 'string') { + throw new Error('The cookie function only accepts STRING as param') + } + return Cookie.parse(str, {loose: true}) +} + +// Adapt the sometimes-Async api of tough.CookieJar to our requirements +function RequestJar (store) { + var self = this + self._jar = new CookieJar(store, {looseMode: true}) +} +RequestJar.prototype.setCookie = function (cookieOrStr, uri, options) { + var self = this + return self._jar.setCookieSync(cookieOrStr, uri, options || {}) +} +RequestJar.prototype.getCookieString = function (uri) { + var self = this + return self._jar.getCookieStringSync(uri) +} +RequestJar.prototype.getCookies = function (uri) { + var self = this + return self._jar.getCookiesSync(uri) +} + +exports.jar = function (store) { + return new RequestJar(store) +} diff --git a/node_modules/request/lib/getProxyFromURI.js b/node_modules/request/lib/getProxyFromURI.js new file mode 100644 index 0000000..4633ba5 --- /dev/null +++ b/node_modules/request/lib/getProxyFromURI.js @@ -0,0 +1,79 @@ +'use strict' + +function formatHostname (hostname) { + // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' + return hostname.replace(/^\.*/, '.').toLowerCase() +} + +function parseNoProxyZone (zone) { + zone = zone.trim().toLowerCase() + + var zoneParts = zone.split(':', 2) + var zoneHost = formatHostname(zoneParts[0]) + var zonePort = zoneParts[1] + var hasPort = zone.indexOf(':') > -1 + + return {hostname: zoneHost, port: zonePort, hasPort: hasPort} +} + +function uriInNoProxy (uri, noProxy) { + var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') + var hostname = formatHostname(uri.hostname) + var noProxyList = noProxy.split(',') + + // iterate through the noProxyList until it finds a match. + return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) { + var isMatchedAt = hostname.indexOf(noProxyZone.hostname) + var hostnameMatched = ( + isMatchedAt > -1 && + (isMatchedAt === hostname.length - noProxyZone.hostname.length) + ) + + if (noProxyZone.hasPort) { + return (port === noProxyZone.port) && hostnameMatched + } + + return hostnameMatched + }) +} + +function getProxyFromURI (uri) { + // Decide the proper request proxy to use based on the request URI object and the + // environmental variables (NO_PROXY, HTTP_PROXY, etc.) + // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) + + var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' + + // if the noProxy is a wildcard then return null + + if (noProxy === '*') { + return null + } + + // if the noProxy is not empty and the uri is found return null + + if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { + return null + } + + // Check for HTTP or HTTPS Proxy in environment Else default to null + + if (uri.protocol === 'http:') { + return process.env.HTTP_PROXY || + process.env.http_proxy || null + } + + if (uri.protocol === 'https:') { + return process.env.HTTPS_PROXY || + process.env.https_proxy || + process.env.HTTP_PROXY || + process.env.http_proxy || null + } + + // if none of that works, return null + // (What uri protocol are you using then?) + + return null +} + +module.exports = getProxyFromURI diff --git a/node_modules/request/lib/har.js b/node_modules/request/lib/har.js new file mode 100644 index 0000000..2f66030 --- /dev/null +++ b/node_modules/request/lib/har.js @@ -0,0 +1,205 @@ +'use strict' + +var fs = require('fs') +var qs = require('querystring') +var validate = require('har-validator') +var extend = require('extend') + +function Har (request) { + this.request = request +} + +Har.prototype.reducer = function (obj, pair) { + // new property ? + if (obj[pair.name] === undefined) { + obj[pair.name] = pair.value + return obj + } + + // existing? convert to array + var arr = [ + obj[pair.name], + pair.value + ] + + obj[pair.name] = arr + + return obj +} + +Har.prototype.prep = function (data) { + // construct utility properties + data.queryObj = {} + data.headersObj = {} + data.postData.jsonObj = false + data.postData.paramsObj = false + + // construct query objects + if (data.queryString && data.queryString.length) { + data.queryObj = data.queryString.reduce(this.reducer, {}) + } + + // construct headers objects + if (data.headers && data.headers.length) { + // loweCase header keys + data.headersObj = data.headers.reduceRight(function (headers, header) { + headers[header.name] = header.value + return headers + }, {}) + } + + // construct Cookie header + if (data.cookies && data.cookies.length) { + var cookies = data.cookies.map(function (cookie) { + return cookie.name + '=' + cookie.value + }) + + if (cookies.length) { + data.headersObj.cookie = cookies.join('; ') + } + } + + // prep body + function some (arr) { + return arr.some(function (type) { + return data.postData.mimeType.indexOf(type) === 0 + }) + } + + if (some([ + 'multipart/mixed', + 'multipart/related', + 'multipart/form-data', + 'multipart/alternative'])) { + // reset values + data.postData.mimeType = 'multipart/form-data' + } else if (some([ + 'application/x-www-form-urlencoded'])) { + if (!data.postData.params) { + data.postData.text = '' + } else { + data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) + + // always overwrite + data.postData.text = qs.stringify(data.postData.paramsObj) + } + } else if (some([ + 'text/json', + 'text/x-json', + 'application/json', + 'application/x-json'])) { + data.postData.mimeType = 'application/json' + + if (data.postData.text) { + try { + data.postData.jsonObj = JSON.parse(data.postData.text) + } catch (e) { + this.request.debug(e) + + // force back to text/plain + data.postData.mimeType = 'text/plain' + } + } + } + + return data +} + +Har.prototype.options = function (options) { + // skip if no har property defined + if (!options.har) { + return options + } + + var har = {} + extend(har, options.har) + + // only process the first entry + if (har.log && har.log.entries) { + har = har.log.entries[0] + } + + // add optional properties to make validation successful + har.url = har.url || options.url || options.uri || options.baseUrl || '/' + har.httpVersion = har.httpVersion || 'HTTP/1.1' + har.queryString = har.queryString || [] + har.headers = har.headers || [] + har.cookies = har.cookies || [] + har.postData = har.postData || {} + har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' + + har.bodySize = 0 + har.headersSize = 0 + har.postData.size = 0 + + if (!validate.request(har)) { + return options + } + + // clean up and get some utility properties + var req = this.prep(har) + + // construct new options + if (req.url) { + options.url = req.url + } + + if (req.method) { + options.method = req.method + } + + if (Object.keys(req.queryObj).length) { + options.qs = req.queryObj + } + + if (Object.keys(req.headersObj).length) { + options.headers = req.headersObj + } + + function test (type) { + return req.postData.mimeType.indexOf(type) === 0 + } + if (test('application/x-www-form-urlencoded')) { + options.form = req.postData.paramsObj + } else if (test('application/json')) { + if (req.postData.jsonObj) { + options.body = req.postData.jsonObj + options.json = true + } + } else if (test('multipart/form-data')) { + options.formData = {} + + req.postData.params.forEach(function (param) { + var attachment = {} + + if (!param.fileName && !param.fileName && !param.contentType) { + options.formData[param.name] = param.value + return + } + + // attempt to read from disk! + if (param.fileName && !param.value) { + attachment.value = fs.createReadStream(param.fileName) + } else if (param.value) { + attachment.value = param.value + } + + if (param.fileName) { + attachment.options = { + filename: param.fileName, + contentType: param.contentType ? param.contentType : null + } + } + + options.formData[param.name] = attachment + }) + } else { + if (req.postData.text) { + options.body = req.postData.text + } + } + + return options +} + +exports.Har = Har diff --git a/node_modules/request/lib/hawk.js b/node_modules/request/lib/hawk.js new file mode 100644 index 0000000..de48a98 --- /dev/null +++ b/node_modules/request/lib/hawk.js @@ -0,0 +1,89 @@ +'use strict' + +var crypto = require('crypto') + +function randomString (size) { + var bits = (size + 1) * 6 + var buffer = crypto.randomBytes(Math.ceil(bits / 8)) + var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '') + return string.slice(0, size) +} + +function calculatePayloadHash (payload, algorithm, contentType) { + var hash = crypto.createHash(algorithm) + hash.update('hawk.1.payload\n') + hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\n') + hash.update(payload || '') + hash.update('\n') + return hash.digest('base64') +} + +exports.calculateMac = function (credentials, opts) { + var normalized = 'hawk.1.header\n' + + opts.ts + '\n' + + opts.nonce + '\n' + + (opts.method || '').toUpperCase() + '\n' + + opts.resource + '\n' + + opts.host.toLowerCase() + '\n' + + opts.port + '\n' + + (opts.hash || '') + '\n' + + if (opts.ext) { + normalized = normalized + opts.ext.replace('\\', '\\\\').replace('\n', '\\n') + } + + normalized = normalized + '\n' + + if (opts.app) { + normalized = normalized + opts.app + '\n' + (opts.dlg || '') + '\n' + } + + var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized) + var digest = hmac.digest('base64') + return digest +} + +exports.header = function (uri, method, opts) { + var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000) + var credentials = opts.credentials + if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) { + return '' + } + + if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) { + return '' + } + + var artifacts = { + ts: timestamp, + nonce: opts.nonce || randomString(6), + method: method, + resource: uri.pathname + (uri.search || ''), + host: uri.hostname, + port: uri.port || (uri.protocol === 'http:' ? 80 : 443), + hash: opts.hash, + ext: opts.ext, + app: opts.app, + dlg: opts.dlg + } + + if (!artifacts.hash && (opts.payload || opts.payload === '')) { + artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType) + } + + var mac = exports.calculateMac(credentials, artifacts) + + var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== '' + var header = 'Hawk id="' + credentials.id + + '", ts="' + artifacts.ts + + '", nonce="' + artifacts.nonce + + (artifacts.hash ? '", hash="' + artifacts.hash : '') + + (hasExt ? '", ext="' + artifacts.ext.replace(/\\/g, '\\\\').replace(/"/g, '\\"') : '') + + '", mac="' + mac + '"' + + if (artifacts.app) { + header = header + ', app="' + artifacts.app + (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"' + } + + return header +} diff --git a/node_modules/request/lib/helpers.js b/node_modules/request/lib/helpers.js new file mode 100644 index 0000000..8b2a7e6 --- /dev/null +++ b/node_modules/request/lib/helpers.js @@ -0,0 +1,66 @@ +'use strict' + +var jsonSafeStringify = require('json-stringify-safe') +var crypto = require('crypto') +var Buffer = require('safe-buffer').Buffer + +var defer = typeof setImmediate === 'undefined' + ? process.nextTick + : setImmediate + +function paramsHaveRequestBody (params) { + return ( + params.body || + params.requestBodyStream || + (params.json && typeof params.json !== 'boolean') || + params.multipart + ) +} + +function safeStringify (obj, replacer) { + var ret + try { + ret = JSON.stringify(obj, replacer) + } catch (e) { + ret = jsonSafeStringify(obj, replacer) + } + return ret +} + +function md5 (str) { + return crypto.createHash('md5').update(str).digest('hex') +} + +function isReadStream (rs) { + return rs.readable && rs.path && rs.mode +} + +function toBase64 (str) { + return Buffer.from(str || '', 'utf8').toString('base64') +} + +function copy (obj) { + var o = {} + Object.keys(obj).forEach(function (i) { + o[i] = obj[i] + }) + return o +} + +function version () { + var numbers = process.version.replace('v', '').split('.') + return { + major: parseInt(numbers[0], 10), + minor: parseInt(numbers[1], 10), + patch: parseInt(numbers[2], 10) + } +} + +exports.paramsHaveRequestBody = paramsHaveRequestBody +exports.safeStringify = safeStringify +exports.md5 = md5 +exports.isReadStream = isReadStream +exports.toBase64 = toBase64 +exports.copy = copy +exports.version = version +exports.defer = defer diff --git a/node_modules/request/lib/multipart.js b/node_modules/request/lib/multipart.js new file mode 100644 index 0000000..6a009bc --- /dev/null +++ b/node_modules/request/lib/multipart.js @@ -0,0 +1,112 @@ +'use strict' + +var uuid = require('uuid/v4') +var CombinedStream = require('combined-stream') +var isstream = require('isstream') +var Buffer = require('safe-buffer').Buffer + +function Multipart (request) { + this.request = request + this.boundary = uuid() + this.chunked = false + this.body = null +} + +Multipart.prototype.isChunked = function (options) { + var self = this + var chunked = false + var parts = options.data || options + + if (!parts.forEach) { + self.request.emit('error', new Error('Argument error, options.multipart.')) + } + + if (options.chunked !== undefined) { + chunked = options.chunked + } + + if (self.request.getHeader('transfer-encoding') === 'chunked') { + chunked = true + } + + if (!chunked) { + parts.forEach(function (part) { + if (typeof part.body === 'undefined') { + self.request.emit('error', new Error('Body attribute missing in multipart.')) + } + if (isstream(part.body)) { + chunked = true + } + }) + } + + return chunked +} + +Multipart.prototype.setHeaders = function (chunked) { + var self = this + + if (chunked && !self.request.hasHeader('transfer-encoding')) { + self.request.setHeader('transfer-encoding', 'chunked') + } + + var header = self.request.getHeader('content-type') + + if (!header || header.indexOf('multipart') === -1) { + self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) + } else { + if (header.indexOf('boundary') !== -1) { + self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') + } else { + self.request.setHeader('content-type', header + '; boundary=' + self.boundary) + } + } +} + +Multipart.prototype.build = function (parts, chunked) { + var self = this + var body = chunked ? new CombinedStream() : [] + + function add (part) { + if (typeof part === 'number') { + part = part.toString() + } + return chunked ? body.append(part) : body.push(Buffer.from(part)) + } + + if (self.request.preambleCRLF) { + add('\r\n') + } + + parts.forEach(function (part) { + var preamble = '--' + self.boundary + '\r\n' + Object.keys(part).forEach(function (key) { + if (key === 'body') { return } + preamble += key + ': ' + part[key] + '\r\n' + }) + preamble += '\r\n' + add(preamble) + add(part.body) + add('\r\n') + }) + add('--' + self.boundary + '--') + + if (self.request.postambleCRLF) { + add('\r\n') + } + + return body +} + +Multipart.prototype.onRequest = function (options) { + var self = this + + var chunked = self.isChunked(options) + var parts = options.data || options + + self.setHeaders(chunked) + self.chunked = chunked + self.body = self.build(parts, chunked) +} + +exports.Multipart = Multipart diff --git a/node_modules/request/lib/oauth.js b/node_modules/request/lib/oauth.js new file mode 100644 index 0000000..96de72b --- /dev/null +++ b/node_modules/request/lib/oauth.js @@ -0,0 +1,148 @@ +'use strict' + +var url = require('url') +var qs = require('qs') +var caseless = require('caseless') +var uuid = require('uuid/v4') +var oauth = require('oauth-sign') +var crypto = require('crypto') +var Buffer = require('safe-buffer').Buffer + +function OAuth (request) { + this.request = request + this.params = null +} + +OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { + var oa = {} + for (var i in _oauth) { + oa['oauth_' + i] = _oauth[i] + } + if (!oa.oauth_version) { + oa.oauth_version = '1.0' + } + if (!oa.oauth_timestamp) { + oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString() + } + if (!oa.oauth_nonce) { + oa.oauth_nonce = uuid().replace(/-/g, '') + } + if (!oa.oauth_signature_method) { + oa.oauth_signature_method = 'HMAC-SHA1' + } + + var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase + delete oa.oauth_consumer_secret + delete oa.oauth_private_key + + var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase + delete oa.oauth_token_secret + + var realm = oa.oauth_realm + delete oa.oauth_realm + delete oa.oauth_transport_method + + var baseurl = uri.protocol + '//' + uri.host + uri.pathname + var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) + + oa.oauth_signature = oauth.sign( + oa.oauth_signature_method, + method, + baseurl, + params, + consumer_secret_or_private_key, // eslint-disable-line camelcase + token_secret // eslint-disable-line camelcase + ) + + if (realm) { + oa.realm = realm + } + + return oa +} + +OAuth.prototype.buildBodyHash = function (_oauth, body) { + if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) { + this.request.emit('error', new Error('oauth: ' + _oauth.signature_method + + ' signature_method not supported with body_hash signing.')) + } + + var shasum = crypto.createHash('sha1') + shasum.update(body || '') + var sha1 = shasum.digest('hex') + + return Buffer.from(sha1, 'hex').toString('base64') +} + +OAuth.prototype.concatParams = function (oa, sep, wrap) { + wrap = wrap || '' + + var params = Object.keys(oa).filter(function (i) { + return i !== 'realm' && i !== 'oauth_signature' + }).sort() + + if (oa.realm) { + params.splice(0, 0, 'realm') + } + params.push('oauth_signature') + + return params.map(function (i) { + return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap + }).join(sep) +} + +OAuth.prototype.onRequest = function (_oauth) { + var self = this + self.params = _oauth + + var uri = self.request.uri || {} + var method = self.request.method || '' + var headers = caseless(self.request.headers) + var body = self.request.body || '' + var qsLib = self.request.qsLib || qs + + var form + var query + var contentType = headers.get('content-type') || '' + var formContentType = 'application/x-www-form-urlencoded' + var transport = _oauth.transport_method || 'header' + + if (contentType.slice(0, formContentType.length) === formContentType) { + contentType = formContentType + form = body + } + if (uri.query) { + query = uri.query + } + if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { + self.request.emit('error', new Error('oauth: transport_method of body requires POST ' + + 'and content-type ' + formContentType)) + } + + if (!form && typeof _oauth.body_hash === 'boolean') { + _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString()) + } + + var oa = self.buildParams(_oauth, uri, method, query, form, qsLib) + + switch (transport) { + case 'header': + self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"')) + break + + case 'query': + var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&') + self.request.uri = url.parse(href) + self.request.path = self.request.uri.path + break + + case 'body': + self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&') + break + + default: + self.request.emit('error', new Error('oauth: transport_method invalid')) + } +} + +exports.OAuth = OAuth diff --git a/node_modules/request/lib/querystring.js b/node_modules/request/lib/querystring.js new file mode 100644 index 0000000..4a32cd1 --- /dev/null +++ b/node_modules/request/lib/querystring.js @@ -0,0 +1,50 @@ +'use strict' + +var qs = require('qs') +var querystring = require('querystring') + +function Querystring (request) { + this.request = request + this.lib = null + this.useQuerystring = null + this.parseOptions = null + this.stringifyOptions = null +} + +Querystring.prototype.init = function (options) { + if (this.lib) { return } + + this.useQuerystring = options.useQuerystring + this.lib = (this.useQuerystring ? querystring : qs) + + this.parseOptions = options.qsParseOptions || {} + this.stringifyOptions = options.qsStringifyOptions || {} +} + +Querystring.prototype.stringify = function (obj) { + return (this.useQuerystring) + ? this.rfc3986(this.lib.stringify(obj, + this.stringifyOptions.sep || null, + this.stringifyOptions.eq || null, + this.stringifyOptions)) + : this.lib.stringify(obj, this.stringifyOptions) +} + +Querystring.prototype.parse = function (str) { + return (this.useQuerystring) + ? this.lib.parse(str, + this.parseOptions.sep || null, + this.parseOptions.eq || null, + this.parseOptions) + : this.lib.parse(str, this.parseOptions) +} + +Querystring.prototype.rfc3986 = function (str) { + return str.replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +Querystring.prototype.unescape = querystring.unescape + +exports.Querystring = Querystring diff --git a/node_modules/request/lib/redirect.js b/node_modules/request/lib/redirect.js new file mode 100644 index 0000000..b9150e7 --- /dev/null +++ b/node_modules/request/lib/redirect.js @@ -0,0 +1,154 @@ +'use strict' + +var url = require('url') +var isUrl = /^https?:/ + +function Redirect (request) { + this.request = request + this.followRedirect = true + this.followRedirects = true + this.followAllRedirects = false + this.followOriginalHttpMethod = false + this.allowRedirect = function () { return true } + this.maxRedirects = 10 + this.redirects = [] + this.redirectsFollowed = 0 + this.removeRefererHeader = false +} + +Redirect.prototype.onRequest = function (options) { + var self = this + + if (options.maxRedirects !== undefined) { + self.maxRedirects = options.maxRedirects + } + if (typeof options.followRedirect === 'function') { + self.allowRedirect = options.followRedirect + } + if (options.followRedirect !== undefined) { + self.followRedirects = !!options.followRedirect + } + if (options.followAllRedirects !== undefined) { + self.followAllRedirects = options.followAllRedirects + } + if (self.followRedirects || self.followAllRedirects) { + self.redirects = self.redirects || [] + } + if (options.removeRefererHeader !== undefined) { + self.removeRefererHeader = options.removeRefererHeader + } + if (options.followOriginalHttpMethod !== undefined) { + self.followOriginalHttpMethod = options.followOriginalHttpMethod + } +} + +Redirect.prototype.redirectTo = function (response) { + var self = this + var request = self.request + + var redirectTo = null + if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { + var location = response.caseless.get('location') + request.debug('redirect', location) + + if (self.followAllRedirects) { + redirectTo = location + } else if (self.followRedirects) { + switch (request.method) { + case 'PATCH': + case 'PUT': + case 'POST': + case 'DELETE': + // Do not follow redirects + break + default: + redirectTo = location + break + } + } + } else if (response.statusCode === 401) { + var authHeader = request._auth.onResponse(response) + if (authHeader) { + request.setHeader('authorization', authHeader) + redirectTo = request.uri + } + } + return redirectTo +} + +Redirect.prototype.onResponse = function (response) { + var self = this + var request = self.request + + var redirectTo = self.redirectTo(response) + if (!redirectTo || !self.allowRedirect.call(request, response)) { + return false + } + + request.debug('redirect to', redirectTo) + + // ignore any potential response body. it cannot possibly be useful + // to us at this point. + // response.resume should be defined, but check anyway before calling. Workaround for browserify. + if (response.resume) { + response.resume() + } + + if (self.redirectsFollowed >= self.maxRedirects) { + request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) + return false + } + self.redirectsFollowed += 1 + + if (!isUrl.test(redirectTo)) { + redirectTo = url.resolve(request.uri.href, redirectTo) + } + + var uriPrev = request.uri + request.uri = url.parse(redirectTo) + + // handle the case where we change protocol from https to http or vice versa + if (request.uri.protocol !== uriPrev.protocol) { + delete request.agent + } + + self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo }) + + if (self.followAllRedirects && request.method !== 'HEAD' && + response.statusCode !== 401 && response.statusCode !== 307) { + request.method = self.followOriginalHttpMethod ? request.method : 'GET' + } + // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 + delete request.src + delete request.req + delete request._started + if (response.statusCode !== 401 && response.statusCode !== 307) { + // Remove parameters from the previous response, unless this is the second request + // for a server that requires digest authentication. + delete request.body + delete request._form + if (request.headers) { + request.removeHeader('host') + request.removeHeader('content-type') + request.removeHeader('content-length') + if (request.uri.hostname !== request.originalHost.split(':')[0]) { + // Remove authorization if changing hostnames (but not if just + // changing ports or protocols). This matches the behavior of curl: + // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 + request.removeHeader('authorization') + } + } + } + + if (!self.removeRefererHeader) { + request.setHeader('referer', uriPrev.href) + } + + request.emit('redirect') + + request.init() + + return true +} + +exports.Redirect = Redirect diff --git a/node_modules/request/lib/tunnel.js b/node_modules/request/lib/tunnel.js new file mode 100644 index 0000000..4479003 --- /dev/null +++ b/node_modules/request/lib/tunnel.js @@ -0,0 +1,175 @@ +'use strict' + +var url = require('url') +var tunnel = require('tunnel-agent') + +var defaultProxyHeaderWhiteList = [ + 'accept', + 'accept-charset', + 'accept-encoding', + 'accept-language', + 'accept-ranges', + 'cache-control', + 'content-encoding', + 'content-language', + 'content-location', + 'content-md5', + 'content-range', + 'content-type', + 'connection', + 'date', + 'expect', + 'max-forwards', + 'pragma', + 'referer', + 'te', + 'user-agent', + 'via' +] + +var defaultProxyHeaderExclusiveList = [ + 'proxy-authorization' +] + +function constructProxyHost (uriObject) { + var port = uriObject.port + var protocol = uriObject.protocol + var proxyHost = uriObject.hostname + ':' + + if (port) { + proxyHost += port + } else if (protocol === 'https:') { + proxyHost += '443' + } else { + proxyHost += '80' + } + + return proxyHost +} + +function constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) { + var whiteList = proxyHeaderWhiteList + .reduce(function (set, header) { + set[header.toLowerCase()] = true + return set + }, {}) + + return Object.keys(headers) + .filter(function (header) { + return whiteList[header.toLowerCase()] + }) + .reduce(function (set, header) { + set[header] = headers[header] + return set + }, {}) +} + +function constructTunnelOptions (request, proxyHeaders) { + var proxy = request.proxy + + var tunnelOptions = { + proxy: { + host: proxy.hostname, + port: +proxy.port, + proxyAuth: proxy.auth, + headers: proxyHeaders + }, + headers: request.headers, + ca: request.ca, + cert: request.cert, + key: request.key, + passphrase: request.passphrase, + pfx: request.pfx, + ciphers: request.ciphers, + rejectUnauthorized: request.rejectUnauthorized, + secureOptions: request.secureOptions, + secureProtocol: request.secureProtocol + } + + return tunnelOptions +} + +function constructTunnelFnName (uri, proxy) { + var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http') + var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http') + return [uriProtocol, proxyProtocol].join('Over') +} + +function getTunnelFn (request) { + var uri = request.uri + var proxy = request.proxy + var tunnelFnName = constructTunnelFnName(uri, proxy) + return tunnel[tunnelFnName] +} + +function Tunnel (request) { + this.request = request + this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList + this.proxyHeaderExclusiveList = [] + if (typeof request.tunnel !== 'undefined') { + this.tunnelOverride = request.tunnel + } +} + +Tunnel.prototype.isEnabled = function () { + var self = this + var request = self.request + // Tunnel HTTPS by default. Allow the user to override this setting. + + // If self.tunnelOverride is set (the user specified a value), use it. + if (typeof self.tunnelOverride !== 'undefined') { + return self.tunnelOverride + } + + // If the destination is HTTPS, tunnel. + if (request.uri.protocol === 'https:') { + return true + } + + // Otherwise, do not use tunnel. + return false +} + +Tunnel.prototype.setup = function (options) { + var self = this + var request = self.request + + options = options || {} + + if (typeof request.proxy === 'string') { + request.proxy = url.parse(request.proxy) + } + + if (!request.proxy || !request.tunnel) { + return false + } + + // Setup Proxy Header Exclusive List and White List + if (options.proxyHeaderWhiteList) { + self.proxyHeaderWhiteList = options.proxyHeaderWhiteList + } + if (options.proxyHeaderExclusiveList) { + self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList + } + + var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList) + var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList) + + // Setup Proxy Headers and Proxy Headers Host + // Only send the Proxy White Listed Header names + var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList) + proxyHeaders.host = constructProxyHost(request.uri) + + proxyHeaderExclusiveList.forEach(request.removeHeader, request) + + // Set Agent from Tunnel Data + var tunnelFn = getTunnelFn(request) + var tunnelOptions = constructTunnelOptions(request, proxyHeaders) + request.agent = tunnelFn(tunnelOptions) + + return true +} + +Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList +Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList +exports.Tunnel = Tunnel diff --git a/node_modules/request/node_modules/qs/.editorconfig b/node_modules/request/node_modules/qs/.editorconfig new file mode 100644 index 0000000..b2654e7 --- /dev/null +++ b/node_modules/request/node_modules/qs/.editorconfig @@ -0,0 +1,30 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 140 + +[test/*] +max_line_length = off + +[*.md] +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[LICENSE] +indent_size = 2 +max_line_length = off diff --git a/node_modules/request/node_modules/qs/.eslintignore b/node_modules/request/node_modules/qs/.eslintignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/node_modules/request/node_modules/qs/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/node_modules/request/node_modules/qs/.eslintrc b/node_modules/request/node_modules/qs/.eslintrc new file mode 100644 index 0000000..b7a87b9 --- /dev/null +++ b/node_modules/request/node_modules/qs/.eslintrc @@ -0,0 +1,19 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "consistent-return": 1, + "func-name-matching": 0, + "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], + "indent": [2, 4], + "max-params": [2, 12], + "max-statements": [2, 45], + "no-continue": 1, + "no-magic-numbers": 0, + "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], + "operator-linebreak": [2, "before"], + } +} diff --git a/node_modules/request/node_modules/qs/CHANGELOG.md b/node_modules/request/node_modules/qs/CHANGELOG.md new file mode 100644 index 0000000..fe52320 --- /dev/null +++ b/node_modules/request/node_modules/qs/CHANGELOG.md @@ -0,0 +1,226 @@ +## **6.5.2** +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) +- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` + +## **6.5.1** +- [Fix] Fix parsing & compacting very deep objects (#224) +- [Refactor] name utils functions +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node +- [Tests] Use precise dist for Node.js 0.6 runtime (#225) +- [Tests] make 0.6 required, now that it’s passing +- [Tests] on `node` `v8.2`; fix npm on node 0.6 + +## **6.5.0** +- [New] add `utils.assign` +- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) +- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) +- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) +- [Fix] do not mutate `options` argument (#207) +- [Refactor] `parse`: cache index to reuse in else statement (#182) +- [Docs] add various badges to readme (#208) +- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` +- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 +- [Tests] add `editorconfig-tools` + +## **6.4.0** +- [New] `qs.stringify`: add `encodeValuesOnly` option +- [Fix] follow `allowPrototypes` option during merge (#201, #201) +- [Fix] support keys starting with brackets (#202, #200) +- [Fix] chmod a-x +- [Dev Deps] update `eslint` +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds +- [eslint] reduce warnings + +## **6.3.2** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Dev Deps] update `eslint` +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.3.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` +- [Tests] on all node minors; improve test matrix +- [Docs] document stringify option `allowDots` (#195) +- [Docs] add empty object and array values example (#195) +- [Docs] Fix minor inconsistency/typo (#192) +- [Docs] document stringify option `sort` (#191) +- [Refactor] `stringify`: throw faster with an invalid encoder +- [Refactor] remove unnecessary escapes (#184) +- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) + +## **6.3.0** +- [New] Add support for RFC 1738 (#174, #173) +- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) +- [Fix] ensure `utils.merge` handles merging two arrays +- [Refactor] only constructors should be capitalized +- [Refactor] capitalized var names are for constructors only +- [Refactor] avoid using a sparse array +- [Robustness] `formats`: cache `String#replace` +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` +- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix +- [Tests] flesh out arrayLimit/arrayFormat tests (#107) +- [Tests] skip Object.create tests when null objects are not available +- [Tests] Turn on eslint for test files (#175) + +## **6.2.3** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.2.2** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## **6.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values +- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` +- [Tests] remove `parallelshell` since it does not reliably report failures +- [Tests] up to `node` `v6.3`, `v5.12` +- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` + +## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) +- [New] pass Buffers to the encoder/decoder directly (#161) +- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) +- [Fix] fix compacting of nested sparse arrays (#150) + +## **6.1.2 +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.1.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) +- [New] allowDots option for `stringify` (#151) +- [Fix] "sort" option should work at a depth of 3 or more (#151) +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## **6.0.4** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.0.3** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) +- Revert ES6 requirement and restore support for node down to v0.8. + +## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) +- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json + +## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) +- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 + +## **5.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values + +## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) +- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string + +## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) +- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional +- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify + +## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) +- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false +- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm + +## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) +- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional + +## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) +- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" + +## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) +- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties +- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost +- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing +- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object +- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option +- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. +- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 +- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 +- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign +- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute + +## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) +- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function + +## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) +- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option + +## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) +- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/request/node_modules/qs/LICENSE b/node_modules/request/node_modules/qs/LICENSE new file mode 100644 index 0000000..d456948 --- /dev/null +++ b/node_modules/request/node_modules/qs/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2014 Nathan LaFreniere and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/request/node_modules/qs/README.md b/node_modules/request/node_modules/qs/README.md new file mode 100644 index 0000000..d811966 --- /dev/null +++ b/node_modules/request/node_modules/qs/README.md @@ -0,0 +1,475 @@ +# qs [![Version Badge][2]][1] + +[![Build Status][3]][4] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +A querystring parsing and stringifying library with some added security. + +Lead Maintainer: [Jordan Harband](https://github.com/ljharb) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var qs = require('qs'); +var assert = require('assert'); + +var obj = qs.parse('a=c'); +assert.deepEqual(obj, { a: 'c' }); + +var str = qs.stringify(obj); +assert.equal(str, 'a=c'); +``` + +### Parsing Objects + +[](#preventEval) +```javascript +qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +assert.deepEqual(qs.parse('foo[bar]=baz'), { + foo: { + bar: 'baz' + } +}); +``` + +When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: + +```javascript +var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); +assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); +``` + +By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. + +```javascript +var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); +assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); +``` + +URI encoded strings work too: + +```javascript +assert.deepEqual(qs.parse('a%5Bb%5D=c'), { + a: { b: 'c' } +}); +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { + foo: { + bar: { + baz: 'foobarbaz' + } + } +}); +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +var expected = { + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +}; +var string = 'a[b][c][d][e][f][g][h][i]=j'; +assert.deepEqual(qs.parse(string), expected); +``` + +This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: + +```javascript +var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); +assert.deepEqual(limited, { a: 'b' }); +``` + +To bypass the leading question mark, use `ignoreQueryPrefix`: + +```javascript +var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); +assert.deepEqual(prefixed, { a: 'b', c: 'd' }); +``` + +An optional delimiter can also be passed: + +```javascript +var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); +assert.deepEqual(delimited, { a: 'b', c: 'd' }); +``` + +Delimiters can be a regular expression too: + +```javascript +var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); +``` + +Option `allowDots` can be used to enable dot notation: + +```javascript +var withDots = qs.parse('a.b=c', { allowDots: true }); +assert.deepEqual(withDots, { a: { b: 'c' } }); +``` + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +var withArray = qs.parse('a[]=b&a[]=c'); +assert.deepEqual(withArray, { a: ['b', 'c'] }); +``` + +You may specify an index as well: + +```javascript +var withIndexes = qs.parse('a[1]=c&a[0]=b'); +assert.deepEqual(withIndexes, { a: ['b', 'c'] }); +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +var noSparse = qs.parse('a[1]=b&a[15]=c'); +assert.deepEqual(noSparse, { a: ['b', 'c'] }); +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +var withEmptyString = qs.parse('a[]=&a[]=b'); +assert.deepEqual(withEmptyString, { a: ['', 'b'] }); + +var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); +assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key: + +```javascript +var withMaxIndex = qs.parse('a[100]=b'); +assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); +assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); +``` + +To disable array parsing entirely, set `parseArrays` to `false`. + +```javascript +var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); +assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); +``` + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +var mixedNotation = qs.parse('a[0]=b&a[b]=c'); +assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); +``` + +You can also create arrays of objects: + +```javascript +var arraysOfObjects = qs.parse('a[][b]=c'); +assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); +``` + +### Stringifying + +[](#preventEval) +```javascript +qs.stringify(object, [options]); +``` + +When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: + +```javascript +assert.equal(qs.stringify({ a: 'b' }), 'a=b'); +assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); +``` + +This encoding can be disabled by setting the `encode` option to `false`: + +```javascript +var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); +assert.equal(unencoded, 'a[b]=c'); +``` + +Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: +```javascript +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +); +assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); +``` + +This encoding can also be replaced by a custom encoding method set as `encoder` option: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { + // Passed in values `a`, `b`, `c` + return // Return encoded string +}}) +``` + +_(Note: the `encoder` option does not apply if `encode` is `false`)_ + +Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str) { + // Passed in values `x`, `z` + return // Return decoded string +}}) +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +You may use the `arrayFormat` option to specify the format of the output array: + +```javascript +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) +// 'a[0]=b&a[1]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) +// 'a[]=b&a[]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) +// 'a=b&a=c' +``` + +When objects are stringified, by default they use bracket notation: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); +// 'a[b][c]=d&a[b][e]=f' +``` + +You may override this to use dot notation by setting the `allowDots` option to `true`: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); +// 'a.b.c=d&a.b.e=f' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +assert.equal(qs.stringify({ a: '' }), 'a='); +``` + +Key with no values (such as an empty object or array) will return nothing: + +```javascript +assert.equal(qs.stringify({ a: [] }), ''); +assert.equal(qs.stringify({ a: {} }), ''); +assert.equal(qs.stringify({ a: [{}] }), ''); +assert.equal(qs.stringify({ a: { b: []} }), ''); +assert.equal(qs.stringify({ a: { b: {}} }), ''); +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); +``` + +The query string may optionally be prepended with a question mark: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); +``` + +The delimiter may be overridden with stringify as well: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); +``` + +If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: + +```javascript +var date = new Date(7); +assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); +assert.equal( + qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), + 'a=7' +); +``` + +You may use the `sort` option to affect the order of parameter keys: + +```javascript +function alphabeticalSort(a, b) { + return a.localeCompare(b); +} +assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); +``` + +Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. +If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you +pass an array, it will be used to select properties and array indices for stringification: + +```javascript +function filterFunc(prefix, value) { + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; +} +qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); +// 'a=b&c=d&e[f]=123&e[g][0]=4' +qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); +// 'a=b&e=f' +qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); +// 'a[0]=b&a[2]=d' +``` + +### Handling of `null` values + +By default, `null` values are treated like empty strings: + +```javascript +var withNull = qs.stringify({ a: null, b: '' }); +assert.equal(withNull, 'a=&b='); +``` + +Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. + +```javascript +var equalsInsensitive = qs.parse('a&b='); +assert.deepEqual(equalsInsensitive, { a: '', b: '' }); +``` + +To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` +values have no `=` sign: + +```javascript +var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); +assert.equal(strictNull, 'a&b='); +``` + +To parse values without `=` back to `null` use the `strictNullHandling` flag: + +```javascript +var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); +assert.deepEqual(parsedStrictNull, { a: null, b: '' }); +``` + +To completely skip rendering keys with `null` values, use the `skipNulls` flag: + +```javascript +var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); +assert.equal(nullsSkipped, 'a=b'); +``` + +### Dealing with special character sets + +By default the encoding and decoding of characters is done in `utf-8`. If you +wish to encode querystrings to a different character set (i.e. +[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the +[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: + +```javascript +var encoder = require('qs-iconv/encoder')('shift_jis'); +var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); +assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); +``` + +This also works for decoding of query strings: + +```javascript +var decoder = require('qs-iconv/decoder')('shift_jis'); +var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); +assert.deepEqual(obj, { a: 'こんにちは!' }); +``` + +### RFC 3986 and RFC 1738 space encoding + +RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. +In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. + +``` +assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); +``` + +[1]: https://npmjs.org/package/qs +[2]: http://versionbadg.es/ljharb/qs.svg +[3]: https://api.travis-ci.org/ljharb/qs.svg +[4]: https://travis-ci.org/ljharb/qs +[5]: https://david-dm.org/ljharb/qs.svg +[6]: https://david-dm.org/ljharb/qs +[7]: https://david-dm.org/ljharb/qs/dev-status.svg +[8]: https://david-dm.org/ljharb/qs?type=dev +[9]: https://ci.testling.com/ljharb/qs.png +[10]: https://ci.testling.com/ljharb/qs +[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: http://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/qs.svg +[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/node_modules/request/node_modules/qs/dist/qs.js b/node_modules/request/node_modules/qs/dist/qs.js new file mode 100644 index 0000000..ecf7ba4 --- /dev/null +++ b/node_modules/request/node_modules/qs/dist/qs.js @@ -0,0 +1,638 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]') { + obj = []; + obj = obj.concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys + // that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +module.exports = function (str, opts) { + var options = opts ? utils.assign({}, opts) : {}; + + if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + options.ignoreQueryPrefix = options.ignoreQueryPrefix === true; + options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; + options.parseArrays = options.parseArrays !== false; + options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; + options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; + options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; + options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; + options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + +},{"./utils":5}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { // eslint-disable-line func-name-matching + return prefix + '[]'; + }, + indices: function indices(prefix, key) { // eslint-disable-line func-name-matching + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { // eslint-disable-line func-name-matching + return prefix; + } +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( // eslint-disable-line func-name-matching + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (Array.isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (Array.isArray(obj)) { + values = values.concat(stringify( + obj[key], + generateArrayPrefix(prefix, key), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } else { + values = values.concat(stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + } + + return values; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = opts ? utils.assign({}, opts) : {}; + + if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; + var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; + var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; + var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; + var sort = typeof options.sort === 'function' ? options.sort : null; + var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; + var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; + var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; + if (typeof options.format === 'undefined') { + options.format = formats['default']; + } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { + throw new TypeError('Unknown format option provided.'); + } + var formatter = formats.formatters[options.format]; + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (Array.isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (options.arrayFormat in arrayPrefixGenerators) { + arrayFormat = options.arrayFormat; + } else if ('indices' in options) { + arrayFormat = options.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (sort) { + objKeys.sort(sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + keys = keys.concat(stringify( + obj[key], + key, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encode ? encoder : null, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + + var joined = keys.join(delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + var obj; + + while (queue.length) { + var item = queue.pop(); + obj = item.obj[item.prop]; + + if (Array.isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } + + return obj; +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } else if (typeof target === 'object') { + if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (Array.isArray(target) && !Array.isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (Array.isArray(target) && Array.isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + if (target[i] && typeof target[i] === 'object') { + target[i] = merge(target[i], item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + +var encode = function encode(str) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + return compactQueue(queue); +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (obj === null || typeof obj === 'undefined') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; + +},{}]},{},[2])(2) +}); diff --git a/node_modules/request/node_modules/qs/lib/formats.js b/node_modules/request/node_modules/qs/lib/formats.js new file mode 100644 index 0000000..df45997 --- /dev/null +++ b/node_modules/request/node_modules/qs/lib/formats.js @@ -0,0 +1,18 @@ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +module.exports = { + 'default': 'RFC3986', + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return value; + } + }, + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; diff --git a/node_modules/request/node_modules/qs/lib/index.js b/node_modules/request/node_modules/qs/lib/index.js new file mode 100644 index 0000000..0d6a97d --- /dev/null +++ b/node_modules/request/node_modules/qs/lib/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; diff --git a/node_modules/request/node_modules/qs/lib/parse.js b/node_modules/request/node_modules/qs/lib/parse.js new file mode 100644 index 0000000..8c9872e --- /dev/null +++ b/node_modules/request/node_modules/qs/lib/parse.js @@ -0,0 +1,174 @@ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + decoder: utils.decode, + delimiter: '&', + depth: 5, + parameterLimit: 1000, + plainObjects: false, + strictNullHandling: false +}; + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + + for (var i = 0; i < parts.length; ++i) { + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder); + val = options.decoder(part.slice(pos + 1), defaults.decoder); + } + if (has.call(obj, key)) { + obj[key] = [].concat(obj[key]).concat(val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options) { + var leaf = val; + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]') { + obj = []; + obj = obj.concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys + // that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +module.exports = function (str, opts) { + var options = opts ? utils.assign({}, opts) : {}; + + if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + options.ignoreQueryPrefix = options.ignoreQueryPrefix === true; + options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; + options.parseArrays = options.parseArrays !== false; + options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; + options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; + options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; + options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; + options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; diff --git a/node_modules/request/node_modules/qs/lib/stringify.js b/node_modules/request/node_modules/qs/lib/stringify.js new file mode 100644 index 0000000..ab915ac --- /dev/null +++ b/node_modules/request/node_modules/qs/lib/stringify.js @@ -0,0 +1,210 @@ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { // eslint-disable-line func-name-matching + return prefix + '[]'; + }, + indices: function indices(prefix, key) { // eslint-disable-line func-name-matching + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { // eslint-disable-line func-name-matching + return prefix; + } +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( // eslint-disable-line func-name-matching + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (Array.isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (Array.isArray(obj)) { + values = values.concat(stringify( + obj[key], + generateArrayPrefix(prefix, key), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } else { + values = values.concat(stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + } + + return values; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = opts ? utils.assign({}, opts) : {}; + + if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; + var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; + var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; + var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; + var sort = typeof options.sort === 'function' ? options.sort : null; + var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; + var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; + var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; + if (typeof options.format === 'undefined') { + options.format = formats['default']; + } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { + throw new TypeError('Unknown format option provided.'); + } + var formatter = formats.formatters[options.format]; + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (Array.isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (options.arrayFormat in arrayPrefixGenerators) { + arrayFormat = options.arrayFormat; + } else if ('indices' in options) { + arrayFormat = options.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (sort) { + objKeys.sort(sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + keys = keys.concat(stringify( + obj[key], + key, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encode ? encoder : null, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + + var joined = keys.join(delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + return joined.length > 0 ? prefix + joined : ''; +}; diff --git a/node_modules/request/node_modules/qs/lib/utils.js b/node_modules/request/node_modules/qs/lib/utils.js new file mode 100644 index 0000000..8775a32 --- /dev/null +++ b/node_modules/request/node_modules/qs/lib/utils.js @@ -0,0 +1,213 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + var obj; + + while (queue.length) { + var item = queue.pop(); + obj = item.obj[item.prop]; + + if (Array.isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } + + return obj; +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } else if (typeof target === 'object') { + if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (Array.isArray(target) && !Array.isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (Array.isArray(target) && Array.isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + if (target[i] && typeof target[i] === 'object') { + target[i] = merge(target[i], item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + +var encode = function encode(str) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + return compactQueue(queue); +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (obj === null || typeof obj === 'undefined') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; diff --git a/node_modules/request/node_modules/qs/package.json b/node_modules/request/node_modules/qs/package.json new file mode 100644 index 0000000..d5b458e --- /dev/null +++ b/node_modules/request/node_modules/qs/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "qs@6.5.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "qs@6.5.2", + "_id": "qs@6.5.2", + "_inBundle": false, + "_integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "_location": "/request/qs", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "qs@6.5.2", + "name": "qs", + "escapedName": "qs", + "rawSpec": "6.5.2", + "saveSpec": null, + "fetchSpec": "6.5.2" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "_spec": "6.5.2", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/ljharb/qs/issues" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "dependencies": {}, + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "devDependencies": { + "@ljharb/eslint-config": "^12.2.1", + "browserify": "^16.2.0", + "covert": "^1.1.0", + "editorconfig-tools": "^0.1.1", + "eslint": "^4.19.1", + "evalmd": "^0.0.17", + "iconv-lite": "^0.4.21", + "mkdirp": "^0.5.1", + "qs-iconv": "^1.0.4", + "safe-publish-latest": "^1.1.1", + "safer-buffer": "^2.1.2", + "tape": "^4.9.0" + }, + "engines": { + "node": ">=0.6" + }, + "homepage": "https://github.com/ljharb/qs", + "keywords": [ + "querystring", + "qs" + ], + "license": "BSD-3-Clause", + "main": "lib/index.js", + "name": "qs", + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/qs.git" + }, + "scripts": { + "coverage": "covert test", + "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", + "lint": "eslint lib/*.js test/*.js", + "prelint": "editorconfig-tools check * lib/* test/*", + "prepublish": "safe-publish-latest && npm run dist", + "pretest": "npm run --silent readme && npm run --silent lint", + "readme": "evalmd README.md", + "test": "npm run --silent coverage", + "tests-only": "node test" + }, + "version": "6.5.2" +} diff --git a/node_modules/request/node_modules/qs/test/.eslintrc b/node_modules/request/node_modules/qs/test/.eslintrc new file mode 100644 index 0000000..20175d6 --- /dev/null +++ b/node_modules/request/node_modules/qs/test/.eslintrc @@ -0,0 +1,15 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "consistent-return": 2, + "max-lines": 0, + "max-nested-callbacks": [2, 3], + "max-statements": 0, + "no-buffer-constructor": 0, + "no-extend-native": 0, + "no-magic-numbers": 0, + "object-curly-newline": 0, + "sort-keys": 0 + } +} diff --git a/node_modules/request/node_modules/qs/test/index.js b/node_modules/request/node_modules/qs/test/index.js new file mode 100644 index 0000000..5e6bc8f --- /dev/null +++ b/node_modules/request/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/node_modules/request/node_modules/qs/test/parse.js b/node_modules/request/node_modules/qs/test/parse.js new file mode 100644 index 0000000..0f8fe45 --- /dev/null +++ b/node_modules/request/node_modules/qs/test/parse.js @@ -0,0 +1,574 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return iconv.decode(SaferBuffer.from(result), 'shift_jis').toString(); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/request/node_modules/qs/test/stringify.js b/node_modules/request/node_modules/qs/test/stringify.js new file mode 100644 index 0000000..165ac62 --- /dev/null +++ b/node_modules/request/node_modules/qs/test/stringify.js @@ -0,0 +1,597 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/request/node_modules/qs/test/utils.js b/node_modules/request/node_modules/qs/test/utils.js new file mode 100644 index 0000000..eff4011 --- /dev/null +++ b/node_modules/request/node_modules/qs/test/utils.js @@ -0,0 +1,34 @@ +'use strict'; + +var test = require('tape'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); diff --git a/node_modules/request/package.json b/node_modules/request/package.json new file mode 100644 index 0000000..e75e3ce --- /dev/null +++ b/node_modules/request/package.json @@ -0,0 +1,118 @@ +{ + "_args": [ + [ + "request@2.88.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "request@2.88.0", + "_id": "request@2.88.0", + "_inBundle": false, + "_integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "_location": "/request", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "request@2.88.0", + "name": "request", + "escapedName": "request", + "rawSpec": "2.88.0", + "saveSpec": null, + "fetchSpec": "2.88.0" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "_spec": "2.88.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com" + }, + "bugs": { + "url": "http://github.com/request/request/issues" + }, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.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" + }, + "description": "Simplified HTTP request client.", + "devDependencies": { + "bluebird": "^3.2.1", + "browserify": "^13.0.1", + "browserify-istanbul": "^2.0.0", + "buffer-equal": "^1.0.0", + "codecov": "^3.0.4", + "coveralls": "^3.0.2", + "function-bind": "^1.0.2", + "istanbul": "^0.4.0", + "karma": "^3.0.0", + "karma-browserify": "^5.0.1", + "karma-cli": "^1.0.0", + "karma-coverage": "^1.0.0", + "karma-phantomjs-launcher": "^1.0.0", + "karma-tap": "^3.0.1", + "phantomjs-prebuilt": "^2.1.3", + "rimraf": "^2.2.8", + "server-destroy": "^1.0.1", + "standard": "^9.0.0", + "tape": "^4.6.0", + "taper": "^0.5.0" + }, + "engines": { + "node": ">= 4" + }, + "files": [ + "lib/", + "index.js", + "request.js" + ], + "greenkeeper": { + "ignore": [ + "hawk", + "har-validator" + ] + }, + "homepage": "https://github.com/request/request#readme", + "keywords": [ + "http", + "simple", + "util", + "utility" + ], + "license": "Apache-2.0", + "main": "index.js", + "name": "request", + "repository": { + "type": "git", + "url": "git+https://github.com/request/request.git" + }, + "scripts": { + "lint": "standard", + "test": "npm run lint && npm run test-ci && npm run test-browser", + "test-browser": "node tests/browser/start.js", + "test-ci": "taper tests/test-*.js", + "test-cov": "istanbul cover tape tests/test-*.js" + }, + "version": "2.88.0" +} diff --git a/node_modules/request/request.js b/node_modules/request/request.js new file mode 100644 index 0000000..90bed4f --- /dev/null +++ b/node_modules/request/request.js @@ -0,0 +1,1551 @@ +'use strict' + +var http = require('http') +var https = require('https') +var url = require('url') +var util = require('util') +var stream = require('stream') +var zlib = require('zlib') +var aws2 = require('aws-sign2') +var aws4 = require('aws4') +var httpSignature = require('http-signature') +var mime = require('mime-types') +var caseless = require('caseless') +var ForeverAgent = require('forever-agent') +var FormData = require('form-data') +var extend = require('extend') +var isstream = require('isstream') +var isTypedArray = require('is-typedarray').strict +var helpers = require('./lib/helpers') +var cookies = require('./lib/cookies') +var getProxyFromURI = require('./lib/getProxyFromURI') +var Querystring = require('./lib/querystring').Querystring +var Har = require('./lib/har').Har +var Auth = require('./lib/auth').Auth +var OAuth = require('./lib/oauth').OAuth +var hawk = require('./lib/hawk') +var Multipart = require('./lib/multipart').Multipart +var Redirect = require('./lib/redirect').Redirect +var Tunnel = require('./lib/tunnel').Tunnel +var now = require('performance-now') +var Buffer = require('safe-buffer').Buffer + +var safeStringify = helpers.safeStringify +var isReadStream = helpers.isReadStream +var toBase64 = helpers.toBase64 +var defer = helpers.defer +var copy = helpers.copy +var version = helpers.version +var globalCookieJar = cookies.jar() + +var globalPool = {} + +function filterForNonReserved (reserved, options) { + // Filter out properties that are not reserved. + // Reserved values are passed in at call site. + + var object = {} + for (var i in options) { + var notReserved = (reserved.indexOf(i) === -1) + if (notReserved) { + object[i] = options[i] + } + } + return object +} + +function filterOutReservedFunctions (reserved, options) { + // Filter out properties that are functions and are reserved. + // Reserved values are passed in at call site. + + var object = {} + for (var i in options) { + var isReserved = !(reserved.indexOf(i) === -1) + var isFunction = (typeof options[i] === 'function') + if (!(isReserved && isFunction)) { + object[i] = options[i] + } + } + return object +} + +// Return a simpler request object to allow serialization +function requestToJSON () { + var self = this + return { + uri: self.uri, + method: self.method, + headers: self.headers + } +} + +// Return a simpler response object to allow serialization +function responseToJSON () { + var self = this + return { + statusCode: self.statusCode, + body: self.body, + headers: self.headers, + request: requestToJSON.call(self.request) + } +} + +function Request (options) { + // if given the method property in options, set property explicitMethod to true + + // extend the Request instance with any non-reserved properties + // remove any reserved functions from the options object + // set Request instance to be readable and writable + // call init + + var self = this + + // start with HAR, then override with additional options + if (options.har) { + self._har = new Har(self) + options = self._har.options(options) + } + + stream.Stream.call(self) + var reserved = Object.keys(Request.prototype) + var nonReserved = filterForNonReserved(reserved, options) + + extend(self, nonReserved) + options = filterOutReservedFunctions(reserved, options) + + self.readable = true + self.writable = true + if (options.method) { + self.explicitMethod = true + } + self._qs = new Querystring(self) + self._auth = new Auth(self) + self._oauth = new OAuth(self) + self._multipart = new Multipart(self) + self._redirect = new Redirect(self) + self._tunnel = new Tunnel(self) + self.init(options) +} + +util.inherits(Request, stream.Stream) + +// Debugging +Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG) +function debug () { + if (Request.debug) { + console.error('REQUEST %s', util.format.apply(util, arguments)) + } +} +Request.prototype.debug = debug + +Request.prototype.init = function (options) { + // init() contains all the code to setup the request object. + // the actual outgoing request is not started until start() is called + // this function is called from both the constructor and on redirect. + var self = this + if (!options) { + options = {} + } + self.headers = self.headers ? copy(self.headers) : {} + + // Delete headers with value undefined since they break + // ClientRequest.OutgoingMessage.setHeader in node 0.12 + for (var headerName in self.headers) { + if (typeof self.headers[headerName] === 'undefined') { + delete self.headers[headerName] + } + } + + caseless.httpify(self, self.headers) + + if (!self.method) { + self.method = options.method || 'GET' + } + if (!self.localAddress) { + self.localAddress = options.localAddress + } + + self._qs.init(options) + + debug(options) + if (!self.pool && self.pool !== false) { + self.pool = globalPool + } + self.dests = self.dests || [] + self.__isRequestRequest = true + + // Protect against double callback + if (!self._callback && self.callback) { + self._callback = self.callback + self.callback = function () { + if (self._callbackCalled) { + return // Print a warning maybe? + } + self._callbackCalled = true + self._callback.apply(self, arguments) + } + self.on('error', self.callback.bind()) + self.on('complete', self.callback.bind(self, null)) + } + + // People use this property instead all the time, so support it + if (!self.uri && self.url) { + self.uri = self.url + delete self.url + } + + // If there's a baseUrl, then use it as the base URL (i.e. uri must be + // specified as a relative path and is appended to baseUrl). + if (self.baseUrl) { + if (typeof self.baseUrl !== 'string') { + return self.emit('error', new Error('options.baseUrl must be a string')) + } + + if (typeof self.uri !== 'string') { + return self.emit('error', new Error('options.uri must be a string when using options.baseUrl')) + } + + if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) { + return self.emit('error', new Error('options.uri must be a path when using options.baseUrl')) + } + + // Handle all cases to make sure that there's only one slash between + // baseUrl and uri. + var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1 + var uriStartsWithSlash = self.uri.indexOf('/') === 0 + + if (baseUrlEndsWithSlash && uriStartsWithSlash) { + self.uri = self.baseUrl + self.uri.slice(1) + } else if (baseUrlEndsWithSlash || uriStartsWithSlash) { + self.uri = self.baseUrl + self.uri + } else if (self.uri === '') { + self.uri = self.baseUrl + } else { + self.uri = self.baseUrl + '/' + self.uri + } + delete self.baseUrl + } + + // A URI is needed by this point, emit error if we haven't been able to get one + if (!self.uri) { + return self.emit('error', new Error('options.uri is a required argument')) + } + + // If a string URI/URL was given, parse it into a URL object + if (typeof self.uri === 'string') { + self.uri = url.parse(self.uri) + } + + // Some URL objects are not from a URL parsed string and need href added + if (!self.uri.href) { + self.uri.href = url.format(self.uri) + } + + // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme + if (self.uri.protocol === 'unix:') { + return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`')) + } + + // Support Unix Sockets + if (self.uri.host === 'unix') { + self.enableUnixSocket() + } + + if (self.strictSSL === false) { + self.rejectUnauthorized = false + } + + if (!self.uri.pathname) { self.uri.pathname = '/' } + + if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) { + // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar + // Detect and reject it as soon as possible + var faultyUri = url.format(self.uri) + var message = 'Invalid URI "' + faultyUri + '"' + if (Object.keys(options).length === 0) { + // No option ? This can be the sign of a redirect + // As this is a case where the user cannot do anything (they didn't call request directly with this URL) + // they should be warned that it can be caused by a redirection (can save some hair) + message += '. This can be caused by a crappy redirection.' + } + // This error was fatal + self.abort() + return self.emit('error', new Error(message)) + } + + if (!self.hasOwnProperty('proxy')) { + self.proxy = getProxyFromURI(self.uri) + } + + self.tunnel = self._tunnel.isEnabled() + if (self.proxy) { + self._tunnel.setup(options) + } + + self._redirect.onRequest(options) + + self.setHost = false + if (!self.hasHeader('host')) { + var hostHeaderName = self.originalHostHeaderName || 'host' + self.setHeader(hostHeaderName, self.uri.host) + // Drop :port suffix from Host header if known protocol. + if (self.uri.port) { + if ((self.uri.port === '80' && self.uri.protocol === 'http:') || + (self.uri.port === '443' && self.uri.protocol === 'https:')) { + self.setHeader(hostHeaderName, self.uri.hostname) + } + } + self.setHost = true + } + + self.jar(self._jar || options.jar) + + if (!self.uri.port) { + if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 } + } + + if (self.proxy && !self.tunnel) { + self.port = self.proxy.port + self.host = self.proxy.hostname + } else { + self.port = self.uri.port + self.host = self.uri.hostname + } + + if (options.form) { + self.form(options.form) + } + + if (options.formData) { + var formData = options.formData + var requestForm = self.form() + var appendFormValue = function (key, value) { + if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) { + requestForm.append(key, value.value, value.options) + } else { + requestForm.append(key, value) + } + } + for (var formKey in formData) { + if (formData.hasOwnProperty(formKey)) { + var formValue = formData[formKey] + if (formValue instanceof Array) { + for (var j = 0; j < formValue.length; j++) { + appendFormValue(formKey, formValue[j]) + } + } else { + appendFormValue(formKey, formValue) + } + } + } + } + + if (options.qs) { + self.qs(options.qs) + } + + if (self.uri.path) { + self.path = self.uri.path + } else { + self.path = self.uri.pathname + (self.uri.search || '') + } + + if (self.path.length === 0) { + self.path = '/' + } + + // Auth must happen last in case signing is dependent on other headers + if (options.aws) { + self.aws(options.aws) + } + + if (options.hawk) { + self.hawk(options.hawk) + } + + if (options.httpSignature) { + self.httpSignature(options.httpSignature) + } + + if (options.auth) { + if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) { + options.auth.user = options.auth.username + } + if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) { + options.auth.pass = options.auth.password + } + + self.auth( + options.auth.user, + options.auth.pass, + options.auth.sendImmediately, + options.auth.bearer + ) + } + + if (self.gzip && !self.hasHeader('accept-encoding')) { + self.setHeader('accept-encoding', 'gzip, deflate') + } + + if (self.uri.auth && !self.hasHeader('authorization')) { + var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) }) + self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true) + } + + if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) { + var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) }) + var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':')) + self.setHeader('proxy-authorization', authHeader) + } + + if (self.proxy && !self.tunnel) { + self.path = (self.uri.protocol + '//' + self.uri.host + self.path) + } + + if (options.json) { + self.json(options.json) + } + if (options.multipart) { + self.multipart(options.multipart) + } + + if (options.time) { + self.timing = true + + // NOTE: elapsedTime is deprecated in favor of .timings + self.elapsedTime = self.elapsedTime || 0 + } + + function setContentLength () { + if (isTypedArray(self.body)) { + self.body = Buffer.from(self.body) + } + + if (!self.hasHeader('content-length')) { + var length + if (typeof self.body === 'string') { + length = Buffer.byteLength(self.body) + } else if (Array.isArray(self.body)) { + length = self.body.reduce(function (a, b) { return a + b.length }, 0) + } else { + length = self.body.length + } + + if (length) { + self.setHeader('content-length', length) + } else { + self.emit('error', new Error('Argument error, options.body.')) + } + } + } + if (self.body && !isstream(self.body)) { + setContentLength() + } + + if (options.oauth) { + self.oauth(options.oauth) + } else if (self._oauth.params && self.hasHeader('authorization')) { + self.oauth(self._oauth.params) + } + + var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol + var defaultModules = {'http:': http, 'https:': https} + var httpModules = self.httpModules || {} + + self.httpModule = httpModules[protocol] || defaultModules[protocol] + + if (!self.httpModule) { + return self.emit('error', new Error('Invalid protocol: ' + protocol)) + } + + if (options.ca) { + self.ca = options.ca + } + + if (!self.agent) { + if (options.agentOptions) { + self.agentOptions = options.agentOptions + } + + if (options.agentClass) { + self.agentClass = options.agentClass + } else if (options.forever) { + var v = version() + // use ForeverAgent in node 0.10- only + if (v.major === 0 && v.minor <= 10) { + self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL + } else { + self.agentClass = self.httpModule.Agent + self.agentOptions = self.agentOptions || {} + self.agentOptions.keepAlive = true + } + } else { + self.agentClass = self.httpModule.Agent + } + } + + if (self.pool === false) { + self.agent = false + } else { + self.agent = self.agent || self.getNewAgent() + } + + self.on('pipe', function (src) { + if (self.ntick && self._started) { + self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.')) + } + self.src = src + if (isReadStream(src)) { + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', mime.lookup(src.path)) + } + } else { + if (src.headers) { + for (var i in src.headers) { + if (!self.hasHeader(i)) { + self.setHeader(i, src.headers[i]) + } + } + } + if (self._json && !self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + if (src.method && !self.explicitMethod) { + self.method = src.method + } + } + + // self.on('pipe', function () { + // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.') + // }) + }) + + defer(function () { + if (self._aborted) { + return + } + + var end = function () { + if (self._form) { + if (!self._auth.hasAuth) { + self._form.pipe(self) + } else if (self._auth.hasAuth && self._auth.sentAuth) { + self._form.pipe(self) + } + } + if (self._multipart && self._multipart.chunked) { + self._multipart.body.pipe(self) + } + if (self.body) { + if (isstream(self.body)) { + self.body.pipe(self) + } else { + setContentLength() + if (Array.isArray(self.body)) { + self.body.forEach(function (part) { + self.write(part) + }) + } else { + self.write(self.body) + } + self.end() + } + } else if (self.requestBodyStream) { + console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.') + self.requestBodyStream.pipe(self) + } else if (!self.src) { + if (self._auth.hasAuth && !self._auth.sentAuth) { + self.end() + return + } + if (self.method !== 'GET' && typeof self.method !== 'undefined') { + self.setHeader('content-length', 0) + } + self.end() + } + } + + if (self._form && !self.hasHeader('content-length')) { + // Before ending the request, we had to compute the length of the whole form, asyncly + self.setHeader(self._form.getHeaders(), true) + self._form.getLength(function (err, length) { + if (!err && !isNaN(length)) { + self.setHeader('content-length', length) + } + end() + }) + } else { + end() + } + + self.ntick = true + }) +} + +Request.prototype.getNewAgent = function () { + var self = this + var Agent = self.agentClass + var options = {} + if (self.agentOptions) { + for (var i in self.agentOptions) { + options[i] = self.agentOptions[i] + } + } + if (self.ca) { + options.ca = self.ca + } + if (self.ciphers) { + options.ciphers = self.ciphers + } + if (self.secureProtocol) { + options.secureProtocol = self.secureProtocol + } + if (self.secureOptions) { + options.secureOptions = self.secureOptions + } + if (typeof self.rejectUnauthorized !== 'undefined') { + options.rejectUnauthorized = self.rejectUnauthorized + } + + if (self.cert && self.key) { + options.key = self.key + options.cert = self.cert + } + + if (self.pfx) { + options.pfx = self.pfx + } + + if (self.passphrase) { + options.passphrase = self.passphrase + } + + var poolKey = '' + + // different types of agents are in different pools + if (Agent !== self.httpModule.Agent) { + poolKey += Agent.name + } + + // ca option is only relevant if proxy or destination are https + var proxy = self.proxy + if (typeof proxy === 'string') { + proxy = url.parse(proxy) + } + var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' + + if (isHttps) { + if (options.ca) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.ca + } + + if (typeof options.rejectUnauthorized !== 'undefined') { + if (poolKey) { + poolKey += ':' + } + poolKey += options.rejectUnauthorized + } + + if (options.cert) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.cert.toString('ascii') + options.key.toString('ascii') + } + + if (options.pfx) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.pfx.toString('ascii') + } + + if (options.ciphers) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.ciphers + } + + if (options.secureProtocol) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.secureProtocol + } + + if (options.secureOptions) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.secureOptions + } + } + + if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) { + // not doing anything special. Use the globalAgent + return self.httpModule.globalAgent + } + + // we're using a stored agent. Make sure it's protocol-specific + poolKey = self.uri.protocol + poolKey + + // generate a new agent for this setting if none yet exists + if (!self.pool[poolKey]) { + self.pool[poolKey] = new Agent(options) + // properly set maxSockets on new agents + if (self.pool.maxSockets) { + self.pool[poolKey].maxSockets = self.pool.maxSockets + } + } + + return self.pool[poolKey] +} + +Request.prototype.start = function () { + // start() is called once we are ready to send the outgoing HTTP request. + // this is usually called on the first write(), end() or on nextTick() + var self = this + + if (self.timing) { + // All timings will be relative to this request's startTime. In order to do this, + // we need to capture the wall-clock start time (via Date), immediately followed + // by the high-resolution timer (via now()). While these two won't be set + // at the _exact_ same time, they should be close enough to be able to calculate + // high-resolution, monotonically non-decreasing timestamps relative to startTime. + var startTime = new Date().getTime() + var startTimeNow = now() + } + + if (self._aborted) { + return + } + + self._started = true + self.method = self.method || 'GET' + self.href = self.uri.href + + if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { + self.setHeader('content-length', self.src.stat.size) + } + if (self._aws) { + self.aws(self._aws, true) + } + + // We have a method named auth, which is completely different from the http.request + // auth option. If we don't remove it, we're gonna have a bad time. + var reqOptions = copy(self) + delete reqOptions.auth + + debug('make request', self.uri.href) + + // node v6.8.0 now supports a `timeout` value in `http.request()`, but we + // should delete it for now since we handle timeouts manually for better + // consistency with node versions before v6.8.0 + delete reqOptions.timeout + + try { + self.req = self.httpModule.request(reqOptions) + } catch (err) { + self.emit('error', err) + return + } + + if (self.timing) { + self.startTime = startTime + self.startTimeNow = startTimeNow + + // Timing values will all be relative to startTime (by comparing to startTimeNow + // so we have an accurate clock) + self.timings = {} + } + + var timeout + if (self.timeout && !self.timeoutTimer) { + if (self.timeout < 0) { + timeout = 0 + } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) { + timeout = self.timeout + } + } + + self.req.on('response', self.onRequestResponse.bind(self)) + self.req.on('error', self.onRequestError.bind(self)) + self.req.on('drain', function () { + self.emit('drain') + }) + + self.req.on('socket', function (socket) { + // `._connecting` was the old property which was made public in node v6.1.0 + var isConnecting = socket._connecting || socket.connecting + if (self.timing) { + self.timings.socket = now() - self.startTimeNow + + if (isConnecting) { + var onLookupTiming = function () { + self.timings.lookup = now() - self.startTimeNow + } + + var onConnectTiming = function () { + self.timings.connect = now() - self.startTimeNow + } + + socket.once('lookup', onLookupTiming) + socket.once('connect', onConnectTiming) + + // clean up timing event listeners if needed on error + self.req.once('error', function () { + socket.removeListener('lookup', onLookupTiming) + socket.removeListener('connect', onConnectTiming) + }) + } + } + + var setReqTimeout = function () { + // This timeout sets the amount of time to wait *between* bytes sent + // from the server once connected. + // + // In particular, it's useful for erroring if the server fails to send + // data halfway through streaming a response. + self.req.setTimeout(timeout, function () { + if (self.req) { + self.abort() + var e = new Error('ESOCKETTIMEDOUT') + e.code = 'ESOCKETTIMEDOUT' + e.connect = false + self.emit('error', e) + } + }) + } + if (timeout !== undefined) { + // Only start the connection timer if we're actually connecting a new + // socket, otherwise if we're already connected (because this is a + // keep-alive connection) do not bother. This is important since we won't + // get a 'connect' event for an already connected socket. + if (isConnecting) { + var onReqSockConnect = function () { + socket.removeListener('connect', onReqSockConnect) + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + setReqTimeout() + } + + socket.on('connect', onReqSockConnect) + + self.req.on('error', function (err) { // eslint-disable-line handle-callback-err + socket.removeListener('connect', onReqSockConnect) + }) + + // Set a timeout in memory - this block will throw if the server takes more + // than `timeout` to write the HTTP status and headers (corresponding to + // the on('response') event on the client). NB: this measures wall-clock + // time, not the time between bytes sent by the server. + self.timeoutTimer = setTimeout(function () { + socket.removeListener('connect', onReqSockConnect) + self.abort() + var e = new Error('ETIMEDOUT') + e.code = 'ETIMEDOUT' + e.connect = true + self.emit('error', e) + }, timeout) + } else { + // We're already connected + setReqTimeout() + } + } + self.emit('socket', socket) + }) + + self.emit('request', self.req) +} + +Request.prototype.onRequestError = function (error) { + var self = this + if (self._aborted) { + return + } + if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' && + self.agent.addRequestNoreuse) { + self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } + self.start() + self.req.end() + return + } + if (self.timeout && self.timeoutTimer) { + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + } + self.emit('error', error) +} + +Request.prototype.onRequestResponse = function (response) { + var self = this + + if (self.timing) { + self.timings.response = now() - self.startTimeNow + } + + debug('onRequestResponse', self.uri.href, response.statusCode, response.headers) + response.on('end', function () { + if (self.timing) { + self.timings.end = now() - self.startTimeNow + response.timingStart = self.startTime + + // fill in the blanks for any periods that didn't trigger, such as + // no lookup or connect due to keep alive + if (!self.timings.socket) { + self.timings.socket = 0 + } + if (!self.timings.lookup) { + self.timings.lookup = self.timings.socket + } + if (!self.timings.connect) { + self.timings.connect = self.timings.lookup + } + if (!self.timings.response) { + self.timings.response = self.timings.connect + } + + debug('elapsed time', self.timings.end) + + // elapsedTime includes all redirects + self.elapsedTime += Math.round(self.timings.end) + + // NOTE: elapsedTime is deprecated in favor of .timings + response.elapsedTime = self.elapsedTime + + // timings is just for the final fetch + response.timings = self.timings + + // pre-calculate phase timings as well + response.timingPhases = { + wait: self.timings.socket, + dns: self.timings.lookup - self.timings.socket, + tcp: self.timings.connect - self.timings.lookup, + firstByte: self.timings.response - self.timings.connect, + download: self.timings.end - self.timings.response, + total: self.timings.end + } + } + debug('response end', self.uri.href, response.statusCode, response.headers) + }) + + if (self._aborted) { + debug('aborted', self.uri.href) + response.resume() + return + } + + self.response = response + response.request = self + response.toJSON = responseToJSON + + // XXX This is different on 0.10, because SSL is strict by default + if (self.httpModule === https && + self.strictSSL && (!response.hasOwnProperty('socket') || + !response.socket.authorized)) { + debug('strict ssl error', self.uri.href) + var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL' + self.emit('error', new Error('SSL Error: ' + sslErr)) + return + } + + // Save the original host before any redirect (if it changes, we need to + // remove any authorization headers). Also remember the case of the header + // name because lots of broken servers expect Host instead of host and we + // want the caller to be able to specify this. + self.originalHost = self.getHeader('host') + if (!self.originalHostHeaderName) { + self.originalHostHeaderName = self.hasHeader('host') + } + if (self.setHost) { + self.removeHeader('host') + } + if (self.timeout && self.timeoutTimer) { + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + } + + var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar + var addCookie = function (cookie) { + // set the cookie if it's domain in the href's domain. + try { + targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true}) + } catch (e) { + self.emit('error', e) + } + } + + response.caseless = caseless(response.headers) + + if (response.caseless.has('set-cookie') && (!self._disableCookies)) { + var headerName = response.caseless.has('set-cookie') + if (Array.isArray(response.headers[headerName])) { + response.headers[headerName].forEach(addCookie) + } else { + addCookie(response.headers[headerName]) + } + } + + if (self._redirect.onResponse(response)) { + return // Ignore the rest of the response + } else { + // Be a good stream and emit end when the response is finished. + // Hack to emit end on close because of a core bug that never fires end + response.on('close', function () { + if (!self._ended) { + self.response.emit('end') + } + }) + + response.once('end', function () { + self._ended = true + }) + + var noBody = function (code) { + return ( + self.method === 'HEAD' || + // Informational + (code >= 100 && code < 200) || + // No Content + code === 204 || + // Not Modified + code === 304 + ) + } + + var responseContent + if (self.gzip && !noBody(response.statusCode)) { + var contentEncoding = response.headers['content-encoding'] || 'identity' + contentEncoding = contentEncoding.trim().toLowerCase() + + // Be more lenient with decoding compressed responses, since (very rarely) + // servers send slightly invalid gzip responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + var zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + } + + if (contentEncoding === 'gzip') { + responseContent = zlib.createGunzip(zlibOptions) + response.pipe(responseContent) + } else if (contentEncoding === 'deflate') { + responseContent = zlib.createInflate(zlibOptions) + response.pipe(responseContent) + } else { + // Since previous versions didn't check for Content-Encoding header, + // ignore any invalid values to preserve backwards-compatibility + if (contentEncoding !== 'identity') { + debug('ignoring unrecognized Content-Encoding ' + contentEncoding) + } + responseContent = response + } + } else { + responseContent = response + } + + if (self.encoding) { + if (self.dests.length !== 0) { + console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.') + } else { + responseContent.setEncoding(self.encoding) + } + } + + if (self._paused) { + responseContent.pause() + } + + self.responseContent = responseContent + + self.emit('response', response) + + self.dests.forEach(function (dest) { + self.pipeDest(dest) + }) + + responseContent.on('data', function (chunk) { + if (self.timing && !self.responseStarted) { + self.responseStartTime = (new Date()).getTime() + + // NOTE: responseStartTime is deprecated in favor of .timings + response.responseStartTime = self.responseStartTime + } + self._destdata = true + self.emit('data', chunk) + }) + responseContent.once('end', function (chunk) { + self.emit('end', chunk) + }) + responseContent.on('error', function (error) { + self.emit('error', error) + }) + responseContent.on('close', function () { self.emit('close') }) + + if (self.callback) { + self.readResponseBody(response) + } else { // if no callback + self.on('end', function () { + if (self._aborted) { + debug('aborted', self.uri.href) + return + } + self.emit('complete', response) + }) + } + } + debug('finish init function', self.uri.href) +} + +Request.prototype.readResponseBody = function (response) { + var self = this + debug("reading response's body") + var buffers = [] + var bufferLength = 0 + var strings = [] + + self.on('data', function (chunk) { + if (!Buffer.isBuffer(chunk)) { + strings.push(chunk) + } else if (chunk.length) { + bufferLength += chunk.length + buffers.push(chunk) + } + }) + self.on('end', function () { + debug('end event', self.uri.href) + if (self._aborted) { + debug('aborted', self.uri.href) + // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request. + // This can lead to leaky behavior if the user retains a reference to the request object. + buffers = [] + bufferLength = 0 + return + } + + if (bufferLength) { + debug('has body', self.uri.href, bufferLength) + response.body = Buffer.concat(buffers, bufferLength) + if (self.encoding !== null) { + response.body = response.body.toString(self.encoding) + } + // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request. + // This can lead to leaky behavior if the user retains a reference to the request object. + buffers = [] + bufferLength = 0 + } else if (strings.length) { + // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. + // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). + if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { + strings[0] = strings[0].substring(1) + } + response.body = strings.join('') + } + + if (self._json) { + try { + response.body = JSON.parse(response.body, self._jsonReviver) + } catch (e) { + debug('invalid JSON received', self.uri.href) + } + } + debug('emitting complete', self.uri.href) + if (typeof response.body === 'undefined' && !self._json) { + response.body = self.encoding === null ? Buffer.alloc(0) : '' + } + self.emit('complete', response, response.body) + }) +} + +Request.prototype.abort = function () { + var self = this + self._aborted = true + + if (self.req) { + self.req.abort() + } else if (self.response) { + self.response.destroy() + } + + self.emit('abort') +} + +Request.prototype.pipeDest = function (dest) { + var self = this + var response = self.response + // Called after the response is received + if (dest.headers && !dest.headersSent) { + if (response.caseless.has('content-type')) { + var ctname = response.caseless.has('content-type') + if (dest.setHeader) { + dest.setHeader(ctname, response.headers[ctname]) + } else { + dest.headers[ctname] = response.headers[ctname] + } + } + + if (response.caseless.has('content-length')) { + var clname = response.caseless.has('content-length') + if (dest.setHeader) { + dest.setHeader(clname, response.headers[clname]) + } else { + dest.headers[clname] = response.headers[clname] + } + } + } + if (dest.setHeader && !dest.headersSent) { + for (var i in response.headers) { + // If the response content is being decoded, the Content-Encoding header + // of the response doesn't represent the piped content, so don't pass it. + if (!self.gzip || i !== 'content-encoding') { + dest.setHeader(i, response.headers[i]) + } + } + dest.statusCode = response.statusCode + } + if (self.pipefilter) { + self.pipefilter(response, dest) + } +} + +Request.prototype.qs = function (q, clobber) { + var self = this + var base + if (!clobber && self.uri.query) { + base = self._qs.parse(self.uri.query) + } else { + base = {} + } + + for (var i in q) { + base[i] = q[i] + } + + var qs = self._qs.stringify(base) + + if (qs === '') { + return self + } + + self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs) + self.url = self.uri + self.path = self.uri.path + + if (self.uri.host === 'unix') { + self.enableUnixSocket() + } + + return self +} +Request.prototype.form = function (form) { + var self = this + if (form) { + if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { + self.setHeader('content-type', 'application/x-www-form-urlencoded') + } + self.body = (typeof form === 'string') + ? self._qs.rfc3986(form.toString('utf8')) + : self._qs.stringify(form).toString('utf8') + return self + } + // create form-data object + self._form = new FormData() + self._form.on('error', function (err) { + err.message = 'form-data: ' + err.message + self.emit('error', err) + self.abort() + }) + return self._form +} +Request.prototype.multipart = function (multipart) { + var self = this + + self._multipart.onRequest(multipart) + + if (!self._multipart.chunked) { + self.body = self._multipart.body + } + + return self +} +Request.prototype.json = function (val) { + var self = this + + if (!self.hasHeader('accept')) { + self.setHeader('accept', 'application/json') + } + + if (typeof self.jsonReplacer === 'function') { + self._jsonReplacer = self.jsonReplacer + } + + self._json = true + if (typeof val === 'boolean') { + if (self.body !== undefined) { + if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { + self.body = safeStringify(self.body, self._jsonReplacer) + } else { + self.body = self._qs.rfc3986(self.body) + } + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + } + } else { + self.body = safeStringify(val, self._jsonReplacer) + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + } + + if (typeof self.jsonReviver === 'function') { + self._jsonReviver = self.jsonReviver + } + + return self +} +Request.prototype.getHeader = function (name, headers) { + var self = this + var result, re, match + if (!headers) { + headers = self.headers + } + Object.keys(headers).forEach(function (key) { + if (key.length !== name.length) { + return + } + re = new RegExp(name, 'i') + match = key.match(re) + if (match) { + result = headers[key] + } + }) + return result +} +Request.prototype.enableUnixSocket = function () { + // Get the socket & request paths from the URL + var unixParts = this.uri.path.split(':') + var host = unixParts[0] + var path = unixParts[1] + // Apply unix properties to request + this.socketPath = host + this.uri.pathname = path + this.uri.path = path + this.uri.host = host + this.uri.hostname = host + this.uri.isUnix = true +} + +Request.prototype.auth = function (user, pass, sendImmediately, bearer) { + var self = this + + self._auth.onRequest(user, pass, sendImmediately, bearer) + + return self +} +Request.prototype.aws = function (opts, now) { + var self = this + + if (!now) { + self._aws = opts + return self + } + + if (opts.sign_version === 4 || opts.sign_version === '4') { + // use aws4 + var options = { + host: self.uri.host, + path: self.uri.path, + method: self.method, + headers: self.headers, + body: self.body + } + if (opts.service) { + options.service = opts.service + } + var signRes = aws4.sign(options, { + accessKeyId: opts.key, + secretAccessKey: opts.secret, + sessionToken: opts.session + }) + self.setHeader('authorization', signRes.headers.Authorization) + self.setHeader('x-amz-date', signRes.headers['X-Amz-Date']) + if (signRes.headers['X-Amz-Security-Token']) { + self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token']) + } + } else { + // default: use aws-sign2 + var date = new Date() + self.setHeader('date', date.toUTCString()) + var auth = { + key: opts.key, + secret: opts.secret, + verb: self.method.toUpperCase(), + date: date, + contentType: self.getHeader('content-type') || '', + md5: self.getHeader('content-md5') || '', + amazonHeaders: aws2.canonicalizeHeaders(self.headers) + } + var path = self.uri.path + if (opts.bucket && path) { + auth.resource = '/' + opts.bucket + path + } else if (opts.bucket && !path) { + auth.resource = '/' + opts.bucket + } else if (!opts.bucket && path) { + auth.resource = path + } else if (!opts.bucket && !path) { + auth.resource = '/' + } + auth.resource = aws2.canonicalizeResource(auth.resource) + self.setHeader('authorization', aws2.authorization(auth)) + } + + return self +} +Request.prototype.httpSignature = function (opts) { + var self = this + httpSignature.signRequest({ + getHeader: function (header) { + return self.getHeader(header, self.headers) + }, + setHeader: function (header, value) { + self.setHeader(header, value) + }, + method: self.method, + path: self.path + }, opts) + debug('httpSignature authorization', self.getHeader('authorization')) + + return self +} +Request.prototype.hawk = function (opts) { + var self = this + self.setHeader('Authorization', hawk.header(self.uri, self.method, opts)) +} +Request.prototype.oauth = function (_oauth) { + var self = this + + self._oauth.onRequest(_oauth) + + return self +} + +Request.prototype.jar = function (jar) { + var self = this + var cookies + + if (self._redirect.redirectsFollowed === 0) { + self.originalCookieHeader = self.getHeader('cookie') + } + + if (!jar) { + // disable cookies + cookies = false + self._disableCookies = true + } else { + var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar + var urihref = self.uri.href + // fetch cookie in the Specified host + if (targetCookieJar) { + cookies = targetCookieJar.getCookieString(urihref) + } + } + + // if need cookie and cookie is not empty + if (cookies && cookies.length) { + if (self.originalCookieHeader) { + // Don't overwrite existing Cookie header + self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies) + } else { + self.setHeader('cookie', cookies) + } + } + self._jar = jar + return self +} + +// Stream API +Request.prototype.pipe = function (dest, opts) { + var self = this + + if (self.response) { + if (self._destdata) { + self.emit('error', new Error('You cannot pipe after data has been emitted from the response.')) + } else if (self._ended) { + self.emit('error', new Error('You cannot pipe after the response has been ended.')) + } else { + stream.Stream.prototype.pipe.call(self, dest, opts) + self.pipeDest(dest) + return dest + } + } else { + self.dests.push(dest) + stream.Stream.prototype.pipe.call(self, dest, opts) + return dest + } +} +Request.prototype.write = function () { + var self = this + if (self._aborted) { return } + + if (!self._started) { + self.start() + } + if (self.req) { + return self.req.write.apply(self.req, arguments) + } +} +Request.prototype.end = function (chunk) { + var self = this + if (self._aborted) { return } + + if (chunk) { + self.write(chunk) + } + if (!self._started) { + self.start() + } + if (self.req) { + self.req.end() + } +} +Request.prototype.pause = function () { + var self = this + if (!self.responseContent) { + self._paused = true + } else { + self.responseContent.pause.apply(self.responseContent, arguments) + } +} +Request.prototype.resume = function () { + var self = this + if (!self.responseContent) { + self._paused = false + } else { + self.responseContent.resume.apply(self.responseContent, arguments) + } +} +Request.prototype.destroy = function () { + var self = this + if (!self._ended) { + self.end() + } else if (self.response) { + self.response.destroy() + } +} + +Request.defaultProxyHeaderWhiteList = + Tunnel.defaultProxyHeaderWhiteList.slice() + +Request.defaultProxyHeaderExclusiveList = + Tunnel.defaultProxyHeaderExclusiveList.slice() + +// Exports + +Request.prototype.toJSON = requestToJSON +module.exports = Request diff --git a/node_modules/responselike/LICENSE b/node_modules/responselike/LICENSE new file mode 100644 index 0000000..8829a00 --- /dev/null +++ b/node_modules/responselike/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 Luke Childs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/responselike/README.md b/node_modules/responselike/README.md new file mode 100644 index 0000000..6361931 --- /dev/null +++ b/node_modules/responselike/README.md @@ -0,0 +1,77 @@ +# responselike + +> A response-like object for mocking a Node.js HTTP response stream + +[![Build Status](https://travis-ci.org/lukechilds/responselike.svg?branch=master)](https://travis-ci.org/lukechilds/responselike) +[![Coverage Status](https://coveralls.io/repos/github/lukechilds/responselike/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/responselike?branch=master) +[![npm](https://img.shields.io/npm/dm/responselike.svg)](https://www.npmjs.com/package/responselike) +[![npm](https://img.shields.io/npm/v/responselike.svg)](https://www.npmjs.com/package/responselike) + +Returns a streamable response object similar to a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage). Useful for formatting cached responses so they can be consumed by code expecting a real response. + +## Install + +```shell +npm install --save responselike +``` + +Or if you're just using for testing you'll want: + +```shell +npm install --save-dev responselike +``` + +## Usage + +```js +const Response = require('responselike'); + +const response = new Response(200, { foo: 'bar' }, Buffer.from('Hi!'), 'https://example.com'); + +response.statusCode; +// 200 +response.headers; +// { foo: 'bar' } +response.body; +// +response.url; +// 'https://example.com' + +response.pipe(process.stdout); +// Hi! +``` + + +## API + +### new Response(statusCode, headers, body, url) + +Returns a streamable response object similar to a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage). + +#### statusCode + +Type: `number` + +HTTP response status code. + +#### headers + +Type: `object` + +HTTP headers object. Keys will be automatically lowercased. + +#### body + +Type: `buffer` + +A Buffer containing the response body. The Buffer contents will be streamable but is also exposed directly as `response.body`. + +#### url + +Type: `string` + +Request URL string. + +## License + +MIT © Luke Childs diff --git a/node_modules/responselike/package.json b/node_modules/responselike/package.json new file mode 100644 index 0000000..f63ecc2 --- /dev/null +++ b/node_modules/responselike/package.json @@ -0,0 +1,69 @@ +{ + "_from": "responselike@^1.0.2", + "_id": "responselike@1.0.2", + "_inBundle": false, + "_integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "_location": "/responselike", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "responselike@^1.0.2", + "name": "responselike", + "escapedName": "responselike", + "rawSpec": "^1.0.2", + "saveSpec": null, + "fetchSpec": "^1.0.2" + }, + "_requiredBy": [ + "/cacheable-request" + ], + "_resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "_shasum": "918720ef3b631c5642be068f15ade5a46f4ba1e7", + "_spec": "responselike@^1.0.2", + "_where": "D:\\Cricbuzzz\\node_modules\\cacheable-request", + "author": { + "name": "lukechilds" + }, + "bugs": { + "url": "https://github.com/lukechilds/responselike/issues" + }, + "bundleDependencies": false, + "dependencies": { + "lowercase-keys": "^1.0.0" + }, + "deprecated": false, + "description": "A response-like object for mocking a Node.js HTTP response stream", + "devDependencies": { + "ava": "^0.22.0", + "coveralls": "^2.13.1", + "eslint-config-xo-lukechilds": "^1.0.0", + "get-stream": "^3.0.0", + "nyc": "^11.1.0", + "xo": "^0.19.0" + }, + "homepage": "https://github.com/lukechilds/responselike#readme", + "keywords": [ + "http", + "https", + "response", + "mock", + "request", + "responselike" + ], + "license": "MIT", + "main": "src/index.js", + "name": "responselike", + "repository": { + "type": "git", + "url": "git+https://github.com/lukechilds/responselike.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc ava" + }, + "version": "1.0.2", + "xo": { + "extends": "xo-lukechilds" + } +} diff --git a/node_modules/responselike/src/index.js b/node_modules/responselike/src/index.js new file mode 100644 index 0000000..b17b481 --- /dev/null +++ b/node_modules/responselike/src/index.js @@ -0,0 +1,34 @@ +'use strict'; + +const Readable = require('stream').Readable; +const lowercaseKeys = require('lowercase-keys'); + +class Response extends Readable { + constructor(statusCode, headers, body, url) { + if (typeof statusCode !== 'number') { + throw new TypeError('Argument `statusCode` should be a number'); + } + if (typeof headers !== 'object') { + throw new TypeError('Argument `headers` should be an object'); + } + if (!(body instanceof Buffer)) { + throw new TypeError('Argument `body` should be a buffer'); + } + if (typeof url !== 'string') { + throw new TypeError('Argument `url` should be a string'); + } + + super(); + this.statusCode = statusCode; + this.headers = lowercaseKeys(headers); + this.body = body; + this.url = url; + } + + _read() { + this.push(this.body); + this.push(null); + } +} + +module.exports = Response; diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE new file mode 100644 index 0000000..0c068ce --- /dev/null +++ b/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/safe-buffer/README.md b/node_modules/safe-buffer/README.md new file mode 100644 index 0000000..e9a81af --- /dev/null +++ b/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.d.ts b/node_modules/safe-buffer/index.d.ts new file mode 100644 index 0000000..e9fed80 --- /dev/null +++ b/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js new file mode 100644 index 0000000..22438da --- /dev/null +++ b/node_modules/safe-buffer/index.js @@ -0,0 +1,62 @@ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json new file mode 100644 index 0000000..f06d526 --- /dev/null +++ b/node_modules/safe-buffer/package.json @@ -0,0 +1,68 @@ +{ + "_args": [ + [ + "safe-buffer@5.1.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "safe-buffer@5.1.2", + "_id": "safe-buffer@5.1.2", + "_inBundle": false, + "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "_location": "/safe-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "safe-buffer@5.1.2", + "name": "safe-buffer", + "escapedName": "safe-buffer", + "rawSpec": "5.1.2", + "saveSpec": null, + "fetchSpec": "5.1.2" + }, + "_requiredBy": [ + "/content-disposition", + "/express", + "/request", + "/tunnel-agent" + ], + "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "_spec": "5.1.2", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "description": "Safer Node.js Buffer API", + "devDependencies": { + "standard": "*", + "tape": "^4.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "name": "safe-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + }, + "types": "index.d.ts", + "version": "5.1.2" +} diff --git a/node_modules/safer-buffer/LICENSE b/node_modules/safer-buffer/LICENSE new file mode 100644 index 0000000..4fe9e6f --- /dev/null +++ b/node_modules/safer-buffer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Nikita Skovoroda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/safer-buffer/Porting-Buffer.md b/node_modules/safer-buffer/Porting-Buffer.md new file mode 100644 index 0000000..68d86ba --- /dev/null +++ b/node_modules/safer-buffer/Porting-Buffer.md @@ -0,0 +1,268 @@ +# Porting to the Buffer.from/Buffer.alloc API + + +## Overview + +- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*) +- [Variant 2: Use a polyfill](#variant-2) +- [Variant 3: manual detection, with safeguards](#variant-3) + +### Finding problematic bits of code using grep + +Just run `grep -nrE '[^a-zA-Z](Slow)?Buffer\s*\(' --exclude-dir node_modules`. + +It will find all the potentially unsafe places in your own code (with some considerably unlikely +exceptions). + +### Finding problematic bits of code using Node.js 8 + +If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code: + +- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js. +- `--trace-deprecation` does the same thing, but only for deprecation warnings. +- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8. + +You can set these flags using an environment variable: + +```console +$ export NODE_OPTIONS='--trace-warnings --pending-deprecation' +$ cat example.js +'use strict'; +const foo = new Buffer('foo'); +$ node example.js +(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead. + at showFlaggedDeprecation (buffer.js:127:13) + at new Buffer (buffer.js:148:3) + at Object. (/path/to/example.js:2:13) + [... more stack trace lines ...] +``` + +### Finding problematic bits of code using linters + +Eslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +also find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets. + +There is a drawback, though, that it doesn't always +[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is +overriden e.g. with a polyfill, so recommended is a combination of this and some other method +described above. + + +## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x. + +This is the recommended solution nowadays that would imply only minimal overhead. + +The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible. + +What you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way: + +- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`. +- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`). +- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`. + +Note that `Buffer.alloc()` is also _faster_ on the current Node.js versions than +`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended to avoid accidential unsafe Buffer API usage. + +There is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005) +for automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`. +Note that it currently only works with cases where the arguments are literals or where the +constructor is invoked with two arguments. + +_If you currently support those older Node.js versions and dropping them would be a semver-major change +for you, or if you support older branches of your packages, consider using [Variant 2](#variant-2) +or [Variant 3](#variant-3) on older branches, so people using those older branches will also receive +the fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and +your users will not observe a runtime deprecation warning when running your code on Node.js 10._ + + +## Variant 2: Use a polyfill + +Utilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older +Node.js versions. + +You would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill +`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api. + +Make sure that you do not use old `new Buffer` API — in any files where the line above is added, +using old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though. + +Alternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or +[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) — +those are great, the only downsides being 4 deps in the tree and slightly more code changes to +migrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only +`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies. + +_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also +provides a polyfill, but takes a different approach which has +[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you +to also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as +it is problematic, can cause issues in your code, and will start emitting runtime deprecation +warnings starting with Node.js 10._ + +Note that in either case, it is important that you also remove all calls to the old Buffer +API manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides +a polyfill for the new API. I have seen people doing that mistake. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended. + +_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._ + + +## Variant 3 — manual detection, with safeguards + +This is useful if you create Buffer instances in only a few places (e.g. one), or you have your own +wrapper around them. + +### Buffer(0) + +This special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which +returns the same result all the way down to Node.js 0.8.x. + +### Buffer(notNumber) + +Before: + +```js +var buf = new Buffer(notNumber, encoding); +``` + +After: + +```js +var buf; +if (Buffer.from && Buffer.from !== Uint8Array.from) { + buf = Buffer.from(notNumber, encoding); +} else { + if (typeof notNumber === 'number') + throw new Error('The "size" argument must be of type number.'); + buf = new Buffer(notNumber, encoding); +} +``` + +`encoding` is optional. + +Note that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not +hard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the +Buffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous +security issues — situations when unsanitized user input could end up in the `Buffer(arg)` create +problems ranging from DoS to leaking sensitive information to the attacker from the process memory. + +When `notNumber` argument is hardcoded (e.g. literal `"abc"` or `[0,1,2]`), the `typeof` check can +be omitted. + +Also note that using TypeScript does not fix this problem for you — when libs written in +`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as +all type checks are translation-time only and are not present in the actual JS code which TS +compiles to. + +### Buffer(number) + +For Node.js 0.10.x (and below) support: + +```js +var buf; +if (Buffer.alloc) { + buf = Buffer.alloc(number); +} else { + buf = new Buffer(number); + buf.fill(0); +} +``` + +Otherwise (Node.js ≥ 0.12.x): + +```js +const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0); +``` + +## Regarding Buffer.allocUnsafe + +Be extra cautious when using `Buffer.allocUnsafe`: + * Don't use it if you don't have a good reason to + * e.g. you probably won't ever see a performance difference for small buffers, in fact, those + might be even faster with `Buffer.alloc()`, + * if your code is not in the hot code path — you also probably won't notice a difference, + * keep in mind that zero-filling minimizes the potential risks. + * If you use it, make sure that you never return the buffer in a partially-filled state, + * if you are writing to it sequentially — always truncate it to the actuall written length + +Errors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues, +ranged from undefined behaviour of your code to sensitive data (user input, passwords, certs) +leaking to the remote attacker. + +_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js +version (and lacking type checks also adds DoS to the list of potential problems)._ + + +## FAQ + + +### What is wrong with the `Buffer` constructor? + +The `Buffer` constructor could be used to create a buffer in many different ways: + +- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained + *arbitrary memory* for performance reasons, which could include anything ranging from + program source code to passwords and encryption keys. +- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of + the string `'abc'`. A second argument could specify another encoding: For example, + `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original + sequence of bytes that it represents. +- There are several other combinations of arguments. + +This meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell +what exactly the contents of the generated buffer are* without knowing the type of `foo`. + +Sometimes, the value of `foo` comes from an external source. For example, this function +could be exposed as a service on a web server, converting a UTF-8 string into its Base64 form: + +``` +function stringToBase64(req, res) { + // The request body should have the format of `{ string: 'foobar' }` + const rawBytes = new Buffer(req.body.string) + const encoded = rawBytes.toString('base64') + res.end({ encoded: encoded }) +} +``` + +Note that this code does *not* validate the type of `req.body.string`: + +- `req.body.string` is expected to be a string. If this is the case, all goes well. +- `req.body.string` is controlled by the client that sends the request. +- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes: + - Before Node.js 8, the content would be uninitialized + - After Node.js 8, the content would be `50` bytes with the value `0` + +Because of the missing type check, an attacker could intentionally send a number +as part of the request. Using this, they can either: + +- Read uninitialized memory. This **will** leak passwords, encryption keys and other + kinds of sensitive information. (Information leak) +- Force the program to allocate a large amount of memory. For example, when specifying + `500000000` as the input value, each request will allocate 500MB of memory. + This can be used to either exhaust the memory available of a program completely + and make it crash, or slow it down significantly. (Denial of Service) + +Both of these scenarios are considered serious security issues in a real-world +web server context. + +when using `Buffer.from(req.body.string)` instead, passing a number will always +throw an exception instead, giving a controlled behaviour that can always be +handled by the program. + + +### The `Buffer()` constructor has been deprecated for a while. Is this really an issue? + +Surveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still +widely used. This includes new code, and overall usage of such code has actually been +*increasing*. diff --git a/node_modules/safer-buffer/Readme.md b/node_modules/safer-buffer/Readme.md new file mode 100644 index 0000000..14b0822 --- /dev/null +++ b/node_modules/safer-buffer/Readme.md @@ -0,0 +1,156 @@ +# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url] + +[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master +[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer +[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg +[npm-url]: https://npmjs.org/package/safer-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com +[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg +[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md + +Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current. + +## How to use? + +First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API. + +Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use +`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new +Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._ + +Also, see the +[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide. + +## Do I need it? + +Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that +is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()` +though. + +See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) +for a better description. + +## Why not [safe-buffer](https://npmjs.com/safe-buffer)? + +_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and +itself contains footguns._ + +`safe-buffer` could be used safely to get the new API while still keeping support for older +Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API +I found out that `safe-buffer` is itself causing problems in some cases. + +For example, consider the following snippet: + +```console +$ cat example.unsafe.js +console.log(Buffer(20)) +$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js + +$ standard example.unsafe.js +standard: Use JavaScript Standard Style (https://standardjs.com) + /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead. +``` + +This is allocates and writes to console an uninitialized chunk of memory. +[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people +to avoid using unsafe API. + +Let's now throw in `safe-buffer`! + +```console +$ cat example.safe-buffer.js +const Buffer = require('safe-buffer').Buffer +console.log(Buffer(20)) +$ standard example.safe-buffer.js +$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js + +``` + +See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior +remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out +chunks of uninitialized memory. +_And this code will still emit runtime warnings on Node.js 10.x and above._ + +That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or +emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some +discussion, it was decided to move my approach into a separate package, and _this is that separate +package_. + +This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing, +«fixing» the lint warning by blindly including `safe-buffer` without any actual changes. + +Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request +can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go +unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even +pass CI. _I also observed that being done in popular packages._ + +Some examples: + * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31) + (a module with 548 759 downloads/month), + * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61) + (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)), + * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c) + (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)), + * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec) + (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)), + * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1) + (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)). + * And there are a lot more over the ecosystem. + +I filed a PR at +[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to +partially fix that (for cases when that lint rule is used), but it is a semver-major change for +linter rules and presets, so it would take significant time for that to reach actual setups. +_It also hasn't been released yet (2018-03-20)._ + +Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake. +It still supports it with an explicit concern barier, by placing it under +`require('safer-buffer/dangereous')`. + +## But isn't throwing bad? + +Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like +unguarded `new Buffer()` calls that end up receiving user input can do. + +This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so +it is really simple to keep track of things and make sure that you don't mix old API usage with that. +Also, CI should hint anything that you might have missed. + +New commits, if tested, won't land new usage of unsafe Buffer API this way. +_Node.js 10.x also deals with that by printing a runtime depecation warning._ + +### Would it affect third-party modules? + +No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`. +Don't do that. + +### But I don't want throwing… + +That is also fine! + +Also, it could be better in some cases when you don't comprehensive enough test coverage. + +In that case — just don't override `Buffer` and use +`var SaferBuffer = require('safer-buffer').Buffer` instead. + +That way, everything using `Buffer` natively would still work, but there would be two drawbacks: + +* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and + `SaferBuffer.alloc` instead. +* You are still open to accidentally using the insecure deprecated API — use a linter to catch that. + +Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly +recommended. `Buffer` is not overriden in this usecase, so linters won't get confused. + +## «Without footguns»? + +Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property +on older versions and duping things from there. You shouldn't do that in your code, probabably. + +The intention is to remove the most significant footguns that affect lots of packages in the +ecosystem, and to do it in the proper way. + +Also, this package doesn't protect against security issues affecting some Node.js versions, so for +usage in your own production code, it is still recommended to update to a Node.js version +[supported by upstream](https://github.com/nodejs/release#release-schedule). diff --git a/node_modules/safer-buffer/dangerous.js b/node_modules/safer-buffer/dangerous.js new file mode 100644 index 0000000..ca41fdc --- /dev/null +++ b/node_modules/safer-buffer/dangerous.js @@ -0,0 +1,58 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer +var safer = require('./safer.js') +var Safer = safer.Buffer + +var dangerous = {} + +var key + +for (key in safer) { + if (!safer.hasOwnProperty(key)) continue + dangerous[key] = safer[key] +} + +var Dangereous = dangerous.Buffer = {} + +// Copy Safer API +for (key in Safer) { + if (!Safer.hasOwnProperty(key)) continue + Dangereous[key] = Safer[key] +} + +// Copy those missing unsafe methods, if they are present +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (Dangereous.hasOwnProperty(key)) continue + Dangereous[key] = Buffer[key] +} + +if (!Dangereous.allocUnsafe) { + Dangereous.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return Buffer(size) + } +} + +if (!Dangereous.allocUnsafeSlow) { + Dangereous.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return buffer.SlowBuffer(size) + } +} + +module.exports = dangerous diff --git a/node_modules/safer-buffer/package.json b/node_modules/safer-buffer/package.json new file mode 100644 index 0000000..78a4b33 --- /dev/null +++ b/node_modules/safer-buffer/package.json @@ -0,0 +1,66 @@ +{ + "_args": [ + [ + "safer-buffer@2.1.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "safer-buffer@2.1.2", + "_id": "safer-buffer@2.1.2", + "_inBundle": false, + "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "_location": "/safer-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "safer-buffer@2.1.2", + "name": "safer-buffer", + "escapedName": "safer-buffer", + "rawSpec": "2.1.2", + "saveSpec": null, + "fetchSpec": "2.1.2" + }, + "_requiredBy": [ + "/asn1", + "/ecc-jsbn", + "/iconv-lite", + "/sshpk" + ], + "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "_spec": "2.1.2", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Nikita Skovoroda", + "email": "chalkerx@gmail.com", + "url": "https://github.com/ChALkeR" + }, + "bugs": { + "url": "https://github.com/ChALkeR/safer-buffer/issues" + }, + "description": "Modern Buffer API polyfill without footguns", + "devDependencies": { + "standard": "^11.0.1", + "tape": "^4.9.0" + }, + "files": [ + "Porting-Buffer.md", + "Readme.md", + "tests.js", + "dangerous.js", + "safer.js" + ], + "homepage": "https://github.com/ChALkeR/safer-buffer#readme", + "license": "MIT", + "main": "safer.js", + "name": "safer-buffer", + "repository": { + "type": "git", + "url": "git+https://github.com/ChALkeR/safer-buffer.git" + }, + "scripts": { + "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", + "test": "standard && tape tests.js" + }, + "version": "2.1.2" +} diff --git a/node_modules/safer-buffer/safer.js b/node_modules/safer-buffer/safer.js new file mode 100644 index 0000000..37c7e1a --- /dev/null +++ b/node_modules/safer-buffer/safer.js @@ -0,0 +1,77 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer + +var safer = {} + +var key + +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue + if (key === 'SlowBuffer' || key === 'Buffer') continue + safer[key] = buffer[key] +} + +var Safer = safer.Buffer = {} +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue + Safer[key] = Buffer[key] +} + +safer.Buffer.prototype = Buffer.prototype + +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) + } + return Buffer(value, encodingOrOffset, length) + } +} + +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + var buf = Buffer(size) + if (!fill || fill.length === 0) { + buf.fill(0) + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + return buf + } +} + +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} + +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + } + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength + } +} + +module.exports = safer diff --git a/node_modules/safer-buffer/tests.js b/node_modules/safer-buffer/tests.js new file mode 100644 index 0000000..7ed2777 --- /dev/null +++ b/node_modules/safer-buffer/tests.js @@ -0,0 +1,406 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var test = require('tape') + +var buffer = require('buffer') + +var index = require('./') +var safer = require('./safer') +var dangerous = require('./dangerous') + +/* Inheritance tests */ + +test('Default is Safer', function (t) { + t.equal(index, safer) + t.notEqual(safer, dangerous) + t.notEqual(index, dangerous) + t.end() +}) + +test('Is not a function', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'object') + }); + [buffer].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'function') + }) + t.end() +}) + +test('Constructor throws', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer() }) + t.throws(function () { impl.Buffer(0) }) + t.throws(function () { impl.Buffer('a') }) + t.throws(function () { impl.Buffer('a', 'utf-8') }) + t.throws(function () { return new impl.Buffer() }) + t.throws(function () { return new impl.Buffer(0) }) + t.throws(function () { return new impl.Buffer('a') }) + t.throws(function () { return new impl.Buffer('a', 'utf-8') }) + }) + t.end() +}) + +test('Safe methods exist', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.alloc, 'function', 'alloc') + t.equal(typeof impl.Buffer.from, 'function', 'from') + }) + t.end() +}) + +test('Unsafe methods exist only in Dangerous', function (t) { + [index, safer].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'undefined') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'undefined') + }); + [dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'function') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'function') + }) + t.end() +}) + +test('Generic methods/properties are defined and equal', function (t) { + ['poolSize', 'isBuffer', 'concat', 'byteLength'].forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in buffer static methods/properties are inherited', function (t) { + Object.keys(buffer).forEach(function (method) { + if (method === 'SlowBuffer' || method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], buffer[method], method) + t.notEqual(typeof impl[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in Buffer static methods/properties are inherited', function (t) { + Object.keys(buffer.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('.prototype property of Buffer is inherited', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.prototype, buffer.Buffer.prototype, 'prototype') + t.notEqual(typeof impl.Buffer.prototype, 'undefined', 'prototype') + }) + t.end() +}) + +test('All Safer methods are present in Dangerous', function (t) { + Object.keys(safer).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], safer[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(safer.Buffer).forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], safer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Safe methods from Dangerous methods are present in Safer', function (t) { + Object.keys(dangerous).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], dangerous[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(dangerous.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], dangerous.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +/* Behaviour tests */ + +test('Methods return Buffers', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 'a'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10, 'x'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(9, 'ab'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(''))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string', 'utf-8'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([0, 42, 3]))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(new Uint8Array([0, 42, 3])))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([]))) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](0))) + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](10))) + }) + t.end() +}) + +test('Constructor is buffer.Buffer', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 'a').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10, 'x').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(9, 'ab').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string', 'utf-8').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').constructor, buffer.Buffer) + t.equal(impl.Buffer.from([0, 42, 3]).constructor, buffer.Buffer) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).constructor, buffer.Buffer) + t.equal(impl.Buffer.from([]).constructor, buffer.Buffer) + }); + [0, 10, 100].forEach(function (arg) { + t.equal(dangerous.Buffer.allocUnsafe(arg).constructor, buffer.Buffer) + t.equal(dangerous.Buffer.allocUnsafeSlow(arg).constructor, buffer.SlowBuffer(0).constructor) + }) + t.end() +}) + +test('Invalid calls throw', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer.from(0) }) + t.throws(function () { impl.Buffer.from(10) }) + t.throws(function () { impl.Buffer.from(10, 'utf-8') }) + t.throws(function () { impl.Buffer.from('string', 'invalid encoding') }) + t.throws(function () { impl.Buffer.from(-10) }) + t.throws(function () { impl.Buffer.from(1e90) }) + t.throws(function () { impl.Buffer.from(Infinity) }) + t.throws(function () { impl.Buffer.from(-Infinity) }) + t.throws(function () { impl.Buffer.from(NaN) }) + t.throws(function () { impl.Buffer.from(null) }) + t.throws(function () { impl.Buffer.from(undefined) }) + t.throws(function () { impl.Buffer.from() }) + t.throws(function () { impl.Buffer.from({}) }) + t.throws(function () { impl.Buffer.alloc('') }) + t.throws(function () { impl.Buffer.alloc('string') }) + t.throws(function () { impl.Buffer.alloc('string', 'utf-8') }) + t.throws(function () { impl.Buffer.alloc('b25ldHdvdGhyZWU=', 'base64') }) + t.throws(function () { impl.Buffer.alloc(-10) }) + t.throws(function () { impl.Buffer.alloc(1e90) }) + t.throws(function () { impl.Buffer.alloc(2 * (1 << 30)) }) + t.throws(function () { impl.Buffer.alloc(Infinity) }) + t.throws(function () { impl.Buffer.alloc(-Infinity) }) + t.throws(function () { impl.Buffer.alloc(null) }) + t.throws(function () { impl.Buffer.alloc(undefined) }) + t.throws(function () { impl.Buffer.alloc() }) + t.throws(function () { impl.Buffer.alloc([]) }) + t.throws(function () { impl.Buffer.alloc([0, 42, 3]) }) + t.throws(function () { impl.Buffer.alloc({}) }) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.throws(function () { dangerous.Buffer[method]('') }) + t.throws(function () { dangerous.Buffer[method]('string') }) + t.throws(function () { dangerous.Buffer[method]('string', 'utf-8') }) + t.throws(function () { dangerous.Buffer[method](2 * (1 << 30)) }) + t.throws(function () { dangerous.Buffer[method](Infinity) }) + if (dangerous.Buffer[method] === buffer.Buffer.allocUnsafe) { + t.skip('Skipping, older impl of allocUnsafe coerced negative sizes to 0') + } else { + t.throws(function () { dangerous.Buffer[method](-10) }) + t.throws(function () { dangerous.Buffer[method](-1e90) }) + t.throws(function () { dangerous.Buffer[method](-Infinity) }) + } + t.throws(function () { dangerous.Buffer[method](null) }) + t.throws(function () { dangerous.Buffer[method](undefined) }) + t.throws(function () { dangerous.Buffer[method]() }) + t.throws(function () { dangerous.Buffer[method]([]) }) + t.throws(function () { dangerous.Buffer[method]([0, 42, 3]) }) + t.throws(function () { dangerous.Buffer[method]({}) }) + }) + t.end() +}) + +test('Buffers have appropriate lengths', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).length, 0) + t.equal(impl.Buffer.alloc(10).length, 10) + t.equal(impl.Buffer.from('').length, 0) + t.equal(impl.Buffer.from('string').length, 6) + t.equal(impl.Buffer.from('string', 'utf-8').length, 6) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').length, 11) + t.equal(impl.Buffer.from([0, 42, 3]).length, 3) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).length, 3) + t.equal(impl.Buffer.from([]).length, 0) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.equal(dangerous.Buffer[method](0).length, 0) + t.equal(dangerous.Buffer[method](10).length, 10) + }) + t.end() +}) + +test('Buffers have appropriate lengths (2)', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true; + [ safer.Buffer.alloc, + dangerous.Buffer.allocUnsafe, + dangerous.Buffer.allocUnsafeSlow + ].forEach(function (method) { + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 1e5) + var buf = method(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + } + }) + t.ok(ok) + t.end() +}) + +test('.alloc(size) is zero-filled and has correct length', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = index.Buffer.alloc(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.allocUnsafe / .allocUnsafeSlow are fillable and have correct lengths', function (t) { + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = dangerous.Buffer[method](length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + buf.fill(0, 0, length) + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1, 0, length) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok, method) + }) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.deepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 97)) + t.notDeepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 98)) + + var tmp = new buffer.Buffer(2) + tmp.fill('ok') + if (tmp[1] === tmp[0]) { + // Outdated Node.js + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('ooooo')) + } else { + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('okoko')) + } + t.notDeepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('kokok')) + + t.end() +}) + +test('safer.Buffer.from returns results same as Buffer constructor', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), new buffer.Buffer('')) + t.deepEqual(impl.Buffer.from('string'), new buffer.Buffer('string')) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), new buffer.Buffer('string', 'utf-8')) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), new buffer.Buffer('b25ldHdvdGhyZWU=', 'base64')) + t.deepEqual(impl.Buffer.from([0, 42, 3]), new buffer.Buffer([0, 42, 3])) + t.deepEqual(impl.Buffer.from(new Uint8Array([0, 42, 3])), new buffer.Buffer(new Uint8Array([0, 42, 3]))) + t.deepEqual(impl.Buffer.from([]), new buffer.Buffer([])) + }) + t.end() +}) + +test('safer.Buffer.from returns consistent results', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from([]), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from(new Uint8Array([])), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), impl.Buffer.from('string')) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from([115, 116, 114, 105, 110, 103])) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from(impl.Buffer.from('string'))) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), impl.Buffer.from('onetwothree')) + t.notDeepEqual(impl.Buffer.from('b25ldHdvdGhyZWU='), impl.Buffer.from('onetwothree')) + }) + t.end() +}) diff --git a/node_modules/semver-diff/index.d.ts b/node_modules/semver-diff/index.d.ts new file mode 100644 index 0000000..d6f6a42 --- /dev/null +++ b/node_modules/semver-diff/index.d.ts @@ -0,0 +1,58 @@ +declare namespace semverDiff { + type Result = + | 'major' + | 'premajor' + | 'minor' + | 'preminor' + | 'patch' + | 'prepatch' + | 'prerelease' + | 'build'; +} + +/** +Get the diff type of two [semver](https://github.com/npm/node-semver) versions: `0.0.1 0.0.2` → `patch`. + +@returns The difference type between two semver versions, or `undefined` if they're identical or the second one is lower than the first. + +@example +``` +import semverDiff = require('semver-diff'); + +semverDiff('1.1.1', '1.1.2'); +//=> 'patch' + +semverDiff('1.1.1-foo', '1.1.2'); +//=> 'prepatch' + +semverDiff('0.0.1', '1.0.0'); +//=> 'major' + +semverDiff('0.0.1-foo', '1.0.0'); +//=> 'premajor' + +semverDiff('0.0.1', '0.1.0'); +//=> 'minor' + +semverDiff('0.0.1-foo', '0.1.0'); +//=> 'preminor' + +semverDiff('0.0.1-foo', '0.0.1-foo.bar'); +//=> 'prerelease' + +semverDiff('0.1.0', '0.1.0+foo'); +//=> 'build' + +semverDiff('0.0.1', '0.0.1'); +//=> undefined + +semverDiff('0.0.2', '0.0.1'); +//=> undefined +``` +*/ +declare function semverDiff( + versionA: string, + versionB: string +): semverDiff.Result | undefined; + +export = semverDiff; diff --git a/node_modules/semver-diff/index.js b/node_modules/semver-diff/index.js new file mode 100644 index 0000000..5521801 --- /dev/null +++ b/node_modules/semver-diff/index.js @@ -0,0 +1,13 @@ +'use strict'; +const semver = require('semver'); + +module.exports = (versionA, versionB) => { + versionA = semver.parse(versionA); + versionB = semver.parse(versionB); + + if (semver.compareBuild(versionA, versionB) >= 0) { + return; + } + + return semver.diff(versionA, versionB) || 'build'; +}; diff --git a/node_modules/semver-diff/license b/node_modules/semver-diff/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/semver-diff/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/semver-diff/node_modules/.bin/semver b/node_modules/semver-diff/node_modules/.bin/semver new file mode 100644 index 0000000..7e36527 --- /dev/null +++ b/node_modules/semver-diff/node_modules/.bin/semver @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" + ret=$? +else + node "$basedir/../semver/bin/semver.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/semver-diff/node_modules/.bin/semver.cmd b/node_modules/semver-diff/node_modules/.bin/semver.cmd new file mode 100644 index 0000000..164cdea --- /dev/null +++ b/node_modules/semver-diff/node_modules/.bin/semver.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\semver\bin\semver.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/semver-diff/node_modules/.bin/semver.ps1 b/node_modules/semver-diff/node_modules/.bin/semver.ps1 new file mode 100644 index 0000000..6a85e34 --- /dev/null +++ b/node_modules/semver-diff/node_modules/.bin/semver.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../semver/bin/semver.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/semver-diff/node_modules/semver/CHANGELOG.md b/node_modules/semver-diff/node_modules/semver/CHANGELOG.md new file mode 100644 index 0000000..f567dd3 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/CHANGELOG.md @@ -0,0 +1,70 @@ +# changes log + +## 6.2.0 + +* Coerce numbers to strings when passed to semver.coerce() +* Add `rtl` option to coerce from right to left + +## 6.1.3 + +* Handle X-ranges properly in includePrerelease mode + +## 6.1.2 + +* Do not throw when testing invalid version strings + +## 6.1.1 + +* Add options support for semver.coerce() +* Handle undefined version passed to Range.test + +## 6.1.0 + +* Add semver.compareBuild function +* Support `*` in semver.intersects + +## 6.0 + +* Fix `intersects` logic. + + This is technically a bug fix, but since it is also a change to behavior + that may require users updating their code, it is marked as a major + version increment. + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/semver-diff/node_modules/semver/LICENSE b/node_modules/semver-diff/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver-diff/node_modules/semver/README.md b/node_modules/semver-diff/node_modules/semver/README.md new file mode 100644 index 0000000..2293a14 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/README.md @@ -0,0 +1,443 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version, options)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string, and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). + +If the `options.rtl` flag is set, then `coerce` will return the right-most +coercible tuple that does not share an ending index with a longer coercible +tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not +`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of +any other overlapping SemVer tuple. + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `2.1.5` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` diff --git a/node_modules/semver-diff/node_modules/semver/bin/semver.js b/node_modules/semver-diff/node_modules/semver/bin/semver.js new file mode 100644 index 0000000..666034a --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/bin/semver.js @@ -0,0 +1,174 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + +var versions = [] + +var range = [] + +var inc = null + +var version = require('../package.json').version + +var loose = false + +var includePrerelease = false + +var coerce = false + +var rtl = false + +var identifier + +var semver = require('../semver') + +var reverse = false + +var options = {} + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '--rtl': + rtl = true + break + case '--ltr': + rtl = false + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } + + versions = versions.map(function (v) { + return coerce ? (semver.coerce(v, options) || { version: v }).version : v + }).filter(function (v) { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (var i = 0, l = range.length; i < l; i++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error('--inc can only be used on a single version with no range') + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? 'rcompare' : 'compare' + versions.sort(function (a, b) { + return semver[compare](a, b, options) + }).map(function (v) { + return semver.clean(v, options) + }).map(function (v) { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach(function (v, i, _) { console.log(v) }) +} + +function help () { + console.log(['SemVer ' + version, + '', + 'A JavaScript implementation of the https://semver.org/ specification', + 'Copyright Isaac Z. Schlueter', + '', + 'Usage: semver [options] [ [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range ', + ' Print versions that match the specified range.', + '', + '-i --increment []', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid ', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + '--rtl', + ' Coerce version strings right to left', + '', + '--ltr', + ' Coerce version strings left to right (default)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/node_modules/semver-diff/node_modules/semver/package.json b/node_modules/semver-diff/node_modules/semver/package.json new file mode 100644 index 0000000..52dd5b4 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/package.json @@ -0,0 +1,60 @@ +{ + "_from": "semver@^6.3.0", + "_id": "semver@6.3.0", + "_inBundle": false, + "_integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "_location": "/semver-diff/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@^6.3.0", + "name": "semver", + "escapedName": "semver", + "rawSpec": "^6.3.0", + "saveSpec": null, + "fetchSpec": "^6.3.0" + }, + "_requiredBy": [ + "/semver-diff" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "_shasum": "ee0a64c8af5e8ceea67687b133761e1becbd1d3d", + "_spec": "semver@^6.3.0", + "_where": "D:\\Cricbuzzz\\node_modules\\semver-diff", + "bin": { + "semver": "bin/semver.js" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^14.3.1" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "postpublish": "git push origin --follow-tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "check-coverage": true + }, + "version": "6.3.0" +} diff --git a/node_modules/semver-diff/node_modules/semver/range.bnf b/node_modules/semver-diff/node_modules/semver/range.bnf new file mode 100644 index 0000000..d4c6ae0 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver-diff/node_modules/semver/semver.js b/node_modules/semver-diff/node_modules/semver/semver.js new file mode 100644 index 0000000..636fa43 --- /dev/null +++ b/node_modules/semver-diff/node_modules/semver/semver.js @@ -0,0 +1,1596 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var t = exports.tokens = {} +var R = 0 + +function tok (n) { + t[n] = R++ +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +tok('NUMERICIDENTIFIER') +src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' +tok('NUMERICIDENTIFIERLOOSE') +src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +tok('NONNUMERICIDENTIFIER') +src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +tok('MAINVERSION') +src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')' + +tok('MAINVERSIONLOOSE') +src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +tok('PRERELEASEIDENTIFIER') +src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' + +tok('PRERELEASEIDENTIFIERLOOSE') +src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +tok('PRERELEASE') +src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' + +tok('PRERELEASELOOSE') +src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +tok('BUILDIDENTIFIER') +src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +tok('BUILD') +src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + + '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +tok('FULL') +tok('FULLPLAIN') +src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + + src[t.PRERELEASE] + '?' + + src[t.BUILD] + '?' + +src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +tok('LOOSEPLAIN') +src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + + src[t.PRERELEASELOOSE] + '?' + + src[t.BUILD] + '?' + +tok('LOOSE') +src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' + +tok('GTLT') +src[t.GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +tok('XRANGEIDENTIFIERLOOSE') +src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +tok('XRANGEIDENTIFIER') +src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' + +tok('XRANGEPLAIN') +src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:' + src[t.PRERELEASE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGEPLAINLOOSE') +src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[t.PRERELEASELOOSE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGE') +src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' +tok('XRANGELOOSE') +src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +tok('COERCE') +src[t.COERCE] = '(^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' +tok('COERCERTL') +re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +tok('LONETILDE') +src[t.LONETILDE] = '(?:~>?)' + +tok('TILDETRIM') +src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' +re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +tok('TILDE') +src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' +tok('TILDELOOSE') +src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +tok('LONECARET') +src[t.LONECARET] = '(?:\\^)' + +tok('CARETTRIM') +src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' +re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +tok('CARET') +src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' +tok('CARETLOOSE') +src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +tok('COMPARATORLOOSE') +src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' +tok('COMPARATOR') +src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +tok('COMPARATORTRIM') +src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + + '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +tok('HYPHENRANGE') +src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAIN] + ')' + + '\\s*$' + +tok('HYPHENRANGELOOSE') +src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +tok('STAR') +src[t.STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +SemVer.prototype.compareBuild = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + var i = 0 + do { + var a = this.build[i] + var b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.compareBuild = compareBuild +function compareBuild (a, b, loose) { + var versionA = new SemVer(a, loose) + var versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(b, a, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + if (this.value === '') { + return true + } + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return ( + isSatisfiable(thisComparators, options) && + range.set.some(function (rangeComparators) { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every(function (thisComparator) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) +} + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +function isSatisfiable (comparators, options) { + var result = true + var remainingComparators = comparators.slice() + var testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every(function (otherComparator) { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + pr + } else if (xm) { + ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr + } else if (xp) { + ret = '>=' + M + '.' + m + '.0' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + pr + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version, options) { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + var match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + var next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) { + return null + } + + return parse(match[2] + + '.' + (match[3] || '0') + + '.' + (match[4] || '0'), options) +} diff --git a/node_modules/semver-diff/package.json b/node_modules/semver-diff/package.json new file mode 100644 index 0000000..a4cd47e --- /dev/null +++ b/node_modules/semver-diff/package.json @@ -0,0 +1,69 @@ +{ + "_from": "semver-diff@^3.1.1", + "_id": "semver-diff@3.1.1", + "_inBundle": false, + "_integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "_location": "/semver-diff", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver-diff@^3.1.1", + "name": "semver-diff", + "escapedName": "semver-diff", + "rawSpec": "^3.1.1", + "saveSpec": null, + "fetchSpec": "^3.1.1" + }, + "_requiredBy": [ + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "_shasum": "05f77ce59f325e00e2706afd67bb506ddb1ca32b", + "_spec": "semver-diff@^3.1.1", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/semver-diff/issues" + }, + "bundleDependencies": false, + "dependencies": { + "semver": "^6.3.0" + }, + "deprecated": false, + "description": "Get the diff type of two semver versions: 0.0.1 0.0.2 → patch", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/semver-diff#readme", + "keywords": [ + "semver", + "version", + "semantic", + "diff", + "difference" + ], + "license": "MIT", + "name": "semver-diff", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/semver-diff.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "3.1.1" +} diff --git a/node_modules/semver-diff/readme.md b/node_modules/semver-diff/readme.md new file mode 100644 index 0000000..6e21aff --- /dev/null +++ b/node_modules/semver-diff/readme.md @@ -0,0 +1,77 @@ +# semver-diff [![Build Status](https://travis-ci.org/sindresorhus/semver-diff.svg?branch=master)](https://travis-ci.org/sindresorhus/semver-diff) + +> Get the diff type of two [semver](https://github.com/npm/node-semver) versions: `0.0.1 0.0.2` → `patch` + + +## Install + +``` +$ npm install semver-diff +``` + + +## Usage + +```js +const semverDiff = require('semver-diff'); + +semverDiff('1.1.1', '1.1.2'); +//=> 'patch' + +semverDiff('1.1.1-foo', '1.1.2'); +//=> 'prepatch' + +semverDiff('0.0.1', '1.0.0'); +//=> 'major' + +semverDiff('0.0.1-foo', '1.0.0'); +//=> 'premajor' + +semverDiff('0.0.1', '0.1.0'); +//=> 'minor' + +semverDiff('0.0.1-foo', '0.1.0'); +//=> 'preminor' + +semverDiff('0.0.1-foo', '0.0.1-foo.bar'); +//=> 'prerelease' + +semverDiff('0.1.0', '0.1.0+foo'); +//=> 'build' + +semverDiff('0.0.1', '0.0.1'); +//=> undefined + +semverDiff('0.0.2', '0.0.1'); +//=> undefined +``` + + +## API + +### semverDiff(versionA, versionB) + +Returns the difference type between two semver versions, or `undefined` if they're identical or the second one is lower than the first. + +Possible values: `'major'`, `'premajor'`, `'minor'`, `'preminor'`, `'patch'`, `'prepatch'`, `'prerelease'`, `'build'`, `undefined`. + + +## Related + +- [latest-semver](https://github.com/sindresorhus/latest-semver) - Get the latest stable semver version from an array of versions +- [to-semver](https://github.com/sindresorhus/to-semver) - Get an array of valid, sorted, and cleaned semver versions from an array of strings +- [semver-regex](https://github.com/sindresorhus/semver-regex) - Regular expression for matching semver versions +- [semver-truncate](https://github.com/sindresorhus/semver-truncate) - Truncate a semver version: `1.2.3` → `1.2.0` + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/semver/CHANGELOG.md b/node_modules/semver/CHANGELOG.md new file mode 100644 index 0000000..66304fd --- /dev/null +++ b/node_modules/semver/CHANGELOG.md @@ -0,0 +1,39 @@ +# changes log + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 0000000..f8dfa5a --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,412 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install --save semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero digit in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string, and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver new file mode 100644 index 0000000..801e77f --- /dev/null +++ b/node_modules/semver/bin/semver @@ -0,0 +1,160 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + +var versions = [] + +var range = [] + +var inc = null + +var version = require('../package.json').version + +var loose = false + +var includePrerelease = false + +var coerce = false + +var identifier + +var semver = require('../semver') + +var reverse = false + +var options = {} + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + var options = { loose: loose, includePrerelease: includePrerelease } + + versions = versions.map(function (v) { + return coerce ? (semver.coerce(v) || { version: v }).version : v + }).filter(function (v) { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (var i = 0, l = range.length; i < l; i++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error('--inc can only be used on a single version with no range') + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? 'rcompare' : 'compare' + versions.sort(function (a, b) { + return semver[compare](a, b, options) + }).map(function (v) { + return semver.clean(v, options) + }).map(function (v) { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach(function (v, i, _) { console.log(v) }) +} + +function help () { + console.log(['SemVer ' + version, + '', + 'A JavaScript implementation of the https://semver.org/ specification', + 'Copyright Isaac Z. Schlueter', + '', + 'Usage: semver [options] [ [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range ', + ' Print versions that match the specified range.', + '', + '-i --increment []', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid ', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 0000000..1707682 --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,60 @@ +{ + "_from": "semver@^5.7.1", + "_id": "semver@5.7.1", + "_inBundle": false, + "_integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "_location": "/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@^5.7.1", + "name": "semver", + "escapedName": "semver", + "rawSpec": "^5.7.1", + "saveSpec": null, + "fetchSpec": "^5.7.1" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "_shasum": "a954f931aeba508d307bbf069eff0c01c96116f7", + "_spec": "semver@^5.7.1", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "bin": { + "semver": "bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^13.0.0-rc.18" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "check-coverage": true + }, + "version": "5.7.1" +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 0000000..d4c6ae0 --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 0000000..d315d5d --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1483 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var R = 0 + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[LOOSE] : re[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compare(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.rcompare(a, b, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY) { + return true + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return thisComparators.every(function (thisComparator) { + return range.set.some(function (rangeComparators) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + }) + }) +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[TILDELOOSE] : re[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[CARETLOOSE] : re[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], '') +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(re[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0')) +} diff --git a/node_modules/send/HISTORY.md b/node_modules/send/HISTORY.md new file mode 100644 index 0000000..d14ac06 --- /dev/null +++ b/node_modules/send/HISTORY.md @@ -0,0 +1,496 @@ +0.17.1 / 2019-05-10 +=================== + + * Set stricter CSP header in redirect & error responses + * deps: range-parser@~1.2.1 + +0.17.0 / 2019-05-03 +=================== + + * deps: http-errors@~1.7.2 + - Set constructor name when possible + - Use `toidentifier` module to make class names + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: mime@1.6.0 + - Add extensions for JPEG-2000 images + - Add new `font/*` types from IANA + - Add WASM mapping + - Update `.bdoc` to `application/bdoc` + - Update `.bmp` to `image/bmp` + - Update `.m4a` to `audio/mp4` + - Update `.rtf` to `application/rtf` + - Update `.wav` to `audio/wav` + - Update `.xml` to `application/xml` + - Update generic extensions to `application/octet-stream`: + `.deb`, `.dll`, `.dmg`, `.exe`, `.iso`, `.msi` + - Use mime-score module to resolve extension conflicts + * deps: ms@2.1.1 + - Add `week`/`w` support + - Fix negative number handling + * deps: statuses@~1.5.0 + * perf: remove redundant `path.normalize` call + +0.16.2 / 2018-02-07 +=================== + + * Fix incorrect end tag in default error & redirects + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: statuses@~1.4.0 + +0.16.1 / 2017-09-29 +=================== + + * Fix regression in edge-case behavior for empty `path` + +0.16.0 / 2017-09-27 +=================== + + * Add `immutable` option + * Fix missing `` in default error & redirects + * Use instance methods on steam to check for listeners + * deps: mime@1.4.1 + - Add 70 new types for file extensions + - Set charset as "UTF-8" for .js and .json + * perf: improve path validation speed + +0.15.6 / 2017-09-22 +=================== + + * deps: debug@2.6.9 + * perf: improve `If-Match` token parsing + +0.15.5 / 2017-09-20 +=================== + + * deps: etag@~1.8.1 + - perf: replace regular expression with substring + * deps: fresh@0.5.2 + - Fix handling of modified headers with invalid dates + - perf: improve ETag match loop + - perf: improve `If-None-Match` token parsing + +0.15.4 / 2017-08-05 +=================== + + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: http-errors@~1.6.2 + - deps: depd@1.1.1 + +0.15.3 / 2017-05-16 +=================== + + * deps: debug@2.6.7 + - deps: ms@2.0.0 + * deps: ms@2.0.0 + +0.15.2 / 2017-04-26 +=================== + + * deps: debug@2.6.4 + - Fix `DEBUG_MAX_ARRAY_LENGTH` + - deps: ms@0.7.3 + * deps: ms@1.0.0 + +0.15.1 / 2017-03-04 +=================== + + * Fix issue when `Date.parse` does not return `NaN` on invalid date + * Fix strict violation in broken environments + +0.15.0 / 2017-02-25 +=================== + + * Support `If-Match` and `If-Unmodified-Since` headers + * Add `res` and `path` arguments to `directory` event + * Remove usage of `res._headers` private field + - Improves compatibility with Node.js 8 nightly + * Send complete HTML document in redirect & error responses + * Set default CSP header in redirect & error responses + * Use `res.getHeaderNames()` when available + * Use `res.headersSent` when available + * deps: debug@2.6.1 + - Allow colors in workers + - Deprecated `DEBUG_FD` environment variable set to `3` or higher + - Fix error when running under React Native + - Use same color for same namespace + - deps: ms@0.7.2 + * deps: etag@~1.8.0 + * deps: fresh@0.5.0 + - Fix false detection of `no-cache` request directive + - Fix incorrect result when `If-None-Match` has both `*` and ETags + - Fix weak `ETag` matching to match spec + - perf: delay reading header values until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove duplicate conditional + - perf: remove unnecessary boolean coercions + - perf: skip checking modified time if ETag check failed + - perf: skip parsing `If-None-Match` when no `ETag` header + - perf: use `Date.parse` instead of `new Date` + * deps: http-errors@~1.6.1 + - Make `message` property enumerable for `HttpError`s + - deps: setprototypeof@1.0.3 + +0.14.2 / 2017-01-23 +=================== + + * deps: http-errors@~1.5.1 + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.2 + - deps: statuses@'>= 1.3.1 < 2' + * deps: ms@0.7.2 + * deps: statuses@~1.3.1 + +0.14.1 / 2016-06-09 +=================== + + * Fix redirect error when `path` contains raw non-URL characters + * Fix redirect when `path` starts with multiple forward slashes + +0.14.0 / 2016-06-06 +=================== + + * Add `acceptRanges` option + * Add `cacheControl` option + * Attempt to combine multiple ranges into single range + * Correctly inherit from `Stream` class + * Fix `Content-Range` header in 416 responses when using `start`/`end` options + * Fix `Content-Range` header missing from default 416 responses + * Ignore non-byte `Range` headers + * deps: http-errors@~1.5.0 + - Add `HttpError` export, for `err instanceof createError.HttpError` + - Support new code `421 Misdirected Request` + - Use `setprototypeof` module to replace `__proto__` setting + - deps: inherits@2.0.1 + - deps: statuses@'>= 1.3.0 < 2' + - perf: enable strict mode + * deps: range-parser@~1.2.0 + - Fix incorrectly returning -1 when there is at least one valid range + - perf: remove internal function + * deps: statuses@~1.3.0 + - Add `421 Misdirected Request` + - perf: enable strict mode + * perf: remove argument reassignment + +0.13.2 / 2016-03-05 +=================== + + * Fix invalid `Content-Type` header when `send.mime.default_type` unset + +0.13.1 / 2016-01-16 +=================== + + * deps: depd@~1.1.0 + - Support web browser loading + - perf: enable strict mode + * deps: destroy@~1.0.4 + - perf: enable strict mode + * deps: escape-html@~1.0.3 + - perf: enable strict mode + - perf: optimize string replacement + - perf: use faster string coercion + * deps: range-parser@~1.0.3 + - perf: enable strict mode + +0.13.0 / 2015-06-16 +=================== + + * Allow Node.js HTTP server to set `Date` response header + * Fix incorrectly removing `Content-Location` on 304 response + * Improve the default redirect response headers + * Send appropriate headers on default error response + * Use `http-errors` for standard emitted errors + * Use `statuses` instead of `http` module for status messages + * deps: escape-html@1.0.2 + * deps: etag@~1.7.0 + - Improve stat performance by removing hashing + * deps: fresh@0.3.0 + - Add weak `ETag` matching support + * deps: on-finished@~2.3.0 + - Add defined behavior for HTTP `CONNECT` requests + - Add defined behavior for HTTP `Upgrade` requests + - deps: ee-first@1.1.1 + * perf: enable strict mode + * perf: remove unnecessary array allocations + +0.12.3 / 2015-05-13 +=================== + + * deps: debug@~2.2.0 + - deps: ms@0.7.1 + * deps: depd@~1.0.1 + * deps: etag@~1.6.0 + - Improve support for JXcore + - Support "fake" stats objects in environments without `fs` + * deps: ms@0.7.1 + - Prevent extraordinarily long inputs + * deps: on-finished@~2.2.1 + +0.12.2 / 2015-03-13 +=================== + + * Throw errors early for invalid `extensions` or `index` options + * deps: debug@~2.1.3 + - Fix high intensity foreground color for bold + - deps: ms@0.7.0 + +0.12.1 / 2015-02-17 +=================== + + * Fix regression sending zero-length files + +0.12.0 / 2015-02-16 +=================== + + * Always read the stat size from the file + * Fix mutating passed-in `options` + * deps: mime@1.3.4 + +0.11.1 / 2015-01-20 +=================== + + * Fix `root` path disclosure + +0.11.0 / 2015-01-05 +=================== + + * deps: debug@~2.1.1 + * deps: etag@~1.5.1 + - deps: crc@3.2.1 + * deps: ms@0.7.0 + - Add `milliseconds` + - Add `msecs` + - Add `secs` + - Add `mins` + - Add `hrs` + - Add `yrs` + * deps: on-finished@~2.2.0 + +0.10.1 / 2014-10-22 +=================== + + * deps: on-finished@~2.1.1 + - Fix handling of pipelined requests + +0.10.0 / 2014-10-15 +=================== + + * deps: debug@~2.1.0 + - Implement `DEBUG_FD` env variable support + * deps: depd@~1.0.0 + * deps: etag@~1.5.0 + - Improve string performance + - Slightly improve speed for weak ETags over 1KB + +0.9.3 / 2014-09-24 +================== + + * deps: etag@~1.4.0 + - Support "fake" stats objects + +0.9.2 / 2014-09-15 +================== + + * deps: depd@0.4.5 + * deps: etag@~1.3.1 + * deps: range-parser@~1.0.2 + +0.9.1 / 2014-09-07 +================== + + * deps: fresh@0.2.4 + +0.9.0 / 2014-09-07 +================== + + * Add `lastModified` option + * Use `etag` to generate `ETag` header + * deps: debug@~2.0.0 + +0.8.5 / 2014-09-04 +================== + + * Fix malicious path detection for empty string path + +0.8.4 / 2014-09-04 +================== + + * Fix a path traversal issue when using `root` + +0.8.3 / 2014-08-16 +================== + + * deps: destroy@1.0.3 + - renamed from dethroy + * deps: on-finished@2.1.0 + +0.8.2 / 2014-08-14 +================== + + * Work around `fd` leak in Node.js 0.10 for `fs.ReadStream` + * deps: dethroy@1.0.2 + +0.8.1 / 2014-08-05 +================== + + * Fix `extensions` behavior when file already has extension + +0.8.0 / 2014-08-05 +================== + + * Add `extensions` option + +0.7.4 / 2014-08-04 +================== + + * Fix serving index files without root dir + +0.7.3 / 2014-07-29 +================== + + * Fix incorrect 403 on Windows and Node.js 0.11 + +0.7.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +0.7.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +0.7.0 / 2014-07-20 +================== + + * Deprecate `hidden` option; use `dotfiles` option + * Add `dotfiles` option + * deps: debug@1.0.4 + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + +0.6.0 / 2014-07-11 +================== + + * Deprecate `from` option; use `root` option + * Deprecate `send.etag()` -- use `etag` in `options` + * Deprecate `send.hidden()` -- use `hidden` in `options` + * Deprecate `send.index()` -- use `index` in `options` + * Deprecate `send.maxage()` -- use `maxAge` in `options` + * Deprecate `send.root()` -- use `root` in `options` + * Cap `maxAge` value to 1 year + * deps: debug@1.0.3 + - Add support for multiple wildcards in namespaces + +0.5.0 / 2014-06-28 +================== + + * Accept string for `maxAge` (converted by `ms`) + * Add `headers` event + * Include link in default redirect response + * Use `EventEmitter.listenerCount` to count listeners + +0.4.3 / 2014-06-11 +================== + + * Do not throw un-catchable error on file open race condition + * Use `escape-html` for HTML escaping + * deps: debug@1.0.2 + - fix some debugging output colors on node.js 0.8 + * deps: finished@1.2.2 + * deps: fresh@0.2.2 + +0.4.2 / 2014-06-09 +================== + + * fix "event emitter leak" warnings + * deps: debug@1.0.1 + * deps: finished@1.2.1 + +0.4.1 / 2014-06-02 +================== + + * Send `max-age` in `Cache-Control` in correct format + +0.4.0 / 2014-05-27 +================== + + * Calculate ETag with md5 for reduced collisions + * Fix wrong behavior when index file matches directory + * Ignore stream errors after request ends + - Goodbye `EBADF, read` + * Skip directories in index file search + * deps: debug@0.8.1 + +0.3.0 / 2014-04-24 +================== + + * Fix sending files with dots without root set + * Coerce option types + * Accept API options in options object + * Set etags to "weak" + * Include file path in etag + * Make "Can't set headers after they are sent." catchable + * Send full entity-body for multi range requests + * Default directory access to 403 when index disabled + * Support multiple index paths + * Support "If-Range" header + * Control whether to generate etags + * deps: mime@1.2.11 + +0.2.0 / 2014-01-29 +================== + + * update range-parser and fresh + +0.1.4 / 2013-08-11 +================== + + * update fresh + +0.1.3 / 2013-07-08 +================== + + * Revert "Fix fd leak" + +0.1.2 / 2013-07-03 +================== + + * Fix fd leak + +0.1.0 / 2012-08-25 +================== + + * add options parameter to send() that is passed to fs.createReadStream() [kanongil] + +0.0.4 / 2012-08-16 +================== + + * allow custom "Accept-Ranges" definition + +0.0.3 / 2012-07-16 +================== + + * fix normalization of the root directory. Closes #3 + +0.0.2 / 2012-07-09 +================== + + * add passing of req explicitly for now (YUCK) + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/send/LICENSE b/node_modules/send/LICENSE new file mode 100644 index 0000000..4aa69e8 --- /dev/null +++ b/node_modules/send/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk +Copyright (c) 2014-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/send/README.md b/node_modules/send/README.md new file mode 100644 index 0000000..179e8c3 --- /dev/null +++ b/node_modules/send/README.md @@ -0,0 +1,329 @@ +# send + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Linux Build][travis-image]][travis-url] +[![Windows Build][appveyor-image]][appveyor-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Send is a library for streaming files from the file system as a http response +supporting partial responses (Ranges), conditional-GET negotiation (If-Match, +If-Unmodified-Since, If-None-Match, If-Modified-Since), high test coverage, +and granular events which may be leveraged to take appropriate actions in your +application or framework. + +Looking to serve up entire folders mapped to URLs? Try [serve-static](https://www.npmjs.org/package/serve-static). + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```bash +$ npm install send +``` + +## API + + + +```js +var send = require('send') +``` + +### send(req, path, [options]) + +Create a new `SendStream` for the given path to send to a `res`. The `req` is +the Node.js HTTP request and the `path` is a urlencoded path to send (urlencoded, +not the actual file-system path). + +#### Options + +##### acceptRanges + +Enable or disable accepting ranged requests, defaults to true. +Disabling this will not send `Accept-Ranges` and ignore the contents +of the `Range` request header. + +##### cacheControl + +Enable or disable setting `Cache-Control` response header, defaults to +true. Disabling this will ignore the `immutable` and `maxAge` options. + +##### dotfiles + +Set how "dotfiles" are treated when encountered. A dotfile is a file +or directory that begins with a dot ("."). Note this check is done on +the path itself without checking if the path actually exists on the +disk. If `root` is specified, only the dotfiles above the root are +checked (i.e. the root itself can be within a dotfile when when set +to "deny"). + + - `'allow'` No special treatment for dotfiles. + - `'deny'` Send a 403 for any request for a dotfile. + - `'ignore'` Pretend like the dotfile does not exist and 404. + +The default value is _similar_ to `'ignore'`, with the exception that +this default will not ignore the files within a directory that begins +with a dot, for backward-compatibility. + +##### end + +Byte offset at which the stream ends, defaults to the length of the file +minus 1. The end is inclusive in the stream, meaning `end: 3` will include +the 4th byte in the stream. + +##### etag + +Enable or disable etag generation, defaults to true. + +##### extensions + +If a given file doesn't exist, try appending one of the given extensions, +in the given order. By default, this is disabled (set to `false`). An +example value that will serve extension-less HTML files: `['html', 'htm']`. +This is skipped if the requested file already has an extension. + +##### immutable + +Enable or diable the `immutable` directive in the `Cache-Control` response +header, defaults to `false`. If set to `true`, the `maxAge` option should +also be specified to enable caching. The `immutable` directive will prevent +supported clients from making conditional requests during the life of the +`maxAge` option to check if the file has changed. + +##### index + +By default send supports "index.html" files, to disable this +set `false` or to supply a new index pass a string or an array +in preferred order. + +##### lastModified + +Enable or disable `Last-Modified` header, defaults to true. Uses the file +system's last modified value. + +##### maxAge + +Provide a max-age in milliseconds for http caching, defaults to 0. +This can also be a string accepted by the +[ms](https://www.npmjs.org/package/ms#readme) module. + +##### root + +Serve files relative to `path`. + +##### start + +Byte offset at which the stream starts, defaults to 0. The start is inclusive, +meaning `start: 2` will include the 3rd byte in the stream. + +#### Events + +The `SendStream` is an event emitter and will emit the following events: + + - `error` an error occurred `(err)` + - `directory` a directory was requested `(res, path)` + - `file` a file was requested `(path, stat)` + - `headers` the headers are about to be set on a file `(res, path, stat)` + - `stream` file streaming has started `(stream)` + - `end` streaming has completed + +#### .pipe + +The `pipe` method is used to pipe the response into the Node.js HTTP response +object, typically `send(req, path, options).pipe(res)`. + +### .mime + +The `mime` export is the global instance of of the +[`mime` npm module](https://www.npmjs.com/package/mime). + +This is used to configure the MIME types that are associated with file extensions +as well as other options for how to resolve the MIME type of a file (like the +default type to use for an unknown file extension). + +## Error-handling + +By default when no `error` listeners are present an automatic response will be +made, otherwise you have full control over the response, aka you may show a 5xx +page etc. + +## Caching + +It does _not_ perform internal caching, you should use a reverse proxy cache +such as Varnish for this, or those fancy things called CDNs. If your +application is small enough that it would benefit from single-node memory +caching, it's small enough that it does not need caching at all ;). + +## Debugging + +To enable `debug()` instrumentation output export __DEBUG__: + +``` +$ DEBUG=send node app +``` + +## Running tests + +``` +$ npm install +$ npm test +``` + +## Examples + +### Serve a specific file + +This simple example will send a specific file to all requests. + +```js +var http = require('http') +var send = require('send') + +var server = http.createServer(function onRequest (req, res) { + send(req, '/path/to/index.html') + .pipe(res) +}) + +server.listen(3000) +``` + +### Serve all files from a directory + +This simple example will just serve up all the files in a +given directory as the top-level. For example, a request +`GET /foo.txt` will send back `/www/public/foo.txt`. + +```js +var http = require('http') +var parseUrl = require('parseurl') +var send = require('send') + +var server = http.createServer(function onRequest (req, res) { + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .pipe(res) +}) + +server.listen(3000) +``` + +### Custom file types + +```js +var http = require('http') +var parseUrl = require('parseurl') +var send = require('send') + +// Default unknown types to text/plain +send.mime.default_type = 'text/plain' + +// Add a custom type +send.mime.define({ + 'application/x-my-type': ['x-mt', 'x-mtt'] +}) + +var server = http.createServer(function onRequest (req, res) { + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .pipe(res) +}) + +server.listen(3000) +``` + +### Custom directory index view + +This is a example of serving up a structure of directories with a +custom function to render a listing of a directory. + +```js +var http = require('http') +var fs = require('fs') +var parseUrl = require('parseurl') +var send = require('send') + +// Transfer arbitrary files from within /www/example.com/public/* +// with a custom handler for directory listing +var server = http.createServer(function onRequest (req, res) { + send(req, parseUrl(req).pathname, { index: false, root: '/www/public' }) + .once('directory', directory) + .pipe(res) +}) + +server.listen(3000) + +// Custom directory handler +function directory (res, path) { + var stream = this + + // redirect to trailing slash for consistent url + if (!stream.hasTrailingSlash()) { + return stream.redirect(path) + } + + // get directory list + fs.readdir(path, function onReaddir (err, list) { + if (err) return stream.error(err) + + // render an index for the directory + res.setHeader('Content-Type', 'text/plain; charset=UTF-8') + res.end(list.join('\n') + '\n') + }) +} +``` + +### Serving from a root directory with custom error-handling + +```js +var http = require('http') +var parseUrl = require('parseurl') +var send = require('send') + +var server = http.createServer(function onRequest (req, res) { + // your custom error-handling logic: + function error (err) { + res.statusCode = err.status || 500 + res.end(err.message) + } + + // your custom headers + function headers (res, path, stat) { + // serve all files for download + res.setHeader('Content-Disposition', 'attachment') + } + + // your custom directory handling logic: + function redirect () { + res.statusCode = 301 + res.setHeader('Location', req.url + '/') + res.end('Redirecting to ' + req.url + '/') + } + + // transfer arbitrary files from within + // /www/example.com/public/* + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .on('error', error) + .on('directory', redirect) + .on('headers', headers) + .pipe(res) +}) + +server.listen(3000) +``` + +## License + +[MIT](LICENSE) + +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/send/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/send +[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master +[coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master +[node-image]: https://badgen.net/npm/node/send +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/send +[npm-url]: https://npmjs.org/package/send +[npm-version-image]: https://badgen.net/npm/v/send +[travis-image]: https://badgen.net/travis/pillarjs/send/master?label=linux +[travis-url]: https://travis-ci.org/pillarjs/send diff --git a/node_modules/send/index.js b/node_modules/send/index.js new file mode 100644 index 0000000..fca2112 --- /dev/null +++ b/node_modules/send/index.js @@ -0,0 +1,1129 @@ +/*! + * send + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var createError = require('http-errors') +var debug = require('debug')('send') +var deprecate = require('depd')('send') +var destroy = require('destroy') +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') +var etag = require('etag') +var fresh = require('fresh') +var fs = require('fs') +var mime = require('mime') +var ms = require('ms') +var onFinished = require('on-finished') +var parseRange = require('range-parser') +var path = require('path') +var statuses = require('statuses') +var Stream = require('stream') +var util = require('util') + +/** + * Path function references. + * @private + */ + +var extname = path.extname +var join = path.join +var normalize = path.normalize +var resolve = path.resolve +var sep = path.sep + +/** + * Regular expression for identifying a bytes Range header. + * @private + */ + +var BYTES_RANGE_REGEXP = /^ *bytes=/ + +/** + * Maximum value allowed for the max age. + * @private + */ + +var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year + +/** + * Regular expression to match a path with a directory up component. + * @private + */ + +var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/ + +/** + * Module exports. + * @public + */ + +module.exports = send +module.exports.mime = mime + +/** + * Return a `SendStream` for `req` and `path`. + * + * @param {object} req + * @param {string} path + * @param {object} [options] + * @return {SendStream} + * @public + */ + +function send (req, path, options) { + return new SendStream(req, path, options) +} + +/** + * Initialize a `SendStream` with the given `path`. + * + * @param {Request} req + * @param {String} path + * @param {object} [options] + * @private + */ + +function SendStream (req, path, options) { + Stream.call(this) + + var opts = options || {} + + this.options = opts + this.path = path + this.req = req + + this._acceptRanges = opts.acceptRanges !== undefined + ? Boolean(opts.acceptRanges) + : true + + this._cacheControl = opts.cacheControl !== undefined + ? Boolean(opts.cacheControl) + : true + + this._etag = opts.etag !== undefined + ? Boolean(opts.etag) + : true + + this._dotfiles = opts.dotfiles !== undefined + ? opts.dotfiles + : 'ignore' + + if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') { + throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"') + } + + this._hidden = Boolean(opts.hidden) + + if (opts.hidden !== undefined) { + deprecate('hidden: use dotfiles: \'' + (this._hidden ? 'allow' : 'ignore') + '\' instead') + } + + // legacy support + if (opts.dotfiles === undefined) { + this._dotfiles = undefined + } + + this._extensions = opts.extensions !== undefined + ? normalizeList(opts.extensions, 'extensions option') + : [] + + this._immutable = opts.immutable !== undefined + ? Boolean(opts.immutable) + : false + + this._index = opts.index !== undefined + ? normalizeList(opts.index, 'index option') + : ['index.html'] + + this._lastModified = opts.lastModified !== undefined + ? Boolean(opts.lastModified) + : true + + this._maxage = opts.maxAge || opts.maxage + this._maxage = typeof this._maxage === 'string' + ? ms(this._maxage) + : Number(this._maxage) + this._maxage = !isNaN(this._maxage) + ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) + : 0 + + this._root = opts.root + ? resolve(opts.root) + : null + + if (!this._root && opts.from) { + this.from(opts.from) + } +} + +/** + * Inherits from `Stream`. + */ + +util.inherits(SendStream, Stream) + +/** + * Enable or disable etag generation. + * + * @param {Boolean} val + * @return {SendStream} + * @api public + */ + +SendStream.prototype.etag = deprecate.function(function etag (val) { + this._etag = Boolean(val) + debug('etag %s', this._etag) + return this +}, 'send.etag: pass etag as option') + +/** + * Enable or disable "hidden" (dot) files. + * + * @param {Boolean} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.hidden = deprecate.function(function hidden (val) { + this._hidden = Boolean(val) + this._dotfiles = undefined + debug('hidden %s', this._hidden) + return this +}, 'send.hidden: use dotfiles option') + +/** + * Set index `paths`, set to a falsy + * value to disable index support. + * + * @param {String|Boolean|Array} paths + * @return {SendStream} + * @api public + */ + +SendStream.prototype.index = deprecate.function(function index (paths) { + var index = !paths ? [] : normalizeList(paths, 'paths argument') + debug('index %o', paths) + this._index = index + return this +}, 'send.index: pass index as option') + +/** + * Set root `path`. + * + * @param {String} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.root = function root (path) { + this._root = resolve(String(path)) + debug('root %s', this._root) + return this +} + +SendStream.prototype.from = deprecate.function(SendStream.prototype.root, + 'send.from: pass root as option') + +SendStream.prototype.root = deprecate.function(SendStream.prototype.root, + 'send.root: pass root as option') + +/** + * Set max-age to `maxAge`. + * + * @param {Number} maxAge + * @return {SendStream} + * @api public + */ + +SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) { + this._maxage = typeof maxAge === 'string' + ? ms(maxAge) + : Number(maxAge) + this._maxage = !isNaN(this._maxage) + ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) + : 0 + debug('max-age %d', this._maxage) + return this +}, 'send.maxage: pass maxAge as option') + +/** + * Emit error with `status`. + * + * @param {number} status + * @param {Error} [err] + * @private + */ + +SendStream.prototype.error = function error (status, err) { + // emit if listeners instead of responding + if (hasListeners(this, 'error')) { + return this.emit('error', createError(status, err, { + expose: false + })) + } + + var res = this.res + var msg = statuses[status] || String(status) + var doc = createHtmlDocument('Error', escapeHtml(msg)) + + // clear existing headers + clearHeaders(res) + + // add error headers + if (err && err.headers) { + setHeaders(res, err.headers) + } + + // send basic response + res.statusCode = status + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'none'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.end(doc) +} + +/** + * Check if the pathname ends with "/". + * + * @return {boolean} + * @private + */ + +SendStream.prototype.hasTrailingSlash = function hasTrailingSlash () { + return this.path[this.path.length - 1] === '/' +} + +/** + * Check if this is a conditional GET request. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isConditionalGET = function isConditionalGET () { + return this.req.headers['if-match'] || + this.req.headers['if-unmodified-since'] || + this.req.headers['if-none-match'] || + this.req.headers['if-modified-since'] +} + +/** + * Check if the request preconditions failed. + * + * @return {boolean} + * @private + */ + +SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () { + var req = this.req + var res = this.res + + // if-match + var match = req.headers['if-match'] + if (match) { + var etag = res.getHeader('ETag') + return !etag || (match !== '*' && parseTokenList(match).every(function (match) { + return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag + })) + } + + // if-unmodified-since + var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since']) + if (!isNaN(unmodifiedSince)) { + var lastModified = parseHttpDate(res.getHeader('Last-Modified')) + return isNaN(lastModified) || lastModified > unmodifiedSince + } + + return false +} + +/** + * Strip content-* header fields. + * + * @private + */ + +SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () { + var res = this.res + var headers = getHeaderNames(res) + + for (var i = 0; i < headers.length; i++) { + var header = headers[i] + if (header.substr(0, 8) === 'content-' && header !== 'content-location') { + res.removeHeader(header) + } + } +} + +/** + * Respond with 304 not modified. + * + * @api private + */ + +SendStream.prototype.notModified = function notModified () { + var res = this.res + debug('not modified') + this.removeContentHeaderFields() + res.statusCode = 304 + res.end() +} + +/** + * Raise error that headers already sent. + * + * @api private + */ + +SendStream.prototype.headersAlreadySent = function headersAlreadySent () { + var err = new Error('Can\'t set headers after they are sent.') + debug('headers already sent') + this.error(500, err) +} + +/** + * Check if the request is cacheable, aka + * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isCachable = function isCachable () { + var statusCode = this.res.statusCode + return (statusCode >= 200 && statusCode < 300) || + statusCode === 304 +} + +/** + * Handle stat() error. + * + * @param {Error} error + * @private + */ + +SendStream.prototype.onStatError = function onStatError (error) { + switch (error.code) { + case 'ENAMETOOLONG': + case 'ENOENT': + case 'ENOTDIR': + this.error(404, error) + break + default: + this.error(500, error) + break + } +} + +/** + * Check if the cache is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isFresh = function isFresh () { + return fresh(this.req.headers, { + 'etag': this.res.getHeader('ETag'), + 'last-modified': this.res.getHeader('Last-Modified') + }) +} + +/** + * Check if the range is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isRangeFresh = function isRangeFresh () { + var ifRange = this.req.headers['if-range'] + + if (!ifRange) { + return true + } + + // if-range as etag + if (ifRange.indexOf('"') !== -1) { + var etag = this.res.getHeader('ETag') + return Boolean(etag && ifRange.indexOf(etag) !== -1) + } + + // if-range as modified date + var lastModified = this.res.getHeader('Last-Modified') + return parseHttpDate(lastModified) <= parseHttpDate(ifRange) +} + +/** + * Redirect to path. + * + * @param {string} path + * @private + */ + +SendStream.prototype.redirect = function redirect (path) { + var res = this.res + + if (hasListeners(this, 'directory')) { + this.emit('directory', res, path) + return + } + + if (this.hasTrailingSlash()) { + this.error(403) + return + } + + var loc = encodeUrl(collapseLeadingSlashes(this.path + '/')) + var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + + escapeHtml(loc) + '') + + // redirect + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'none'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.setHeader('Location', loc) + res.end(doc) +} + +/** + * Pipe to `res. + * + * @param {Stream} res + * @return {Stream} res + * @api public + */ + +SendStream.prototype.pipe = function pipe (res) { + // root path + var root = this._root + + // references + this.res = res + + // decode the path + var path = decode(this.path) + if (path === -1) { + this.error(400) + return res + } + + // null byte(s) + if (~path.indexOf('\0')) { + this.error(400) + return res + } + + var parts + if (root !== null) { + // normalize + if (path) { + path = normalize('.' + sep + path) + } + + // malicious path + if (UP_PATH_REGEXP.test(path)) { + debug('malicious path "%s"', path) + this.error(403) + return res + } + + // explode path parts + parts = path.split(sep) + + // join / normalize from optional root dir + path = normalize(join(root, path)) + } else { + // ".." is malicious without "root" + if (UP_PATH_REGEXP.test(path)) { + debug('malicious path "%s"', path) + this.error(403) + return res + } + + // explode path parts + parts = normalize(path).split(sep) + + // resolve the path + path = resolve(path) + } + + // dotfile handling + if (containsDotFile(parts)) { + var access = this._dotfiles + + // legacy support + if (access === undefined) { + access = parts[parts.length - 1][0] === '.' + ? (this._hidden ? 'allow' : 'ignore') + : 'allow' + } + + debug('%s dotfile "%s"', access, path) + switch (access) { + case 'allow': + break + case 'deny': + this.error(403) + return res + case 'ignore': + default: + this.error(404) + return res + } + } + + // index file support + if (this._index.length && this.hasTrailingSlash()) { + this.sendIndex(path) + return res + } + + this.sendFile(path) + return res +} + +/** + * Transfer `path`. + * + * @param {String} path + * @api public + */ + +SendStream.prototype.send = function send (path, stat) { + var len = stat.size + var options = this.options + var opts = {} + var res = this.res + var req = this.req + var ranges = req.headers.range + var offset = options.start || 0 + + if (headersSent(res)) { + // impossible to send now + this.headersAlreadySent() + return + } + + debug('pipe "%s"', path) + + // set header fields + this.setHeader(path, stat) + + // set content-type + this.type(path) + + // conditional GET support + if (this.isConditionalGET()) { + if (this.isPreconditionFailure()) { + this.error(412) + return + } + + if (this.isCachable() && this.isFresh()) { + this.notModified() + return + } + } + + // adjust len to start/end options + len = Math.max(0, len - offset) + if (options.end !== undefined) { + var bytes = options.end - offset + 1 + if (len > bytes) len = bytes + } + + // Range support + if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) { + // parse + ranges = parseRange(len, ranges, { + combine: true + }) + + // If-Range support + if (!this.isRangeFresh()) { + debug('range stale') + ranges = -2 + } + + // unsatisfiable + if (ranges === -1) { + debug('range unsatisfiable') + + // Content-Range + res.setHeader('Content-Range', contentRange('bytes', len)) + + // 416 Requested Range Not Satisfiable + return this.error(416, { + headers: { 'Content-Range': res.getHeader('Content-Range') } + }) + } + + // valid (syntactically invalid/multiple ranges are treated as a regular response) + if (ranges !== -2 && ranges.length === 1) { + debug('range %j', ranges) + + // Content-Range + res.statusCode = 206 + res.setHeader('Content-Range', contentRange('bytes', len, ranges[0])) + + // adjust for requested range + offset += ranges[0].start + len = ranges[0].end - ranges[0].start + 1 + } + } + + // clone options + for (var prop in options) { + opts[prop] = options[prop] + } + + // set read options + opts.start = offset + opts.end = Math.max(offset, offset + len - 1) + + // content-length + res.setHeader('Content-Length', len) + + // HEAD support + if (req.method === 'HEAD') { + res.end() + return + } + + this.stream(path, opts) +} + +/** + * Transfer file for `path`. + * + * @param {String} path + * @api private + */ +SendStream.prototype.sendFile = function sendFile (path) { + var i = 0 + var self = this + + debug('stat "%s"', path) + fs.stat(path, function onstat (err, stat) { + if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) { + // not found, check extensions + return next(err) + } + if (err) return self.onStatError(err) + if (stat.isDirectory()) return self.redirect(path) + self.emit('file', path, stat) + self.send(path, stat) + }) + + function next (err) { + if (self._extensions.length <= i) { + return err + ? self.onStatError(err) + : self.error(404) + } + + var p = path + '.' + self._extensions[i++] + + debug('stat "%s"', p) + fs.stat(p, function (err, stat) { + if (err) return next(err) + if (stat.isDirectory()) return next() + self.emit('file', p, stat) + self.send(p, stat) + }) + } +} + +/** + * Transfer index for `path`. + * + * @param {String} path + * @api private + */ +SendStream.prototype.sendIndex = function sendIndex (path) { + var i = -1 + var self = this + + function next (err) { + if (++i >= self._index.length) { + if (err) return self.onStatError(err) + return self.error(404) + } + + var p = join(path, self._index[i]) + + debug('stat "%s"', p) + fs.stat(p, function (err, stat) { + if (err) return next(err) + if (stat.isDirectory()) return next() + self.emit('file', p, stat) + self.send(p, stat) + }) + } + + next() +} + +/** + * Stream `path` to the response. + * + * @param {String} path + * @param {Object} options + * @api private + */ + +SendStream.prototype.stream = function stream (path, options) { + // TODO: this is all lame, refactor meeee + var finished = false + var self = this + var res = this.res + + // pipe + var stream = fs.createReadStream(path, options) + this.emit('stream', stream) + stream.pipe(res) + + // response finished, done with the fd + onFinished(res, function onfinished () { + finished = true + destroy(stream) + }) + + // error handling code-smell + stream.on('error', function onerror (err) { + // request already finished + if (finished) return + + // clean up stream + finished = true + destroy(stream) + + // error + self.onStatError(err) + }) + + // end + stream.on('end', function onend () { + self.emit('end') + }) +} + +/** + * Set content-type based on `path` + * if it hasn't been explicitly set. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.type = function type (path) { + var res = this.res + + if (res.getHeader('Content-Type')) return + + var type = mime.lookup(path) + + if (!type) { + debug('no content-type') + return + } + + var charset = mime.charsets.lookup(type) + + debug('content-type %s', type) + res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')) +} + +/** + * Set response header fields, most + * fields may be pre-defined. + * + * @param {String} path + * @param {Object} stat + * @api private + */ + +SendStream.prototype.setHeader = function setHeader (path, stat) { + var res = this.res + + this.emit('headers', res, path, stat) + + if (this._acceptRanges && !res.getHeader('Accept-Ranges')) { + debug('accept ranges') + res.setHeader('Accept-Ranges', 'bytes') + } + + if (this._cacheControl && !res.getHeader('Cache-Control')) { + var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000) + + if (this._immutable) { + cacheControl += ', immutable' + } + + debug('cache-control %s', cacheControl) + res.setHeader('Cache-Control', cacheControl) + } + + if (this._lastModified && !res.getHeader('Last-Modified')) { + var modified = stat.mtime.toUTCString() + debug('modified %s', modified) + res.setHeader('Last-Modified', modified) + } + + if (this._etag && !res.getHeader('ETag')) { + var val = etag(stat) + debug('etag %s', val) + res.setHeader('ETag', val) + } +} + +/** + * Clear all headers from a response. + * + * @param {object} res + * @private + */ + +function clearHeaders (res) { + var headers = getHeaderNames(res) + + for (var i = 0; i < headers.length; i++) { + res.removeHeader(headers[i]) + } +} + +/** + * Collapse all leading slashes into a single slash + * + * @param {string} str + * @private + */ +function collapseLeadingSlashes (str) { + for (var i = 0; i < str.length; i++) { + if (str[i] !== '/') { + break + } + } + + return i > 1 + ? '/' + str.substr(i) + : str +} + +/** + * Determine if path parts contain a dotfile. + * + * @api private + */ + +function containsDotFile (parts) { + for (var i = 0; i < parts.length; i++) { + var part = parts[i] + if (part.length > 1 && part[0] === '.') { + return true + } + } + + return false +} + +/** + * Create a Content-Range header. + * + * @param {string} type + * @param {number} size + * @param {array} [range] + */ + +function contentRange (type, size, range) { + return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size +} + +/** + * Create a minimal HTML document. + * + * @param {string} title + * @param {string} body + * @private + */ + +function createHtmlDocument (title, body) { + return '\n' + + '\n' + + '\n' + + '\n' + + '' + title + '\n' + + '\n' + + '\n' + + '
      ' + body + '
      \n' + + '\n' + + '\n' +} + +/** + * decodeURIComponent. + * + * Allows V8 to only deoptimize this fn instead of all + * of send(). + * + * @param {String} path + * @api private + */ + +function decode (path) { + try { + return decodeURIComponent(path) + } catch (err) { + return -1 + } +} + +/** + * Get the header names on a respnse. + * + * @param {object} res + * @returns {array[string]} + * @private + */ + +function getHeaderNames (res) { + return typeof res.getHeaderNames !== 'function' + ? Object.keys(res._headers || {}) + : res.getHeaderNames() +} + +/** + * Determine if emitter has listeners of a given type. + * + * The way to do this check is done three different ways in Node.js >= 0.8 + * so this consolidates them into a minimal set using instance methods. + * + * @param {EventEmitter} emitter + * @param {string} type + * @returns {boolean} + * @private + */ + +function hasListeners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if the response headers have been sent. + * + * @param {object} res + * @returns {boolean} + * @private + */ + +function headersSent (res) { + return typeof res.headersSent !== 'boolean' + ? Boolean(res._header) + : res.headersSent +} + +/** + * Normalize the index option into an array. + * + * @param {boolean|string|array} val + * @param {string} name + * @private + */ + +function normalizeList (val, name) { + var list = [].concat(val || []) + + for (var i = 0; i < list.length; i++) { + if (typeof list[i] !== 'string') { + throw new TypeError(name + ' must be array of strings or false') + } + } + + return list +} + +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ + +function parseHttpDate (date) { + var timestamp = date && Date.parse(date) + + return typeof timestamp === 'number' + ? timestamp + : NaN +} + +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} + +/** + * Set an object of headers on a response. + * + * @param {object} res + * @param {object} headers + * @private + */ + +function setHeaders (res, headers) { + var keys = Object.keys(headers) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + res.setHeader(key, headers[key]) + } +} diff --git a/node_modules/send/node_modules/ms/index.js b/node_modules/send/node_modules/ms/index.js new file mode 100644 index 0000000..7229750 --- /dev/null +++ b/node_modules/send/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/node_modules/send/node_modules/ms/license.md b/node_modules/send/node_modules/ms/license.md new file mode 100644 index 0000000..69b6125 --- /dev/null +++ b/node_modules/send/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/send/node_modules/ms/package.json b/node_modules/send/node_modules/ms/package.json new file mode 100644 index 0000000..8584b26 --- /dev/null +++ b/node_modules/send/node_modules/ms/package.json @@ -0,0 +1,72 @@ +{ + "_args": [ + [ + "ms@2.1.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "ms@2.1.1", + "_id": "ms@2.1.1", + "_inBundle": false, + "_integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "_location": "/send/ms", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ms@2.1.1", + "name": "ms", + "escapedName": "ms", + "rawSpec": "2.1.1", + "saveSpec": null, + "fetchSpec": "2.1.1" + }, + "_requiredBy": [ + "/send" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "_spec": "2.1.1", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "description": "Tiny millisecond conversion utility", + "devDependencies": { + "eslint": "4.12.1", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.1.1" +} diff --git a/node_modules/send/node_modules/ms/readme.md b/node_modules/send/node_modules/ms/readme.md new file mode 100644 index 0000000..bb76729 --- /dev/null +++ b/node_modules/send/node_modules/ms/readme.md @@ -0,0 +1,60 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/send/package.json b/node_modules/send/package.json new file mode 100644 index 0000000..925f240 --- /dev/null +++ b/node_modules/send/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + "send@0.17.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "send@0.17.1", + "_id": "send@0.17.1", + "_inBundle": false, + "_integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "_location": "/send", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "send@0.17.1", + "name": "send", + "escapedName": "send", + "rawSpec": "0.17.1", + "saveSpec": null, + "fetchSpec": "0.17.1" + }, + "_requiredBy": [ + "/express", + "/serve-static" + ], + "_resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "_spec": "0.17.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "bugs": { + "url": "https://github.com/pillarjs/send/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "James Wyatt Cready", + "email": "jcready@gmail.com" + }, + { + "name": "Jesús Leganés Combarro", + "email": "piranna@gmail.com" + } + ], + "dependencies": { + "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.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "description": "Better streaming static file server with Range and conditional-GET support", + "devDependencies": { + "after": "0.8.2", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "6.1.4", + "supertest": "4.0.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/pillarjs/send#readme", + "keywords": [ + "static", + "file", + "server" + ], + "license": "MIT", + "name": "send", + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/send.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --check-leaks --reporter spec --bail", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot" + }, + "version": "0.17.1" +} diff --git a/node_modules/serve-static/HISTORY.md b/node_modules/serve-static/HISTORY.md new file mode 100644 index 0000000..7203e4f --- /dev/null +++ b/node_modules/serve-static/HISTORY.md @@ -0,0 +1,451 @@ +1.14.1 / 2019-05-10 +=================== + + * Set stricter CSP header in redirect response + * deps: send@0.17.1 + - deps: range-parser@~1.2.1 + +1.14.0 / 2019-05-07 +=================== + + * deps: parseurl@~1.3.3 + * deps: send@0.17.0 + - deps: http-errors@~1.7.2 + - deps: mime@1.6.0 + - deps: ms@2.1.1 + - deps: statuses@~1.5.0 + - perf: remove redundant `path.normalize` call + +1.13.2 / 2018-02-07 +=================== + + * Fix incorrect end tag in redirects + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: send@0.16.2 + - deps: depd@~1.1.2 + - deps: encodeurl@~1.0.2 + - deps: statuses@~1.4.0 + +1.13.1 / 2017-09-29 +=================== + + * Fix regression when `root` is incorrectly set to a file + * deps: send@0.16.1 + +1.13.0 / 2017-09-27 +=================== + + * deps: send@0.16.0 + - Add 70 new types for file extensions + - Add `immutable` option + - Fix missing `` in default error & redirects + - Set charset as "UTF-8" for .js and .json + - Use instance methods on steam to check for listeners + - deps: mime@1.4.1 + - perf: improve path validation speed + +1.12.6 / 2017-09-22 +=================== + + * deps: send@0.15.6 + - deps: debug@2.6.9 + - perf: improve `If-Match` token parsing + * perf: improve slash collapsing + +1.12.5 / 2017-09-21 +=================== + + * deps: parseurl@~1.3.2 + - perf: reduce overhead for full URLs + - perf: unroll the "fast-path" `RegExp` + * deps: send@0.15.5 + - Fix handling of modified headers with invalid dates + - deps: etag@~1.8.1 + - deps: fresh@0.5.2 + +1.12.4 / 2017-08-05 +=================== + + * deps: send@0.15.4 + - deps: debug@2.6.8 + - deps: depd@~1.1.1 + - deps: http-errors@~1.6.2 + +1.12.3 / 2017-05-16 +=================== + + * deps: send@0.15.3 + - deps: debug@2.6.7 + +1.12.2 / 2017-04-26 +=================== + + * deps: send@0.15.2 + - deps: debug@2.6.4 + +1.12.1 / 2017-03-04 +=================== + + * deps: send@0.15.1 + - Fix issue when `Date.parse` does not return `NaN` on invalid date + - Fix strict violation in broken environments + +1.12.0 / 2017-02-25 +=================== + + * Send complete HTML document in redirect response + * Set default CSP header in redirect response + * deps: send@0.15.0 + - Fix false detection of `no-cache` request directive + - Fix incorrect result when `If-None-Match` has both `*` and ETags + - Fix weak `ETag` matching to match spec + - Remove usage of `res._headers` private field + - Support `If-Match` and `If-Unmodified-Since` headers + - Use `res.getHeaderNames()` when available + - Use `res.headersSent` when available + - deps: debug@2.6.1 + - deps: etag@~1.8.0 + - deps: fresh@0.5.0 + - deps: http-errors@~1.6.1 + +1.11.2 / 2017-01-23 +=================== + + * deps: send@0.14.2 + - deps: http-errors@~1.5.1 + - deps: ms@0.7.2 + - deps: statuses@~1.3.1 + +1.11.1 / 2016-06-10 +=================== + + * Fix redirect error when `req.url` contains raw non-URL characters + * deps: send@0.14.1 + +1.11.0 / 2016-06-07 +=================== + + * Use status code 301 for redirects + * deps: send@0.14.0 + - Add `acceptRanges` option + - Add `cacheControl` option + - Attempt to combine multiple ranges into single range + - Correctly inherit from `Stream` class + - Fix `Content-Range` header in 416 responses when using `start`/`end` options + - Fix `Content-Range` header missing from default 416 responses + - Ignore non-byte `Range` headers + - deps: http-errors@~1.5.0 + - deps: range-parser@~1.2.0 + - deps: statuses@~1.3.0 + - perf: remove argument reassignment + +1.10.3 / 2016-05-30 +=================== + + * deps: send@0.13.2 + - Fix invalid `Content-Type` header when `send.mime.default_type` unset + +1.10.2 / 2016-01-19 +=================== + + * deps: parseurl@~1.3.1 + - perf: enable strict mode + +1.10.1 / 2016-01-16 +=================== + + * deps: escape-html@~1.0.3 + - perf: enable strict mode + - perf: optimize string replacement + - perf: use faster string coercion + * deps: send@0.13.1 + - deps: depd@~1.1.0 + - deps: destroy@~1.0.4 + - deps: escape-html@~1.0.3 + - deps: range-parser@~1.0.3 + +1.10.0 / 2015-06-17 +=================== + + * Add `fallthrough` option + - Allows declaring this middleware is the final destination + - Provides better integration with Express patterns + * Fix reading options from options prototype + * Improve the default redirect response headers + * deps: escape-html@1.0.2 + * deps: send@0.13.0 + - Allow Node.js HTTP server to set `Date` response header + - Fix incorrectly removing `Content-Location` on 304 response + - Improve the default redirect response headers + - Send appropriate headers on default error response + - Use `http-errors` for standard emitted errors + - Use `statuses` instead of `http` module for status messages + - deps: escape-html@1.0.2 + - deps: etag@~1.7.0 + - deps: fresh@0.3.0 + - deps: on-finished@~2.3.0 + - perf: enable strict mode + - perf: remove unnecessary array allocations + * perf: enable strict mode + * perf: remove argument reassignment + +1.9.3 / 2015-05-14 +================== + + * deps: send@0.12.3 + - deps: debug@~2.2.0 + - deps: depd@~1.0.1 + - deps: etag@~1.6.0 + - deps: ms@0.7.1 + - deps: on-finished@~2.2.1 + +1.9.2 / 2015-03-14 +================== + + * deps: send@0.12.2 + - Throw errors early for invalid `extensions` or `index` options + - deps: debug@~2.1.3 + +1.9.1 / 2015-02-17 +================== + + * deps: send@0.12.1 + - Fix regression sending zero-length files + +1.9.0 / 2015-02-16 +================== + + * deps: send@0.12.0 + - Always read the stat size from the file + - Fix mutating passed-in `options` + - deps: mime@1.3.4 + +1.8.1 / 2015-01-20 +================== + + * Fix redirect loop in Node.js 0.11.14 + * deps: send@0.11.1 + - Fix root path disclosure + +1.8.0 / 2015-01-05 +================== + + * deps: send@0.11.0 + - deps: debug@~2.1.1 + - deps: etag@~1.5.1 + - deps: ms@0.7.0 + - deps: on-finished@~2.2.0 + +1.7.2 / 2015-01-02 +================== + + * Fix potential open redirect when mounted at root + +1.7.1 / 2014-10-22 +================== + + * deps: send@0.10.1 + - deps: on-finished@~2.1.1 + +1.7.0 / 2014-10-15 +================== + + * deps: send@0.10.0 + - deps: debug@~2.1.0 + - deps: depd@~1.0.0 + - deps: etag@~1.5.0 + +1.6.5 / 2015-02-04 +================== + + * Fix potential open redirect when mounted at root + - Back-ported from v1.7.2 + +1.6.4 / 2014-10-08 +================== + + * Fix redirect loop when index file serving disabled + +1.6.3 / 2014-09-24 +================== + + * deps: send@0.9.3 + - deps: etag@~1.4.0 + +1.6.2 / 2014-09-15 +================== + + * deps: send@0.9.2 + - deps: depd@0.4.5 + - deps: etag@~1.3.1 + - deps: range-parser@~1.0.2 + +1.6.1 / 2014-09-07 +================== + + * deps: send@0.9.1 + - deps: fresh@0.2.4 + +1.6.0 / 2014-09-07 +================== + + * deps: send@0.9.0 + - Add `lastModified` option + - Use `etag` to generate `ETag` header + - deps: debug@~2.0.0 + +1.5.4 / 2014-09-04 +================== + + * deps: send@0.8.5 + - Fix a path traversal issue when using `root` + - Fix malicious path detection for empty string path + +1.5.3 / 2014-08-17 +================== + + * deps: send@0.8.3 + +1.5.2 / 2014-08-14 +================== + + * deps: send@0.8.2 + - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream` + +1.5.1 / 2014-08-09 +================== + + * Fix parsing of weird `req.originalUrl` values + * deps: parseurl@~1.3.0 + * deps: utils-merge@1.0.0 + +1.5.0 / 2014-08-05 +================== + + * deps: send@0.8.1 + - Add `extensions` option + +1.4.4 / 2014-08-04 +================== + + * deps: send@0.7.4 + - Fix serving index files without root dir + +1.4.3 / 2014-07-29 +================== + + * deps: send@0.7.3 + - Fix incorrect 403 on Windows and Node.js 0.11 + +1.4.2 / 2014-07-27 +================== + + * deps: send@0.7.2 + - deps: depd@0.4.4 + +1.4.1 / 2014-07-26 +================== + + * deps: send@0.7.1 + - deps: depd@0.4.3 + +1.4.0 / 2014-07-21 +================== + + * deps: parseurl@~1.2.0 + - Cache URLs based on original value + - Remove no-longer-needed URL mis-parse work-around + - Simplify the "fast-path" `RegExp` + * deps: send@0.7.0 + - Add `dotfiles` option + - deps: debug@1.0.4 + - deps: depd@0.4.2 + +1.3.2 / 2014-07-11 +================== + + * deps: send@0.6.0 + - Cap `maxAge` value to 1 year + - deps: debug@1.0.3 + +1.3.1 / 2014-07-09 +================== + + * deps: parseurl@~1.1.3 + - faster parsing of href-only URLs + +1.3.0 / 2014-06-28 +================== + + * Add `setHeaders` option + * Include HTML link in redirect response + * deps: send@0.5.0 + - Accept string for `maxAge` (converted by `ms`) + +1.2.3 / 2014-06-11 +================== + + * deps: send@0.4.3 + - Do not throw un-catchable error on file open race condition + - Use `escape-html` for HTML escaping + - deps: debug@1.0.2 + - deps: finished@1.2.2 + - deps: fresh@0.2.2 + +1.2.2 / 2014-06-09 +================== + + * deps: send@0.4.2 + - fix "event emitter leak" warnings + - deps: debug@1.0.1 + - deps: finished@1.2.1 + +1.2.1 / 2014-06-02 +================== + + * use `escape-html` for escaping + * deps: send@0.4.1 + - Send `max-age` in `Cache-Control` in correct format + +1.2.0 / 2014-05-29 +================== + + * deps: send@0.4.0 + - Calculate ETag with md5 for reduced collisions + - Fix wrong behavior when index file matches directory + - Ignore stream errors after request ends + - Skip directories in index file search + - deps: debug@0.8.1 + +1.1.0 / 2014-04-24 +================== + + * Accept options directly to `send` module + * deps: send@0.3.0 + +1.0.4 / 2014-04-07 +================== + + * Resolve relative paths at middleware setup + * Use parseurl to parse the URL from request + +1.0.3 / 2014-03-20 +================== + + * Do not rely on connect-like environments + +1.0.2 / 2014-03-06 +================== + + * deps: send@0.2.0 + +1.0.1 / 2014-03-05 +================== + + * Add mime export for back-compat + +1.0.0 / 2014-03-05 +================== + + * Genesis from `connect` diff --git a/node_modules/serve-static/LICENSE b/node_modules/serve-static/LICENSE new file mode 100644 index 0000000..cbe62e8 --- /dev/null +++ b/node_modules/serve-static/LICENSE @@ -0,0 +1,25 @@ +(The MIT License) + +Copyright (c) 2010 Sencha Inc. +Copyright (c) 2011 LearnBoost +Copyright (c) 2011 TJ Holowaychuk +Copyright (c) 2014-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/serve-static/README.md b/node_modules/serve-static/README.md new file mode 100644 index 0000000..7cce428 --- /dev/null +++ b/node_modules/serve-static/README.md @@ -0,0 +1,259 @@ +# serve-static + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Linux Build][travis-image]][travis-url] +[![Windows Build][appveyor-image]][appveyor-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install serve-static +``` + +## API + + + +```js +var serveStatic = require('serve-static') +``` + +### serveStatic(root, options) + +Create a new middleware function to serve files from within a given root +directory. The file to serve will be determined by combining `req.url` +with the provided root directory. When a file is not found, instead of +sending a 404 response, this module will instead call `next()` to move on +to the next middleware, allowing for stacking and fall-backs. + +#### Options + +##### acceptRanges + +Enable or disable accepting ranged requests, defaults to true. +Disabling this will not send `Accept-Ranges` and ignore the contents +of the `Range` request header. + +##### cacheControl + +Enable or disable setting `Cache-Control` response header, defaults to +true. Disabling this will ignore the `immutable` and `maxAge` options. + +##### dotfiles + + Set how "dotfiles" are treated when encountered. A dotfile is a file +or directory that begins with a dot ("."). Note this check is done on +the path itself without checking if the path actually exists on the +disk. If `root` is specified, only the dotfiles above the root are +checked (i.e. the root itself can be within a dotfile when set +to "deny"). + + - `'allow'` No special treatment for dotfiles. + - `'deny'` Deny a request for a dotfile and 403/`next()`. + - `'ignore'` Pretend like the dotfile does not exist and 404/`next()`. + +The default value is similar to `'ignore'`, with the exception that this +default will not ignore the files within a directory that begins with a dot. + +##### etag + +Enable or disable etag generation, defaults to true. + +##### extensions + +Set file extension fallbacks. When set, if a file is not found, the given +extensions will be added to the file name and search for. The first that +exists will be served. Example: `['html', 'htm']`. + +The default value is `false`. + +##### fallthrough + +Set the middleware to have client errors fall-through as just unhandled +requests, otherwise forward a client error. The difference is that client +errors like a bad request or a request to a non-existent file will cause +this middleware to simply `next()` to your next middleware when this value +is `true`. When this value is `false`, these errors (even 404s), will invoke +`next(err)`. + +Typically `true` is desired such that multiple physical directories can be +mapped to the same web address or for routes to fill in non-existent files. + +The value `false` can be used if this middleware is mounted at a path that +is designed to be strictly a single file system directory, which allows for +short-circuiting 404s for less overhead. This middleware will also reply to +all methods. + +The default value is `true`. + +##### immutable + +Enable or disable the `immutable` directive in the `Cache-Control` response +header, defaults to `false`. If set to `true`, the `maxAge` option should +also be specified to enable caching. The `immutable` directive will prevent +supported clients from making conditional requests during the life of the +`maxAge` option to check if the file has changed. + +##### index + +By default this module will send "index.html" files in response to a request +on a directory. To disable this set `false` or to supply a new index pass a +string or an array in preferred order. + +##### lastModified + +Enable or disable `Last-Modified` header, defaults to true. Uses the file +system's last modified value. + +##### maxAge + +Provide a max-age in milliseconds for http caching, defaults to 0. This +can also be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme) +module. + +##### redirect + +Redirect to trailing "/" when the pathname is a dir. Defaults to `true`. + +##### setHeaders + +Function to set custom headers on response. Alterations to the headers need to +occur synchronously. The function is called as `fn(res, path, stat)`, where +the arguments are: + + - `res` the response object + - `path` the file path that is being sent + - `stat` the stat object of the file that is being sent + +## Examples + +### Serve files with vanilla node.js http server + +```js +var finalhandler = require('finalhandler') +var http = require('http') +var serveStatic = require('serve-static') + +// Serve up public/ftp folder +var serve = serveStatic('public/ftp', { 'index': ['index.html', 'index.htm'] }) + +// Create server +var server = http.createServer(function onRequest (req, res) { + serve(req, res, finalhandler(req, res)) +}) + +// Listen +server.listen(3000) +``` + +### Serve all files as downloads + +```js +var contentDisposition = require('content-disposition') +var finalhandler = require('finalhandler') +var http = require('http') +var serveStatic = require('serve-static') + +// Serve up public/ftp folder +var serve = serveStatic('public/ftp', { + 'index': false, + 'setHeaders': setHeaders +}) + +// Set header to force download +function setHeaders (res, path) { + res.setHeader('Content-Disposition', contentDisposition(path)) +} + +// Create server +var server = http.createServer(function onRequest (req, res) { + serve(req, res, finalhandler(req, res)) +}) + +// Listen +server.listen(3000) +``` + +### Serving using express + +#### Simple + +This is a simple example of using Express. + +```js +var express = require('express') +var serveStatic = require('serve-static') + +var app = express() + +app.use(serveStatic('public/ftp', { 'index': ['default.html', 'default.htm'] })) +app.listen(3000) +``` + +#### Multiple roots + +This example shows a simple way to search through multiple directories. +Files are look for in `public-optimized/` first, then `public/` second as +a fallback. + +```js +var express = require('express') +var path = require('path') +var serveStatic = require('serve-static') + +var app = express() + +app.use(serveStatic(path.join(__dirname, 'public-optimized'))) +app.use(serveStatic(path.join(__dirname, 'public'))) +app.listen(3000) +``` + +#### Different settings for paths + +This example shows how to set a different max age depending on the served +file type. In this example, HTML files are not cached, while everything else +is for 1 day. + +```js +var express = require('express') +var path = require('path') +var serveStatic = require('serve-static') + +var app = express() + +app.use(serveStatic(path.join(__dirname, 'public'), { + maxAge: '1d', + setHeaders: setCustomCacheControl +})) + +app.listen(3000) + +function setCustomCacheControl (res, path) { + if (serveStatic.mime.lookup(path) === 'text/html') { + // Custom Cache-Control for HTML files + res.setHeader('Cache-Control', 'public, max-age=0') + } +} +``` + +## License + +[MIT](LICENSE) + +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/serve-static/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/serve-static/master +[coveralls-url]: https://coveralls.io/r/expressjs/serve-static?branch=master +[node-image]: https://badgen.net/npm/node/serve-static +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/serve-static +[npm-url]: https://npmjs.org/package/serve-static +[npm-version-image]: https://badgen.net/npm/v/serve-static +[travis-image]: https://badgen.net/travis/expressjs/serve-static/master?label=linux +[travis-url]: https://travis-ci.org/expressjs/serve-static diff --git a/node_modules/serve-static/index.js b/node_modules/serve-static/index.js new file mode 100644 index 0000000..b7d3984 --- /dev/null +++ b/node_modules/serve-static/index.js @@ -0,0 +1,210 @@ +/*! + * serve-static + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') +var parseUrl = require('parseurl') +var resolve = require('path').resolve +var send = require('send') +var url = require('url') + +/** + * Module exports. + * @public + */ + +module.exports = serveStatic +module.exports.mime = send.mime + +/** + * @param {string} root + * @param {object} [options] + * @return {function} + * @public + */ + +function serveStatic (root, options) { + if (!root) { + throw new TypeError('root path required') + } + + if (typeof root !== 'string') { + throw new TypeError('root path must be a string') + } + + // copy options object + var opts = Object.create(options || null) + + // fall-though + var fallthrough = opts.fallthrough !== false + + // default redirect + var redirect = opts.redirect !== false + + // headers listener + var setHeaders = opts.setHeaders + + if (setHeaders && typeof setHeaders !== 'function') { + throw new TypeError('option setHeaders must be function') + } + + // setup options for send + opts.maxage = opts.maxage || opts.maxAge || 0 + opts.root = resolve(root) + + // construct directory listener + var onDirectory = redirect + ? createRedirectDirectoryListener() + : createNotFoundDirectoryListener() + + return function serveStatic (req, res, next) { + if (req.method !== 'GET' && req.method !== 'HEAD') { + if (fallthrough) { + return next() + } + + // method not allowed + res.statusCode = 405 + res.setHeader('Allow', 'GET, HEAD') + res.setHeader('Content-Length', '0') + res.end() + return + } + + var forwardError = !fallthrough + var originalUrl = parseUrl.original(req) + var path = parseUrl(req).pathname + + // make sure redirect occurs at mount + if (path === '/' && originalUrl.pathname.substr(-1) !== '/') { + path = '' + } + + // create send stream + var stream = send(req, path, opts) + + // add directory handler + stream.on('directory', onDirectory) + + // add headers listener + if (setHeaders) { + stream.on('headers', setHeaders) + } + + // add file listener for fallthrough + if (fallthrough) { + stream.on('file', function onFile () { + // once file is determined, always forward error + forwardError = true + }) + } + + // forward errors + stream.on('error', function error (err) { + if (forwardError || !(err.statusCode < 500)) { + next(err) + return + } + + next() + }) + + // pipe + stream.pipe(res) + } +} + +/** + * Collapse all leading slashes into a single slash + * @private + */ +function collapseLeadingSlashes (str) { + for (var i = 0; i < str.length; i++) { + if (str.charCodeAt(i) !== 0x2f /* / */) { + break + } + } + + return i > 1 + ? '/' + str.substr(i) + : str +} + +/** + * Create a minimal HTML document. + * + * @param {string} title + * @param {string} body + * @private + */ + +function createHtmlDocument (title, body) { + return '\n' + + '\n' + + '\n' + + '\n' + + '' + title + '\n' + + '\n' + + '\n' + + '
      ' + body + '
      \n' + + '\n' + + '\n' +} + +/** + * Create a directory listener that just 404s. + * @private + */ + +function createNotFoundDirectoryListener () { + return function notFound () { + this.error(404) + } +} + +/** + * Create a directory listener that performs a redirect. + * @private + */ + +function createRedirectDirectoryListener () { + return function redirect (res) { + if (this.hasTrailingSlash()) { + this.error(404) + return + } + + // get original URL + var originalUrl = parseUrl.original(this.req) + + // append trailing slash + originalUrl.path = null + originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/') + + // reformat the URL + var loc = encodeUrl(url.format(originalUrl)) + var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + + escapeHtml(loc) + '') + + // send redirect response + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'none'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.setHeader('Location', loc) + res.end(doc) + } +} diff --git a/node_modules/serve-static/package.json b/node_modules/serve-static/package.json new file mode 100644 index 0000000..1dc682c --- /dev/null +++ b/node_modules/serve-static/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + "serve-static@1.14.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "serve-static@1.14.1", + "_id": "serve-static@1.14.1", + "_inBundle": false, + "_integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "_location": "/serve-static", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "serve-static@1.14.1", + "name": "serve-static", + "escapedName": "serve-static", + "rawSpec": "1.14.1", + "saveSpec": null, + "fetchSpec": "1.14.1" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "_spec": "1.14.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/expressjs/serve-static/issues" + }, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "description": "Serve static files", + "devDependencies": { + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "istanbul": "0.4.5", + "mocha": "6.1.4", + "safe-buffer": "5.1.2", + "supertest": "4.0.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/expressjs/serve-static#readme", + "license": "MIT", + "name": "serve-static", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/serve-static.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "version": "node scripts/version-history.js && git add HISTORY.md" + }, + "version": "1.14.1" +} diff --git a/node_modules/setprototypeof/LICENSE b/node_modules/setprototypeof/LICENSE new file mode 100644 index 0000000..61afa2f --- /dev/null +++ b/node_modules/setprototypeof/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Wes Todd + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/setprototypeof/README.md b/node_modules/setprototypeof/README.md new file mode 100644 index 0000000..f120044 --- /dev/null +++ b/node_modules/setprototypeof/README.md @@ -0,0 +1,31 @@ +# Polyfill for `Object.setPrototypeOf` + +[![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) +[![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard) + +A simple cross platform implementation to set the prototype of an instianted object. Supports all modern browsers and at least back to IE8. + +## Usage: + +``` +$ npm install --save setprototypeof +``` + +```javascript +var setPrototypeOf = require('setprototypeof') + +var obj = {} +setPrototypeOf(obj, { + foo: function () { + return 'bar' + } +}) +obj.foo() // bar +``` + +TypeScript is also supported: + +```typescript +import setPrototypeOf = require('setprototypeof') +``` diff --git a/node_modules/setprototypeof/index.d.ts b/node_modules/setprototypeof/index.d.ts new file mode 100644 index 0000000..f108ecd --- /dev/null +++ b/node_modules/setprototypeof/index.d.ts @@ -0,0 +1,2 @@ +declare function setPrototypeOf(o: any, proto: object | null): any; +export = setPrototypeOf; diff --git a/node_modules/setprototypeof/index.js b/node_modules/setprototypeof/index.js new file mode 100644 index 0000000..81fd5d7 --- /dev/null +++ b/node_modules/setprototypeof/index.js @@ -0,0 +1,17 @@ +'use strict' +/* eslint no-proto: 0 */ +module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) + +function setProtoOf (obj, proto) { + obj.__proto__ = proto + return obj +} + +function mixinProperties (obj, proto) { + for (var prop in proto) { + if (!obj.hasOwnProperty(prop)) { + obj[prop] = proto[prop] + } + } + return obj +} diff --git a/node_modules/setprototypeof/package.json b/node_modules/setprototypeof/package.json new file mode 100644 index 0000000..d6039a3 --- /dev/null +++ b/node_modules/setprototypeof/package.json @@ -0,0 +1,67 @@ +{ + "_args": [ + [ + "setprototypeof@1.1.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "setprototypeof@1.1.1", + "_id": "setprototypeof@1.1.1", + "_inBundle": false, + "_integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "_location": "/setprototypeof", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "setprototypeof@1.1.1", + "name": "setprototypeof", + "escapedName": "setprototypeof", + "rawSpec": "1.1.1", + "saveSpec": null, + "fetchSpec": "1.1.1" + }, + "_requiredBy": [ + "/express", + "/http-errors" + ], + "_resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "_spec": "1.1.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Wes Todd" + }, + "bugs": { + "url": "https://github.com/wesleytodd/setprototypeof/issues" + }, + "description": "A small polyfill for Object.setprototypeof", + "devDependencies": { + "mocha": "^5.2.0", + "standard": "^12.0.1" + }, + "homepage": "https://github.com/wesleytodd/setprototypeof", + "keywords": [ + "polyfill", + "object", + "setprototypeof" + ], + "license": "ISC", + "main": "index.js", + "name": "setprototypeof", + "repository": { + "type": "git", + "url": "git+https://github.com/wesleytodd/setprototypeof.git" + }, + "scripts": { + "node010": "NODE_VER=0.10 MOCHA_VER=3 npm run testversion", + "node11": "NODE_VER=11 npm run testversion", + "node4": "NODE_VER=4 npm run testversion", + "node6": "NODE_VER=6 npm run testversion", + "node9": "NODE_VER=9 npm run testversion", + "test": "standard && mocha", + "testallversions": "npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11", + "testversion": "docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t" + }, + "typings": "index.d.ts", + "version": "1.1.1" +} diff --git a/node_modules/setprototypeof/test/index.js b/node_modules/setprototypeof/test/index.js new file mode 100644 index 0000000..afeb4dd --- /dev/null +++ b/node_modules/setprototypeof/test/index.js @@ -0,0 +1,24 @@ +'use strict' +/* eslint-env mocha */ +/* eslint no-proto: 0 */ +var assert = require('assert') +var setPrototypeOf = require('..') + +describe('setProtoOf(obj, proto)', function () { + it('should merge objects', function () { + var obj = { a: 1, b: 2 } + var proto = { b: 3, c: 4 } + var mergeObj = setPrototypeOf(obj, proto) + + if (Object.getPrototypeOf) { + assert.strictEqual(Object.getPrototypeOf(obj), proto) + } else if ({ __proto__: [] } instanceof Array) { + assert.strictEqual(obj.__proto__, proto) + } else { + assert.strictEqual(obj.a, 1) + assert.strictEqual(obj.b, 2) + assert.strictEqual(obj.c, 4) + } + assert.strictEqual(mergeObj, obj) + }) +}) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt new file mode 100644 index 0000000..eead04a --- /dev/null +++ b/node_modules/signal-exit/LICENSE.txt @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md new file mode 100644 index 0000000..f9c7c00 --- /dev/null +++ b/node_modules/signal-exit/README.md @@ -0,0 +1,39 @@ +# signal-exit + +[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit) +[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master) +[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit) +[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) + +When you want to fire an event no matter how a process exits: + +* reaching the end of execution. +* explicitly having `process.exit(code)` called. +* having `process.kill(pid, sig)` called. +* receiving a fatal signal from outside the process + +Use `signal-exit`. + +```js +var onExit = require('signal-exit') + +onExit(function (code, signal) { + console.log('process exited!') +}) +``` + +## API + +`var remove = onExit(function (code, signal) {}, options)` + +The return value of the function is a function that will remove the +handler. + +Note that the function *only* fires for signals if the signal would +cause the process to exit. That is, there are no other listeners, and +it is a fatal signal. + +## Options + +* `alwaysLast`: Run this handler after any other signal or exit + handlers. This causes `process.emit` to be monkeypatched. diff --git a/node_modules/signal-exit/index.js b/node_modules/signal-exit/index.js new file mode 100644 index 0000000..a79b1d2 --- /dev/null +++ b/node_modules/signal-exit/index.js @@ -0,0 +1,200 @@ +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +// grab a reference to node's real process object right away +var process = global.process + +const processOk = function (process) { + return process && + typeof process === 'object' && + typeof process.removeListener === 'function' && + typeof process.emit === 'function' && + typeof process.reallyExit === 'function' && + typeof process.listeners === 'function' && + typeof process.kill === 'function' && + typeof process.pid === 'number' && + typeof process.on === 'function' +} + +// some kind of non-node environment, just no-op +/* istanbul ignore if */ +if (!processOk(process)) { + module.exports = function () {} +} else { + var assert = require('assert') + var signals = require('./signals.js') + var isWin = /^win/i.test(process.platform) + + var EE = require('events') + /* istanbul ignore if */ + if (typeof EE !== 'function') { + EE = EE.EventEmitter + } + + var emitter + if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ + } else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} + } + + // Because this emitter is a global, we have to check to see if a + // previous version of this library failed to enable infinite listeners. + // I know what you're about to say. But literally everything about + // signal-exit is a compromise with evil. Get used to it. + if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true + } + + module.exports = function (cb, opts) { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return + } + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') + + if (loaded === false) { + load() + } + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' + } + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove + } + + var unload = function unload () { + if (!loaded || !processOk(global.process)) { + return + } + loaded = false + + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 + } + module.exports.unload = unload + + var emit = function emit (event, code, signal) { + /* istanbul ignore if */ + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) + } + + // { : , ... } + var sigListeners = {} + signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return + } + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + if (isWin && sig === 'SIGHUP') { + // "SIGHUP" throws an `ENOSYS` error on Windows, + // so use a supported signal instead + sig = 'SIGINT' + } + /* istanbul ignore next */ + process.kill(process.pid, sig) + } + } + }) + + module.exports.signals = function () { + return signals + } + + var loaded = false + + var load = function load () { + if (loaded || !processOk(global.process)) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) + + process.emit = processEmit + process.reallyExit = processReallyExit + } + module.exports.load = load + + var originalProcessReallyExit = process.reallyExit + var processReallyExit = function processReallyExit (code) { + /* istanbul ignore if */ + if (!processOk(global.process)) { + return + } + process.exitCode = code || /* istanbul ignore next */ 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) + } + + var originalProcessEmit = process.emit + var processEmit = function processEmit (ev, arg) { + if (ev === 'exit' && processOk(global.process)) { + /* istanbul ignore else */ + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + /* istanbul ignore next */ + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } + } +} diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json new file mode 100644 index 0000000..6b41021 --- /dev/null +++ b/node_modules/signal-exit/package.json @@ -0,0 +1,66 @@ +{ + "_from": "signal-exit@^3.0.2", + "_id": "signal-exit@3.0.6", + "_inBundle": false, + "_integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "_location": "/signal-exit", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "signal-exit@^3.0.2", + "name": "signal-exit", + "escapedName": "signal-exit", + "rawSpec": "^3.0.2", + "saveSpec": null, + "fetchSpec": "^3.0.2" + }, + "_requiredBy": [ + "/write-file-atomic" + ], + "_resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "_shasum": "24e630c4b0f03fea446a2bd299e62b4a6ca8d0af", + "_spec": "signal-exit@^3.0.2", + "_where": "D:\\Cricbuzzz\\node_modules\\write-file-atomic", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/tapjs/signal-exit/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "when you want to fire an event no matter how a process exits.", + "devDependencies": { + "chai": "^3.5.0", + "coveralls": "^3.1.1", + "nyc": "^15.1.0", + "standard-version": "^9.3.1", + "tap": "^15.1.1" + }, + "files": [ + "index.js", + "signals.js" + ], + "homepage": "https://github.com/tapjs/signal-exit", + "keywords": [ + "signal", + "exit" + ], + "license": "ISC", + "main": "index.js", + "name": "signal-exit", + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/signal-exit.git" + }, + "scripts": { + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "snap": "tap", + "test": "tap" + }, + "version": "3.0.6" +} diff --git a/node_modules/signal-exit/signals.js b/node_modules/signal-exit/signals.js new file mode 100644 index 0000000..3bd67a8 --- /dev/null +++ b/node_modules/signal-exit/signals.js @@ -0,0 +1,53 @@ +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] + +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} + +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} diff --git a/node_modules/sshpk/.npmignore b/node_modules/sshpk/.npmignore new file mode 100644 index 0000000..8000b59 --- /dev/null +++ b/node_modules/sshpk/.npmignore @@ -0,0 +1,9 @@ +.gitmodules +deps +docs +Makefile +node_modules +test +tools +coverage +man/src diff --git a/node_modules/sshpk/.travis.yml b/node_modules/sshpk/.travis.yml new file mode 100644 index 0000000..c3394c2 --- /dev/null +++ b/node_modules/sshpk/.travis.yml @@ -0,0 +1,11 @@ +language: node_js +node_js: + - "5.10" + - "4.4" + - "4.1" + - "0.12" + - "0.10" +before_install: + - "make check" +after_success: + - '[ "${TRAVIS_NODE_VERSION}" = "4.4" ] && make codecovio' diff --git a/node_modules/sshpk/LICENSE b/node_modules/sshpk/LICENSE new file mode 100644 index 0000000..f6d947d --- /dev/null +++ b/node_modules/sshpk/LICENSE @@ -0,0 +1,18 @@ +Copyright Joyent, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/sshpk/README.md b/node_modules/sshpk/README.md new file mode 100644 index 0000000..5740f74 --- /dev/null +++ b/node_modules/sshpk/README.md @@ -0,0 +1,804 @@ +sshpk +========= + +Parse, convert, fingerprint and use SSH keys (both public and private) in pure +node -- no `ssh-keygen` or other external dependencies. + +Supports RSA, DSA, ECDSA (nistp-\*) and ED25519 key types, in PEM (PKCS#1, +PKCS#8) and OpenSSH formats. + +This library has been extracted from +[`node-http-signature`](https://github.com/joyent/node-http-signature) +(work by [Mark Cavage](https://github.com/mcavage) and +[Dave Eddy](https://github.com/bahamas10)) and +[`node-ssh-fingerprint`](https://github.com/bahamas10/node-ssh-fingerprint) +(work by Dave Eddy), with additions (including ECDSA support) by +[Alex Wilson](https://github.com/arekinath). + +Install +------- + +``` +npm install sshpk +``` + +Examples +-------- + +```js +var sshpk = require('sshpk'); + +var fs = require('fs'); + +/* Read in an OpenSSH-format public key */ +var keyPub = fs.readFileSync('id_rsa.pub'); +var key = sshpk.parseKey(keyPub, 'ssh'); + +/* Get metadata about the key */ +console.log('type => %s', key.type); +console.log('size => %d bits', key.size); +console.log('comment => %s', key.comment); + +/* Compute key fingerprints, in new OpenSSH (>6.7) format, and old MD5 */ +console.log('fingerprint => %s', key.fingerprint().toString()); +console.log('old-style fingerprint => %s', key.fingerprint('md5').toString()); +``` + +Example output: + +``` +type => rsa +size => 2048 bits +comment => foo@foo.com +fingerprint => SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w +old-style fingerprint => a0:c8:ad:6c:32:9a:32:fa:59:cc:a9:8c:0a:0d:6e:bd +``` + +More examples: converting between formats: + +```js +/* Read in a PEM public key */ +var keyPem = fs.readFileSync('id_rsa.pem'); +var key = sshpk.parseKey(keyPem, 'pem'); + +/* Convert to PEM PKCS#8 public key format */ +var pemBuf = key.toBuffer('pkcs8'); + +/* Convert to SSH public key format (and return as a string) */ +var sshKey = key.toString('ssh'); +``` + +Signing and verifying: + +```js +/* Read in an OpenSSH/PEM *private* key */ +var keyPriv = fs.readFileSync('id_ecdsa'); +var key = sshpk.parsePrivateKey(keyPriv, 'pem'); + +var data = 'some data'; + +/* Sign some data with the key */ +var s = key.createSign('sha1'); +s.update(data); +var signature = s.sign(); + +/* Now load the public key (could also use just key.toPublic()) */ +var keyPub = fs.readFileSync('id_ecdsa.pub'); +key = sshpk.parseKey(keyPub, 'ssh'); + +/* Make a crypto.Verifier with this key */ +var v = key.createVerify('sha1'); +v.update(data); +var valid = v.verify(signature); +/* => true! */ +``` + +Matching fingerprints with keys: + +```js +var fp = sshpk.parseFingerprint('SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w'); + +var keys = [sshpk.parseKey(...), sshpk.parseKey(...), ...]; + +keys.forEach(function (key) { + if (fp.matches(key)) + console.log('found it!'); +}); +``` + +Usage +----- + +## Public keys + +### `parseKey(data[, format = 'auto'[, options]])` + +Parses a key from a given data format and returns a new `Key` object. + +Parameters + +- `data` -- Either a Buffer or String, containing the key +- `format` -- String name of format to use, valid options are: + - `auto`: choose automatically from all below + - `pem`: supports both PKCS#1 and PKCS#8 + - `ssh`: standard OpenSSH format, + - `pkcs1`, `pkcs8`: variants of `pem` + - `rfc4253`: raw OpenSSH wire format + - `openssh`: new post-OpenSSH 6.5 internal format, produced by + `ssh-keygen -o` + - `dnssec`: `.key` file format output by `dnssec-keygen` etc + - `putty`: the PuTTY `.ppk` file format (supports truncated variant without + all the lines from `Private-Lines:` onwards) +- `options` -- Optional Object, extra options, with keys: + - `filename` -- Optional String, name for the key being parsed + (eg. the filename that was opened). Used to generate + Error messages + - `passphrase` -- Optional String, encryption passphrase used to decrypt an + encrypted PEM file + +### `Key.isKey(obj)` + +Returns `true` if the given object is a valid `Key` object created by a version +of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Key#type` + +String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. + +### `Key#size` + +Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; +for ECDSA this is the bit size of the curve in use. + +### `Key#comment` + +Optional string, a key comment used by some formats (eg the `ssh` format). + +### `Key#curve` + +Only present if `this.type === 'ecdsa'`, string containing the name of the +named curve used with this key. Possible values include `nistp256`, `nistp384` +and `nistp521`. + +### `Key#toBuffer([format = 'ssh'])` + +Convert the key into a given data format and return the serialized key as +a Buffer. + +Parameters + +- `format` -- String name of format to use, for valid options see `parseKey()` + +### `Key#toString([format = 'ssh])` + +Same as `this.toBuffer(format).toString()`. + +### `Key#fingerprint([algorithm = 'sha256'[, hashType = 'ssh']])` + +Creates a new `Fingerprint` object representing this Key's fingerprint. + +Parameters + +- `algorithm` -- String name of hash algorithm to use, valid options are `md5`, + `sha1`, `sha256`, `sha384`, `sha512` +- `hashType` -- String name of fingerprint hash type to use, valid options are + `ssh` (the type of fingerprint used by OpenSSH, e.g. in + `ssh-keygen`), `spki` (used by HPKP, some OpenSSL applications) + +### `Key#createVerify([hashAlgorithm])` + +Creates a `crypto.Verifier` specialized to use this Key (and the correct public +key algorithm to match it). The returned Verifier has the same API as a regular +one, except that the `verify()` function takes only the target signature as an +argument. + +Parameters + +- `hashAlgorithm` -- optional String name of hash algorithm to use, any + supported by OpenSSL are valid, usually including + `sha1`, `sha256`. + +`v.verify(signature[, format])` Parameters + +- `signature` -- either a Signature object, or a Buffer or String +- `format` -- optional String, name of format to interpret given String with. + Not valid if `signature` is a Signature or Buffer. + +### `Key#createDiffieHellman()` +### `Key#createDH()` + +Creates a Diffie-Hellman key exchange object initialized with this key and all +necessary parameters. This has the same API as a `crypto.DiffieHellman` +instance, except that functions take `Key` and `PrivateKey` objects as +arguments, and return them where indicated for. + +This is only valid for keys belonging to a cryptosystem that supports DHE +or a close analogue (i.e. `dsa`, `ecdsa` and `curve25519` keys). An attempt +to call this function on other keys will yield an `Error`. + +## Private keys + +### `parsePrivateKey(data[, format = 'auto'[, options]])` + +Parses a private key from a given data format and returns a new +`PrivateKey` object. + +Parameters + +- `data` -- Either a Buffer or String, containing the key +- `format` -- String name of format to use, valid options are: + - `auto`: choose automatically from all below + - `pem`: supports both PKCS#1 and PKCS#8 + - `ssh`, `openssh`: new post-OpenSSH 6.5 internal format, produced by + `ssh-keygen -o` + - `pkcs1`, `pkcs8`: variants of `pem` + - `rfc4253`: raw OpenSSH wire format + - `dnssec`: `.private` format output by `dnssec-keygen` etc. +- `options` -- Optional Object, extra options, with keys: + - `filename` -- Optional String, name for the key being parsed + (eg. the filename that was opened). Used to generate + Error messages + - `passphrase` -- Optional String, encryption passphrase used to decrypt an + encrypted PEM file + +### `generatePrivateKey(type[, options])` + +Generates a new private key of a certain key type, from random data. + +Parameters + +- `type` -- String, type of key to generate. Currently supported are `'ecdsa'` + and `'ed25519'` +- `options` -- optional Object, with keys: + - `curve` -- optional String, for `'ecdsa'` keys, specifies the curve to use. + If ECDSA is specified and this option is not given, defaults to + using `'nistp256'`. + +### `PrivateKey.isPrivateKey(obj)` + +Returns `true` if the given object is a valid `PrivateKey` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `PrivateKey#type` + +String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. + +### `PrivateKey#size` + +Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; +for ECDSA this is the bit size of the curve in use. + +### `PrivateKey#curve` + +Only present if `this.type === 'ecdsa'`, string containing the name of the +named curve used with this key. Possible values include `nistp256`, `nistp384` +and `nistp521`. + +### `PrivateKey#toBuffer([format = 'pkcs1'])` + +Convert the key into a given data format and return the serialized key as +a Buffer. + +Parameters + +- `format` -- String name of format to use, valid options are listed under + `parsePrivateKey`. Note that ED25519 keys default to `openssh` + format instead (as they have no `pkcs1` representation). + +### `PrivateKey#toString([format = 'pkcs1'])` + +Same as `this.toBuffer(format).toString()`. + +### `PrivateKey#toPublic()` + +Extract just the public part of this private key, and return it as a `Key` +object. + +### `PrivateKey#fingerprint([algorithm = 'sha256'])` + +Same as `this.toPublic().fingerprint()`. + +### `PrivateKey#createVerify([hashAlgorithm])` + +Same as `this.toPublic().createVerify()`. + +### `PrivateKey#createSign([hashAlgorithm])` + +Creates a `crypto.Sign` specialized to use this PrivateKey (and the correct +key algorithm to match it). The returned Signer has the same API as a regular +one, except that the `sign()` function takes no arguments, and returns a +`Signature` object. + +Parameters + +- `hashAlgorithm` -- optional String name of hash algorithm to use, any + supported by OpenSSL are valid, usually including + `sha1`, `sha256`. + +`v.sign()` Parameters + +- none + +### `PrivateKey#derive(newType)` + +Derives a related key of type `newType` from this key. Currently this is +only supported to change between `ed25519` and `curve25519` keys which are +stored with the same private key (but usually distinct public keys in order +to avoid degenerate keys that lead to a weak Diffie-Hellman exchange). + +Parameters + +- `newType` -- String, type of key to derive, either `ed25519` or `curve25519` + +## Fingerprints + +### `parseFingerprint(fingerprint[, options])` + +Pre-parses a fingerprint, creating a `Fingerprint` object that can be used to +quickly locate a key by using the `Fingerprint#matches` function. + +Parameters + +- `fingerprint` -- String, the fingerprint value, in any supported format +- `options` -- Optional Object, with properties: + - `algorithms` -- Array of strings, names of hash algorithms to limit + support to. If `fingerprint` uses a hash algorithm not on + this list, throws `InvalidAlgorithmError`. + - `hashType` -- String, the type of hash the fingerprint uses, either `ssh` + or `spki` (normally auto-detected based on the format, but + can be overridden) + - `type` -- String, the entity this fingerprint identifies, either `key` or + `certificate` + +### `Fingerprint.isFingerprint(obj)` + +Returns `true` if the given object is a valid `Fingerprint` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Fingerprint#toString([format])` + +Returns a fingerprint as a string, in the given format. + +Parameters + +- `format` -- Optional String, format to use, valid options are `hex` and + `base64`. If this `Fingerprint` uses the `md5` algorithm, the + default format is `hex`. Otherwise, the default is `base64`. + +### `Fingerprint#matches(keyOrCertificate)` + +Verifies whether or not this `Fingerprint` matches a given `Key` or +`Certificate`. This function uses double-hashing to avoid leaking timing +information. Returns a boolean. + +Note that a `Key`-type Fingerprint will always return `false` if asked to match +a `Certificate` and vice versa. + +Parameters + +- `keyOrCertificate` -- a `Key` object or `Certificate` object, the entity to + match this fingerprint against + +## Signatures + +### `parseSignature(signature, algorithm, format)` + +Parses a signature in a given format, creating a `Signature` object. Useful +for converting between the SSH and ASN.1 (PKCS/OpenSSL) signature formats, and +also returned as output from `PrivateKey#createSign().sign()`. + +A Signature object can also be passed to a verifier produced by +`Key#createVerify()` and it will automatically be converted internally into the +correct format for verification. + +Parameters + +- `signature` -- a Buffer (binary) or String (base64), data of the actual + signature in the given format +- `algorithm` -- a String, name of the algorithm to be used, possible values + are `rsa`, `dsa`, `ecdsa` +- `format` -- a String, either `asn1` or `ssh` + +### `Signature.isSignature(obj)` + +Returns `true` if the given object is a valid `Signature` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Signature#toBuffer([format = 'asn1'])` + +Converts a Signature to the given format and returns it as a Buffer. + +Parameters + +- `format` -- a String, either `asn1` or `ssh` + +### `Signature#toString([format = 'asn1'])` + +Same as `this.toBuffer(format).toString('base64')`. + +## Certificates + +`sshpk` includes basic support for parsing certificates in X.509 (PEM) format +and the OpenSSH certificate format. This feature is intended to be used mainly +to access basic metadata about certificates, extract public keys from them, and +also to generate simple self-signed certificates from an existing key. + +Notably, there is no implementation of CA chain-of-trust verification, and only +very minimal support for key usage restrictions. Please do the security world +a favour, and DO NOT use this code for certificate verification in the +traditional X.509 CA chain style. + +### `parseCertificate(data, format)` + +Parameters + + - `data` -- a Buffer or String + - `format` -- a String, format to use, one of `'openssh'`, `'pem'` (X.509 in a + PEM wrapper), or `'x509'` (raw DER encoded) + +### `createSelfSignedCertificate(subject, privateKey[, options])` + +Parameters + + - `subject` -- an Identity, the subject of the certificate + - `privateKey` -- a PrivateKey, the key of the subject: will be used both to be + placed in the certificate and also to sign it (since this is + a self-signed certificate) + - `options` -- optional Object, with keys: + - `lifetime` -- optional Number, lifetime of the certificate from now in + seconds + - `validFrom`, `validUntil` -- optional Dates, beginning and end of + certificate validity period. If given + `lifetime` will be ignored + - `serial` -- optional Buffer, the serial number of the certificate + - `purposes` -- optional Array of String, X.509 key usage restrictions + +### `createCertificate(subject, key, issuer, issuerKey[, options])` + +Parameters + + - `subject` -- an Identity, the subject of the certificate + - `key` -- a Key, the public key of the subject + - `issuer` -- an Identity, the issuer of the certificate who will sign it + - `issuerKey` -- a PrivateKey, the issuer's private key for signing + - `options` -- optional Object, with keys: + - `lifetime` -- optional Number, lifetime of the certificate from now in + seconds + - `validFrom`, `validUntil` -- optional Dates, beginning and end of + certificate validity period. If given + `lifetime` will be ignored + - `serial` -- optional Buffer, the serial number of the certificate + - `purposes` -- optional Array of String, X.509 key usage restrictions + +### `Certificate#subjects` + +Array of `Identity` instances describing the subject of this certificate. + +### `Certificate#issuer` + +The `Identity` of the Certificate's issuer (signer). + +### `Certificate#subjectKey` + +The public key of the subject of the certificate, as a `Key` instance. + +### `Certificate#issuerKey` + +The public key of the signing issuer of this certificate, as a `Key` instance. +May be `undefined` if the issuer's key is unknown (e.g. on an X509 certificate). + +### `Certificate#serial` + +The serial number of the certificate. As this is normally a 64-bit or wider +integer, it is returned as a Buffer. + +### `Certificate#purposes` + +Array of Strings indicating the X.509 key usage purposes that this certificate +is valid for. The possible strings at the moment are: + + * `'signature'` -- key can be used for digital signatures + * `'identity'` -- key can be used to attest about the identity of the signer + (X.509 calls this `nonRepudiation`) + * `'codeSigning'` -- key can be used to sign executable code + * `'keyEncryption'` -- key can be used to encrypt other keys + * `'encryption'` -- key can be used to encrypt data (only applies for RSA) + * `'keyAgreement'` -- key can be used for key exchange protocols such as + Diffie-Hellman + * `'ca'` -- key can be used to sign other certificates (is a Certificate + Authority) + * `'crl'` -- key can be used to sign Certificate Revocation Lists (CRLs) + +### `Certificate#getExtension(nameOrOid)` + +Retrieves information about a certificate extension, if present, or returns +`undefined` if not. The string argument `nameOrOid` should be either the OID +(for X509 extensions) or the name (for OpenSSH extensions) of the extension +to retrieve. + +The object returned will have the following properties: + + * `format` -- String, set to either `'x509'` or `'openssh'` + * `name` or `oid` -- String, only one set based on value of `format` + * `data` -- Buffer, the raw data inside the extension + +### `Certificate#getExtensions()` + +Returns an Array of all present certificate extensions, in the same manner and +format as `getExtension()`. + +### `Certificate#isExpired([when])` + +Tests whether the Certificate is currently expired (i.e. the `validFrom` and +`validUntil` dates specify a range of time that does not include the current +time). + +Parameters + + - `when` -- optional Date, if specified, tests whether the Certificate was or + will be expired at the specified time instead of now + +Returns a Boolean. + +### `Certificate#isSignedByKey(key)` + +Tests whether the Certificate was validly signed by the given (public) Key. + +Parameters + + - `key` -- a Key instance + +Returns a Boolean. + +### `Certificate#isSignedBy(certificate)` + +Tests whether this Certificate was validly signed by the subject of the given +certificate. Also tests that the issuer Identity of this Certificate and the +subject Identity of the other Certificate are equivalent. + +Parameters + + - `certificate` -- another Certificate instance + +Returns a Boolean. + +### `Certificate#fingerprint([hashAlgo])` + +Returns the X509-style fingerprint of the entire certificate (as a Fingerprint +instance). This matches what a web-browser or similar would display as the +certificate fingerprint and should not be confused with the fingerprint of the +subject's public key. + +Parameters + + - `hashAlgo` -- an optional String, any hash function name + +### `Certificate#toBuffer([format])` + +Serializes the Certificate to a Buffer and returns it. + +Parameters + + - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or + `'x509'`. Defaults to `'x509'`. + +Returns a Buffer. + +### `Certificate#toString([format])` + + - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or + `'x509'`. Defaults to `'pem'`. + +Returns a String. + +## Certificate identities + +### `identityForHost(hostname)` + +Constructs a host-type Identity for a given hostname. + +Parameters + + - `hostname` -- the fully qualified DNS name of the host + +Returns an Identity instance. + +### `identityForUser(uid)` + +Constructs a user-type Identity for a given UID. + +Parameters + + - `uid` -- a String, user identifier (login name) + +Returns an Identity instance. + +### `identityForEmail(email)` + +Constructs an email-type Identity for a given email address. + +Parameters + + - `email` -- a String, email address + +Returns an Identity instance. + +### `identityFromDN(dn)` + +Parses an LDAP-style DN string (e.g. `'CN=foo, C=US'`) and turns it into an +Identity instance. + +Parameters + + - `dn` -- a String + +Returns an Identity instance. + +### `identityFromArray(arr)` + +Constructs an Identity from an array of DN components (see `Identity#toArray()` +for the format). + +Parameters + + - `arr` -- an Array of Objects, DN components with `name` and `value` + +Returns an Identity instance. + + +Supported attributes in DNs: + +| Attribute name | OID | +| -------------- | --- | +| `cn` | `2.5.4.3` | +| `o` | `2.5.4.10` | +| `ou` | `2.5.4.11` | +| `l` | `2.5.4.7` | +| `s` | `2.5.4.8` | +| `c` | `2.5.4.6` | +| `sn` | `2.5.4.4` | +| `postalCode` | `2.5.4.17` | +| `serialNumber` | `2.5.4.5` | +| `street` | `2.5.4.9` | +| `x500UniqueIdentifier` | `2.5.4.45` | +| `role` | `2.5.4.72` | +| `telephoneNumber` | `2.5.4.20` | +| `description` | `2.5.4.13` | +| `dc` | `0.9.2342.19200300.100.1.25` | +| `uid` | `0.9.2342.19200300.100.1.1` | +| `mail` | `0.9.2342.19200300.100.1.3` | +| `title` | `2.5.4.12` | +| `gn` | `2.5.4.42` | +| `initials` | `2.5.4.43` | +| `pseudonym` | `2.5.4.65` | + +### `Identity#toString()` + +Returns the identity as an LDAP-style DN string. +e.g. `'CN=foo, O=bar corp, C=us'` + +### `Identity#type` + +The type of identity. One of `'host'`, `'user'`, `'email'` or `'unknown'` + +### `Identity#hostname` +### `Identity#uid` +### `Identity#email` + +Set when `type` is `'host'`, `'user'`, or `'email'`, respectively. Strings. + +### `Identity#cn` + +The value of the first `CN=` in the DN, if any. It's probably better to use +the `#get()` method instead of this property. + +### `Identity#get(name[, asArray])` + +Returns the value of a named attribute in the Identity DN. If there is no +attribute of the given name, returns `undefined`. If multiple components +of the DN contain an attribute of this name, an exception is thrown unless +the `asArray` argument is given as `true` -- then they will be returned as +an Array in the same order they appear in the DN. + +Parameters + + - `name` -- a String + - `asArray` -- an optional Boolean + +### `Identity#toArray()` + +Returns the Identity as an Array of DN component objects. This looks like: + +```js +[ { + "name": "cn", + "value": "Joe Bloggs" +}, +{ + "name": "o", + "value": "Organisation Ltd" +} ] +``` + +Each object has a `name` and a `value` property. The returned objects may be +safely modified. + +Errors +------ + +### `InvalidAlgorithmError` + +The specified algorithm is not valid, either because it is not supported, or +because it was not included on a list of allowed algorithms. + +Thrown by `Fingerprint.parse`, `Key#fingerprint`. + +Properties + +- `algorithm` -- the algorithm that could not be validated + +### `FingerprintFormatError` + +The fingerprint string given could not be parsed as a supported fingerprint +format, or the specified fingerprint format is invalid. + +Thrown by `Fingerprint.parse`, `Fingerprint#toString`. + +Properties + +- `fingerprint` -- if caused by a fingerprint, the string value given +- `format` -- if caused by an invalid format specification, the string value given + +### `KeyParseError` + +The key data given could not be parsed as a valid key. + +Properties + +- `keyName` -- `filename` that was given to `parseKey` +- `format` -- the `format` that was trying to parse the key (see `parseKey`) +- `innerErr` -- the inner Error thrown by the format parser + +### `KeyEncryptedError` + +The key is encrypted with a symmetric key (ie, it is password protected). The +parsing operation would succeed if it was given the `passphrase` option. + +Properties + +- `keyName` -- `filename` that was given to `parseKey` +- `format` -- the `format` that was trying to parse the key (currently can only + be `"pem"`) + +### `CertificateParseError` + +The certificate data given could not be parsed as a valid certificate. + +Properties + +- `certName` -- `filename` that was given to `parseCertificate` +- `format` -- the `format` that was trying to parse the key + (see `parseCertificate`) +- `innerErr` -- the inner Error thrown by the format parser + +Friends of sshpk +---------------- + + * [`sshpk-agent`](https://github.com/arekinath/node-sshpk-agent) is a library + for speaking the `ssh-agent` protocol from node.js, which uses `sshpk` diff --git a/node_modules/sshpk/bin/sshpk-conv b/node_modules/sshpk/bin/sshpk-conv new file mode 100644 index 0000000..e839ede --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-conv @@ -0,0 +1,243 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2018 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var tty = require('tty'); +var readline = require('readline'); +var getPassword = require('getpass').getPass; + +var options = [ + { + names: ['outformat', 't'], + type: 'string', + help: 'Output format' + }, + { + names: ['informat', 'T'], + type: 'string', + help: 'Input format' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input file name (default stdin)' + }, + { + names: ['out', 'o'], + type: 'string', + help: 'Output file name (default stdout)' + }, + { + names: ['private', 'p'], + type: 'bool', + help: 'Produce a private key as output' + }, + { + names: ['derive', 'd'], + type: 'string', + help: 'Output a new key derived from this one, with given algo' + }, + { + names: ['identify', 'i'], + type: 'bool', + help: 'Print key metadata instead of converting' + }, + { + names: ['fingerprint', 'F'], + type: 'bool', + help: 'Output key fingerprint' + }, + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash function to use for key fingeprint with -F' + }, + { + names: ['spki', 's'], + type: 'bool', + help: 'With -F, generates an SPKI fingerprint instead of SSH' + }, + { + names: ['comment', 'c'], + type: 'string', + help: 'Set key comment, if output format supports' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-conv: error: %s', e.message); + process.exit(1); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-conv: converts between SSH key formats\n'); + console.error(help); + console.error('\navailable key formats:'); + console.error(' - pem, pkcs1 eg id_rsa'); + console.error(' - ssh eg id_rsa.pub'); + console.error(' - pkcs8 format you want for openssl'); + console.error(' - openssh like output of ssh-keygen -o'); + console.error(' - rfc4253 raw OpenSSH wire format'); + console.error(' - dnssec dnssec-keygen format'); + console.error(' - putty PuTTY ppk format'); + console.error('\navailable fingerprint formats:'); + console.error(' - hex colon-separated hex for SSH'); + console.error(' straight hex for SPKI'); + console.error(' - base64 SHA256:* format from OpenSSH'); + process.exit(1); + } + + /* + * Key derivation can only be done on private keys, so use of the -d + * option necessarily implies -p. + */ + if (opts.derive) + opts.private = true; + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + ifError(e, 'error opening input file'); + } + + var outFile = process.stdout; + + try { + if (opts.out && !opts.identify) { + fs.accessSync(path.dirname(opts.out), fs.W_OK); + outFile = fs.createWriteStream(opts.out); + } + } catch (e) { + ifError(e, 'error opening output file'); + } + + var bufs = []; + inFile.on('readable', function () { + var data; + while ((data = inFile.read())) + bufs.push(data); + }); + var parseOpts = {}; + parseOpts.filename = inFileName; + inFile.on('end', function processKey() { + var buf = Buffer.concat(bufs); + var fmt = 'auto'; + if (opts.informat) + fmt = opts.informat; + var f = sshpk.parseKey; + if (opts.private) + f = sshpk.parsePrivateKey; + try { + var key = f(buf, fmt, parseOpts); + } catch (e) { + if (e.name === 'KeyEncryptedError') { + getPassword(function (err, pw) { + if (err) + ifError(err); + parseOpts.passphrase = pw; + processKey(); + }); + return; + } + ifError(e); + } + + if (opts.derive) + key = key.derive(opts.derive); + + if (opts.comment) + key.comment = opts.comment; + + if (opts.identify) { + var kind = 'public'; + if (sshpk.PrivateKey.isPrivateKey(key)) + kind = 'private'; + console.log('%s: a %d bit %s %s key', inFileName, + key.size, key.type.toUpperCase(), kind); + if (key.type === 'ecdsa') + console.log('ECDSA curve: %s', key.curve); + if (key.comment) + console.log('Comment: %s', key.comment); + console.log('SHA256 fingerprint: ' + + key.fingerprint('sha256').toString()); + console.log('MD5 fingerprint: ' + + key.fingerprint('md5').toString()); + console.log('SPKI-SHA256 fingerprint: ' + + key.fingerprint('sha256', 'spki').toString()); + process.exit(0); + return; + } + + if (opts.fingerprint) { + var hash = opts.hash; + var type = opts.spki ? 'spki' : 'ssh'; + var format = opts.outformat; + var fp = key.fingerprint(hash, type).toString(format); + outFile.write(fp); + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + return; + } + + fmt = undefined; + if (opts.outformat) + fmt = opts.outformat; + outFile.write(key.toBuffer(fmt)); + if (fmt === 'ssh' || + (!opts.private && fmt === undefined)) + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + }); +} + +function ifError(e, txt) { + if (txt) + txt = txt + ': '; + else + txt = ''; + console.error('sshpk-conv: ' + txt + e.name + ': ' + e.message); + if (process.env['DEBUG'] || process.env['V']) { + console.error(e.stack); + if (e.innerErr) + console.error(e.innerErr.stack); + } + process.exit(1); +} diff --git a/node_modules/sshpk/bin/sshpk-sign b/node_modules/sshpk/bin/sshpk-sign new file mode 100644 index 0000000..673fc98 --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-sign @@ -0,0 +1,191 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2015 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var getPassword = require('getpass').getPass; + +var options = [ + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash algorithm (sha1, sha256, sha384, sha512)' + }, + { + names: ['verbose', 'v'], + type: 'bool', + help: 'Display verbose info about key and hash used' + }, + { + names: ['identity', 'i'], + type: 'string', + help: 'Path to key to use' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input filename' + }, + { + names: ['out', 'o'], + type: 'string', + help: 'Output filename' + }, + { + names: ['format', 't'], + type: 'string', + help: 'Signature format (asn1, ssh, raw)' + }, + { + names: ['binary', 'b'], + type: 'bool', + help: 'Output raw binary instead of base64' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +var parseOpts = {}; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-sign: error: %s', e.message); + process.exit(1); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-sign: sign data using an SSH key\n'); + console.error(help); + process.exit(1); + } + + if (!opts.identity) { + var help = parser.help({}).trimRight(); + console.error('sshpk-sign: the -i or --identity option ' + + 'is required\n'); + console.error(help); + process.exit(1); + } + + var keyData = fs.readFileSync(opts.identity); + parseOpts.filename = opts.identity; + + run(); +} + +function run() { + var key; + try { + key = sshpk.parsePrivateKey(keyData, 'auto', parseOpts); + } catch (e) { + if (e.name === 'KeyEncryptedError') { + getPassword(function (err, pw) { + parseOpts.passphrase = pw; + run(); + }); + return; + } + console.error('sshpk-sign: error loading private key "' + + opts.identity + '": ' + e.name + ': ' + e.message); + process.exit(1); + } + + var hash = opts.hash || key.defaultHashAlgorithm(); + + var signer; + try { + signer = key.createSign(hash); + } catch (e) { + console.error('sshpk-sign: error creating signer: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + if (opts.verbose) { + console.error('sshpk-sign: using %s-%s with a %d bit key', + key.type, hash, key.size); + } + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + console.error('sshpk-sign: error opening input file' + + ': ' + e.name + ': ' + e.message); + process.exit(1); + } + + var outFile = process.stdout; + + try { + if (opts.out && !opts.identify) { + fs.accessSync(path.dirname(opts.out), fs.W_OK); + outFile = fs.createWriteStream(opts.out); + } + } catch (e) { + console.error('sshpk-sign: error opening output file' + + ': ' + e.name + ': ' + e.message); + process.exit(1); + } + + inFile.pipe(signer); + inFile.on('end', function () { + var sig; + try { + sig = signer.sign(); + } catch (e) { + console.error('sshpk-sign: error signing data: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + var fmt = opts.format || 'asn1'; + var output; + try { + output = sig.toBuffer(fmt); + if (!opts.binary) + output = output.toString('base64'); + } catch (e) { + console.error('sshpk-sign: error converting signature' + + ' to ' + fmt + ' format: ' + e.name + ': ' + + e.message); + process.exit(1); + } + + outFile.write(output); + if (!opts.binary) + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + }); +} diff --git a/node_modules/sshpk/bin/sshpk-verify b/node_modules/sshpk/bin/sshpk-verify new file mode 100644 index 0000000..fc71a82 --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-verify @@ -0,0 +1,167 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2015 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var Buffer = require('safer-buffer').Buffer; + +var options = [ + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash algorithm (sha1, sha256, sha384, sha512)' + }, + { + names: ['verbose', 'v'], + type: 'bool', + help: 'Display verbose info about key and hash used' + }, + { + names: ['identity', 'i'], + type: 'string', + help: 'Path to (public) key to use' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input filename' + }, + { + names: ['format', 't'], + type: 'string', + help: 'Signature format (asn1, ssh, raw)' + }, + { + names: ['signature', 's'], + type: 'string', + help: 'base64-encoded signature data' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-verify: error: %s', e.message); + process.exit(3); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: sign data using an SSH key\n'); + console.error(help); + process.exit(3); + } + + if (!opts.identity) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: the -i or --identity option ' + + 'is required\n'); + console.error(help); + process.exit(3); + } + + if (!opts.signature) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: the -s or --signature option ' + + 'is required\n'); + console.error(help); + process.exit(3); + } + + var keyData = fs.readFileSync(opts.identity); + + var key; + try { + key = sshpk.parseKey(keyData); + } catch (e) { + console.error('sshpk-verify: error loading key "' + + opts.identity + '": ' + e.name + ': ' + e.message); + process.exit(2); + } + + var fmt = opts.format || 'asn1'; + var sigData = Buffer.from(opts.signature, 'base64'); + + var sig; + try { + sig = sshpk.parseSignature(sigData, key.type, fmt); + } catch (e) { + console.error('sshpk-verify: error parsing signature: ' + + e.name + ': ' + e.message); + process.exit(2); + } + + var hash = opts.hash || key.defaultHashAlgorithm(); + + var verifier; + try { + verifier = key.createVerify(hash); + } catch (e) { + console.error('sshpk-verify: error creating verifier: ' + + e.name + ': ' + e.message); + process.exit(2); + } + + if (opts.verbose) { + console.error('sshpk-verify: using %s-%s with a %d bit key', + key.type, hash, key.size); + } + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + console.error('sshpk-verify: error opening input file' + + ': ' + e.name + ': ' + e.message); + process.exit(2); + } + + inFile.pipe(verifier); + inFile.on('end', function () { + var ret; + try { + ret = verifier.verify(sig); + } catch (e) { + console.error('sshpk-verify: error verifying data: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + if (ret) { + console.error('OK'); + process.exit(0); + } + + console.error('NOT OK'); + process.exit(1); + }); +} diff --git a/node_modules/sshpk/lib/algs.js b/node_modules/sshpk/lib/algs.js new file mode 100644 index 0000000..3b01e7d --- /dev/null +++ b/node_modules/sshpk/lib/algs.js @@ -0,0 +1,168 @@ +// Copyright 2015 Joyent, Inc. + +var Buffer = require('safer-buffer').Buffer; + +var algInfo = { + 'dsa': { + parts: ['p', 'q', 'g', 'y'], + sizePart: 'p' + }, + 'rsa': { + parts: ['e', 'n'], + sizePart: 'n' + }, + 'ecdsa': { + parts: ['curve', 'Q'], + sizePart: 'Q' + }, + 'ed25519': { + parts: ['A'], + sizePart: 'A' + } +}; +algInfo['curve25519'] = algInfo['ed25519']; + +var algPrivInfo = { + 'dsa': { + parts: ['p', 'q', 'g', 'y', 'x'] + }, + 'rsa': { + parts: ['n', 'e', 'd', 'iqmp', 'p', 'q'] + }, + 'ecdsa': { + parts: ['curve', 'Q', 'd'] + }, + 'ed25519': { + parts: ['A', 'k'] + } +}; +algPrivInfo['curve25519'] = algPrivInfo['ed25519']; + +var hashAlgs = { + 'md5': true, + 'sha1': true, + 'sha256': true, + 'sha384': true, + 'sha512': true +}; + +/* + * Taken from + * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf + */ +var curves = { + 'nistp256': { + size: 256, + pkcs8oid: '1.2.840.10045.3.1.7', + p: Buffer.from(('00' + + 'ffffffff 00000001 00000000 00000000' + + '00000000 ffffffff ffffffff ffffffff'). + replace(/ /g, ''), 'hex'), + a: Buffer.from(('00' + + 'FFFFFFFF 00000001 00000000 00000000' + + '00000000 FFFFFFFF FFFFFFFF FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(( + '5ac635d8 aa3a93e7 b3ebbd55 769886bc' + + '651d06b0 cc53b0f6 3bce3c3e 27d2604b'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'c49d3608 86e70493 6a6678e1 139d26b7' + + '819f7e90'). + replace(/ /g, ''), 'hex'), + n: Buffer.from(('00' + + 'ffffffff 00000000 ffffffff ffffffff' + + 'bce6faad a7179e84 f3b9cac2 fc632551'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + '6b17d1f2 e12c4247 f8bce6e5 63a440f2' + + '77037d81 2deb33a0 f4a13945 d898c296' + + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' + + '2bce3357 6b315ece cbb64068 37bf51f5'). + replace(/ /g, ''), 'hex') + }, + 'nistp384': { + size: 384, + pkcs8oid: '1.3.132.0.34', + p: Buffer.from(('00' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff fffffffe' + + 'ffffffff 00000000 00000000 ffffffff'). + replace(/ /g, ''), 'hex'), + a: Buffer.from(('00' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' + + 'FFFFFFFF 00000000 00000000 FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(( + 'b3312fa7 e23ee7e4 988e056b e3f82d19' + + '181d9c6e fe814112 0314088f 5013875a' + + 'c656398d 8a2ed19d 2a85c8ed d3ec2aef'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'a335926a a319a27a 1d00896a 6773a482' + + '7acdac73'). + replace(/ /g, ''), 'hex'), + n: Buffer.from(('00' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff c7634d81 f4372ddf' + + '581a0db2 48b0a77a ecec196a ccc52973'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + 'aa87ca22 be8b0537 8eb1c71e f320ad74' + + '6e1d3b62 8ba79b98 59f741e0 82542a38' + + '5502f25d bf55296c 3a545e38 72760ab7' + + '3617de4a 96262c6f 5d9e98bf 9292dc29' + + 'f8f41dbd 289a147c e9da3113 b5f0b8c0' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'). + replace(/ /g, ''), 'hex') + }, + 'nistp521': { + size: 521, + pkcs8oid: '1.3.132.0.35', + p: Buffer.from(( + '01ffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffff').replace(/ /g, ''), 'hex'), + a: Buffer.from(('01FF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(('51' + + '953eb961 8e1c9a1f 929a21a0 b68540ee' + + 'a2da725b 99b315f3 b8b48991 8ef109e1' + + '56193951 ec7e937b 1652c0bd 3bb1bf07' + + '3573df88 3d2c34f1 ef451fd4 6b503f00'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'd09e8800 291cb853 96cc6717 393284aa' + + 'a0da64ba').replace(/ /g, ''), 'hex'), + n: Buffer.from(('01ff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff fffffffa' + + '51868783 bf2f966b 7fcc0148 f709a5d0' + + '3bb5c9b8 899c47ae bb6fb71e 91386409'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' + + '9c648139 053fb521 f828af60 6b4d3dba' + + 'a14b5e77 efe75928 fe1dc127 a2ffa8de' + + '3348b3c1 856a429b f97e7e31 c2e5bd66' + + '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' + + '98f54449 579b4468 17afbd17 273e662c' + + '97ee7299 5ef42640 c550b901 3fad0761' + + '353c7086 a272c240 88be9476 9fd16650'). + replace(/ /g, ''), 'hex') + } +}; + +module.exports = { + info: algInfo, + privInfo: algPrivInfo, + hashAlgs: hashAlgs, + curves: curves +}; diff --git a/node_modules/sshpk/lib/certificate.js b/node_modules/sshpk/lib/certificate.js new file mode 100644 index 0000000..6932357 --- /dev/null +++ b/node_modules/sshpk/lib/certificate.js @@ -0,0 +1,410 @@ +// Copyright 2016 Joyent, Inc. + +module.exports = Certificate; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var Key = require('./key'); +var PrivateKey = require('./private-key'); +var Identity = require('./identity'); + +var formats = {}; +formats['openssh'] = require('./formats/openssh-cert'); +formats['x509'] = require('./formats/x509'); +formats['pem'] = require('./formats/x509-pem'); + +var CertificateParseError = errs.CertificateParseError; +var InvalidAlgorithmError = errs.InvalidAlgorithmError; + +function Certificate(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.subjects, 'options.subjects'); + utils.assertCompatible(opts.subjects[0], Identity, [1, 0], + 'options.subjects'); + utils.assertCompatible(opts.subjectKey, Key, [1, 0], + 'options.subjectKey'); + utils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer'); + if (opts.issuerKey !== undefined) { + utils.assertCompatible(opts.issuerKey, Key, [1, 0], + 'options.issuerKey'); + } + assert.object(opts.signatures, 'options.signatures'); + assert.buffer(opts.serial, 'options.serial'); + assert.date(opts.validFrom, 'options.validFrom'); + assert.date(opts.validUntil, 'optons.validUntil'); + + assert.optionalArrayOfString(opts.purposes, 'options.purposes'); + + this._hashCache = {}; + + this.subjects = opts.subjects; + this.issuer = opts.issuer; + this.subjectKey = opts.subjectKey; + this.issuerKey = opts.issuerKey; + this.signatures = opts.signatures; + this.serial = opts.serial; + this.validFrom = opts.validFrom; + this.validUntil = opts.validUntil; + this.purposes = opts.purposes; +} + +Certificate.formats = formats; + +Certificate.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'x509'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + return (formats[format].write(this, options)); +}; + +Certificate.prototype.toString = function (format, options) { + if (format === undefined) + format = 'pem'; + return (this.toBuffer(format, options).toString()); +}; + +Certificate.prototype.fingerprint = function (algo) { + if (algo === undefined) + algo = 'sha256'; + assert.string(algo, 'algorithm'); + var opts = { + type: 'certificate', + hash: this.hash(algo), + algorithm: algo + }; + return (new Fingerprint(opts)); +}; + +Certificate.prototype.hash = function (algo) { + assert.string(algo, 'algorithm'); + algo = algo.toLowerCase(); + if (algs.hashAlgs[algo] === undefined) + throw (new InvalidAlgorithmError(algo)); + + if (this._hashCache[algo]) + return (this._hashCache[algo]); + + var hash = crypto.createHash(algo). + update(this.toBuffer('x509')).digest(); + this._hashCache[algo] = hash; + return (hash); +}; + +Certificate.prototype.isExpired = function (when) { + if (when === undefined) + when = new Date(); + return (!((when.getTime() >= this.validFrom.getTime()) && + (when.getTime() < this.validUntil.getTime()))); +}; + +Certificate.prototype.isSignedBy = function (issuerCert) { + utils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer'); + + if (!this.issuer.equals(issuerCert.subjects[0])) + return (false); + if (this.issuer.purposes && this.issuer.purposes.length > 0 && + this.issuer.purposes.indexOf('ca') === -1) { + return (false); + } + + return (this.isSignedByKey(issuerCert.subjectKey)); +}; + +Certificate.prototype.getExtension = function (keyOrOid) { + assert.string(keyOrOid, 'keyOrOid'); + var ext = this.getExtensions().filter(function (maybeExt) { + if (maybeExt.format === 'x509') + return (maybeExt.oid === keyOrOid); + if (maybeExt.format === 'openssh') + return (maybeExt.name === keyOrOid); + return (false); + })[0]; + return (ext); +}; + +Certificate.prototype.getExtensions = function () { + var exts = []; + var x509 = this.signatures.x509; + if (x509 && x509.extras && x509.extras.exts) { + x509.extras.exts.forEach(function (ext) { + ext.format = 'x509'; + exts.push(ext); + }); + } + var openssh = this.signatures.openssh; + if (openssh && openssh.exts) { + openssh.exts.forEach(function (ext) { + ext.format = 'openssh'; + exts.push(ext); + }); + } + return (exts); +}; + +Certificate.prototype.isSignedByKey = function (issuerKey) { + utils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey'); + + if (this.issuerKey !== undefined) { + return (this.issuerKey. + fingerprint('sha512').matches(issuerKey)); + } + + var fmt = Object.keys(this.signatures)[0]; + var valid = formats[fmt].verify(this, issuerKey); + if (valid) + this.issuerKey = issuerKey; + return (valid); +}; + +Certificate.prototype.signWith = function (key) { + utils.assertCompatible(key, PrivateKey, [1, 2], 'key'); + var fmts = Object.keys(formats); + var didOne = false; + for (var i = 0; i < fmts.length; ++i) { + if (fmts[i] !== 'pem') { + var ret = formats[fmts[i]].sign(this, key); + if (ret === true) + didOne = true; + } + } + if (!didOne) { + throw (new Error('Failed to sign the certificate for any ' + + 'available certificate formats')); + } +}; + +Certificate.createSelfSigned = function (subjectOrSubjects, key, options) { + var subjects; + if (Array.isArray(subjectOrSubjects)) + subjects = subjectOrSubjects; + else + subjects = [subjectOrSubjects]; + + assert.arrayOfObject(subjects); + subjects.forEach(function (subject) { + utils.assertCompatible(subject, Identity, [1, 0], 'subject'); + }); + + utils.assertCompatible(key, PrivateKey, [1, 2], 'private key'); + + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalObject(options.validFrom, 'options.validFrom'); + assert.optionalObject(options.validUntil, 'options.validUntil'); + var validFrom = options.validFrom; + var validUntil = options.validUntil; + if (validFrom === undefined) + validFrom = new Date(); + if (validUntil === undefined) { + assert.optionalNumber(options.lifetime, 'options.lifetime'); + var lifetime = options.lifetime; + if (lifetime === undefined) + lifetime = 10*365*24*3600; + validUntil = new Date(); + validUntil.setTime(validUntil.getTime() + lifetime*1000); + } + assert.optionalBuffer(options.serial, 'options.serial'); + var serial = options.serial; + if (serial === undefined) + serial = Buffer.from('0000000000000001', 'hex'); + + var purposes = options.purposes; + if (purposes === undefined) + purposes = []; + + if (purposes.indexOf('signature') === -1) + purposes.push('signature'); + + /* Self-signed certs are always CAs. */ + if (purposes.indexOf('ca') === -1) + purposes.push('ca'); + if (purposes.indexOf('crl') === -1) + purposes.push('crl'); + + /* + * If we weren't explicitly given any other purposes, do the sensible + * thing and add some basic ones depending on the subject type. + */ + if (purposes.length <= 3) { + var hostSubjects = subjects.filter(function (subject) { + return (subject.type === 'host'); + }); + var userSubjects = subjects.filter(function (subject) { + return (subject.type === 'user'); + }); + if (hostSubjects.length > 0) { + if (purposes.indexOf('serverAuth') === -1) + purposes.push('serverAuth'); + } + if (userSubjects.length > 0) { + if (purposes.indexOf('clientAuth') === -1) + purposes.push('clientAuth'); + } + if (userSubjects.length > 0 || hostSubjects.length > 0) { + if (purposes.indexOf('keyAgreement') === -1) + purposes.push('keyAgreement'); + if (key.type === 'rsa' && + purposes.indexOf('encryption') === -1) + purposes.push('encryption'); + } + } + + var cert = new Certificate({ + subjects: subjects, + issuer: subjects[0], + subjectKey: key.toPublic(), + issuerKey: key.toPublic(), + signatures: {}, + serial: serial, + validFrom: validFrom, + validUntil: validUntil, + purposes: purposes + }); + cert.signWith(key); + + return (cert); +}; + +Certificate.create = + function (subjectOrSubjects, key, issuer, issuerKey, options) { + var subjects; + if (Array.isArray(subjectOrSubjects)) + subjects = subjectOrSubjects; + else + subjects = [subjectOrSubjects]; + + assert.arrayOfObject(subjects); + subjects.forEach(function (subject) { + utils.assertCompatible(subject, Identity, [1, 0], 'subject'); + }); + + utils.assertCompatible(key, Key, [1, 0], 'key'); + if (PrivateKey.isPrivateKey(key)) + key = key.toPublic(); + utils.assertCompatible(issuer, Identity, [1, 0], 'issuer'); + utils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key'); + + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalObject(options.validFrom, 'options.validFrom'); + assert.optionalObject(options.validUntil, 'options.validUntil'); + var validFrom = options.validFrom; + var validUntil = options.validUntil; + if (validFrom === undefined) + validFrom = new Date(); + if (validUntil === undefined) { + assert.optionalNumber(options.lifetime, 'options.lifetime'); + var lifetime = options.lifetime; + if (lifetime === undefined) + lifetime = 10*365*24*3600; + validUntil = new Date(); + validUntil.setTime(validUntil.getTime() + lifetime*1000); + } + assert.optionalBuffer(options.serial, 'options.serial'); + var serial = options.serial; + if (serial === undefined) + serial = Buffer.from('0000000000000001', 'hex'); + + var purposes = options.purposes; + if (purposes === undefined) + purposes = []; + + if (purposes.indexOf('signature') === -1) + purposes.push('signature'); + + if (options.ca === true) { + if (purposes.indexOf('ca') === -1) + purposes.push('ca'); + if (purposes.indexOf('crl') === -1) + purposes.push('crl'); + } + + var hostSubjects = subjects.filter(function (subject) { + return (subject.type === 'host'); + }); + var userSubjects = subjects.filter(function (subject) { + return (subject.type === 'user'); + }); + if (hostSubjects.length > 0) { + if (purposes.indexOf('serverAuth') === -1) + purposes.push('serverAuth'); + } + if (userSubjects.length > 0) { + if (purposes.indexOf('clientAuth') === -1) + purposes.push('clientAuth'); + } + if (userSubjects.length > 0 || hostSubjects.length > 0) { + if (purposes.indexOf('keyAgreement') === -1) + purposes.push('keyAgreement'); + if (key.type === 'rsa' && + purposes.indexOf('encryption') === -1) + purposes.push('encryption'); + } + + var cert = new Certificate({ + subjects: subjects, + issuer: issuer, + subjectKey: key, + issuerKey: issuerKey.toPublic(), + signatures: {}, + serial: serial, + validFrom: validFrom, + validUntil: validUntil, + purposes: purposes + }); + cert.signWith(issuerKey); + + return (cert); +}; + +Certificate.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + return (k); + } catch (e) { + throw (new CertificateParseError(options.filename, format, e)); + } +}; + +Certificate.isCertificate = function (obj, ver) { + return (utils.isCompatible(obj, Certificate, ver)); +}; + +/* + * API versions for Certificate: + * [1,0] -- initial ver + * [1,1] -- openssh format now unpacks extensions + */ +Certificate.prototype._sshpkApiVersion = [1, 1]; + +Certificate._oldVersionDetect = function (obj) { + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/dhe.js b/node_modules/sshpk/lib/dhe.js new file mode 100644 index 0000000..a3c8032 --- /dev/null +++ b/node_modules/sshpk/lib/dhe.js @@ -0,0 +1,397 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + DiffieHellman: DiffieHellman, + generateECDSA: generateECDSA, + generateED25519: generateED25519 +}; + +var assert = require('assert-plus'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var utils = require('./utils'); +var nacl = require('tweetnacl'); + +var Key = require('./key'); +var PrivateKey = require('./private-key'); + +var CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined); + +var ecdh = require('ecc-jsbn'); +var ec = require('ecc-jsbn/lib/ec'); +var jsbn = require('jsbn').BigInteger; + +function DiffieHellman(key) { + utils.assertCompatible(key, Key, [1, 4], 'key'); + this._isPriv = PrivateKey.isPrivateKey(key, [1, 3]); + this._algo = key.type; + this._curve = key.curve; + this._key = key; + if (key.type === 'dsa') { + if (!CRYPTO_HAVE_ECDH) { + throw (new Error('Due to bugs in the node 0.10 ' + + 'crypto API, node 0.12.x or later is required ' + + 'to use DH')); + } + this._dh = crypto.createDiffieHellman( + key.part.p.data, undefined, + key.part.g.data, undefined); + this._p = key.part.p; + this._g = key.part.g; + if (this._isPriv) + this._dh.setPrivateKey(key.part.x.data); + this._dh.setPublicKey(key.part.y.data); + + } else if (key.type === 'ecdsa') { + if (!CRYPTO_HAVE_ECDH) { + this._ecParams = new X9ECParameters(this._curve); + + if (this._isPriv) { + this._priv = new ECPrivate( + this._ecParams, key.part.d.data); + } + return; + } + + var curve = { + 'nistp256': 'prime256v1', + 'nistp384': 'secp384r1', + 'nistp521': 'secp521r1' + }[key.curve]; + this._dh = crypto.createECDH(curve); + if (typeof (this._dh) !== 'object' || + typeof (this._dh.setPrivateKey) !== 'function') { + CRYPTO_HAVE_ECDH = false; + DiffieHellman.call(this, key); + return; + } + if (this._isPriv) + this._dh.setPrivateKey(key.part.d.data); + this._dh.setPublicKey(key.part.Q.data); + + } else if (key.type === 'curve25519') { + if (this._isPriv) { + utils.assertCompatible(key, PrivateKey, [1, 5], 'key'); + this._priv = key.part.k.data; + } + + } else { + throw (new Error('DH not supported for ' + key.type + ' keys')); + } +} + +DiffieHellman.prototype.getPublicKey = function () { + if (this._isPriv) + return (this._key.toPublic()); + return (this._key); +}; + +DiffieHellman.prototype.getPrivateKey = function () { + if (this._isPriv) + return (this._key); + else + return (undefined); +}; +DiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey; + +DiffieHellman.prototype._keyCheck = function (pk, isPub) { + assert.object(pk, 'key'); + if (!isPub) + utils.assertCompatible(pk, PrivateKey, [1, 3], 'key'); + utils.assertCompatible(pk, Key, [1, 4], 'key'); + + if (pk.type !== this._algo) { + throw (new Error('A ' + pk.type + ' key cannot be used in ' + + this._algo + ' Diffie-Hellman')); + } + + if (pk.curve !== this._curve) { + throw (new Error('A key from the ' + pk.curve + ' curve ' + + 'cannot be used with a ' + this._curve + + ' Diffie-Hellman')); + } + + if (pk.type === 'dsa') { + assert.deepEqual(pk.part.p, this._p, + 'DSA key prime does not match'); + assert.deepEqual(pk.part.g, this._g, + 'DSA key generator does not match'); + } +}; + +DiffieHellman.prototype.setKey = function (pk) { + this._keyCheck(pk); + + if (pk.type === 'dsa') { + this._dh.setPrivateKey(pk.part.x.data); + this._dh.setPublicKey(pk.part.y.data); + + } else if (pk.type === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + this._dh.setPrivateKey(pk.part.d.data); + this._dh.setPublicKey(pk.part.Q.data); + } else { + this._priv = new ECPrivate( + this._ecParams, pk.part.d.data); + } + + } else if (pk.type === 'curve25519') { + var k = pk.part.k; + if (!pk.part.k) + k = pk.part.r; + this._priv = k.data; + if (this._priv[0] === 0x00) + this._priv = this._priv.slice(1); + this._priv = this._priv.slice(0, 32); + } + this._key = pk; + this._isPriv = true; +}; +DiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey; + +DiffieHellman.prototype.computeSecret = function (otherpk) { + this._keyCheck(otherpk, true); + if (!this._isPriv) + throw (new Error('DH exchange has not been initialized with ' + + 'a private key yet')); + + var pub; + if (this._algo === 'dsa') { + return (this._dh.computeSecret( + otherpk.part.y.data)); + + } else if (this._algo === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + return (this._dh.computeSecret( + otherpk.part.Q.data)); + } else { + pub = new ECPublic( + this._ecParams, otherpk.part.Q.data); + return (this._priv.deriveSharedSecret(pub)); + } + + } else if (this._algo === 'curve25519') { + pub = otherpk.part.A.data; + while (pub[0] === 0x00 && pub.length > 32) + pub = pub.slice(1); + var priv = this._priv; + assert.strictEqual(pub.length, 32); + assert.strictEqual(priv.length, 32); + + var secret = nacl.box.before(new Uint8Array(pub), + new Uint8Array(priv)); + + return (Buffer.from(secret)); + } + + throw (new Error('Invalid algorithm: ' + this._algo)); +}; + +DiffieHellman.prototype.generateKey = function () { + var parts = []; + var priv, pub; + if (this._algo === 'dsa') { + this._dh.generateKeys(); + + parts.push({name: 'p', data: this._p.data}); + parts.push({name: 'q', data: this._key.part.q.data}); + parts.push({name: 'g', data: this._g.data}); + parts.push({name: 'y', data: this._dh.getPublicKey()}); + parts.push({name: 'x', data: this._dh.getPrivateKey()}); + this._key = new PrivateKey({ + type: 'dsa', + parts: parts + }); + this._isPriv = true; + return (this._key); + + } else if (this._algo === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + this._dh.generateKeys(); + + parts.push({name: 'curve', + data: Buffer.from(this._curve)}); + parts.push({name: 'Q', data: this._dh.getPublicKey()}); + parts.push({name: 'd', data: this._dh.getPrivateKey()}); + this._key = new PrivateKey({ + type: 'ecdsa', + curve: this._curve, + parts: parts + }); + this._isPriv = true; + return (this._key); + + } else { + var n = this._ecParams.getN(); + var r = new jsbn(crypto.randomBytes(n.bitLength())); + var n1 = n.subtract(jsbn.ONE); + priv = r.mod(n1).add(jsbn.ONE); + pub = this._ecParams.getG().multiply(priv); + + priv = Buffer.from(priv.toByteArray()); + pub = Buffer.from(this._ecParams.getCurve(). + encodePointHex(pub), 'hex'); + + this._priv = new ECPrivate(this._ecParams, priv); + + parts.push({name: 'curve', + data: Buffer.from(this._curve)}); + parts.push({name: 'Q', data: pub}); + parts.push({name: 'd', data: priv}); + + this._key = new PrivateKey({ + type: 'ecdsa', + curve: this._curve, + parts: parts + }); + this._isPriv = true; + return (this._key); + } + + } else if (this._algo === 'curve25519') { + var pair = nacl.box.keyPair(); + priv = Buffer.from(pair.secretKey); + pub = Buffer.from(pair.publicKey); + priv = Buffer.concat([priv, pub]); + assert.strictEqual(priv.length, 64); + assert.strictEqual(pub.length, 32); + + parts.push({name: 'A', data: pub}); + parts.push({name: 'k', data: priv}); + this._key = new PrivateKey({ + type: 'curve25519', + parts: parts + }); + this._isPriv = true; + return (this._key); + } + + throw (new Error('Invalid algorithm: ' + this._algo)); +}; +DiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey; + +/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */ + +function X9ECParameters(name) { + var params = algs.curves[name]; + assert.object(params); + + var p = new jsbn(params.p); + var a = new jsbn(params.a); + var b = new jsbn(params.b); + var n = new jsbn(params.n); + var h = jsbn.ONE; + var curve = new ec.ECCurveFp(p, a, b); + var G = curve.decodePointHex(params.G.toString('hex')); + + this.curve = curve; + this.g = G; + this.n = n; + this.h = h; +} +X9ECParameters.prototype.getCurve = function () { return (this.curve); }; +X9ECParameters.prototype.getG = function () { return (this.g); }; +X9ECParameters.prototype.getN = function () { return (this.n); }; +X9ECParameters.prototype.getH = function () { return (this.h); }; + +function ECPublic(params, buffer) { + this._params = params; + if (buffer[0] === 0x00) + buffer = buffer.slice(1); + this._pub = params.getCurve().decodePointHex(buffer.toString('hex')); +} + +function ECPrivate(params, buffer) { + this._params = params; + this._priv = new jsbn(utils.mpNormalize(buffer)); +} +ECPrivate.prototype.deriveSharedSecret = function (pubKey) { + assert.ok(pubKey instanceof ECPublic); + var S = pubKey._pub.multiply(this._priv); + return (Buffer.from(S.getX().toBigInteger().toByteArray())); +}; + +function generateED25519() { + var pair = nacl.sign.keyPair(); + var priv = Buffer.from(pair.secretKey); + var pub = Buffer.from(pair.publicKey); + assert.strictEqual(priv.length, 64); + assert.strictEqual(pub.length, 32); + + var parts = []; + parts.push({name: 'A', data: pub}); + parts.push({name: 'k', data: priv.slice(0, 32)}); + var key = new PrivateKey({ + type: 'ed25519', + parts: parts + }); + return (key); +} + +/* Generates a new ECDSA private key on a given curve. */ +function generateECDSA(curve) { + var parts = []; + var key; + + if (CRYPTO_HAVE_ECDH) { + /* + * Node crypto doesn't expose key generation directly, but the + * ECDH instances can generate keys. It turns out this just + * calls into the OpenSSL generic key generator, and we can + * read its output happily without doing an actual DH. So we + * use that here. + */ + var osCurve = { + 'nistp256': 'prime256v1', + 'nistp384': 'secp384r1', + 'nistp521': 'secp521r1' + }[curve]; + + var dh = crypto.createECDH(osCurve); + dh.generateKeys(); + + parts.push({name: 'curve', + data: Buffer.from(curve)}); + parts.push({name: 'Q', data: dh.getPublicKey()}); + parts.push({name: 'd', data: dh.getPrivateKey()}); + + key = new PrivateKey({ + type: 'ecdsa', + curve: curve, + parts: parts + }); + return (key); + } else { + + var ecParams = new X9ECParameters(curve); + + /* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */ + var n = ecParams.getN(); + /* + * The crypto.randomBytes() function can only give us whole + * bytes, so taking a nod from X9.62, we round up. + */ + var cByteLen = Math.ceil((n.bitLength() + 64) / 8); + var c = new jsbn(crypto.randomBytes(cByteLen)); + + var n1 = n.subtract(jsbn.ONE); + var priv = c.mod(n1).add(jsbn.ONE); + var pub = ecParams.getG().multiply(priv); + + priv = Buffer.from(priv.toByteArray()); + pub = Buffer.from(ecParams.getCurve(). + encodePointHex(pub), 'hex'); + + parts.push({name: 'curve', data: Buffer.from(curve)}); + parts.push({name: 'Q', data: pub}); + parts.push({name: 'd', data: priv}); + + key = new PrivateKey({ + type: 'ecdsa', + curve: curve, + parts: parts + }); + return (key); + } +} diff --git a/node_modules/sshpk/lib/ed-compat.js b/node_modules/sshpk/lib/ed-compat.js new file mode 100644 index 0000000..70732e1 --- /dev/null +++ b/node_modules/sshpk/lib/ed-compat.js @@ -0,0 +1,92 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + Verifier: Verifier, + Signer: Signer +}; + +var nacl = require('tweetnacl'); +var stream = require('stream'); +var util = require('util'); +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var Signature = require('./signature'); + +function Verifier(key, hashAlgo) { + if (hashAlgo.toLowerCase() !== 'sha512') + throw (new Error('ED25519 only supports the use of ' + + 'SHA-512 hashes')); + + this.key = key; + this.chunks = []; + + stream.Writable.call(this, {}); +} +util.inherits(Verifier, stream.Writable); + +Verifier.prototype._write = function (chunk, enc, cb) { + this.chunks.push(chunk); + cb(); +}; + +Verifier.prototype.update = function (chunk) { + if (typeof (chunk) === 'string') + chunk = Buffer.from(chunk, 'binary'); + this.chunks.push(chunk); +}; + +Verifier.prototype.verify = function (signature, fmt) { + var sig; + if (Signature.isSignature(signature, [2, 0])) { + if (signature.type !== 'ed25519') + return (false); + sig = signature.toBuffer('raw'); + + } else if (typeof (signature) === 'string') { + sig = Buffer.from(signature, 'base64'); + + } else if (Signature.isSignature(signature, [1, 0])) { + throw (new Error('signature was created by too old ' + + 'a version of sshpk and cannot be verified')); + } + + assert.buffer(sig); + return (nacl.sign.detached.verify( + new Uint8Array(Buffer.concat(this.chunks)), + new Uint8Array(sig), + new Uint8Array(this.key.part.A.data))); +}; + +function Signer(key, hashAlgo) { + if (hashAlgo.toLowerCase() !== 'sha512') + throw (new Error('ED25519 only supports the use of ' + + 'SHA-512 hashes')); + + this.key = key; + this.chunks = []; + + stream.Writable.call(this, {}); +} +util.inherits(Signer, stream.Writable); + +Signer.prototype._write = function (chunk, enc, cb) { + this.chunks.push(chunk); + cb(); +}; + +Signer.prototype.update = function (chunk) { + if (typeof (chunk) === 'string') + chunk = Buffer.from(chunk, 'binary'); + this.chunks.push(chunk); +}; + +Signer.prototype.sign = function () { + var sig = nacl.sign.detached( + new Uint8Array(Buffer.concat(this.chunks)), + new Uint8Array(Buffer.concat([ + this.key.part.k.data, this.key.part.A.data]))); + var sigBuf = Buffer.from(sig); + var sigObj = Signature.parse(sigBuf, 'ed25519', 'raw'); + sigObj.hashAlgorithm = 'sha512'; + return (sigObj); +}; diff --git a/node_modules/sshpk/lib/errors.js b/node_modules/sshpk/lib/errors.js new file mode 100644 index 0000000..1cc09ec --- /dev/null +++ b/node_modules/sshpk/lib/errors.js @@ -0,0 +1,84 @@ +// Copyright 2015 Joyent, Inc. + +var assert = require('assert-plus'); +var util = require('util'); + +function FingerprintFormatError(fp, format) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, FingerprintFormatError); + this.name = 'FingerprintFormatError'; + this.fingerprint = fp; + this.format = format; + this.message = 'Fingerprint format is not supported, or is invalid: '; + if (fp !== undefined) + this.message += ' fingerprint = ' + fp; + if (format !== undefined) + this.message += ' format = ' + format; +} +util.inherits(FingerprintFormatError, Error); + +function InvalidAlgorithmError(alg) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, InvalidAlgorithmError); + this.name = 'InvalidAlgorithmError'; + this.algorithm = alg; + this.message = 'Algorithm "' + alg + '" is not supported'; +} +util.inherits(InvalidAlgorithmError, Error); + +function KeyParseError(name, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, KeyParseError); + this.name = 'KeyParseError'; + this.format = format; + this.keyName = name; + this.innerErr = innerErr; + this.message = 'Failed to parse ' + name + ' as a valid ' + format + + ' format key: ' + innerErr.message; +} +util.inherits(KeyParseError, Error); + +function SignatureParseError(type, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, SignatureParseError); + this.name = 'SignatureParseError'; + this.type = type; + this.format = format; + this.innerErr = innerErr; + this.message = 'Failed to parse the given data as a ' + type + + ' signature in ' + format + ' format: ' + innerErr.message; +} +util.inherits(SignatureParseError, Error); + +function CertificateParseError(name, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, CertificateParseError); + this.name = 'CertificateParseError'; + this.format = format; + this.certName = name; + this.innerErr = innerErr; + this.message = 'Failed to parse ' + name + ' as a valid ' + format + + ' format certificate: ' + innerErr.message; +} +util.inherits(CertificateParseError, Error); + +function KeyEncryptedError(name, format) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, KeyEncryptedError); + this.name = 'KeyEncryptedError'; + this.format = format; + this.keyName = name; + this.message = 'The ' + format + ' format key ' + name + ' is ' + + 'encrypted (password-protected), and no passphrase was ' + + 'provided in `options`'; +} +util.inherits(KeyEncryptedError, Error); + +module.exports = { + FingerprintFormatError: FingerprintFormatError, + InvalidAlgorithmError: InvalidAlgorithmError, + KeyParseError: KeyParseError, + SignatureParseError: SignatureParseError, + KeyEncryptedError: KeyEncryptedError, + CertificateParseError: CertificateParseError +}; diff --git a/node_modules/sshpk/lib/fingerprint.js b/node_modules/sshpk/lib/fingerprint.js new file mode 100644 index 0000000..0004b37 --- /dev/null +++ b/node_modules/sshpk/lib/fingerprint.js @@ -0,0 +1,220 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = Fingerprint; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var errs = require('./errors'); +var Key = require('./key'); +var PrivateKey = require('./private-key'); +var Certificate = require('./certificate'); +var utils = require('./utils'); + +var FingerprintFormatError = errs.FingerprintFormatError; +var InvalidAlgorithmError = errs.InvalidAlgorithmError; + +function Fingerprint(opts) { + assert.object(opts, 'options'); + assert.string(opts.type, 'options.type'); + assert.buffer(opts.hash, 'options.hash'); + assert.string(opts.algorithm, 'options.algorithm'); + + this.algorithm = opts.algorithm.toLowerCase(); + if (algs.hashAlgs[this.algorithm] !== true) + throw (new InvalidAlgorithmError(this.algorithm)); + + this.hash = opts.hash; + this.type = opts.type; + this.hashType = opts.hashType; +} + +Fingerprint.prototype.toString = function (format) { + if (format === undefined) { + if (this.algorithm === 'md5' || this.hashType === 'spki') + format = 'hex'; + else + format = 'base64'; + } + assert.string(format); + + switch (format) { + case 'hex': + if (this.hashType === 'spki') + return (this.hash.toString('hex')); + return (addColons(this.hash.toString('hex'))); + case 'base64': + if (this.hashType === 'spki') + return (this.hash.toString('base64')); + return (sshBase64Format(this.algorithm, + this.hash.toString('base64'))); + default: + throw (new FingerprintFormatError(undefined, format)); + } +}; + +Fingerprint.prototype.matches = function (other) { + assert.object(other, 'key or certificate'); + if (this.type === 'key' && this.hashType !== 'ssh') { + utils.assertCompatible(other, Key, [1, 7], 'key with spki'); + if (PrivateKey.isPrivateKey(other)) { + utils.assertCompatible(other, PrivateKey, [1, 6], + 'privatekey with spki support'); + } + } else if (this.type === 'key') { + utils.assertCompatible(other, Key, [1, 0], 'key'); + } else { + utils.assertCompatible(other, Certificate, [1, 0], + 'certificate'); + } + + var theirHash = other.hash(this.algorithm, this.hashType); + var theirHash2 = crypto.createHash(this.algorithm). + update(theirHash).digest('base64'); + + if (this.hash2 === undefined) + this.hash2 = crypto.createHash(this.algorithm). + update(this.hash).digest('base64'); + + return (this.hash2 === theirHash2); +}; + +/*JSSTYLED*/ +var base64RE = /^[A-Za-z0-9+\/=]+$/; +/*JSSTYLED*/ +var hexRE = /^[a-fA-F0-9]+$/; + +Fingerprint.parse = function (fp, options) { + assert.string(fp, 'fingerprint'); + + var alg, hash, enAlgs; + if (Array.isArray(options)) { + enAlgs = options; + options = {}; + } + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + if (options.enAlgs !== undefined) + enAlgs = options.enAlgs; + if (options.algorithms !== undefined) + enAlgs = options.algorithms; + assert.optionalArrayOfString(enAlgs, 'algorithms'); + + var hashType = 'ssh'; + if (options.hashType !== undefined) + hashType = options.hashType; + assert.string(hashType, 'options.hashType'); + + var parts = fp.split(':'); + if (parts.length == 2) { + alg = parts[0].toLowerCase(); + if (!base64RE.test(parts[1])) + throw (new FingerprintFormatError(fp)); + try { + hash = Buffer.from(parts[1], 'base64'); + } catch (e) { + throw (new FingerprintFormatError(fp)); + } + } else if (parts.length > 2) { + alg = 'md5'; + if (parts[0].toLowerCase() === 'md5') + parts = parts.slice(1); + parts = parts.map(function (p) { + while (p.length < 2) + p = '0' + p; + if (p.length > 2) + throw (new FingerprintFormatError(fp)); + return (p); + }); + parts = parts.join(''); + if (!hexRE.test(parts) || parts.length % 2 !== 0) + throw (new FingerprintFormatError(fp)); + try { + hash = Buffer.from(parts, 'hex'); + } catch (e) { + throw (new FingerprintFormatError(fp)); + } + } else { + if (hexRE.test(fp)) { + hash = Buffer.from(fp, 'hex'); + } else if (base64RE.test(fp)) { + hash = Buffer.from(fp, 'base64'); + } else { + throw (new FingerprintFormatError(fp)); + } + + switch (hash.length) { + case 32: + alg = 'sha256'; + break; + case 16: + alg = 'md5'; + break; + case 20: + alg = 'sha1'; + break; + case 64: + alg = 'sha512'; + break; + default: + throw (new FingerprintFormatError(fp)); + } + + /* Plain hex/base64: guess it's probably SPKI unless told. */ + if (options.hashType === undefined) + hashType = 'spki'; + } + + if (alg === undefined) + throw (new FingerprintFormatError(fp)); + + if (algs.hashAlgs[alg] === undefined) + throw (new InvalidAlgorithmError(alg)); + + if (enAlgs !== undefined) { + enAlgs = enAlgs.map(function (a) { return a.toLowerCase(); }); + if (enAlgs.indexOf(alg) === -1) + throw (new InvalidAlgorithmError(alg)); + } + + return (new Fingerprint({ + algorithm: alg, + hash: hash, + type: options.type || 'key', + hashType: hashType + })); +}; + +function addColons(s) { + /*JSSTYLED*/ + return (s.replace(/(.{2})(?=.)/g, '$1:')); +} + +function base64Strip(s) { + /*JSSTYLED*/ + return (s.replace(/=*$/, '')); +} + +function sshBase64Format(alg, h) { + return (alg.toUpperCase() + ':' + base64Strip(h)); +} + +Fingerprint.isFingerprint = function (obj, ver) { + return (utils.isCompatible(obj, Fingerprint, ver)); +}; + +/* + * API versions for Fingerprint: + * [1,0] -- initial ver + * [1,1] -- first tagged ver + * [1,2] -- hashType and spki support + */ +Fingerprint.prototype._sshpkApiVersion = [1, 2]; + +Fingerprint._oldVersionDetect = function (obj) { + assert.func(obj.toString); + assert.func(obj.matches); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/formats/auto.js b/node_modules/sshpk/lib/formats/auto.js new file mode 100644 index 0000000..f32cd96 --- /dev/null +++ b/node_modules/sshpk/lib/formats/auto.js @@ -0,0 +1,124 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var pem = require('./pem'); +var ssh = require('./ssh'); +var rfc4253 = require('./rfc4253'); +var dnssec = require('./dnssec'); +var putty = require('./putty'); + +var DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1'; + +function read(buf, options) { + if (typeof (buf) === 'string') { + if (buf.trim().match(/^[-]+[ ]*BEGIN/)) + return (pem.read(buf, options)); + if (buf.match(/^\s*ssh-[a-z]/)) + return (ssh.read(buf, options)); + if (buf.match(/^\s*ecdsa-/)) + return (ssh.read(buf, options)); + if (buf.match(/^putty-user-key-file-2:/i)) + return (putty.read(buf, options)); + if (findDNSSECHeader(buf)) + return (dnssec.read(buf, options)); + buf = Buffer.from(buf, 'binary'); + } else { + assert.buffer(buf); + if (findPEMHeader(buf)) + return (pem.read(buf, options)); + if (findSSHHeader(buf)) + return (ssh.read(buf, options)); + if (findPuTTYHeader(buf)) + return (putty.read(buf, options)); + if (findDNSSECHeader(buf)) + return (dnssec.read(buf, options)); + } + if (buf.readUInt32BE(0) < buf.length) + return (rfc4253.read(buf, options)); + throw (new Error('Failed to auto-detect format of key')); +} + +function findPuTTYHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9)) + ++offset; + if (offset + 22 <= buf.length && + buf.slice(offset, offset + 22).toString('ascii').toLowerCase() === + 'putty-user-key-file-2:') + return (true); + return (false); +} + +function findSSHHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9)) + ++offset; + if (offset + 4 <= buf.length && + buf.slice(offset, offset + 4).toString('ascii') === 'ssh-') + return (true); + if (offset + 6 <= buf.length && + buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-') + return (true); + return (false); +} + +function findPEMHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10)) + ++offset; + if (buf[offset] !== 45) + return (false); + while (offset < buf.length && + (buf[offset] === 45)) + ++offset; + while (offset < buf.length && + (buf[offset] === 32)) + ++offset; + if (offset + 5 > buf.length || + buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN') + return (false); + return (true); +} + +function findDNSSECHeader(buf) { + // private case first + if (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length) + return (false); + var headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length); + if (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX) + return (true); + + // public-key RFC3110 ? + // 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...' + // skip any comment-lines + if (typeof (buf) !== 'string') { + buf = buf.toString('ascii'); + } + var lines = buf.split('\n'); + var line = 0; + /* JSSTYLED */ + while (lines[line].match(/^\;/)) + line++; + if (lines[line].toString('ascii').match(/\. IN KEY /)) + return (true); + if (lines[line].toString('ascii').match(/\. IN DNSKEY /)) + return (true); + return (false); +} + +function write(key, options) { + throw (new Error('"auto" format cannot be used for writing')); +} diff --git a/node_modules/sshpk/lib/formats/dnssec.js b/node_modules/sshpk/lib/formats/dnssec.js new file mode 100644 index 0000000..a74ea9c --- /dev/null +++ b/node_modules/sshpk/lib/formats/dnssec.js @@ -0,0 +1,287 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var utils = require('../utils'); +var SSHBuffer = require('../ssh-buffer'); +var Dhe = require('../dhe'); + +var supportedAlgos = { + 'rsa-sha1' : 5, + 'rsa-sha256' : 8, + 'rsa-sha512' : 10, + 'ecdsa-p256-sha256' : 13, + 'ecdsa-p384-sha384' : 14 + /* + * ed25519 is hypothetically supported with id 15 + * but the common tools available don't appear to be + * capable of generating/using ed25519 keys + */ +}; + +var supportedAlgosById = {}; +Object.keys(supportedAlgos).forEach(function (k) { + supportedAlgosById[supportedAlgos[k]] = k.toUpperCase(); +}); + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + var lines = buf.split('\n'); + if (lines[0].match(/^Private-key-format\: v1/)) { + var algElems = lines[1].split(' '); + var algoNum = parseInt(algElems[1], 10); + var algoName = algElems[2]; + if (!supportedAlgosById[algoNum]) + throw (new Error('Unsupported algorithm: ' + algoName)); + return (readDNSSECPrivateKey(algoNum, lines.slice(2))); + } + + // skip any comment-lines + var line = 0; + /* JSSTYLED */ + while (lines[line].match(/^\;/)) + line++; + // we should now have *one single* line left with our KEY on it. + if ((lines[line].match(/\. IN KEY /) || + lines[line].match(/\. IN DNSKEY /)) && lines[line+1].length === 0) { + return (readRFC3110(lines[line])); + } + throw (new Error('Cannot parse dnssec key')); +} + +function readRFC3110(keyString) { + var elems = keyString.split(' '); + //unused var flags = parseInt(elems[3], 10); + //unused var protocol = parseInt(elems[4], 10); + var algorithm = parseInt(elems[5], 10); + if (!supportedAlgosById[algorithm]) + throw (new Error('Unsupported algorithm: ' + algorithm)); + var base64key = elems.slice(6, elems.length).join(); + var keyBuffer = Buffer.from(base64key, 'base64'); + if (supportedAlgosById[algorithm].match(/^RSA-/)) { + // join the rest of the body into a single base64-blob + var publicExponentLen = keyBuffer.readUInt8(0); + if (publicExponentLen != 3 && publicExponentLen != 1) + throw (new Error('Cannot parse dnssec key: ' + + 'unsupported exponent length')); + + var publicExponent = keyBuffer.slice(1, publicExponentLen+1); + publicExponent = utils.mpNormalize(publicExponent); + var modulus = keyBuffer.slice(1+publicExponentLen); + modulus = utils.mpNormalize(modulus); + // now, make the key + var rsaKey = { + type: 'rsa', + parts: [] + }; + rsaKey.parts.push({ name: 'e', data: publicExponent}); + rsaKey.parts.push({ name: 'n', data: modulus}); + return (new Key(rsaKey)); + } + if (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' || + supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') { + var curve = 'nistp384'; + var size = 384; + if (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) { + curve = 'nistp256'; + size = 256; + } + + var ecdsaKey = { + type: 'ecdsa', + curve: curve, + size: size, + parts: [ + {name: 'curve', data: Buffer.from(curve) }, + {name: 'Q', data: utils.ecNormalize(keyBuffer) } + ] + }; + return (new Key(ecdsaKey)); + } + throw (new Error('Unsupported algorithm: ' + + supportedAlgosById[algorithm])); +} + +function elementToBuf(e) { + return (Buffer.from(e.split(' ')[1], 'base64')); +} + +function readDNSSECRSAPrivateKey(elements) { + var rsaParams = {}; + elements.forEach(function (element) { + if (element.split(' ')[0] === 'Modulus:') + rsaParams['n'] = elementToBuf(element); + else if (element.split(' ')[0] === 'PublicExponent:') + rsaParams['e'] = elementToBuf(element); + else if (element.split(' ')[0] === 'PrivateExponent:') + rsaParams['d'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Prime1:') + rsaParams['p'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Prime2:') + rsaParams['q'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Exponent1:') + rsaParams['dmodp'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Exponent2:') + rsaParams['dmodq'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Coefficient:') + rsaParams['iqmp'] = elementToBuf(element); + }); + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'e', data: utils.mpNormalize(rsaParams['e'])}, + { name: 'n', data: utils.mpNormalize(rsaParams['n'])}, + { name: 'd', data: utils.mpNormalize(rsaParams['d'])}, + { name: 'p', data: utils.mpNormalize(rsaParams['p'])}, + { name: 'q', data: utils.mpNormalize(rsaParams['q'])}, + { name: 'dmodp', + data: utils.mpNormalize(rsaParams['dmodp'])}, + { name: 'dmodq', + data: utils.mpNormalize(rsaParams['dmodq'])}, + { name: 'iqmp', + data: utils.mpNormalize(rsaParams['iqmp'])} + ] + }; + return (new PrivateKey(key)); +} + +function readDNSSECPrivateKey(alg, elements) { + if (supportedAlgosById[alg].match(/^RSA-/)) { + return (readDNSSECRSAPrivateKey(elements)); + } + if (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' || + supportedAlgosById[alg] === 'ECDSA-P256-SHA256') { + var d = Buffer.from(elements[0].split(' ')[1], 'base64'); + var curve = 'nistp384'; + var size = 384; + if (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') { + curve = 'nistp256'; + size = 256; + } + // DNSSEC generates the public-key on the fly (go calculate it) + var publicKey = utils.publicFromPrivateECDSA(curve, d); + var Q = publicKey.part['Q'].data; + var ecdsaKey = { + type: 'ecdsa', + curve: curve, + size: size, + parts: [ + {name: 'curve', data: Buffer.from(curve) }, + {name: 'd', data: d }, + {name: 'Q', data: Q } + ] + }; + return (new PrivateKey(ecdsaKey)); + } + throw (new Error('Unsupported algorithm: ' + supportedAlgosById[alg])); +} + +function dnssecTimestamp(date) { + var year = date.getFullYear() + ''; //stringify + var month = (date.getMonth() + 1); + var timestampStr = year + month + date.getUTCDate(); + timestampStr += '' + date.getUTCHours() + date.getUTCMinutes(); + timestampStr += date.getUTCSeconds(); + return (timestampStr); +} + +function rsaAlgFromOptions(opts) { + if (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1') + return ('5 (RSASHA1)'); + else if (opts.hashAlgo === 'sha256') + return ('8 (RSASHA256)'); + else if (opts.hashAlgo === 'sha512') + return ('10 (RSASHA512)'); + else + throw (new Error('Unknown or unsupported hash: ' + + opts.hashAlgo)); +} + +function writeRSA(key, options) { + // if we're missing parts, add them. + if (!key.part.dmodp || !key.part.dmodq) { + utils.addRSAMissing(key); + } + + var out = ''; + out += 'Private-key-format: v1.3\n'; + out += 'Algorithm: ' + rsaAlgFromOptions(options) + '\n'; + var n = utils.mpDenormalize(key.part['n'].data); + out += 'Modulus: ' + n.toString('base64') + '\n'; + var e = utils.mpDenormalize(key.part['e'].data); + out += 'PublicExponent: ' + e.toString('base64') + '\n'; + var d = utils.mpDenormalize(key.part['d'].data); + out += 'PrivateExponent: ' + d.toString('base64') + '\n'; + var p = utils.mpDenormalize(key.part['p'].data); + out += 'Prime1: ' + p.toString('base64') + '\n'; + var q = utils.mpDenormalize(key.part['q'].data); + out += 'Prime2: ' + q.toString('base64') + '\n'; + var dmodp = utils.mpDenormalize(key.part['dmodp'].data); + out += 'Exponent1: ' + dmodp.toString('base64') + '\n'; + var dmodq = utils.mpDenormalize(key.part['dmodq'].data); + out += 'Exponent2: ' + dmodq.toString('base64') + '\n'; + var iqmp = utils.mpDenormalize(key.part['iqmp'].data); + out += 'Coefficient: ' + iqmp.toString('base64') + '\n'; + // Assume that we're valid as-of now + var timestamp = new Date(); + out += 'Created: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n'; + return (Buffer.from(out, 'ascii')); +} + +function writeECDSA(key, options) { + var out = ''; + out += 'Private-key-format: v1.3\n'; + + if (key.curve === 'nistp256') { + out += 'Algorithm: 13 (ECDSAP256SHA256)\n'; + } else if (key.curve === 'nistp384') { + out += 'Algorithm: 14 (ECDSAP384SHA384)\n'; + } else { + throw (new Error('Unsupported curve')); + } + var base64Key = key.part['d'].data.toString('base64'); + out += 'PrivateKey: ' + base64Key + '\n'; + + // Assume that we're valid as-of now + var timestamp = new Date(); + out += 'Created: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n'; + + return (Buffer.from(out, 'ascii')); +} + +function write(key, options) { + if (PrivateKey.isPrivateKey(key)) { + if (key.type === 'rsa') { + return (writeRSA(key, options)); + } else if (key.type === 'ecdsa') { + return (writeECDSA(key, options)); + } else { + throw (new Error('Unsupported algorithm: ' + key.type)); + } + } else if (Key.isKey(key)) { + /* + * RFC3110 requires a keyname, and a keytype, which we + * don't really have a mechanism for specifying such + * additional metadata. + */ + throw (new Error('Format "dnssec" only supports ' + + 'writing private keys')); + } else { + throw (new Error('key is not a Key or PrivateKey')); + } +} diff --git a/node_modules/sshpk/lib/formats/openssh-cert.js b/node_modules/sshpk/lib/formats/openssh-cert.js new file mode 100644 index 0000000..766f3d3 --- /dev/null +++ b/node_modules/sshpk/lib/formats/openssh-cert.js @@ -0,0 +1,352 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + verify: verify, + sign: sign, + signAsync: signAsync, + write: write, + + /* Internal private API */ + fromBuffer: fromBuffer, + toBuffer: toBuffer +}; + +var assert = require('assert-plus'); +var SSHBuffer = require('../ssh-buffer'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var Identity = require('../identity'); +var rfc4253 = require('./rfc4253'); +var Signature = require('../signature'); +var utils = require('../utils'); +var Certificate = require('../certificate'); + +function verify(cert, key) { + /* + * We always give an issuerKey, so if our verify() is being called then + * there was no signature. Return false. + */ + return (false); +} + +var TYPES = { + 'user': 1, + 'host': 2 +}; +Object.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; }); + +var ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/; + +function read(buf, options) { + if (Buffer.isBuffer(buf)) + buf = buf.toString('ascii'); + var parts = buf.trim().split(/[ \t\n]+/g); + if (parts.length < 2 || parts.length > 3) + throw (new Error('Not a valid SSH certificate line')); + + var algo = parts[0]; + var data = parts[1]; + + data = Buffer.from(data, 'base64'); + return (fromBuffer(data, algo)); +} + +function fromBuffer(data, algo, partial) { + var sshbuf = new SSHBuffer({ buffer: data }); + var innerAlgo = sshbuf.readString(); + if (algo !== undefined && innerAlgo !== algo) + throw (new Error('SSH certificate algorithm mismatch')); + if (algo === undefined) + algo = innerAlgo; + + var cert = {}; + cert.signatures = {}; + cert.signatures.openssh = {}; + + cert.signatures.openssh.nonce = sshbuf.readBuffer(); + + var key = {}; + var parts = (key.parts = []); + key.type = getAlg(algo); + + var partCount = algs.info[key.type].parts.length; + while (parts.length < partCount) + parts.push(sshbuf.readPart()); + assert.ok(parts.length >= 1, 'key must have at least one part'); + + var algInfo = algs.info[key.type]; + if (key.type === 'ecdsa') { + var res = ECDSA_ALGO.exec(algo); + assert.ok(res !== null); + assert.strictEqual(res[1], parts[0].data.toString()); + } + + for (var i = 0; i < algInfo.parts.length; ++i) { + parts[i].name = algInfo.parts[i]; + if (parts[i].name !== 'curve' && + algInfo.normalize !== false) { + var p = parts[i]; + p.data = utils.mpNormalize(p.data); + } + } + + cert.subjectKey = new Key(key); + + cert.serial = sshbuf.readInt64(); + + var type = TYPES[sshbuf.readInt()]; + assert.string(type, 'valid cert type'); + + cert.signatures.openssh.keyId = sshbuf.readString(); + + var principals = []; + var pbuf = sshbuf.readBuffer(); + var psshbuf = new SSHBuffer({ buffer: pbuf }); + while (!psshbuf.atEnd()) + principals.push(psshbuf.readString()); + if (principals.length === 0) + principals = ['*']; + + cert.subjects = principals.map(function (pr) { + if (type === 'user') + return (Identity.forUser(pr)); + else if (type === 'host') + return (Identity.forHost(pr)); + throw (new Error('Unknown identity type ' + type)); + }); + + cert.validFrom = int64ToDate(sshbuf.readInt64()); + cert.validUntil = int64ToDate(sshbuf.readInt64()); + + var exts = []; + var extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() }); + var ext; + while (!extbuf.atEnd()) { + ext = { critical: true }; + ext.name = extbuf.readString(); + ext.data = extbuf.readBuffer(); + exts.push(ext); + } + extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() }); + while (!extbuf.atEnd()) { + ext = { critical: false }; + ext.name = extbuf.readString(); + ext.data = extbuf.readBuffer(); + exts.push(ext); + } + cert.signatures.openssh.exts = exts; + + /* reserved */ + sshbuf.readBuffer(); + + var signingKeyBuf = sshbuf.readBuffer(); + cert.issuerKey = rfc4253.read(signingKeyBuf); + + /* + * OpenSSH certs don't give the identity of the issuer, just their + * public key. So, we use an Identity that matches anything. The + * isSignedBy() function will later tell you if the key matches. + */ + cert.issuer = Identity.forHost('**'); + + var sigBuf = sshbuf.readBuffer(); + cert.signatures.openssh.signature = + Signature.parse(sigBuf, cert.issuerKey.type, 'ssh'); + + if (partial !== undefined) { + partial.remainder = sshbuf.remainder(); + partial.consumed = sshbuf._offset; + } + + return (new Certificate(cert)); +} + +function int64ToDate(buf) { + var i = buf.readUInt32BE(0) * 4294967296; + i += buf.readUInt32BE(4); + var d = new Date(); + d.setTime(i * 1000); + d.sourceInt64 = buf; + return (d); +} + +function dateToInt64(date) { + if (date.sourceInt64 !== undefined) + return (date.sourceInt64); + var i = Math.round(date.getTime() / 1000); + var upper = Math.floor(i / 4294967296); + var lower = Math.floor(i % 4294967296); + var buf = Buffer.alloc(8); + buf.writeUInt32BE(upper, 0); + buf.writeUInt32BE(lower, 4); + return (buf); +} + +function sign(cert, key) { + if (cert.signatures.openssh === undefined) + cert.signatures.openssh = {}; + try { + var blob = toBuffer(cert, true); + } catch (e) { + delete (cert.signatures.openssh); + return (false); + } + var sig = cert.signatures.openssh; + var hashAlgo = undefined; + if (key.type === 'rsa' || key.type === 'dsa') + hashAlgo = 'sha1'; + var signer = key.createSign(hashAlgo); + signer.write(blob); + sig.signature = signer.sign(); + return (true); +} + +function signAsync(cert, signer, done) { + if (cert.signatures.openssh === undefined) + cert.signatures.openssh = {}; + try { + var blob = toBuffer(cert, true); + } catch (e) { + delete (cert.signatures.openssh); + done(e); + return; + } + var sig = cert.signatures.openssh; + + signer(blob, function (err, signature) { + if (err) { + done(err); + return; + } + try { + /* + * This will throw if the signature isn't of a + * type/algo that can be used for SSH. + */ + signature.toBuffer('ssh'); + } catch (e) { + done(e); + return; + } + sig.signature = signature; + done(); + }); +} + +function write(cert, options) { + if (options === undefined) + options = {}; + + var blob = toBuffer(cert); + var out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64'); + if (options.comment) + out = out + ' ' + options.comment; + return (out); +} + + +function toBuffer(cert, noSig) { + assert.object(cert.signatures.openssh, 'signature for openssh format'); + var sig = cert.signatures.openssh; + + if (sig.nonce === undefined) + sig.nonce = crypto.randomBytes(16); + var buf = new SSHBuffer({}); + buf.writeString(getCertType(cert.subjectKey)); + buf.writeBuffer(sig.nonce); + + var key = cert.subjectKey; + var algInfo = algs.info[key.type]; + algInfo.parts.forEach(function (part) { + buf.writePart(key.part[part]); + }); + + buf.writeInt64(cert.serial); + + var type = cert.subjects[0].type; + assert.notStrictEqual(type, 'unknown'); + cert.subjects.forEach(function (id) { + assert.strictEqual(id.type, type); + }); + type = TYPES[type]; + buf.writeInt(type); + + if (sig.keyId === undefined) { + sig.keyId = cert.subjects[0].type + '_' + + (cert.subjects[0].uid || cert.subjects[0].hostname); + } + buf.writeString(sig.keyId); + + var sub = new SSHBuffer({}); + cert.subjects.forEach(function (id) { + if (type === TYPES.host) + sub.writeString(id.hostname); + else if (type === TYPES.user) + sub.writeString(id.uid); + }); + buf.writeBuffer(sub.toBuffer()); + + buf.writeInt64(dateToInt64(cert.validFrom)); + buf.writeInt64(dateToInt64(cert.validUntil)); + + var exts = sig.exts; + if (exts === undefined) + exts = []; + + var extbuf = new SSHBuffer({}); + exts.forEach(function (ext) { + if (ext.critical !== true) + return; + extbuf.writeString(ext.name); + extbuf.writeBuffer(ext.data); + }); + buf.writeBuffer(extbuf.toBuffer()); + + extbuf = new SSHBuffer({}); + exts.forEach(function (ext) { + if (ext.critical === true) + return; + extbuf.writeString(ext.name); + extbuf.writeBuffer(ext.data); + }); + buf.writeBuffer(extbuf.toBuffer()); + + /* reserved */ + buf.writeBuffer(Buffer.alloc(0)); + + sub = rfc4253.write(cert.issuerKey); + buf.writeBuffer(sub); + + if (!noSig) + buf.writeBuffer(sig.signature.toBuffer('ssh')); + + return (buf.toBuffer()); +} + +function getAlg(certType) { + if (certType === 'ssh-rsa-cert-v01@openssh.com') + return ('rsa'); + if (certType === 'ssh-dss-cert-v01@openssh.com') + return ('dsa'); + if (certType.match(ECDSA_ALGO)) + return ('ecdsa'); + if (certType === 'ssh-ed25519-cert-v01@openssh.com') + return ('ed25519'); + throw (new Error('Unsupported cert type ' + certType)); +} + +function getCertType(key) { + if (key.type === 'rsa') + return ('ssh-rsa-cert-v01@openssh.com'); + if (key.type === 'dsa') + return ('ssh-dss-cert-v01@openssh.com'); + if (key.type === 'ecdsa') + return ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com'); + if (key.type === 'ed25519') + return ('ssh-ed25519-cert-v01@openssh.com'); + throw (new Error('Unsupported key type ' + key.type)); +} diff --git a/node_modules/sshpk/lib/formats/pem.js b/node_modules/sshpk/lib/formats/pem.js new file mode 100644 index 0000000..bbe78fc --- /dev/null +++ b/node_modules/sshpk/lib/formats/pem.js @@ -0,0 +1,290 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var pkcs1 = require('./pkcs1'); +var pkcs8 = require('./pkcs8'); +var sshpriv = require('./ssh-private'); +var rfc4253 = require('./rfc4253'); + +var errors = require('../errors'); + +var OID_PBES2 = '1.2.840.113549.1.5.13'; +var OID_PBKDF2 = '1.2.840.113549.1.5.12'; + +var OID_TO_CIPHER = { + '1.2.840.113549.3.7': '3des-cbc', + '2.16.840.1.101.3.4.1.2': 'aes128-cbc', + '2.16.840.1.101.3.4.1.42': 'aes256-cbc' +}; +var CIPHER_TO_OID = {}; +Object.keys(OID_TO_CIPHER).forEach(function (k) { + CIPHER_TO_OID[OID_TO_CIPHER[k]] = k; +}); + +var OID_TO_HASH = { + '1.2.840.113549.2.7': 'sha1', + '1.2.840.113549.2.9': 'sha256', + '1.2.840.113549.2.11': 'sha512' +}; +var HASH_TO_OID = {}; +Object.keys(OID_TO_HASH).forEach(function (k) { + HASH_TO_OID[OID_TO_HASH[k]] = k; +}); + +/* + * For reading we support both PKCS#1 and PKCS#8. If we find a private key, + * we just take the public component of it and use that. + */ +function read(buf, options, forceType) { + var input = buf; + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var lines = buf.trim().split(/[\r\n]+/g); + + var m; + var si = -1; + while (!m && si < lines.length) { + m = lines[++si].match(/*JSSTYLED*/ + /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); + } + assert.ok(m, 'invalid PEM header'); + + var m2; + var ei = lines.length; + while (!m2 && ei > 0) { + m2 = lines[--ei].match(/*JSSTYLED*/ + /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); + } + assert.ok(m2, 'invalid PEM footer'); + + /* Begin and end banners must match key type */ + assert.equal(m[2], m2[2]); + var type = m[2].toLowerCase(); + + var alg; + if (m[1]) { + /* They also must match algorithms, if given */ + assert.equal(m[1], m2[1], 'PEM header and footer mismatch'); + alg = m[1].trim(); + } + + lines = lines.slice(si, ei + 1); + + var headers = {}; + while (true) { + lines = lines.slice(1); + m = lines[0].match(/*JSSTYLED*/ + /^([A-Za-z0-9-]+): (.+)$/); + if (!m) + break; + headers[m[1].toLowerCase()] = m[2]; + } + + /* Chop off the first and last lines */ + lines = lines.slice(0, -1).join(''); + buf = Buffer.from(lines, 'base64'); + + var cipher, key, iv; + if (headers['proc-type']) { + var parts = headers['proc-type'].split(','); + if (parts[0] === '4' && parts[1] === 'ENCRYPTED') { + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from( + options.passphrase, 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'PEM')); + } else { + parts = headers['dek-info'].split(','); + assert.ok(parts.length === 2); + cipher = parts[0].toLowerCase(); + iv = Buffer.from(parts[1], 'hex'); + key = utils.opensslKeyDeriv(cipher, iv, + options.passphrase, 1).key; + } + } + } + + if (alg && alg.toLowerCase() === 'encrypted') { + var eder = new asn1.BerReader(buf); + var pbesEnd; + eder.readSequence(); + + eder.readSequence(); + pbesEnd = eder.offset + eder.length; + + var method = eder.readOID(); + if (method !== OID_PBES2) { + throw (new Error('Unsupported PEM/PKCS8 encryption ' + + 'scheme: ' + method)); + } + + eder.readSequence(); /* PBES2-params */ + + eder.readSequence(); /* keyDerivationFunc */ + var kdfEnd = eder.offset + eder.length; + var kdfOid = eder.readOID(); + if (kdfOid !== OID_PBKDF2) + throw (new Error('Unsupported PBES2 KDF: ' + kdfOid)); + eder.readSequence(); + var salt = eder.readString(asn1.Ber.OctetString, true); + var iterations = eder.readInt(); + var hashAlg = 'sha1'; + if (eder.offset < kdfEnd) { + eder.readSequence(); + var hashAlgOid = eder.readOID(); + hashAlg = OID_TO_HASH[hashAlgOid]; + if (hashAlg === undefined) { + throw (new Error('Unsupported PBKDF2 hash: ' + + hashAlgOid)); + } + } + eder._offset = kdfEnd; + + eder.readSequence(); /* encryptionScheme */ + var cipherOid = eder.readOID(); + cipher = OID_TO_CIPHER[cipherOid]; + if (cipher === undefined) { + throw (new Error('Unsupported PBES2 cipher: ' + + cipherOid)); + } + iv = eder.readString(asn1.Ber.OctetString, true); + + eder._offset = pbesEnd; + buf = eder.readString(asn1.Ber.OctetString, true); + + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from( + options.passphrase, 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'PEM')); + } + + var cinfo = utils.opensshCipherInfo(cipher); + + cipher = cinfo.opensslName; + key = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize, + options.passphrase); + alg = undefined; + } + + if (cipher && key && iv) { + var cipherStream = crypto.createDecipheriv(cipher, key, iv); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + if (e.toString().indexOf('bad decrypt') !== -1) { + throw (new Error('Incorrect passphrase ' + + 'supplied, could not decrypt key')); + } + throw (e); + }); + cipherStream.write(buf); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + buf = Buffer.concat(chunks); + } + + /* The new OpenSSH internal format abuses PEM headers */ + if (alg && alg.toLowerCase() === 'openssh') + return (sshpriv.readSSHPrivate(type, buf, options)); + if (alg && alg.toLowerCase() === 'ssh2') + return (rfc4253.readType(type, buf, options)); + + var der = new asn1.BerReader(buf); + der.originalInput = input; + + /* + * All of the PEM file types start with a sequence tag, so chop it + * off here + */ + der.readSequence(); + + /* PKCS#1 type keys name an algorithm in the banner explicitly */ + if (alg) { + if (forceType) + assert.strictEqual(forceType, 'pkcs1'); + return (pkcs1.readPkcs1(alg, type, der)); + } else { + if (forceType) + assert.strictEqual(forceType, 'pkcs8'); + return (pkcs8.readPkcs8(alg, type, der)); + } +} + +function write(key, options, type) { + assert.object(key); + + var alg = { + 'ecdsa': 'EC', + 'rsa': 'RSA', + 'dsa': 'DSA', + 'ed25519': 'EdDSA' + }[key.type]; + var header; + + var der = new asn1.BerWriter(); + + if (PrivateKey.isPrivateKey(key)) { + if (type && type === 'pkcs8') { + header = 'PRIVATE KEY'; + pkcs8.writePkcs8(der, key); + } else { + if (type) + assert.strictEqual(type, 'pkcs1'); + header = alg + ' PRIVATE KEY'; + pkcs1.writePkcs1(der, key); + } + + } else if (Key.isKey(key)) { + if (type && type === 'pkcs1') { + header = alg + ' PUBLIC KEY'; + pkcs1.writePkcs1(der, key); + } else { + if (type) + assert.strictEqual(type, 'pkcs8'); + header = 'PUBLIC KEY'; + pkcs8.writePkcs8(der, key); + } + + } else { + throw (new Error('key is not a Key or PrivateKey')); + } + + var tmp = der.buffer.toString('base64'); + var len = tmp.length + (tmp.length / 64) + + 18 + 16 + header.length*2 + 10; + var buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 64; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/pkcs1.js b/node_modules/sshpk/lib/formats/pkcs1.js new file mode 100644 index 0000000..bc48550 --- /dev/null +++ b/node_modules/sshpk/lib/formats/pkcs1.js @@ -0,0 +1,373 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + readPkcs1: readPkcs1, + write: write, + writePkcs1: writePkcs1 +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); + +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); + +var pkcs8 = require('./pkcs8'); +var readECDSACurve = pkcs8.readECDSACurve; + +function read(buf, options) { + return (pem.read(buf, options, 'pkcs1')); +} + +function write(key, options) { + return (pem.write(key, options, 'pkcs1')); +} + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function readPkcs1(alg, type, der) { + switch (alg) { + case 'RSA': + if (type === 'public') + return (readPkcs1RSAPublic(der)); + else if (type === 'private') + return (readPkcs1RSAPrivate(der)); + throw (new Error('Unknown key type: ' + type)); + case 'DSA': + if (type === 'public') + return (readPkcs1DSAPublic(der)); + else if (type === 'private') + return (readPkcs1DSAPrivate(der)); + throw (new Error('Unknown key type: ' + type)); + case 'EC': + case 'ECDSA': + if (type === 'private') + return (readPkcs1ECDSAPrivate(der)); + else if (type === 'public') + return (readPkcs1ECDSAPublic(der)); + throw (new Error('Unknown key type: ' + type)); + case 'EDDSA': + case 'EdDSA': + if (type === 'private') + return (readPkcs1EdDSAPrivate(der)); + throw (new Error(type + ' keys not supported with EdDSA')); + default: + throw (new Error('Unknown key algo: ' + alg)); + } +} + +function readPkcs1RSAPublic(der) { + // modulus and exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'exponent'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'e', data: e }, + { name: 'n', data: n } + ] + }; + + return (new Key(key)); +} + +function readPkcs1RSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version[0], 0); + + // modulus then public exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'public exponent'); + var d = readMPInt(der, 'private exponent'); + var p = readMPInt(der, 'prime1'); + var q = readMPInt(der, 'prime2'); + var dmodp = readMPInt(der, 'exponent1'); + var dmodq = readMPInt(der, 'exponent2'); + var iqmp = readMPInt(der, 'iqmp'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'n', data: n }, + { name: 'e', data: e }, + { name: 'd', data: d }, + { name: 'iqmp', data: iqmp }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'dmodp', data: dmodp }, + { name: 'dmodq', data: dmodq } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1DSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 0); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + var y = readMPInt(der, 'y'); + var x = readMPInt(der, 'x'); + + // now, make the key + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y }, + { name: 'x', data: x } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1EdDSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 1); + + // private key + var k = der.readString(asn1.Ber.OctetString, true); + + der.readSequence(0xa0); + var oid = der.readOID(); + assert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier'); + + der.readSequence(0xa1); + var A = utils.readBitString(der); + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: k } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1DSAPublic(der) { + var y = readMPInt(der, 'y'); + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + var key = { + type: 'dsa', + parts: [ + { name: 'y', data: y }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g } + ] + }; + + return (new Key(key)); +} + +function readPkcs1ECDSAPublic(der) { + der.readSequence(); + + var oid = der.readOID(); + assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey'); + + var curveOid = der.readOID(); + + var curve; + var curves = Object.keys(algs.curves); + for (var j = 0; j < curves.length; ++j) { + var c = curves[j]; + var cd = algs.curves[c]; + if (cd.pkcs8oid === curveOid) { + curve = c; + break; + } + } + assert.string(curve, 'a known ECDSA named curve'); + + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curve) }, + { name: 'Q', data: Q } + ] + }; + + return (new Key(key)); +} + +function readPkcs1ECDSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 1); + + // private key + var d = der.readString(asn1.Ber.OctetString, true); + + der.readSequence(0xa0); + var curve = readECDSACurve(der); + assert.string(curve, 'a known elliptic curve'); + + der.readSequence(0xa1); + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curve) }, + { name: 'Q', data: Q }, + { name: 'd', data: d } + ] + }; + + return (new PrivateKey(key)); +} + +function writePkcs1(der, key) { + der.startSequence(); + + switch (key.type) { + case 'rsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1RSAPrivate(der, key); + else + writePkcs1RSAPublic(der, key); + break; + case 'dsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1DSAPrivate(der, key); + else + writePkcs1DSAPublic(der, key); + break; + case 'ecdsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1ECDSAPrivate(der, key); + else + writePkcs1ECDSAPublic(der, key); + break; + case 'ed25519': + if (PrivateKey.isPrivateKey(key)) + writePkcs1EdDSAPrivate(der, key); + else + writePkcs1EdDSAPublic(der, key); + break; + default: + throw (new Error('Unknown key algo: ' + key.type)); + } + + der.endSequence(); +} + +function writePkcs1RSAPublic(der, key) { + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); +} + +function writePkcs1RSAPrivate(der, key) { + var ver = Buffer.from([0]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.writeBuffer(key.part.d.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + if (!key.part.dmodp || !key.part.dmodq) + utils.addRSAMissing(key); + der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); + der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); + der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); +} + +function writePkcs1DSAPrivate(der, key) { + var ver = Buffer.from([0]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.writeBuffer(key.part.x.data, asn1.Ber.Integer); +} + +function writePkcs1DSAPublic(der, key) { + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); +} + +function writePkcs1ECDSAPublic(der, key) { + der.startSequence(); + + der.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */ + var curve = key.part.curve.data.toString(); + var curveOid = algs.curves[curve].pkcs8oid; + assert.string(curveOid, 'a known ECDSA named curve'); + der.writeOID(curveOid); + + der.endSequence(); + + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); +} + +function writePkcs1ECDSAPrivate(der, key) { + var ver = Buffer.from([1]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); + + der.startSequence(0xa0); + var curve = key.part.curve.data.toString(); + var curveOid = algs.curves[curve].pkcs8oid; + assert.string(curveOid, 'a known ECDSA named curve'); + der.writeOID(curveOid); + der.endSequence(); + + der.startSequence(0xa1); + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); + der.endSequence(); +} + +function writePkcs1EdDSAPrivate(der, key) { + var ver = Buffer.from([1]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.k.data, asn1.Ber.OctetString); + + der.startSequence(0xa0); + der.writeOID('1.3.101.112'); + der.endSequence(); + + der.startSequence(0xa1); + utils.writeBitString(der, key.part.A.data); + der.endSequence(); +} + +function writePkcs1EdDSAPublic(der, key) { + throw (new Error('Public keys are not supported for EdDSA PKCS#1')); +} diff --git a/node_modules/sshpk/lib/formats/pkcs8.js b/node_modules/sshpk/lib/formats/pkcs8.js new file mode 100644 index 0000000..2ca3ca7 --- /dev/null +++ b/node_modules/sshpk/lib/formats/pkcs8.js @@ -0,0 +1,631 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + readPkcs8: readPkcs8, + write: write, + writePkcs8: writePkcs8, + pkcs8ToBuffer: pkcs8ToBuffer, + + readECDSACurve: readECDSACurve, + writeECDSACurve: writeECDSACurve +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); + +function read(buf, options) { + return (pem.read(buf, options, 'pkcs8')); +} + +function write(key, options) { + return (pem.write(key, options, 'pkcs8')); +} + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function readPkcs8(alg, type, der) { + /* Private keys in pkcs#8 format have a weird extra int */ + if (der.peek() === asn1.Ber.Integer) { + assert.strictEqual(type, 'private', + 'unexpected Integer at start of public key'); + der.readString(asn1.Ber.Integer, true); + } + + der.readSequence(); + var next = der.offset + der.length; + + var oid = der.readOID(); + switch (oid) { + case '1.2.840.113549.1.1.1': + der._offset = next; + if (type === 'public') + return (readPkcs8RSAPublic(der)); + else + return (readPkcs8RSAPrivate(der)); + case '1.2.840.10040.4.1': + if (type === 'public') + return (readPkcs8DSAPublic(der)); + else + return (readPkcs8DSAPrivate(der)); + case '1.2.840.10045.2.1': + if (type === 'public') + return (readPkcs8ECDSAPublic(der)); + else + return (readPkcs8ECDSAPrivate(der)); + case '1.3.101.112': + if (type === 'public') { + return (readPkcs8EdDSAPublic(der)); + } else { + return (readPkcs8EdDSAPrivate(der)); + } + case '1.3.101.110': + if (type === 'public') { + return (readPkcs8X25519Public(der)); + } else { + return (readPkcs8X25519Private(der)); + } + default: + throw (new Error('Unknown key type OID ' + oid)); + } +} + +function readPkcs8RSAPublic(der) { + // bit string sequence + der.readSequence(asn1.Ber.BitString); + der.readByte(); + der.readSequence(); + + // modulus + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'exponent'); + + // now, make the key + var key = { + type: 'rsa', + source: der.originalInput, + parts: [ + { name: 'e', data: e }, + { name: 'n', data: n } + ] + }; + + return (new Key(key)); +} + +function readPkcs8RSAPrivate(der) { + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + + var ver = readMPInt(der, 'version'); + assert.equal(ver[0], 0x0, 'unknown RSA private key version'); + + // modulus then public exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'public exponent'); + var d = readMPInt(der, 'private exponent'); + var p = readMPInt(der, 'prime1'); + var q = readMPInt(der, 'prime2'); + var dmodp = readMPInt(der, 'exponent1'); + var dmodq = readMPInt(der, 'exponent2'); + var iqmp = readMPInt(der, 'iqmp'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'n', data: n }, + { name: 'e', data: e }, + { name: 'd', data: d }, + { name: 'iqmp', data: iqmp }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'dmodp', data: dmodp }, + { name: 'dmodq', data: dmodq } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8DSAPublic(der) { + der.readSequence(); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + // bit string sequence + der.readSequence(asn1.Ber.BitString); + der.readByte(); + + var y = readMPInt(der, 'y'); + + // now, make the key + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y } + ] + }; + + return (new Key(key)); +} + +function readPkcs8DSAPrivate(der) { + der.readSequence(); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + der.readSequence(asn1.Ber.OctetString); + var x = readMPInt(der, 'x'); + + /* The pkcs#8 format does not include the public key */ + var y = utils.calculateDSAPublic(g, p, x); + + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y }, + { name: 'x', data: x } + ] + }; + + return (new PrivateKey(key)); +} + +function readECDSACurve(der) { + var curveName, curveNames; + var j, c, cd; + + if (der.peek() === asn1.Ber.OID) { + var oid = der.readOID(); + + curveNames = Object.keys(algs.curves); + for (j = 0; j < curveNames.length; ++j) { + c = curveNames[j]; + cd = algs.curves[c]; + if (cd.pkcs8oid === oid) { + curveName = c; + break; + } + } + + } else { + // ECParameters sequence + der.readSequence(); + var version = der.readString(asn1.Ber.Integer, true); + assert.strictEqual(version[0], 1, 'ECDSA key not version 1'); + + var curve = {}; + + // FieldID sequence + der.readSequence(); + var fieldTypeOid = der.readOID(); + assert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1', + 'ECDSA key is not from a prime-field'); + var p = curve.p = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + /* + * p always starts with a 1 bit, so count the zeros to get its + * real size. + */ + curve.size = p.length * 8 - utils.countZeros(p); + + // Curve sequence + der.readSequence(); + curve.a = utils.mpNormalize( + der.readString(asn1.Ber.OctetString, true)); + curve.b = utils.mpNormalize( + der.readString(asn1.Ber.OctetString, true)); + if (der.peek() === asn1.Ber.BitString) + curve.s = der.readString(asn1.Ber.BitString, true); + + // Combined Gx and Gy + curve.G = der.readString(asn1.Ber.OctetString, true); + assert.strictEqual(curve.G[0], 0x4, + 'uncompressed G is required'); + + curve.n = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + curve.h = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + assert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' + + 'required'); + + curveNames = Object.keys(algs.curves); + var ks = Object.keys(curve); + for (j = 0; j < curveNames.length; ++j) { + c = curveNames[j]; + cd = algs.curves[c]; + var equal = true; + for (var i = 0; i < ks.length; ++i) { + var k = ks[i]; + if (cd[k] === undefined) + continue; + if (typeof (cd[k]) === 'object' && + cd[k].equals !== undefined) { + if (!cd[k].equals(curve[k])) { + equal = false; + break; + } + } else if (Buffer.isBuffer(cd[k])) { + if (cd[k].toString('binary') + !== curve[k].toString('binary')) { + equal = false; + break; + } + } else { + if (cd[k] !== curve[k]) { + equal = false; + break; + } + } + } + if (equal) { + curveName = c; + break; + } + } + } + return (curveName); +} + +function readPkcs8ECDSAPrivate(der) { + var curveName = readECDSACurve(der); + assert.string(curveName, 'a known elliptic curve'); + + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + + var version = readMPInt(der, 'version'); + assert.equal(version[0], 1, 'unknown version of ECDSA key'); + + var d = der.readString(asn1.Ber.OctetString, true); + var Q; + + if (der.peek() == 0xa0) { + der.readSequence(0xa0); + der._offset += der.length; + } + if (der.peek() == 0xa1) { + der.readSequence(0xa1); + Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + } + + if (Q === undefined) { + var pub = utils.publicFromPrivateECDSA(curveName, d); + Q = pub.part.Q.data; + } + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curveName) }, + { name: 'Q', data: Q }, + { name: 'd', data: d } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8ECDSAPublic(der) { + var curveName = readECDSACurve(der); + assert.string(curveName, 'a known elliptic curve'); + + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curveName) }, + { name: 'Q', data: Q } + ] + }; + + return (new Key(key)); +} + +function readPkcs8EdDSAPublic(der) { + if (der.peek() === 0x00) + der.readByte(); + + var A = utils.readBitString(der); + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) } + ] + }; + + return (new Key(key)); +} + +function readPkcs8X25519Public(der) { + var A = utils.readBitString(der); + + var key = { + type: 'curve25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) } + ] + }; + + return (new Key(key)); +} + +function readPkcs8EdDSAPrivate(der) { + if (der.peek() === 0x00) + der.readByte(); + + der.readSequence(asn1.Ber.OctetString); + var k = der.readString(asn1.Ber.OctetString, true); + k = utils.zeroPadToLength(k, 32); + + var A; + if (der.peek() === asn1.Ber.BitString) { + A = utils.readBitString(der); + A = utils.zeroPadToLength(A, 32); + } else { + A = utils.calculateED25519Public(k); + } + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: utils.zeroPadToLength(k, 32) } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8X25519Private(der) { + if (der.peek() === 0x00) + der.readByte(); + + der.readSequence(asn1.Ber.OctetString); + var k = der.readString(asn1.Ber.OctetString, true); + k = utils.zeroPadToLength(k, 32); + + var A = utils.calculateX25519Public(k); + + var key = { + type: 'curve25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: utils.zeroPadToLength(k, 32) } + ] + }; + + return (new PrivateKey(key)); +} + +function pkcs8ToBuffer(key) { + var der = new asn1.BerWriter(); + writePkcs8(der, key); + return (der.buffer); +} + +function writePkcs8(der, key) { + der.startSequence(); + + if (PrivateKey.isPrivateKey(key)) { + var sillyInt = Buffer.from([0]); + der.writeBuffer(sillyInt, asn1.Ber.Integer); + } + + der.startSequence(); + switch (key.type) { + case 'rsa': + der.writeOID('1.2.840.113549.1.1.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8RSAPrivate(key, der); + else + writePkcs8RSAPublic(key, der); + break; + case 'dsa': + der.writeOID('1.2.840.10040.4.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8DSAPrivate(key, der); + else + writePkcs8DSAPublic(key, der); + break; + case 'ecdsa': + der.writeOID('1.2.840.10045.2.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8ECDSAPrivate(key, der); + else + writePkcs8ECDSAPublic(key, der); + break; + case 'ed25519': + der.writeOID('1.3.101.112'); + if (PrivateKey.isPrivateKey(key)) + throw (new Error('Ed25519 private keys in pkcs8 ' + + 'format are not supported')); + writePkcs8EdDSAPublic(key, der); + break; + default: + throw (new Error('Unsupported key type: ' + key.type)); + } + + der.endSequence(); +} + +function writePkcs8RSAPrivate(key, der) { + der.writeNull(); + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + + var version = Buffer.from([0]); + der.writeBuffer(version, asn1.Ber.Integer); + + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.writeBuffer(key.part.d.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + if (!key.part.dmodp || !key.part.dmodq) + utils.addRSAMissing(key); + der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); + der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); + der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); + + der.endSequence(); + der.endSequence(); +} + +function writePkcs8RSAPublic(key, der) { + der.writeNull(); + der.endSequence(); + + der.startSequence(asn1.Ber.BitString); + der.writeByte(0x00); + + der.startSequence(); + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.endSequence(); + + der.endSequence(); +} + +function writePkcs8DSAPrivate(key, der) { + der.startSequence(); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.endSequence(); + + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.writeBuffer(key.part.x.data, asn1.Ber.Integer); + der.endSequence(); +} + +function writePkcs8DSAPublic(key, der) { + der.startSequence(); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.endSequence(); + der.endSequence(); + + der.startSequence(asn1.Ber.BitString); + der.writeByte(0x00); + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.endSequence(); +} + +function writeECDSACurve(key, der) { + var curve = algs.curves[key.curve]; + if (curve.pkcs8oid) { + /* This one has a name in pkcs#8, so just write the oid */ + der.writeOID(curve.pkcs8oid); + + } else { + // ECParameters sequence + der.startSequence(); + + var version = Buffer.from([1]); + der.writeBuffer(version, asn1.Ber.Integer); + + // FieldID sequence + der.startSequence(); + der.writeOID('1.2.840.10045.1.1'); // prime-field + der.writeBuffer(curve.p, asn1.Ber.Integer); + der.endSequence(); + + // Curve sequence + der.startSequence(); + var a = curve.p; + if (a[0] === 0x0) + a = a.slice(1); + der.writeBuffer(a, asn1.Ber.OctetString); + der.writeBuffer(curve.b, asn1.Ber.OctetString); + der.writeBuffer(curve.s, asn1.Ber.BitString); + der.endSequence(); + + der.writeBuffer(curve.G, asn1.Ber.OctetString); + der.writeBuffer(curve.n, asn1.Ber.Integer); + var h = curve.h; + if (!h) { + h = Buffer.from([1]); + } + der.writeBuffer(h, asn1.Ber.Integer); + + // ECParameters + der.endSequence(); + } +} + +function writePkcs8ECDSAPublic(key, der) { + writeECDSACurve(key, der); + der.endSequence(); + + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); +} + +function writePkcs8ECDSAPrivate(key, der) { + writeECDSACurve(key, der); + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + + var version = Buffer.from([1]); + der.writeBuffer(version, asn1.Ber.Integer); + + der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); + + der.startSequence(0xa1); + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); + der.endSequence(); + + der.endSequence(); + der.endSequence(); +} + +function writePkcs8EdDSAPublic(key, der) { + der.endSequence(); + + utils.writeBitString(der, key.part.A.data); +} + +function writePkcs8EdDSAPrivate(key, der) { + der.endSequence(); + + var k = utils.mpNormalize(key.part.k.data, true); + der.startSequence(asn1.Ber.OctetString); + der.writeBuffer(k, asn1.Ber.OctetString); + der.endSequence(); +} diff --git a/node_modules/sshpk/lib/formats/putty.js b/node_modules/sshpk/lib/formats/putty.js new file mode 100644 index 0000000..344419f --- /dev/null +++ b/node_modules/sshpk/lib/formats/putty.js @@ -0,0 +1,99 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var rfc4253 = require('./rfc4253'); +var Key = require('../key'); + +var errors = require('../errors'); + +function read(buf, options) { + var lines = buf.toString('ascii').split(/[\r\n]+/); + var found = false; + var parts; + var si = 0; + while (si < lines.length) { + parts = splitHeader(lines[si++]); + if (parts && + parts[0].toLowerCase() === 'putty-user-key-file-2') { + found = true; + break; + } + } + if (!found) { + throw (new Error('No PuTTY format first line found')); + } + var alg = parts[1]; + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'encryption'); + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'comment'); + var comment = parts[1]; + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'public-lines'); + var publicLines = parseInt(parts[1], 10); + if (!isFinite(publicLines) || publicLines < 0 || + publicLines > lines.length) { + throw (new Error('Invalid public-lines count')); + } + + var publicBuf = Buffer.from( + lines.slice(si, si + publicLines).join(''), 'base64'); + var keyType = rfc4253.algToKeyType(alg); + var key = rfc4253.read(publicBuf); + if (key.type !== keyType) { + throw (new Error('Outer key algorithm mismatch')); + } + key.comment = comment; + return (key); +} + +function splitHeader(line) { + var idx = line.indexOf(':'); + if (idx === -1) + return (null); + var header = line.slice(0, idx); + ++idx; + while (line[idx] === ' ') + ++idx; + var rest = line.slice(idx); + return ([header, rest]); +} + +function write(key, options) { + assert.object(key); + if (!Key.isKey(key)) + throw (new Error('Must be a public key')); + + var alg = rfc4253.keyTypeToAlg(key); + var buf = rfc4253.write(key); + var comment = key.comment || ''; + + var b64 = buf.toString('base64'); + var lines = wrap(b64, 64); + + lines.unshift('Public-Lines: ' + lines.length); + lines.unshift('Comment: ' + comment); + lines.unshift('Encryption: none'); + lines.unshift('PuTTY-User-Key-File-2: ' + alg); + + return (Buffer.from(lines.join('\n') + '\n')); +} + +function wrap(txt, len) { + var lines = []; + var pos = 0; + while (pos < txt.length) { + lines.push(txt.slice(pos, pos + 64)); + pos += 64; + } + return (lines); +} diff --git a/node_modules/sshpk/lib/formats/rfc4253.js b/node_modules/sshpk/lib/formats/rfc4253.js new file mode 100644 index 0000000..52fddcb --- /dev/null +++ b/node_modules/sshpk/lib/formats/rfc4253.js @@ -0,0 +1,166 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read.bind(undefined, false, undefined), + readType: read.bind(undefined, false), + write: write, + /* semi-private api, used by sshpk-agent */ + readPartial: read.bind(undefined, true), + + /* shared with ssh format */ + readInternal: read, + keyTypeToAlg: keyTypeToAlg, + algToKeyType: algToKeyType +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var SSHBuffer = require('../ssh-buffer'); + +function algToKeyType(alg) { + assert.string(alg); + if (alg === 'ssh-dss') + return ('dsa'); + else if (alg === 'ssh-rsa') + return ('rsa'); + else if (alg === 'ssh-ed25519') + return ('ed25519'); + else if (alg === 'ssh-curve25519') + return ('curve25519'); + else if (alg.match(/^ecdsa-sha2-/)) + return ('ecdsa'); + else + throw (new Error('Unknown algorithm ' + alg)); +} + +function keyTypeToAlg(key) { + assert.object(key); + if (key.type === 'dsa') + return ('ssh-dss'); + else if (key.type === 'rsa') + return ('ssh-rsa'); + else if (key.type === 'ed25519') + return ('ssh-ed25519'); + else if (key.type === 'curve25519') + return ('ssh-curve25519'); + else if (key.type === 'ecdsa') + return ('ecdsa-sha2-' + key.part.curve.data.toString()); + else + throw (new Error('Unknown key type ' + key.type)); +} + +function read(partial, type, buf, options) { + if (typeof (buf) === 'string') + buf = Buffer.from(buf); + assert.buffer(buf, 'buf'); + + var key = {}; + + var parts = key.parts = []; + var sshbuf = new SSHBuffer({buffer: buf}); + + var alg = sshbuf.readString(); + assert.ok(!sshbuf.atEnd(), 'key must have at least one part'); + + key.type = algToKeyType(alg); + + var partCount = algs.info[key.type].parts.length; + if (type && type === 'private') + partCount = algs.privInfo[key.type].parts.length; + + while (!sshbuf.atEnd() && parts.length < partCount) + parts.push(sshbuf.readPart()); + while (!partial && !sshbuf.atEnd()) + parts.push(sshbuf.readPart()); + + assert.ok(parts.length >= 1, + 'key must have at least one part'); + assert.ok(partial || sshbuf.atEnd(), + 'leftover bytes at end of key'); + + var Constructor = Key; + var algInfo = algs.info[key.type]; + if (type === 'private' || algInfo.parts.length !== parts.length) { + algInfo = algs.privInfo[key.type]; + Constructor = PrivateKey; + } + assert.strictEqual(algInfo.parts.length, parts.length); + + if (key.type === 'ecdsa') { + var res = /^ecdsa-sha2-(.+)$/.exec(alg); + assert.ok(res !== null); + assert.strictEqual(res[1], parts[0].data.toString()); + } + + var normalized = true; + for (var i = 0; i < algInfo.parts.length; ++i) { + var p = parts[i]; + p.name = algInfo.parts[i]; + /* + * OpenSSH stores ed25519 "private" keys as seed + public key + * concat'd together (k followed by A). We want to keep them + * separate for other formats that don't do this. + */ + if (key.type === 'ed25519' && p.name === 'k') + p.data = p.data.slice(0, 32); + + if (p.name !== 'curve' && algInfo.normalize !== false) { + var nd; + if (key.type === 'ed25519') { + nd = utils.zeroPadToLength(p.data, 32); + } else { + nd = utils.mpNormalize(p.data); + } + if (nd.toString('binary') !== + p.data.toString('binary')) { + p.data = nd; + normalized = false; + } + } + } + + if (normalized) + key._rfc4253Cache = sshbuf.toBuffer(); + + if (partial && typeof (partial) === 'object') { + partial.remainder = sshbuf.remainder(); + partial.consumed = sshbuf._offset; + } + + return (new Constructor(key)); +} + +function write(key, options) { + assert.object(key); + + var alg = keyTypeToAlg(key); + var i; + + var algInfo = algs.info[key.type]; + if (PrivateKey.isPrivateKey(key)) + algInfo = algs.privInfo[key.type]; + var parts = algInfo.parts; + + var buf = new SSHBuffer({}); + + buf.writeString(alg); + + for (i = 0; i < parts.length; ++i) { + var data = key.part[parts[i]].data; + if (algInfo.normalize !== false) { + if (key.type === 'ed25519') + data = utils.zeroPadToLength(data, 32); + else + data = utils.mpNormalize(data); + } + if (key.type === 'ed25519' && parts[i] === 'k') + data = Buffer.concat([data, key.part.A.data]); + buf.writeBuffer(data); + } + + return (buf.toBuffer()); +} diff --git a/node_modules/sshpk/lib/formats/ssh-private.js b/node_modules/sshpk/lib/formats/ssh-private.js new file mode 100644 index 0000000..5e7eed8 --- /dev/null +++ b/node_modules/sshpk/lib/formats/ssh-private.js @@ -0,0 +1,262 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + readSSHPrivate: readSSHPrivate, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var crypto = require('crypto'); + +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var rfc4253 = require('./rfc4253'); +var SSHBuffer = require('../ssh-buffer'); +var errors = require('../errors'); + +var bcrypt; + +function read(buf, options) { + return (pem.read(buf, options)); +} + +var MAGIC = 'openssh-key-v1'; + +function readSSHPrivate(type, buf, options) { + buf = new SSHBuffer({buffer: buf}); + + var magic = buf.readCString(); + assert.strictEqual(magic, MAGIC, 'bad magic string'); + + var cipher = buf.readString(); + var kdf = buf.readString(); + var kdfOpts = buf.readBuffer(); + + var nkeys = buf.readInt(); + if (nkeys !== 1) { + throw (new Error('OpenSSH-format key file contains ' + + 'multiple keys: this is unsupported.')); + } + + var pubKey = buf.readBuffer(); + + if (type === 'public') { + assert.ok(buf.atEnd(), 'excess bytes left after key'); + return (rfc4253.read(pubKey)); + } + + var privKeyBlob = buf.readBuffer(); + assert.ok(buf.atEnd(), 'excess bytes left after key'); + + var kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts }); + switch (kdf) { + case 'none': + if (cipher !== 'none') { + throw (new Error('OpenSSH-format key uses KDF "none" ' + + 'but specifies a cipher other than "none"')); + } + break; + case 'bcrypt': + var salt = kdfOptsBuf.readBuffer(); + var rounds = kdfOptsBuf.readInt(); + var cinf = utils.opensshCipherInfo(cipher); + if (bcrypt === undefined) { + bcrypt = require('bcrypt-pbkdf'); + } + + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from(options.passphrase, + 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'OpenSSH')); + } + + var pass = new Uint8Array(options.passphrase); + var salti = new Uint8Array(salt); + /* Use the pbkdf to derive both the key and the IV. */ + var out = new Uint8Array(cinf.keySize + cinf.blockSize); + var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, + out, out.length, rounds); + if (res !== 0) { + throw (new Error('bcrypt_pbkdf function returned ' + + 'failure, parameters invalid')); + } + out = Buffer.from(out); + var ckey = out.slice(0, cinf.keySize); + var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); + var cipherStream = crypto.createDecipheriv(cinf.opensslName, + ckey, iv); + cipherStream.setAutoPadding(false); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + if (e.toString().indexOf('bad decrypt') !== -1) { + throw (new Error('Incorrect passphrase ' + + 'supplied, could not decrypt key')); + } + throw (e); + }); + cipherStream.write(privKeyBlob); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + privKeyBlob = Buffer.concat(chunks); + break; + default: + throw (new Error( + 'OpenSSH-format key uses unknown KDF "' + kdf + '"')); + } + + buf = new SSHBuffer({buffer: privKeyBlob}); + + var checkInt1 = buf.readInt(); + var checkInt2 = buf.readInt(); + if (checkInt1 !== checkInt2) { + throw (new Error('Incorrect passphrase supplied, could not ' + + 'decrypt key')); + } + + var ret = {}; + var key = rfc4253.readInternal(ret, 'private', buf.remainder()); + + buf.skip(ret.consumed); + + var comment = buf.readString(); + key.comment = comment; + + return (key); +} + +function write(key, options) { + var pubKey; + if (PrivateKey.isPrivateKey(key)) + pubKey = key.toPublic(); + else + pubKey = key; + + var cipher = 'none'; + var kdf = 'none'; + var kdfopts = Buffer.alloc(0); + var cinf = { blockSize: 8 }; + var passphrase; + if (options !== undefined) { + passphrase = options.passphrase; + if (typeof (passphrase) === 'string') + passphrase = Buffer.from(passphrase, 'utf-8'); + if (passphrase !== undefined) { + assert.buffer(passphrase, 'options.passphrase'); + assert.optionalString(options.cipher, 'options.cipher'); + cipher = options.cipher; + if (cipher === undefined) + cipher = 'aes128-ctr'; + cinf = utils.opensshCipherInfo(cipher); + kdf = 'bcrypt'; + } + } + + var privBuf; + if (PrivateKey.isPrivateKey(key)) { + privBuf = new SSHBuffer({}); + var checkInt = crypto.randomBytes(4).readUInt32BE(0); + privBuf.writeInt(checkInt); + privBuf.writeInt(checkInt); + privBuf.write(key.toBuffer('rfc4253')); + privBuf.writeString(key.comment || ''); + + var n = 1; + while (privBuf._offset % cinf.blockSize !== 0) + privBuf.writeChar(n++); + privBuf = privBuf.toBuffer(); + } + + switch (kdf) { + case 'none': + break; + case 'bcrypt': + var salt = crypto.randomBytes(16); + var rounds = 16; + var kdfssh = new SSHBuffer({}); + kdfssh.writeBuffer(salt); + kdfssh.writeInt(rounds); + kdfopts = kdfssh.toBuffer(); + + if (bcrypt === undefined) { + bcrypt = require('bcrypt-pbkdf'); + } + var pass = new Uint8Array(passphrase); + var salti = new Uint8Array(salt); + /* Use the pbkdf to derive both the key and the IV. */ + var out = new Uint8Array(cinf.keySize + cinf.blockSize); + var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, + out, out.length, rounds); + if (res !== 0) { + throw (new Error('bcrypt_pbkdf function returned ' + + 'failure, parameters invalid')); + } + out = Buffer.from(out); + var ckey = out.slice(0, cinf.keySize); + var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); + + var cipherStream = crypto.createCipheriv(cinf.opensslName, + ckey, iv); + cipherStream.setAutoPadding(false); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + throw (e); + }); + cipherStream.write(privBuf); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + privBuf = Buffer.concat(chunks); + break; + default: + throw (new Error('Unsupported kdf ' + kdf)); + } + + var buf = new SSHBuffer({}); + + buf.writeCString(MAGIC); + buf.writeString(cipher); /* cipher */ + buf.writeString(kdf); /* kdf */ + buf.writeBuffer(kdfopts); /* kdfoptions */ + + buf.writeInt(1); /* nkeys */ + buf.writeBuffer(pubKey.toBuffer('rfc4253')); + + if (privBuf) + buf.writeBuffer(privBuf); + + buf = buf.toBuffer(); + + var header; + if (PrivateKey.isPrivateKey(key)) + header = 'OPENSSH PRIVATE KEY'; + else + header = 'OPENSSH PUBLIC KEY'; + + var tmp = buf.toString('base64'); + var len = tmp.length + (tmp.length / 70) + + 18 + 16 + header.length*2 + 10; + buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 70; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/ssh.js b/node_modules/sshpk/lib/formats/ssh.js new file mode 100644 index 0000000..c8e9c93 --- /dev/null +++ b/node_modules/sshpk/lib/formats/ssh.js @@ -0,0 +1,115 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var rfc4253 = require('./rfc4253'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var sshpriv = require('./ssh-private'); + +/*JSSTYLED*/ +var SSHKEY_RE = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([ \t]+([^ \t][^\n]*[\n]*)?)?$/; +/*JSSTYLED*/ +var SSHKEY_RE2 = /^([a-z0-9-]+)[ \t\n]+([a-zA-Z0-9+\/][a-zA-Z0-9+\/ \t\n=]*)([^a-zA-Z0-9+\/ \t\n=].*)?$/; + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var trimmed = buf.trim().replace(/[\\\r]/g, ''); + var m = trimmed.match(SSHKEY_RE); + if (!m) + m = trimmed.match(SSHKEY_RE2); + assert.ok(m, 'key must match regex'); + + var type = rfc4253.algToKeyType(m[1]); + var kbuf = Buffer.from(m[2], 'base64'); + + /* + * This is a bit tricky. If we managed to parse the key and locate the + * key comment with the regex, then do a non-partial read and assert + * that we have consumed all bytes. If we couldn't locate the key + * comment, though, there may be whitespace shenanigans going on that + * have conjoined the comment to the rest of the key. We do a partial + * read in this case to try to make the best out of a sorry situation. + */ + var key; + var ret = {}; + if (m[4]) { + try { + key = rfc4253.read(kbuf); + + } catch (e) { + m = trimmed.match(SSHKEY_RE2); + assert.ok(m, 'key must match regex'); + kbuf = Buffer.from(m[2], 'base64'); + key = rfc4253.readInternal(ret, 'public', kbuf); + } + } else { + key = rfc4253.readInternal(ret, 'public', kbuf); + } + + assert.strictEqual(type, key.type); + + if (m[4] && m[4].length > 0) { + key.comment = m[4]; + + } else if (ret.consumed) { + /* + * Now the magic: trying to recover the key comment when it's + * gotten conjoined to the key or otherwise shenanigan'd. + * + * Work out how much base64 we used, then drop all non-base64 + * chars from the beginning up to this point in the the string. + * Then offset in this and try to make up for missing = chars. + */ + var data = m[2] + (m[3] ? m[3] : ''); + var realOffset = Math.ceil(ret.consumed / 3) * 4; + data = data.slice(0, realOffset - 2). /*JSSTYLED*/ + replace(/[^a-zA-Z0-9+\/=]/g, '') + + data.slice(realOffset - 2); + + var padding = ret.consumed % 3; + if (padding > 0 && + data.slice(realOffset - 1, realOffset) !== '=') + realOffset--; + while (data.slice(realOffset, realOffset + 1) === '=') + realOffset++; + + /* Finally, grab what we think is the comment & clean it up. */ + var trailer = data.slice(realOffset); + trailer = trailer.replace(/[\r\n]/g, ' '). + replace(/^\s+/, ''); + if (trailer.match(/^[a-zA-Z0-9]/)) + key.comment = trailer; + } + + return (key); +} + +function write(key, options) { + assert.object(key); + if (!Key.isKey(key)) + throw (new Error('Must be a public key')); + + var parts = []; + var alg = rfc4253.keyTypeToAlg(key); + parts.push(alg); + + var buf = rfc4253.write(key); + parts.push(buf.toString('base64')); + + if (key.comment) + parts.push(key.comment); + + return (Buffer.from(parts.join(' '))); +} diff --git a/node_modules/sshpk/lib/formats/x509-pem.js b/node_modules/sshpk/lib/formats/x509-pem.js new file mode 100644 index 0000000..3155ef0 --- /dev/null +++ b/node_modules/sshpk/lib/formats/x509-pem.js @@ -0,0 +1,88 @@ +// Copyright 2016 Joyent, Inc. + +var x509 = require('./x509'); + +module.exports = { + read: read, + verify: x509.verify, + sign: x509.sign, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var Identity = require('../identity'); +var Signature = require('../signature'); +var Certificate = require('../certificate'); + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var lines = buf.trim().split(/[\r\n]+/g); + + var m; + var si = -1; + while (!m && si < lines.length) { + m = lines[++si].match(/*JSSTYLED*/ + /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/); + } + assert.ok(m, 'invalid PEM header'); + + var m2; + var ei = lines.length; + while (!m2 && ei > 0) { + m2 = lines[--ei].match(/*JSSTYLED*/ + /[-]+[ ]*END CERTIFICATE[ ]*[-]+/); + } + assert.ok(m2, 'invalid PEM footer'); + + lines = lines.slice(si, ei + 1); + + var headers = {}; + while (true) { + lines = lines.slice(1); + m = lines[0].match(/*JSSTYLED*/ + /^([A-Za-z0-9-]+): (.+)$/); + if (!m) + break; + headers[m[1].toLowerCase()] = m[2]; + } + + /* Chop off the first and last lines */ + lines = lines.slice(0, -1).join(''); + buf = Buffer.from(lines, 'base64'); + + return (x509.read(buf, options)); +} + +function write(cert, options) { + var dbuf = x509.write(cert, options); + + var header = 'CERTIFICATE'; + var tmp = dbuf.toString('base64'); + var len = tmp.length + (tmp.length / 64) + + 18 + 16 + header.length*2 + 10; + var buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 64; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/x509.js b/node_modules/sshpk/lib/formats/x509.js new file mode 100644 index 0000000..0144c44 --- /dev/null +++ b/node_modules/sshpk/lib/formats/x509.js @@ -0,0 +1,752 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + verify: verify, + sign: sign, + signAsync: signAsync, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var Identity = require('../identity'); +var Signature = require('../signature'); +var Certificate = require('../certificate'); +var pkcs8 = require('./pkcs8'); + +/* + * This file is based on RFC5280 (X.509). + */ + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function verify(cert, key) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + var algParts = sig.algo.split('-'); + if (algParts[0] !== key.type) + return (false); + + var blob = sig.cache; + if (blob === undefined) { + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + blob = der.buffer; + } + + var verifier = key.createVerify(algParts[1]); + verifier.write(blob); + return (verifier.verify(sig.signature)); +} + +function Local(i) { + return (asn1.Ber.Context | asn1.Ber.Constructor | i); +} + +function Context(i) { + return (asn1.Ber.Context | i); +} + +var SIGN_ALGS = { + 'rsa-md5': '1.2.840.113549.1.1.4', + 'rsa-sha1': '1.2.840.113549.1.1.5', + 'rsa-sha256': '1.2.840.113549.1.1.11', + 'rsa-sha384': '1.2.840.113549.1.1.12', + 'rsa-sha512': '1.2.840.113549.1.1.13', + 'dsa-sha1': '1.2.840.10040.4.3', + 'dsa-sha256': '2.16.840.1.101.3.4.3.2', + 'ecdsa-sha1': '1.2.840.10045.4.1', + 'ecdsa-sha256': '1.2.840.10045.4.3.2', + 'ecdsa-sha384': '1.2.840.10045.4.3.3', + 'ecdsa-sha512': '1.2.840.10045.4.3.4', + 'ed25519-sha512': '1.3.101.112' +}; +Object.keys(SIGN_ALGS).forEach(function (k) { + SIGN_ALGS[SIGN_ALGS[k]] = k; +}); +SIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5'; +SIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1'; + +var EXTS = { + 'issuerKeyId': '2.5.29.35', + 'altName': '2.5.29.17', + 'basicConstraints': '2.5.29.19', + 'keyUsage': '2.5.29.15', + 'extKeyUsage': '2.5.29.37' +}; + +function read(buf, options) { + if (typeof (buf) === 'string') { + buf = Buffer.from(buf, 'binary'); + } + assert.buffer(buf, 'buf'); + + var der = new asn1.BerReader(buf); + + der.readSequence(); + if (Math.abs(der.length - der.remain) > 1) { + throw (new Error('DER sequence does not contain whole byte ' + + 'stream')); + } + + var tbsStart = der.offset; + der.readSequence(); + var sigOffset = der.offset + der.length; + var tbsEnd = sigOffset; + + if (der.peek() === Local(0)) { + der.readSequence(Local(0)); + var version = der.readInt(); + assert.ok(version <= 3, + 'only x.509 versions up to v3 supported'); + } + + var cert = {}; + cert.signatures = {}; + var sig = (cert.signatures.x509 = {}); + sig.extras = {}; + + cert.serial = readMPInt(der, 'serial'); + + der.readSequence(); + var after = der.offset + der.length; + var certAlgOid = der.readOID(); + var certAlg = SIGN_ALGS[certAlgOid]; + if (certAlg === undefined) + throw (new Error('unknown signature algorithm ' + certAlgOid)); + + der._offset = after; + cert.issuer = Identity.parseAsn1(der); + + der.readSequence(); + cert.validFrom = readDate(der); + cert.validUntil = readDate(der); + + cert.subjects = [Identity.parseAsn1(der)]; + + der.readSequence(); + after = der.offset + der.length; + cert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der); + der._offset = after; + + /* issuerUniqueID */ + if (der.peek() === Local(1)) { + der.readSequence(Local(1)); + sig.extras.issuerUniqueID = + buf.slice(der.offset, der.offset + der.length); + der._offset += der.length; + } + + /* subjectUniqueID */ + if (der.peek() === Local(2)) { + der.readSequence(Local(2)); + sig.extras.subjectUniqueID = + buf.slice(der.offset, der.offset + der.length); + der._offset += der.length; + } + + /* extensions */ + if (der.peek() === Local(3)) { + der.readSequence(Local(3)); + var extEnd = der.offset + der.length; + der.readSequence(); + + while (der.offset < extEnd) + readExtension(cert, buf, der); + + assert.strictEqual(der.offset, extEnd); + } + + assert.strictEqual(der.offset, sigOffset); + + der.readSequence(); + after = der.offset + der.length; + var sigAlgOid = der.readOID(); + var sigAlg = SIGN_ALGS[sigAlgOid]; + if (sigAlg === undefined) + throw (new Error('unknown signature algorithm ' + sigAlgOid)); + der._offset = after; + + var sigData = der.readString(asn1.Ber.BitString, true); + if (sigData[0] === 0) + sigData = sigData.slice(1); + var algParts = sigAlg.split('-'); + + sig.signature = Signature.parse(sigData, algParts[0], 'asn1'); + sig.signature.hashAlgorithm = algParts[1]; + sig.algo = sigAlg; + sig.cache = buf.slice(tbsStart, tbsEnd); + + return (new Certificate(cert)); +} + +function readDate(der) { + if (der.peek() === asn1.Ber.UTCTime) { + return (utcTimeToDate(der.readString(asn1.Ber.UTCTime))); + } else if (der.peek() === asn1.Ber.GeneralizedTime) { + return (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime))); + } else { + throw (new Error('Unsupported date format')); + } +} + +function writeDate(der, date) { + if (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) { + der.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime); + } else { + der.writeString(dateToUTCTime(date), asn1.Ber.UTCTime); + } +} + +/* RFC5280, section 4.2.1.6 (GeneralName type) */ +var ALTNAME = { + OtherName: Local(0), + RFC822Name: Context(1), + DNSName: Context(2), + X400Address: Local(3), + DirectoryName: Local(4), + EDIPartyName: Local(5), + URI: Context(6), + IPAddress: Context(7), + OID: Context(8) +}; + +/* RFC5280, section 4.2.1.12 (KeyPurposeId) */ +var EXTPURPOSE = { + 'serverAuth': '1.3.6.1.5.5.7.3.1', + 'clientAuth': '1.3.6.1.5.5.7.3.2', + 'codeSigning': '1.3.6.1.5.5.7.3.3', + + /* See https://github.com/joyent/oid-docs/blob/master/root.md */ + 'joyentDocker': '1.3.6.1.4.1.38678.1.4.1', + 'joyentCmon': '1.3.6.1.4.1.38678.1.4.2' +}; +var EXTPURPOSE_REV = {}; +Object.keys(EXTPURPOSE).forEach(function (k) { + EXTPURPOSE_REV[EXTPURPOSE[k]] = k; +}); + +var KEYUSEBITS = [ + 'signature', 'identity', 'keyEncryption', + 'encryption', 'keyAgreement', 'ca', 'crl' +]; + +function readExtension(cert, buf, der) { + der.readSequence(); + var after = der.offset + der.length; + var extId = der.readOID(); + var id; + var sig = cert.signatures.x509; + if (!sig.extras.exts) + sig.extras.exts = []; + + var critical; + if (der.peek() === asn1.Ber.Boolean) + critical = der.readBoolean(); + + switch (extId) { + case (EXTS.basicConstraints): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + var bcEnd = der.offset + der.length; + var ca = false; + if (der.peek() === asn1.Ber.Boolean) + ca = der.readBoolean(); + if (cert.purposes === undefined) + cert.purposes = []; + if (ca === true) + cert.purposes.push('ca'); + var bc = { oid: extId, critical: critical }; + if (der.offset < bcEnd && der.peek() === asn1.Ber.Integer) + bc.pathLen = der.readInt(); + sig.extras.exts.push(bc); + break; + case (EXTS.extKeyUsage): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + if (cert.purposes === undefined) + cert.purposes = []; + var ekEnd = der.offset + der.length; + while (der.offset < ekEnd) { + var oid = der.readOID(); + cert.purposes.push(EXTPURPOSE_REV[oid] || oid); + } + /* + * This is a bit of a hack: in the case where we have a cert + * that's only allowed to do serverAuth or clientAuth (and not + * the other), we want to make sure all our Subjects are of + * the right type. But we already parsed our Subjects and + * decided if they were hosts or users earlier (since it appears + * first in the cert). + * + * So we go through and mutate them into the right kind here if + * it doesn't match. This might not be hugely beneficial, as it + * seems that single-purpose certs are not often seen in the + * wild. + */ + if (cert.purposes.indexOf('serverAuth') !== -1 && + cert.purposes.indexOf('clientAuth') === -1) { + cert.subjects.forEach(function (ide) { + if (ide.type !== 'host') { + ide.type = 'host'; + ide.hostname = ide.uid || + ide.email || + ide.components[0].value; + } + }); + } else if (cert.purposes.indexOf('clientAuth') !== -1 && + cert.purposes.indexOf('serverAuth') === -1) { + cert.subjects.forEach(function (ide) { + if (ide.type !== 'user') { + ide.type = 'user'; + ide.uid = ide.hostname || + ide.email || + ide.components[0].value; + } + }); + } + sig.extras.exts.push({ oid: extId, critical: critical }); + break; + case (EXTS.keyUsage): + der.readSequence(asn1.Ber.OctetString); + var bits = der.readString(asn1.Ber.BitString, true); + var setBits = readBitField(bits, KEYUSEBITS); + setBits.forEach(function (bit) { + if (cert.purposes === undefined) + cert.purposes = []; + if (cert.purposes.indexOf(bit) === -1) + cert.purposes.push(bit); + }); + sig.extras.exts.push({ oid: extId, critical: critical, + bits: bits }); + break; + case (EXTS.altName): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + var aeEnd = der.offset + der.length; + while (der.offset < aeEnd) { + switch (der.peek()) { + case ALTNAME.OtherName: + case ALTNAME.EDIPartyName: + der.readSequence(); + der._offset += der.length; + break; + case ALTNAME.OID: + der.readOID(ALTNAME.OID); + break; + case ALTNAME.RFC822Name: + /* RFC822 specifies email addresses */ + var email = der.readString(ALTNAME.RFC822Name); + id = Identity.forEmail(email); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + case ALTNAME.DirectoryName: + der.readSequence(ALTNAME.DirectoryName); + id = Identity.parseAsn1(der); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + case ALTNAME.DNSName: + var host = der.readString( + ALTNAME.DNSName); + id = Identity.forHost(host); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + default: + der.readString(der.peek()); + break; + } + } + sig.extras.exts.push({ oid: extId, critical: critical }); + break; + default: + sig.extras.exts.push({ + oid: extId, + critical: critical, + data: der.readString(asn1.Ber.OctetString, true) + }); + break; + } + + der._offset = after; +} + +var UTCTIME_RE = + /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; +function utcTimeToDate(t) { + var m = t.match(UTCTIME_RE); + assert.ok(m, 'timestamps must be in UTC'); + var d = new Date(); + + var thisYear = d.getUTCFullYear(); + var century = Math.floor(thisYear / 100) * 100; + + var year = parseInt(m[1], 10); + if (thisYear % 100 < 50 && year >= 60) + year += (century - 1); + else + year += century; + d.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10)); + d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); + if (m[6] && m[6].length > 0) + d.setUTCSeconds(parseInt(m[6], 10)); + return (d); +} + +var GTIME_RE = + /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; +function gTimeToDate(t) { + var m = t.match(GTIME_RE); + assert.ok(m); + var d = new Date(); + + d.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1, + parseInt(m[3], 10)); + d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); + if (m[6] && m[6].length > 0) + d.setUTCSeconds(parseInt(m[6], 10)); + return (d); +} + +function zeroPad(n, m) { + if (m === undefined) + m = 2; + var s = '' + n; + while (s.length < m) + s = '0' + s; + return (s); +} + +function dateToUTCTime(d) { + var s = ''; + s += zeroPad(d.getUTCFullYear() % 100); + s += zeroPad(d.getUTCMonth() + 1); + s += zeroPad(d.getUTCDate()); + s += zeroPad(d.getUTCHours()); + s += zeroPad(d.getUTCMinutes()); + s += zeroPad(d.getUTCSeconds()); + s += 'Z'; + return (s); +} + +function dateToGTime(d) { + var s = ''; + s += zeroPad(d.getUTCFullYear(), 4); + s += zeroPad(d.getUTCMonth() + 1); + s += zeroPad(d.getUTCDate()); + s += zeroPad(d.getUTCHours()); + s += zeroPad(d.getUTCMinutes()); + s += zeroPad(d.getUTCSeconds()); + s += 'Z'; + return (s); +} + +function sign(cert, key) { + if (cert.signatures.x509 === undefined) + cert.signatures.x509 = {}; + var sig = cert.signatures.x509; + + sig.algo = key.type + '-' + key.defaultHashAlgorithm(); + if (SIGN_ALGS[sig.algo] === undefined) + return (false); + + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + var blob = der.buffer; + sig.cache = blob; + + var signer = key.createSign(); + signer.write(blob); + cert.signatures.x509.signature = signer.sign(); + + return (true); +} + +function signAsync(cert, signer, done) { + if (cert.signatures.x509 === undefined) + cert.signatures.x509 = {}; + var sig = cert.signatures.x509; + + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + var blob = der.buffer; + sig.cache = blob; + + signer(blob, function (err, signature) { + if (err) { + done(err); + return; + } + sig.algo = signature.type + '-' + signature.hashAlgorithm; + if (SIGN_ALGS[sig.algo] === undefined) { + done(new Error('Invalid signing algorithm "' + + sig.algo + '"')); + return; + } + sig.signature = signature; + done(); + }); +} + +function write(cert, options) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + var der = new asn1.BerWriter(); + der.startSequence(); + if (sig.cache) { + der._ensure(sig.cache.length); + sig.cache.copy(der._buf, der._offset); + der._offset += sig.cache.length; + } else { + writeTBSCert(cert, der); + } + + der.startSequence(); + der.writeOID(SIGN_ALGS[sig.algo]); + if (sig.algo.match(/^rsa-/)) + der.writeNull(); + der.endSequence(); + + var sigData = sig.signature.toBuffer('asn1'); + var data = Buffer.alloc(sigData.length + 1); + data[0] = 0; + sigData.copy(data, 1); + der.writeBuffer(data, asn1.Ber.BitString); + der.endSequence(); + + return (der.buffer); +} + +function writeTBSCert(cert, der) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + der.startSequence(); + + der.startSequence(Local(0)); + der.writeInt(2); + der.endSequence(); + + der.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer); + + der.startSequence(); + der.writeOID(SIGN_ALGS[sig.algo]); + if (sig.algo.match(/^rsa-/)) + der.writeNull(); + der.endSequence(); + + cert.issuer.toAsn1(der); + + der.startSequence(); + writeDate(der, cert.validFrom); + writeDate(der, cert.validUntil); + der.endSequence(); + + var subject = cert.subjects[0]; + var altNames = cert.subjects.slice(1); + subject.toAsn1(der); + + pkcs8.writePkcs8(der, cert.subjectKey); + + if (sig.extras && sig.extras.issuerUniqueID) { + der.writeBuffer(sig.extras.issuerUniqueID, Local(1)); + } + + if (sig.extras && sig.extras.subjectUniqueID) { + der.writeBuffer(sig.extras.subjectUniqueID, Local(2)); + } + + if (altNames.length > 0 || subject.type === 'host' || + (cert.purposes !== undefined && cert.purposes.length > 0) || + (sig.extras && sig.extras.exts)) { + der.startSequence(Local(3)); + der.startSequence(); + + var exts = []; + if (cert.purposes !== undefined && cert.purposes.length > 0) { + exts.push({ + oid: EXTS.basicConstraints, + critical: true + }); + exts.push({ + oid: EXTS.keyUsage, + critical: true + }); + exts.push({ + oid: EXTS.extKeyUsage, + critical: true + }); + } + exts.push({ oid: EXTS.altName }); + if (sig.extras && sig.extras.exts) + exts = sig.extras.exts; + + for (var i = 0; i < exts.length; ++i) { + der.startSequence(); + der.writeOID(exts[i].oid); + + if (exts[i].critical !== undefined) + der.writeBoolean(exts[i].critical); + + if (exts[i].oid === EXTS.altName) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + if (subject.type === 'host') { + der.writeString(subject.hostname, + Context(2)); + } + for (var j = 0; j < altNames.length; ++j) { + if (altNames[j].type === 'host') { + der.writeString( + altNames[j].hostname, + ALTNAME.DNSName); + } else if (altNames[j].type === + 'email') { + der.writeString( + altNames[j].email, + ALTNAME.RFC822Name); + } else { + /* + * Encode anything else as a + * DN style name for now. + */ + der.startSequence( + ALTNAME.DirectoryName); + altNames[j].toAsn1(der); + der.endSequence(); + } + } + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.basicConstraints) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + var ca = (cert.purposes.indexOf('ca') !== -1); + var pathLen = exts[i].pathLen; + der.writeBoolean(ca); + if (pathLen !== undefined) + der.writeInt(pathLen); + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.extKeyUsage) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + cert.purposes.forEach(function (purpose) { + if (purpose === 'ca') + return; + if (KEYUSEBITS.indexOf(purpose) !== -1) + return; + var oid = purpose; + if (EXTPURPOSE[purpose] !== undefined) + oid = EXTPURPOSE[purpose]; + der.writeOID(oid); + }); + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.keyUsage) { + der.startSequence(asn1.Ber.OctetString); + /* + * If we parsed this certificate from a byte + * stream (i.e. we didn't generate it in sshpk) + * then we'll have a ".bits" property on the + * ext with the original raw byte contents. + * + * If we have this, use it here instead of + * regenerating it. This guarantees we output + * the same data we parsed, so signatures still + * validate. + */ + if (exts[i].bits !== undefined) { + der.writeBuffer(exts[i].bits, + asn1.Ber.BitString); + } else { + var bits = writeBitField(cert.purposes, + KEYUSEBITS); + der.writeBuffer(bits, + asn1.Ber.BitString); + } + der.endSequence(); + } else { + der.writeBuffer(exts[i].data, + asn1.Ber.OctetString); + } + + der.endSequence(); + } + + der.endSequence(); + der.endSequence(); + } + + der.endSequence(); +} + +/* + * Reads an ASN.1 BER bitfield out of the Buffer produced by doing + * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw + * contents of the BitString tag, which is a count of unused bits followed by + * the bits as a right-padded byte string. + * + * `bits` is the Buffer, `bitIndex` should contain an array of string names + * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec. + * + * Returns an array of Strings, the names of the bits that were set to 1. + */ +function readBitField(bits, bitIndex) { + var bitLen = 8 * (bits.length - 1) - bits[0]; + var setBits = {}; + for (var i = 0; i < bitLen; ++i) { + var byteN = 1 + Math.floor(i / 8); + var bit = 7 - (i % 8); + var mask = 1 << bit; + var bitVal = ((bits[byteN] & mask) !== 0); + var name = bitIndex[i]; + if (bitVal && typeof (name) === 'string') { + setBits[name] = true; + } + } + return (Object.keys(setBits)); +} + +/* + * `setBits` is an array of strings, containing the names for each bit that + * sould be set to 1. `bitIndex` is same as in `readBitField()`. + * + * Returns a Buffer, ready to be written out with `BerWriter#writeString()`. + */ +function writeBitField(setBits, bitIndex) { + var bitLen = bitIndex.length; + var blen = Math.ceil(bitLen / 8); + var unused = blen * 8 - bitLen; + var bits = Buffer.alloc(1 + blen); // zero-filled + bits[0] = unused; + for (var i = 0; i < bitLen; ++i) { + var byteN = 1 + Math.floor(i / 8); + var bit = 7 - (i % 8); + var mask = 1 << bit; + var name = bitIndex[i]; + if (name === undefined) + continue; + var bitVal = (setBits.indexOf(name) !== -1); + if (bitVal) { + bits[byteN] |= mask; + } + } + return (bits); +} diff --git a/node_modules/sshpk/lib/identity.js b/node_modules/sshpk/lib/identity.js new file mode 100644 index 0000000..7d75b66 --- /dev/null +++ b/node_modules/sshpk/lib/identity.js @@ -0,0 +1,373 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = Identity; + +var assert = require('assert-plus'); +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; + +/*JSSTYLED*/ +var DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i; + +var oids = {}; +oids.cn = '2.5.4.3'; +oids.o = '2.5.4.10'; +oids.ou = '2.5.4.11'; +oids.l = '2.5.4.7'; +oids.s = '2.5.4.8'; +oids.c = '2.5.4.6'; +oids.sn = '2.5.4.4'; +oids.postalCode = '2.5.4.17'; +oids.serialNumber = '2.5.4.5'; +oids.street = '2.5.4.9'; +oids.x500UniqueIdentifier = '2.5.4.45'; +oids.role = '2.5.4.72'; +oids.telephoneNumber = '2.5.4.20'; +oids.description = '2.5.4.13'; +oids.dc = '0.9.2342.19200300.100.1.25'; +oids.uid = '0.9.2342.19200300.100.1.1'; +oids.mail = '0.9.2342.19200300.100.1.3'; +oids.title = '2.5.4.12'; +oids.gn = '2.5.4.42'; +oids.initials = '2.5.4.43'; +oids.pseudonym = '2.5.4.65'; +oids.emailAddress = '1.2.840.113549.1.9.1'; + +var unoids = {}; +Object.keys(oids).forEach(function (k) { + unoids[oids[k]] = k; +}); + +function Identity(opts) { + var self = this; + assert.object(opts, 'options'); + assert.arrayOfObject(opts.components, 'options.components'); + this.components = opts.components; + this.componentLookup = {}; + this.components.forEach(function (c) { + if (c.name && !c.oid) + c.oid = oids[c.name]; + if (c.oid && !c.name) + c.name = unoids[c.oid]; + if (self.componentLookup[c.name] === undefined) + self.componentLookup[c.name] = []; + self.componentLookup[c.name].push(c); + }); + if (this.componentLookup.cn && this.componentLookup.cn.length > 0) { + this.cn = this.componentLookup.cn[0].value; + } + assert.optionalString(opts.type, 'options.type'); + if (opts.type === undefined) { + if (this.components.length === 1 && + this.componentLookup.cn && + this.componentLookup.cn.length === 1 && + this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { + this.type = 'host'; + this.hostname = this.componentLookup.cn[0].value; + + } else if (this.componentLookup.dc && + this.components.length === this.componentLookup.dc.length) { + this.type = 'host'; + this.hostname = this.componentLookup.dc.map( + function (c) { + return (c.value); + }).join('.'); + + } else if (this.componentLookup.uid && + this.components.length === + this.componentLookup.uid.length) { + this.type = 'user'; + this.uid = this.componentLookup.uid[0].value; + + } else if (this.componentLookup.cn && + this.componentLookup.cn.length === 1 && + this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { + this.type = 'host'; + this.hostname = this.componentLookup.cn[0].value; + + } else if (this.componentLookup.uid && + this.componentLookup.uid.length === 1) { + this.type = 'user'; + this.uid = this.componentLookup.uid[0].value; + + } else if (this.componentLookup.mail && + this.componentLookup.mail.length === 1) { + this.type = 'email'; + this.email = this.componentLookup.mail[0].value; + + } else if (this.componentLookup.cn && + this.componentLookup.cn.length === 1) { + this.type = 'user'; + this.uid = this.componentLookup.cn[0].value; + + } else { + this.type = 'unknown'; + } + } else { + this.type = opts.type; + if (this.type === 'host') + this.hostname = opts.hostname; + else if (this.type === 'user') + this.uid = opts.uid; + else if (this.type === 'email') + this.email = opts.email; + else + throw (new Error('Unknown type ' + this.type)); + } +} + +Identity.prototype.toString = function () { + return (this.components.map(function (c) { + var n = c.name.toUpperCase(); + /*JSSTYLED*/ + n = n.replace(/=/g, '\\='); + var v = c.value; + /*JSSTYLED*/ + v = v.replace(/,/g, '\\,'); + return (n + '=' + v); + }).join(', ')); +}; + +Identity.prototype.get = function (name, asArray) { + assert.string(name, 'name'); + var arr = this.componentLookup[name]; + if (arr === undefined || arr.length === 0) + return (undefined); + if (!asArray && arr.length > 1) + throw (new Error('Multiple values for attribute ' + name)); + if (!asArray) + return (arr[0].value); + return (arr.map(function (c) { + return (c.value); + })); +}; + +Identity.prototype.toArray = function (idx) { + return (this.components.map(function (c) { + return ({ + name: c.name, + value: c.value + }); + })); +}; + +/* + * These are from X.680 -- PrintableString allowed chars are in section 37.4 + * table 8. Spec for IA5Strings is "1,6 + SPACE + DEL" where 1 refers to + * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006 + * (the basic ASCII character set). + */ +/* JSSTYLED */ +var NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\/:=?-]/; +/* JSSTYLED */ +var NOT_IA5 = /[^\x00-\x7f]/; + +Identity.prototype.toAsn1 = function (der, tag) { + der.startSequence(tag); + this.components.forEach(function (c) { + der.startSequence(asn1.Ber.Constructor | asn1.Ber.Set); + der.startSequence(); + der.writeOID(c.oid); + /* + * If we fit in a PrintableString, use that. Otherwise use an + * IA5String or UTF8String. + * + * If this identity was parsed from a DN, use the ASN.1 types + * from the original representation (otherwise this might not + * be a full match for the original in some validators). + */ + if (c.asn1type === asn1.Ber.Utf8String || + c.value.match(NOT_IA5)) { + var v = Buffer.from(c.value, 'utf8'); + der.writeBuffer(v, asn1.Ber.Utf8String); + + } else if (c.asn1type === asn1.Ber.IA5String || + c.value.match(NOT_PRINTABLE)) { + der.writeString(c.value, asn1.Ber.IA5String); + + } else { + var type = asn1.Ber.PrintableString; + if (c.asn1type !== undefined) + type = c.asn1type; + der.writeString(c.value, type); + } + der.endSequence(); + der.endSequence(); + }); + der.endSequence(); +}; + +function globMatch(a, b) { + if (a === '**' || b === '**') + return (true); + var aParts = a.split('.'); + var bParts = b.split('.'); + if (aParts.length !== bParts.length) + return (false); + for (var i = 0; i < aParts.length; ++i) { + if (aParts[i] === '*' || bParts[i] === '*') + continue; + if (aParts[i] !== bParts[i]) + return (false); + } + return (true); +} + +Identity.prototype.equals = function (other) { + if (!Identity.isIdentity(other, [1, 0])) + return (false); + if (other.components.length !== this.components.length) + return (false); + for (var i = 0; i < this.components.length; ++i) { + if (this.components[i].oid !== other.components[i].oid) + return (false); + if (!globMatch(this.components[i].value, + other.components[i].value)) { + return (false); + } + } + return (true); +}; + +Identity.forHost = function (hostname) { + assert.string(hostname, 'hostname'); + return (new Identity({ + type: 'host', + hostname: hostname, + components: [ { name: 'cn', value: hostname } ] + })); +}; + +Identity.forUser = function (uid) { + assert.string(uid, 'uid'); + return (new Identity({ + type: 'user', + uid: uid, + components: [ { name: 'uid', value: uid } ] + })); +}; + +Identity.forEmail = function (email) { + assert.string(email, 'email'); + return (new Identity({ + type: 'email', + email: email, + components: [ { name: 'mail', value: email } ] + })); +}; + +Identity.parseDN = function (dn) { + assert.string(dn, 'dn'); + var parts = ['']; + var idx = 0; + var rem = dn; + while (rem.length > 0) { + var m; + /*JSSTYLED*/ + if ((m = /^,/.exec(rem)) !== null) { + parts[++idx] = ''; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^\\,/.exec(rem)) !== null) { + parts[idx] += ','; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^\\./.exec(rem)) !== null) { + parts[idx] += m[0]; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^[^\\,]+/.exec(rem)) !== null) { + parts[idx] += m[0]; + rem = rem.slice(m[0].length); + } else { + throw (new Error('Failed to parse DN')); + } + } + var cmps = parts.map(function (c) { + c = c.trim(); + var eqPos = c.indexOf('='); + while (eqPos > 0 && c.charAt(eqPos - 1) === '\\') + eqPos = c.indexOf('=', eqPos + 1); + if (eqPos === -1) { + throw (new Error('Failed to parse DN')); + } + /*JSSTYLED*/ + var name = c.slice(0, eqPos).toLowerCase().replace(/\\=/g, '='); + var value = c.slice(eqPos + 1); + return ({ name: name, value: value }); + }); + return (new Identity({ components: cmps })); +}; + +Identity.fromArray = function (components) { + assert.arrayOfObject(components, 'components'); + components.forEach(function (cmp) { + assert.object(cmp, 'component'); + assert.string(cmp.name, 'component.name'); + if (!Buffer.isBuffer(cmp.value) && + !(typeof (cmp.value) === 'string')) { + throw (new Error('Invalid component value')); + } + }); + return (new Identity({ components: components })); +}; + +Identity.parseAsn1 = function (der, top) { + var components = []; + der.readSequence(top); + var end = der.offset + der.length; + while (der.offset < end) { + der.readSequence(asn1.Ber.Constructor | asn1.Ber.Set); + var after = der.offset + der.length; + der.readSequence(); + var oid = der.readOID(); + var type = der.peek(); + var value; + switch (type) { + case asn1.Ber.PrintableString: + case asn1.Ber.IA5String: + case asn1.Ber.OctetString: + case asn1.Ber.T61String: + value = der.readString(type); + break; + case asn1.Ber.Utf8String: + value = der.readString(type, true); + value = value.toString('utf8'); + break; + case asn1.Ber.CharacterString: + case asn1.Ber.BMPString: + value = der.readString(type, true); + value = value.toString('utf16le'); + break; + default: + throw (new Error('Unknown asn1 type ' + type)); + } + components.push({ oid: oid, asn1type: type, value: value }); + der._offset = after; + } + der._offset = end; + return (new Identity({ + components: components + })); +}; + +Identity.isIdentity = function (obj, ver) { + return (utils.isCompatible(obj, Identity, ver)); +}; + +/* + * API versions for Identity: + * [1,0] -- initial ver + */ +Identity.prototype._sshpkApiVersion = [1, 0]; + +Identity._oldVersionDetect = function (obj) { + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/index.js b/node_modules/sshpk/lib/index.js new file mode 100644 index 0000000..f76db79 --- /dev/null +++ b/node_modules/sshpk/lib/index.js @@ -0,0 +1,40 @@ +// Copyright 2015 Joyent, Inc. + +var Key = require('./key'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var PrivateKey = require('./private-key'); +var Certificate = require('./certificate'); +var Identity = require('./identity'); +var errs = require('./errors'); + +module.exports = { + /* top-level classes */ + Key: Key, + parseKey: Key.parse, + Fingerprint: Fingerprint, + parseFingerprint: Fingerprint.parse, + Signature: Signature, + parseSignature: Signature.parse, + PrivateKey: PrivateKey, + parsePrivateKey: PrivateKey.parse, + generatePrivateKey: PrivateKey.generate, + Certificate: Certificate, + parseCertificate: Certificate.parse, + createSelfSignedCertificate: Certificate.createSelfSigned, + createCertificate: Certificate.create, + Identity: Identity, + identityFromDN: Identity.parseDN, + identityForHost: Identity.forHost, + identityForUser: Identity.forUser, + identityForEmail: Identity.forEmail, + identityFromArray: Identity.fromArray, + + /* errors */ + FingerprintFormatError: errs.FingerprintFormatError, + InvalidAlgorithmError: errs.InvalidAlgorithmError, + KeyParseError: errs.KeyParseError, + SignatureParseError: errs.SignatureParseError, + KeyEncryptedError: errs.KeyEncryptedError, + CertificateParseError: errs.CertificateParseError +}; diff --git a/node_modules/sshpk/lib/key.js b/node_modules/sshpk/lib/key.js new file mode 100644 index 0000000..706f834 --- /dev/null +++ b/node_modules/sshpk/lib/key.js @@ -0,0 +1,294 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = Key; + +var assert = require('assert-plus'); +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var DiffieHellman = require('./dhe').DiffieHellman; +var errs = require('./errors'); +var utils = require('./utils'); +var PrivateKey = require('./private-key'); +var edCompat; + +try { + edCompat = require('./ed-compat'); +} catch (e) { + /* Just continue through, and bail out if we try to use it. */ +} + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var KeyParseError = errs.KeyParseError; + +var formats = {}; +formats['auto'] = require('./formats/auto'); +formats['pem'] = require('./formats/pem'); +formats['pkcs1'] = require('./formats/pkcs1'); +formats['pkcs8'] = require('./formats/pkcs8'); +formats['rfc4253'] = require('./formats/rfc4253'); +formats['ssh'] = require('./formats/ssh'); +formats['ssh-private'] = require('./formats/ssh-private'); +formats['openssh'] = formats['ssh-private']; +formats['dnssec'] = require('./formats/dnssec'); +formats['putty'] = require('./formats/putty'); +formats['ppk'] = formats['putty']; + +function Key(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.parts, 'options.parts'); + assert.string(opts.type, 'options.type'); + assert.optionalString(opts.comment, 'options.comment'); + + var algInfo = algs.info[opts.type]; + if (typeof (algInfo) !== 'object') + throw (new InvalidAlgorithmError(opts.type)); + + var partLookup = {}; + for (var i = 0; i < opts.parts.length; ++i) { + var part = opts.parts[i]; + partLookup[part.name] = part; + } + + this.type = opts.type; + this.parts = opts.parts; + this.part = partLookup; + this.comment = undefined; + this.source = opts.source; + + /* for speeding up hashing/fingerprint operations */ + this._rfc4253Cache = opts._rfc4253Cache; + this._hashCache = {}; + + var sz; + this.curve = undefined; + if (this.type === 'ecdsa') { + var curve = this.part.curve.data.toString(); + this.curve = curve; + sz = algs.curves[curve].size; + } else if (this.type === 'ed25519' || this.type === 'curve25519') { + sz = 256; + this.curve = 'curve25519'; + } else { + var szPart = this.part[algInfo.sizePart]; + sz = szPart.data.length; + sz = sz * 8 - utils.countZeros(szPart.data); + } + this.size = sz; +} + +Key.formats = formats; + +Key.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'ssh'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + if (format === 'rfc4253') { + if (this._rfc4253Cache === undefined) + this._rfc4253Cache = formats['rfc4253'].write(this); + return (this._rfc4253Cache); + } + + return (formats[format].write(this, options)); +}; + +Key.prototype.toString = function (format, options) { + return (this.toBuffer(format, options).toString()); +}; + +Key.prototype.hash = function (algo, type) { + assert.string(algo, 'algorithm'); + assert.optionalString(type, 'type'); + if (type === undefined) + type = 'ssh'; + algo = algo.toLowerCase(); + if (algs.hashAlgs[algo] === undefined) + throw (new InvalidAlgorithmError(algo)); + + var cacheKey = algo + '||' + type; + if (this._hashCache[cacheKey]) + return (this._hashCache[cacheKey]); + + var buf; + if (type === 'ssh') { + buf = this.toBuffer('rfc4253'); + } else if (type === 'spki') { + buf = formats.pkcs8.pkcs8ToBuffer(this); + } else { + throw (new Error('Hash type ' + type + ' not supported')); + } + var hash = crypto.createHash(algo).update(buf).digest(); + this._hashCache[cacheKey] = hash; + return (hash); +}; + +Key.prototype.fingerprint = function (algo, type) { + if (algo === undefined) + algo = 'sha256'; + if (type === undefined) + type = 'ssh'; + assert.string(algo, 'algorithm'); + assert.string(type, 'type'); + var opts = { + type: 'key', + hash: this.hash(algo, type), + algorithm: algo, + hashType: type + }; + return (new Fingerprint(opts)); +}; + +Key.prototype.defaultHashAlgorithm = function () { + var hashAlgo = 'sha1'; + if (this.type === 'rsa') + hashAlgo = 'sha256'; + if (this.type === 'dsa' && this.size > 1024) + hashAlgo = 'sha256'; + if (this.type === 'ed25519') + hashAlgo = 'sha512'; + if (this.type === 'ecdsa') { + if (this.size <= 256) + hashAlgo = 'sha256'; + else if (this.size <= 384) + hashAlgo = 'sha384'; + else + hashAlgo = 'sha512'; + } + return (hashAlgo); +}; + +Key.prototype.createVerify = function (hashAlgo) { + if (hashAlgo === undefined) + hashAlgo = this.defaultHashAlgorithm(); + assert.string(hashAlgo, 'hash algorithm'); + + /* ED25519 is not supported by OpenSSL, use a javascript impl. */ + if (this.type === 'ed25519' && edCompat !== undefined) + return (new edCompat.Verifier(this, hashAlgo)); + if (this.type === 'curve25519') + throw (new Error('Curve25519 keys are not suitable for ' + + 'signing or verification')); + + var v, nm, err; + try { + nm = hashAlgo.toUpperCase(); + v = crypto.createVerify(nm); + } catch (e) { + err = e; + } + if (v === undefined || (err instanceof Error && + err.message.match(/Unknown message digest/))) { + nm = 'RSA-'; + nm += hashAlgo.toUpperCase(); + v = crypto.createVerify(nm); + } + assert.ok(v, 'failed to create verifier'); + var oldVerify = v.verify.bind(v); + var key = this.toBuffer('pkcs8'); + var curve = this.curve; + var self = this; + v.verify = function (signature, fmt) { + if (Signature.isSignature(signature, [2, 0])) { + if (signature.type !== self.type) + return (false); + if (signature.hashAlgorithm && + signature.hashAlgorithm !== hashAlgo) + return (false); + if (signature.curve && self.type === 'ecdsa' && + signature.curve !== curve) + return (false); + return (oldVerify(key, signature.toBuffer('asn1'))); + + } else if (typeof (signature) === 'string' || + Buffer.isBuffer(signature)) { + return (oldVerify(key, signature, fmt)); + + /* + * Avoid doing this on valid arguments, walking the prototype + * chain can be quite slow. + */ + } else if (Signature.isSignature(signature, [1, 0])) { + throw (new Error('signature was created by too old ' + + 'a version of sshpk and cannot be verified')); + + } else { + throw (new TypeError('signature must be a string, ' + + 'Buffer, or Signature object')); + } + }; + return (v); +}; + +Key.prototype.createDiffieHellman = function () { + if (this.type === 'rsa') + throw (new Error('RSA keys do not support Diffie-Hellman')); + + return (new DiffieHellman(this)); +}; +Key.prototype.createDH = Key.prototype.createDiffieHellman; + +Key.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + if (k instanceof PrivateKey) + k = k.toPublic(); + if (!k.comment) + k.comment = options.filename; + return (k); + } catch (e) { + if (e.name === 'KeyEncryptedError') + throw (e); + throw (new KeyParseError(options.filename, format, e)); + } +}; + +Key.isKey = function (obj, ver) { + return (utils.isCompatible(obj, Key, ver)); +}; + +/* + * API versions for Key: + * [1,0] -- initial ver, may take Signature for createVerify or may not + * [1,1] -- added pkcs1, pkcs8 formats + * [1,2] -- added auto, ssh-private, openssh formats + * [1,3] -- added defaultHashAlgorithm + * [1,4] -- added ed support, createDH + * [1,5] -- first explicitly tagged version + * [1,6] -- changed ed25519 part names + * [1,7] -- spki hash types + */ +Key.prototype._sshpkApiVersion = [1, 7]; + +Key._oldVersionDetect = function (obj) { + assert.func(obj.toBuffer); + assert.func(obj.fingerprint); + if (obj.createDH) + return ([1, 4]); + if (obj.defaultHashAlgorithm) + return ([1, 3]); + if (obj.formats['auto']) + return ([1, 2]); + if (obj.formats['pkcs1']) + return ([1, 1]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/private-key.js b/node_modules/sshpk/lib/private-key.js new file mode 100644 index 0000000..5600838 --- /dev/null +++ b/node_modules/sshpk/lib/private-key.js @@ -0,0 +1,246 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = PrivateKey; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var dhe = require('./dhe'); +var generateECDSA = dhe.generateECDSA; +var generateED25519 = dhe.generateED25519; +var edCompat = require('./ed-compat'); +var nacl = require('tweetnacl'); + +var Key = require('./key'); + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var KeyParseError = errs.KeyParseError; +var KeyEncryptedError = errs.KeyEncryptedError; + +var formats = {}; +formats['auto'] = require('./formats/auto'); +formats['pem'] = require('./formats/pem'); +formats['pkcs1'] = require('./formats/pkcs1'); +formats['pkcs8'] = require('./formats/pkcs8'); +formats['rfc4253'] = require('./formats/rfc4253'); +formats['ssh-private'] = require('./formats/ssh-private'); +formats['openssh'] = formats['ssh-private']; +formats['ssh'] = formats['ssh-private']; +formats['dnssec'] = require('./formats/dnssec'); + +function PrivateKey(opts) { + assert.object(opts, 'options'); + Key.call(this, opts); + + this._pubCache = undefined; +} +util.inherits(PrivateKey, Key); + +PrivateKey.formats = formats; + +PrivateKey.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'pkcs1'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + return (formats[format].write(this, options)); +}; + +PrivateKey.prototype.hash = function (algo, type) { + return (this.toPublic().hash(algo, type)); +}; + +PrivateKey.prototype.fingerprint = function (algo, type) { + return (this.toPublic().fingerprint(algo, type)); +}; + +PrivateKey.prototype.toPublic = function () { + if (this._pubCache) + return (this._pubCache); + + var algInfo = algs.info[this.type]; + var pubParts = []; + for (var i = 0; i < algInfo.parts.length; ++i) { + var p = algInfo.parts[i]; + pubParts.push(this.part[p]); + } + + this._pubCache = new Key({ + type: this.type, + source: this, + parts: pubParts + }); + if (this.comment) + this._pubCache.comment = this.comment; + return (this._pubCache); +}; + +PrivateKey.prototype.derive = function (newType) { + assert.string(newType, 'type'); + var priv, pub, pair; + + if (this.type === 'ed25519' && newType === 'curve25519') { + priv = this.part.k.data; + if (priv[0] === 0x00) + priv = priv.slice(1); + + pair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv)); + pub = Buffer.from(pair.publicKey); + + return (new PrivateKey({ + type: 'curve25519', + parts: [ + { name: 'A', data: utils.mpNormalize(pub) }, + { name: 'k', data: utils.mpNormalize(priv) } + ] + })); + } else if (this.type === 'curve25519' && newType === 'ed25519') { + priv = this.part.k.data; + if (priv[0] === 0x00) + priv = priv.slice(1); + + pair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv)); + pub = Buffer.from(pair.publicKey); + + return (new PrivateKey({ + type: 'ed25519', + parts: [ + { name: 'A', data: utils.mpNormalize(pub) }, + { name: 'k', data: utils.mpNormalize(priv) } + ] + })); + } + throw (new Error('Key derivation not supported from ' + this.type + + ' to ' + newType)); +}; + +PrivateKey.prototype.createVerify = function (hashAlgo) { + return (this.toPublic().createVerify(hashAlgo)); +}; + +PrivateKey.prototype.createSign = function (hashAlgo) { + if (hashAlgo === undefined) + hashAlgo = this.defaultHashAlgorithm(); + assert.string(hashAlgo, 'hash algorithm'); + + /* ED25519 is not supported by OpenSSL, use a javascript impl. */ + if (this.type === 'ed25519' && edCompat !== undefined) + return (new edCompat.Signer(this, hashAlgo)); + if (this.type === 'curve25519') + throw (new Error('Curve25519 keys are not suitable for ' + + 'signing or verification')); + + var v, nm, err; + try { + nm = hashAlgo.toUpperCase(); + v = crypto.createSign(nm); + } catch (e) { + err = e; + } + if (v === undefined || (err instanceof Error && + err.message.match(/Unknown message digest/))) { + nm = 'RSA-'; + nm += hashAlgo.toUpperCase(); + v = crypto.createSign(nm); + } + assert.ok(v, 'failed to create verifier'); + var oldSign = v.sign.bind(v); + var key = this.toBuffer('pkcs1'); + var type = this.type; + var curve = this.curve; + v.sign = function () { + var sig = oldSign(key); + if (typeof (sig) === 'string') + sig = Buffer.from(sig, 'binary'); + sig = Signature.parse(sig, type, 'asn1'); + sig.hashAlgorithm = hashAlgo; + sig.curve = curve; + return (sig); + }; + return (v); +}; + +PrivateKey.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + assert.ok(k instanceof PrivateKey, 'key is not a private key'); + if (!k.comment) + k.comment = options.filename; + return (k); + } catch (e) { + if (e.name === 'KeyEncryptedError') + throw (e); + throw (new KeyParseError(options.filename, format, e)); + } +}; + +PrivateKey.isPrivateKey = function (obj, ver) { + return (utils.isCompatible(obj, PrivateKey, ver)); +}; + +PrivateKey.generate = function (type, options) { + if (options === undefined) + options = {}; + assert.object(options, 'options'); + + switch (type) { + case 'ecdsa': + if (options.curve === undefined) + options.curve = 'nistp256'; + assert.string(options.curve, 'options.curve'); + return (generateECDSA(options.curve)); + case 'ed25519': + return (generateED25519()); + default: + throw (new Error('Key generation not supported with key ' + + 'type "' + type + '"')); + } +}; + +/* + * API versions for PrivateKey: + * [1,0] -- initial ver + * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats + * [1,2] -- added defaultHashAlgorithm + * [1,3] -- added derive, ed, createDH + * [1,4] -- first tagged version + * [1,5] -- changed ed25519 part names and format + * [1,6] -- type arguments for hash() and fingerprint() + */ +PrivateKey.prototype._sshpkApiVersion = [1, 6]; + +PrivateKey._oldVersionDetect = function (obj) { + assert.func(obj.toPublic); + assert.func(obj.createSign); + if (obj.derive) + return ([1, 3]); + if (obj.defaultHashAlgorithm) + return ([1, 2]); + if (obj.formats['auto']) + return ([1, 1]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/signature.js b/node_modules/sshpk/lib/signature.js new file mode 100644 index 0000000..aa8fdbb --- /dev/null +++ b/node_modules/sshpk/lib/signature.js @@ -0,0 +1,314 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = Signature; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var errs = require('./errors'); +var utils = require('./utils'); +var asn1 = require('asn1'); +var SSHBuffer = require('./ssh-buffer'); + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var SignatureParseError = errs.SignatureParseError; + +function Signature(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.parts, 'options.parts'); + assert.string(opts.type, 'options.type'); + + var partLookup = {}; + for (var i = 0; i < opts.parts.length; ++i) { + var part = opts.parts[i]; + partLookup[part.name] = part; + } + + this.type = opts.type; + this.hashAlgorithm = opts.hashAlgo; + this.curve = opts.curve; + this.parts = opts.parts; + this.part = partLookup; +} + +Signature.prototype.toBuffer = function (format) { + if (format === undefined) + format = 'asn1'; + assert.string(format, 'format'); + + var buf; + var stype = 'ssh-' + this.type; + + switch (this.type) { + case 'rsa': + switch (this.hashAlgorithm) { + case 'sha256': + stype = 'rsa-sha2-256'; + break; + case 'sha512': + stype = 'rsa-sha2-512'; + break; + case 'sha1': + case undefined: + break; + default: + throw (new Error('SSH signature ' + + 'format does not support hash ' + + 'algorithm ' + this.hashAlgorithm)); + } + if (format === 'ssh') { + buf = new SSHBuffer({}); + buf.writeString(stype); + buf.writePart(this.part.sig); + return (buf.toBuffer()); + } else { + return (this.part.sig.data); + } + break; + + case 'ed25519': + if (format === 'ssh') { + buf = new SSHBuffer({}); + buf.writeString(stype); + buf.writePart(this.part.sig); + return (buf.toBuffer()); + } else { + return (this.part.sig.data); + } + break; + + case 'dsa': + case 'ecdsa': + var r, s; + if (format === 'asn1') { + var der = new asn1.BerWriter(); + der.startSequence(); + r = utils.mpNormalize(this.part.r.data); + s = utils.mpNormalize(this.part.s.data); + der.writeBuffer(r, asn1.Ber.Integer); + der.writeBuffer(s, asn1.Ber.Integer); + der.endSequence(); + return (der.buffer); + } else if (format === 'ssh' && this.type === 'dsa') { + buf = new SSHBuffer({}); + buf.writeString('ssh-dss'); + r = this.part.r.data; + if (r.length > 20 && r[0] === 0x00) + r = r.slice(1); + s = this.part.s.data; + if (s.length > 20 && s[0] === 0x00) + s = s.slice(1); + if ((this.hashAlgorithm && + this.hashAlgorithm !== 'sha1') || + r.length + s.length !== 40) { + throw (new Error('OpenSSH only supports ' + + 'DSA signatures with SHA1 hash')); + } + buf.writeBuffer(Buffer.concat([r, s])); + return (buf.toBuffer()); + } else if (format === 'ssh' && this.type === 'ecdsa') { + var inner = new SSHBuffer({}); + r = this.part.r.data; + inner.writeBuffer(r); + inner.writePart(this.part.s); + + buf = new SSHBuffer({}); + /* XXX: find a more proper way to do this? */ + var curve; + if (r[0] === 0x00) + r = r.slice(1); + var sz = r.length * 8; + if (sz === 256) + curve = 'nistp256'; + else if (sz === 384) + curve = 'nistp384'; + else if (sz === 528) + curve = 'nistp521'; + buf.writeString('ecdsa-sha2-' + curve); + buf.writeBuffer(inner.toBuffer()); + return (buf.toBuffer()); + } + throw (new Error('Invalid signature format')); + default: + throw (new Error('Invalid signature data')); + } +}; + +Signature.prototype.toString = function (format) { + assert.optionalString(format, 'format'); + return (this.toBuffer(format).toString('base64')); +}; + +Signature.parse = function (data, type, format) { + if (typeof (data) === 'string') + data = Buffer.from(data, 'base64'); + assert.buffer(data, 'data'); + assert.string(format, 'format'); + assert.string(type, 'type'); + + var opts = {}; + opts.type = type.toLowerCase(); + opts.parts = []; + + try { + assert.ok(data.length > 0, 'signature must not be empty'); + switch (opts.type) { + case 'rsa': + return (parseOneNum(data, type, format, opts)); + case 'ed25519': + return (parseOneNum(data, type, format, opts)); + + case 'dsa': + case 'ecdsa': + if (format === 'asn1') + return (parseDSAasn1(data, type, format, opts)); + else if (opts.type === 'dsa') + return (parseDSA(data, type, format, opts)); + else + return (parseECDSA(data, type, format, opts)); + + default: + throw (new InvalidAlgorithmError(type)); + } + + } catch (e) { + if (e instanceof InvalidAlgorithmError) + throw (e); + throw (new SignatureParseError(type, format, e)); + } +}; + +function parseOneNum(data, type, format, opts) { + if (format === 'ssh') { + try { + var buf = new SSHBuffer({buffer: data}); + var head = buf.readString(); + } catch (e) { + /* fall through */ + } + if (buf !== undefined) { + var msg = 'SSH signature does not match expected ' + + 'type (expected ' + type + ', got ' + head + ')'; + switch (head) { + case 'ssh-rsa': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha1'; + break; + case 'rsa-sha2-256': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha256'; + break; + case 'rsa-sha2-512': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha512'; + break; + case 'ssh-ed25519': + assert.strictEqual(type, 'ed25519', msg); + opts.hashAlgo = 'sha512'; + break; + default: + throw (new Error('Unknown SSH signature ' + + 'type: ' + head)); + } + var sig = buf.readPart(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + sig.name = 'sig'; + opts.parts.push(sig); + return (new Signature(opts)); + } + } + opts.parts.push({name: 'sig', data: data}); + return (new Signature(opts)); +} + +function parseDSAasn1(data, type, format, opts) { + var der = new asn1.BerReader(data); + der.readSequence(); + var r = der.readString(asn1.Ber.Integer, true); + var s = der.readString(asn1.Ber.Integer, true); + + opts.parts.push({name: 'r', data: utils.mpNormalize(r)}); + opts.parts.push({name: 's', data: utils.mpNormalize(s)}); + + return (new Signature(opts)); +} + +function parseDSA(data, type, format, opts) { + if (data.length != 40) { + var buf = new SSHBuffer({buffer: data}); + var d = buf.readBuffer(); + if (d.toString('ascii') === 'ssh-dss') + d = buf.readBuffer(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + assert.strictEqual(d.length, 40, 'invalid inner length'); + data = d; + } + opts.parts.push({name: 'r', data: data.slice(0, 20)}); + opts.parts.push({name: 's', data: data.slice(20, 40)}); + return (new Signature(opts)); +} + +function parseECDSA(data, type, format, opts) { + var buf = new SSHBuffer({buffer: data}); + + var r, s; + var inner = buf.readBuffer(); + var stype = inner.toString('ascii'); + if (stype.slice(0, 6) === 'ecdsa-') { + var parts = stype.split('-'); + assert.strictEqual(parts[0], 'ecdsa'); + assert.strictEqual(parts[1], 'sha2'); + opts.curve = parts[2]; + switch (opts.curve) { + case 'nistp256': + opts.hashAlgo = 'sha256'; + break; + case 'nistp384': + opts.hashAlgo = 'sha384'; + break; + case 'nistp521': + opts.hashAlgo = 'sha512'; + break; + default: + throw (new Error('Unsupported ECDSA curve: ' + + opts.curve)); + } + inner = buf.readBuffer(); + assert.ok(buf.atEnd(), 'extra trailing bytes on outer'); + buf = new SSHBuffer({buffer: inner}); + r = buf.readPart(); + } else { + r = {data: inner}; + } + + s = buf.readPart(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + + r.name = 'r'; + s.name = 's'; + + opts.parts.push(r); + opts.parts.push(s); + return (new Signature(opts)); +} + +Signature.isSignature = function (obj, ver) { + return (utils.isCompatible(obj, Signature, ver)); +}; + +/* + * API versions for Signature: + * [1,0] -- initial ver + * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent + * hashAlgorithm property + * [2,1] -- first tagged version + */ +Signature.prototype._sshpkApiVersion = [2, 1]; + +Signature._oldVersionDetect = function (obj) { + assert.func(obj.toBuffer); + if (obj.hasOwnProperty('hashAlgorithm')) + return ([2, 0]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/ssh-buffer.js b/node_modules/sshpk/lib/ssh-buffer.js new file mode 100644 index 0000000..1dd286c --- /dev/null +++ b/node_modules/sshpk/lib/ssh-buffer.js @@ -0,0 +1,149 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = SSHBuffer; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; + +function SSHBuffer(opts) { + assert.object(opts, 'options'); + if (opts.buffer !== undefined) + assert.buffer(opts.buffer, 'options.buffer'); + + this._size = opts.buffer ? opts.buffer.length : 1024; + this._buffer = opts.buffer || Buffer.alloc(this._size); + this._offset = 0; +} + +SSHBuffer.prototype.toBuffer = function () { + return (this._buffer.slice(0, this._offset)); +}; + +SSHBuffer.prototype.atEnd = function () { + return (this._offset >= this._buffer.length); +}; + +SSHBuffer.prototype.remainder = function () { + return (this._buffer.slice(this._offset)); +}; + +SSHBuffer.prototype.skip = function (n) { + this._offset += n; +}; + +SSHBuffer.prototype.expand = function () { + this._size *= 2; + var buf = Buffer.alloc(this._size); + this._buffer.copy(buf, 0); + this._buffer = buf; +}; + +SSHBuffer.prototype.readPart = function () { + return ({data: this.readBuffer()}); +}; + +SSHBuffer.prototype.readBuffer = function () { + var len = this._buffer.readUInt32BE(this._offset); + this._offset += 4; + assert.ok(this._offset + len <= this._buffer.length, + 'length out of bounds at +0x' + this._offset.toString(16) + + ' (data truncated?)'); + var buf = this._buffer.slice(this._offset, this._offset + len); + this._offset += len; + return (buf); +}; + +SSHBuffer.prototype.readString = function () { + return (this.readBuffer().toString()); +}; + +SSHBuffer.prototype.readCString = function () { + var offset = this._offset; + while (offset < this._buffer.length && + this._buffer[offset] !== 0x00) + offset++; + assert.ok(offset < this._buffer.length, 'c string does not terminate'); + var str = this._buffer.slice(this._offset, offset).toString(); + this._offset = offset + 1; + return (str); +}; + +SSHBuffer.prototype.readInt = function () { + var v = this._buffer.readUInt32BE(this._offset); + this._offset += 4; + return (v); +}; + +SSHBuffer.prototype.readInt64 = function () { + assert.ok(this._offset + 8 < this._buffer.length, + 'buffer not long enough to read Int64'); + var v = this._buffer.slice(this._offset, this._offset + 8); + this._offset += 8; + return (v); +}; + +SSHBuffer.prototype.readChar = function () { + var v = this._buffer[this._offset++]; + return (v); +}; + +SSHBuffer.prototype.writeBuffer = function (buf) { + while (this._offset + 4 + buf.length > this._size) + this.expand(); + this._buffer.writeUInt32BE(buf.length, this._offset); + this._offset += 4; + buf.copy(this._buffer, this._offset); + this._offset += buf.length; +}; + +SSHBuffer.prototype.writeString = function (str) { + this.writeBuffer(Buffer.from(str, 'utf8')); +}; + +SSHBuffer.prototype.writeCString = function (str) { + while (this._offset + 1 + str.length > this._size) + this.expand(); + this._buffer.write(str, this._offset); + this._offset += str.length; + this._buffer[this._offset++] = 0; +}; + +SSHBuffer.prototype.writeInt = function (v) { + while (this._offset + 4 > this._size) + this.expand(); + this._buffer.writeUInt32BE(v, this._offset); + this._offset += 4; +}; + +SSHBuffer.prototype.writeInt64 = function (v) { + assert.buffer(v, 'value'); + if (v.length > 8) { + var lead = v.slice(0, v.length - 8); + for (var i = 0; i < lead.length; ++i) { + assert.strictEqual(lead[i], 0, + 'must fit in 64 bits of precision'); + } + v = v.slice(v.length - 8, v.length); + } + while (this._offset + 8 > this._size) + this.expand(); + v.copy(this._buffer, this._offset); + this._offset += 8; +}; + +SSHBuffer.prototype.writeChar = function (v) { + while (this._offset + 1 > this._size) + this.expand(); + this._buffer[this._offset++] = v; +}; + +SSHBuffer.prototype.writePart = function (p) { + this.writeBuffer(p.data); +}; + +SSHBuffer.prototype.write = function (buf) { + while (this._offset + buf.length > this._size) + this.expand(); + buf.copy(this._buffer, this._offset); + this._offset += buf.length; +}; diff --git a/node_modules/sshpk/lib/utils.js b/node_modules/sshpk/lib/utils.js new file mode 100644 index 0000000..6b83a32 --- /dev/null +++ b/node_modules/sshpk/lib/utils.js @@ -0,0 +1,404 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + bufferSplit: bufferSplit, + addRSAMissing: addRSAMissing, + calculateDSAPublic: calculateDSAPublic, + calculateED25519Public: calculateED25519Public, + calculateX25519Public: calculateX25519Public, + mpNormalize: mpNormalize, + mpDenormalize: mpDenormalize, + ecNormalize: ecNormalize, + countZeros: countZeros, + assertCompatible: assertCompatible, + isCompatible: isCompatible, + opensslKeyDeriv: opensslKeyDeriv, + opensshCipherInfo: opensshCipherInfo, + publicFromPrivateECDSA: publicFromPrivateECDSA, + zeroPadToLength: zeroPadToLength, + writeBitString: writeBitString, + readBitString: readBitString, + pbkdf2: pbkdf2 +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var PrivateKey = require('./private-key'); +var Key = require('./key'); +var crypto = require('crypto'); +var algs = require('./algs'); +var asn1 = require('asn1'); + +var ec = require('ecc-jsbn/lib/ec'); +var jsbn = require('jsbn').BigInteger; +var nacl = require('tweetnacl'); + +var MAX_CLASS_DEPTH = 3; + +function isCompatible(obj, klass, needVer) { + if (obj === null || typeof (obj) !== 'object') + return (false); + if (needVer === undefined) + needVer = klass.prototype._sshpkApiVersion; + if (obj instanceof klass && + klass.prototype._sshpkApiVersion[0] == needVer[0]) + return (true); + var proto = Object.getPrototypeOf(obj); + var depth = 0; + while (proto.constructor.name !== klass.name) { + proto = Object.getPrototypeOf(proto); + if (!proto || ++depth > MAX_CLASS_DEPTH) + return (false); + } + if (proto.constructor.name !== klass.name) + return (false); + var ver = proto._sshpkApiVersion; + if (ver === undefined) + ver = klass._oldVersionDetect(obj); + if (ver[0] != needVer[0] || ver[1] < needVer[1]) + return (false); + return (true); +} + +function assertCompatible(obj, klass, needVer, name) { + if (name === undefined) + name = 'object'; + assert.ok(obj, name + ' must not be null'); + assert.object(obj, name + ' must be an object'); + if (needVer === undefined) + needVer = klass.prototype._sshpkApiVersion; + if (obj instanceof klass && + klass.prototype._sshpkApiVersion[0] == needVer[0]) + return; + var proto = Object.getPrototypeOf(obj); + var depth = 0; + while (proto.constructor.name !== klass.name) { + proto = Object.getPrototypeOf(proto); + assert.ok(proto && ++depth <= MAX_CLASS_DEPTH, + name + ' must be a ' + klass.name + ' instance'); + } + assert.strictEqual(proto.constructor.name, klass.name, + name + ' must be a ' + klass.name + ' instance'); + var ver = proto._sshpkApiVersion; + if (ver === undefined) + ver = klass._oldVersionDetect(obj); + assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1], + name + ' must be compatible with ' + klass.name + ' klass ' + + 'version ' + needVer[0] + '.' + needVer[1]); +} + +var CIPHER_LEN = { + 'des-ede3-cbc': { key: 24, iv: 8 }, + 'aes-128-cbc': { key: 16, iv: 16 }, + 'aes-256-cbc': { key: 32, iv: 16 } +}; +var PKCS5_SALT_LEN = 8; + +function opensslKeyDeriv(cipher, salt, passphrase, count) { + assert.buffer(salt, 'salt'); + assert.buffer(passphrase, 'passphrase'); + assert.number(count, 'iteration count'); + + var clen = CIPHER_LEN[cipher]; + assert.object(clen, 'supported cipher'); + + salt = salt.slice(0, PKCS5_SALT_LEN); + + var D, D_prev, bufs; + var material = Buffer.alloc(0); + while (material.length < clen.key + clen.iv) { + bufs = []; + if (D_prev) + bufs.push(D_prev); + bufs.push(passphrase); + bufs.push(salt); + D = Buffer.concat(bufs); + for (var j = 0; j < count; ++j) + D = crypto.createHash('md5').update(D).digest(); + material = Buffer.concat([material, D]); + D_prev = D; + } + + return ({ + key: material.slice(0, clen.key), + iv: material.slice(clen.key, clen.key + clen.iv) + }); +} + +/* See: RFC2898 */ +function pbkdf2(hashAlg, salt, iterations, size, passphrase) { + var hkey = Buffer.alloc(salt.length + 4); + salt.copy(hkey); + + var gen = 0, ts = []; + var i = 1; + while (gen < size) { + var t = T(i++); + gen += t.length; + ts.push(t); + } + return (Buffer.concat(ts).slice(0, size)); + + function T(I) { + hkey.writeUInt32BE(I, hkey.length - 4); + + var hmac = crypto.createHmac(hashAlg, passphrase); + hmac.update(hkey); + + var Ti = hmac.digest(); + var Uc = Ti; + var c = 1; + while (c++ < iterations) { + hmac = crypto.createHmac(hashAlg, passphrase); + hmac.update(Uc); + Uc = hmac.digest(); + for (var x = 0; x < Ti.length; ++x) + Ti[x] ^= Uc[x]; + } + return (Ti); + } +} + +/* Count leading zero bits on a buffer */ +function countZeros(buf) { + var o = 0, obit = 8; + while (o < buf.length) { + var mask = (1 << obit); + if ((buf[o] & mask) === mask) + break; + obit--; + if (obit < 0) { + o++; + obit = 8; + } + } + return (o*8 + (8 - obit) - 1); +} + +function bufferSplit(buf, chr) { + assert.buffer(buf); + assert.string(chr); + + var parts = []; + var lastPart = 0; + var matches = 0; + for (var i = 0; i < buf.length; ++i) { + if (buf[i] === chr.charCodeAt(matches)) + ++matches; + else if (buf[i] === chr.charCodeAt(0)) + matches = 1; + else + matches = 0; + + if (matches >= chr.length) { + var newPart = i + 1; + parts.push(buf.slice(lastPart, newPart - matches)); + lastPart = newPart; + matches = 0; + } + } + if (lastPart <= buf.length) + parts.push(buf.slice(lastPart, buf.length)); + + return (parts); +} + +function ecNormalize(buf, addZero) { + assert.buffer(buf); + if (buf[0] === 0x00 && buf[1] === 0x04) { + if (addZero) + return (buf); + return (buf.slice(1)); + } else if (buf[0] === 0x04) { + if (!addZero) + return (buf); + } else { + while (buf[0] === 0x00) + buf = buf.slice(1); + if (buf[0] === 0x02 || buf[0] === 0x03) + throw (new Error('Compressed elliptic curve points ' + + 'are not supported')); + if (buf[0] !== 0x04) + throw (new Error('Not a valid elliptic curve point')); + if (!addZero) + return (buf); + } + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x0; + buf.copy(b, 1); + return (b); +} + +function readBitString(der, tag) { + if (tag === undefined) + tag = asn1.Ber.BitString; + var buf = der.readString(tag, true); + assert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' + + 'not supported (0x' + buf[0].toString(16) + ')'); + return (buf.slice(1)); +} + +function writeBitString(der, buf, tag) { + if (tag === undefined) + tag = asn1.Ber.BitString; + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + der.writeBuffer(b, tag); +} + +function mpNormalize(buf) { + assert.buffer(buf); + while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00) + buf = buf.slice(1); + if ((buf[0] & 0x80) === 0x80) { + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + buf = b; + } + return (buf); +} + +function mpDenormalize(buf) { + assert.buffer(buf); + while (buf.length > 1 && buf[0] === 0x00) + buf = buf.slice(1); + return (buf); +} + +function zeroPadToLength(buf, len) { + assert.buffer(buf); + assert.number(len); + while (buf.length > len) { + assert.equal(buf[0], 0x00); + buf = buf.slice(1); + } + while (buf.length < len) { + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + buf = b; + } + return (buf); +} + +function bigintToMpBuf(bigint) { + var buf = Buffer.from(bigint.toByteArray()); + buf = mpNormalize(buf); + return (buf); +} + +function calculateDSAPublic(g, p, x) { + assert.buffer(g); + assert.buffer(p); + assert.buffer(x); + g = new jsbn(g); + p = new jsbn(p); + x = new jsbn(x); + var y = g.modPow(x, p); + var ybuf = bigintToMpBuf(y); + return (ybuf); +} + +function calculateED25519Public(k) { + assert.buffer(k); + + var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k)); + return (Buffer.from(kp.publicKey)); +} + +function calculateX25519Public(k) { + assert.buffer(k); + + var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k)); + return (Buffer.from(kp.publicKey)); +} + +function addRSAMissing(key) { + assert.object(key); + assertCompatible(key, PrivateKey, [1, 1]); + + var d = new jsbn(key.part.d.data); + var buf; + + if (!key.part.dmodp) { + var p = new jsbn(key.part.p.data); + var dmodp = d.mod(p.subtract(1)); + + buf = bigintToMpBuf(dmodp); + key.part.dmodp = {name: 'dmodp', data: buf}; + key.parts.push(key.part.dmodp); + } + if (!key.part.dmodq) { + var q = new jsbn(key.part.q.data); + var dmodq = d.mod(q.subtract(1)); + + buf = bigintToMpBuf(dmodq); + key.part.dmodq = {name: 'dmodq', data: buf}; + key.parts.push(key.part.dmodq); + } +} + +function publicFromPrivateECDSA(curveName, priv) { + assert.string(curveName, 'curveName'); + assert.buffer(priv); + var params = algs.curves[curveName]; + var p = new jsbn(params.p); + var a = new jsbn(params.a); + var b = new jsbn(params.b); + var curve = new ec.ECCurveFp(p, a, b); + var G = curve.decodePointHex(params.G.toString('hex')); + + var d = new jsbn(mpNormalize(priv)); + var pub = G.multiply(d); + pub = Buffer.from(curve.encodePointHex(pub), 'hex'); + + var parts = []; + parts.push({name: 'curve', data: Buffer.from(curveName)}); + parts.push({name: 'Q', data: pub}); + + var key = new Key({type: 'ecdsa', curve: curve, parts: parts}); + return (key); +} + +function opensshCipherInfo(cipher) { + var inf = {}; + switch (cipher) { + case '3des-cbc': + inf.keySize = 24; + inf.blockSize = 8; + inf.opensslName = 'des-ede3-cbc'; + break; + case 'blowfish-cbc': + inf.keySize = 16; + inf.blockSize = 8; + inf.opensslName = 'bf-cbc'; + break; + case 'aes128-cbc': + case 'aes128-ctr': + case 'aes128-gcm@openssh.com': + inf.keySize = 16; + inf.blockSize = 16; + inf.opensslName = 'aes-128-' + cipher.slice(7, 10); + break; + case 'aes192-cbc': + case 'aes192-ctr': + case 'aes192-gcm@openssh.com': + inf.keySize = 24; + inf.blockSize = 16; + inf.opensslName = 'aes-192-' + cipher.slice(7, 10); + break; + case 'aes256-cbc': + case 'aes256-ctr': + case 'aes256-gcm@openssh.com': + inf.keySize = 32; + inf.blockSize = 16; + inf.opensslName = 'aes-256-' + cipher.slice(7, 10); + break; + default: + throw (new Error( + 'Unsupported openssl cipher "' + cipher + '"')); + } + return (inf); +} diff --git a/node_modules/sshpk/man/man1/sshpk-conv.1 b/node_modules/sshpk/man/man1/sshpk-conv.1 new file mode 100644 index 0000000..0887dce --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-conv.1 @@ -0,0 +1,135 @@ +.TH sshpk\-conv 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-conv \- convert between key formats +.SH SYNOPSYS +.PP +\fB\fCsshpk\-conv\fR \-t FORMAT [FILENAME] [OPTIONS...] +.PP +\fB\fCsshpk\-conv\fR \-i [FILENAME] [OPTIONS...] +.SH DESCRIPTION +.PP +Reads in a public or private key and converts it between different formats, +particularly formats used in the SSH protocol and the well\-known PEM PKCS#1/7 +formats. +.PP +In the second form, with the \fB\fC\-i\fR option given, identifies a key and prints to +stderr information about its nature, size and fingerprint. +.SH EXAMPLES +.PP +Assume the following SSH\-format public key in \fB\fCid_ecdsa.pub\fR: +.PP +.RS +.nf +ecdsa\-sha2\-nistp256 AAAAE2VjZHNhLXNoYTI...9M/4c4= user@host +.fi +.RE +.PP +Identify it with \fB\fC\-i\fR: +.PP +.RS +.nf +$ sshpk\-conv \-i id_ecdsa.pub +id_ecdsa: a 256 bit ECDSA public key +ECDSA curve: nistp256 +Comment: user@host +Fingerprint: + SHA256:vCNX7eUkdvqqW0m4PoxQAZRv+CM4P4fS8+CbliAvS4k + 81:ad:d5:57:e5:6f:7d:a2:93:79:56:af:d7:c0:38:51 +.fi +.RE +.PP +Convert it to \fB\fCpkcs8\fR format, for use with e.g. OpenSSL: +.PP +.RS +.nf +$ sshpk\-conv \-t pkcs8 id_ecdsa +\-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAsA4R6N6AS3gzaPBeLjG2ObSgUsR +zOt+kWJoijLnw3ZMYUKmAx+lD0I5XUxdrPcs1vH5f3cn9TvRvO9L0z/hzg== +\-\-\-\-\-END PUBLIC KEY\-\-\-\-\- +.fi +.RE +.PP +Retrieve the public half of a private key: +.PP +.RS +.nf +$ openssl genrsa 2048 | sshpk\-conv \-t ssh \-c foo@bar +ssh\-rsa AAAAB3NzaC1yc2EAAA...koK7 foo@bar +.fi +.RE +.PP +Convert a private key to PKCS#1 (OpenSSL) format from a new\-style OpenSSH key +format (the \fB\fCssh\-keygen \-o\fR format): +.PP +.RS +.nf +$ ssh\-keygen \-o \-f foobar +\&... +$ sshpk\-conv \-p \-t pkcs1 foobar +\-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- +MIIDpAIBAAKCAQEA6T/GYJndb1TRH3+NL.... +\-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- +.fi +.RE +.SH OPTIONS +.TP +\fB\fC\-i, \-\-identify\fR +Instead of converting the key, output identifying information about it to +stderr, including its type, size and fingerprints. +.TP +\fB\fC\-p, \-\-private\fR +Treat the key as a private key instead of a public key (the default). If you +supply \fB\fCsshpk\-conv\fR with a private key and do not give this option, it will +extract only the public half of the key from it and work with that. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to take the key from instead of stdin. If a filename is supplied +as a positional argument, it is equivalent to using this option. +.TP +\fB\fC\-o PATH, \-\-out=PATH\fR +Output file name to use instead of stdout. +.PP +\fB\fC\-T FORMAT, \-\-informat=FORMAT\fR +.TP +\fB\fC\-t FORMAT, \-\-outformat=FORMAT\fR +Selects the input and output formats to be used (see FORMATS, below). +.TP +\fB\fC\-c TEXT, \-\-comment=TEXT\fR +Sets the key comment for the output file, if supported. +.SH FORMATS +.PP +Currently supported formats: +.TP +\fB\fCpem, pkcs1\fR +The standard PEM format used by older OpenSSH and most TLS libraries such as +OpenSSL. The classic \fB\fCid_rsa\fR file is usually in this format. It is an ASN.1 +encoded structure, base64\-encoded and placed between PEM headers. +.TP +\fB\fCssh\fR +The SSH public key text format (the format of an \fB\fCid_rsa.pub\fR file). A single +line, containing 3 space separated parts: the key type, key body and optional +key comment. +.TP +\fB\fCpkcs8\fR +A newer PEM format, usually used only for public keys by TLS libraries such +as OpenSSL. The ASN.1 structure is more generic than that of \fB\fCpkcs1\fR\&. +.TP +\fB\fCopenssh\fR +The new \fB\fCssh\-keygen \-o\fR format from OpenSSH. This can be mistaken for a PEM +encoding but is actually an OpenSSH internal format. +.TP +\fB\fCrfc4253\fR +The internal binary format of keys when sent over the wire in the SSH +protocol. This is also the format that the \fB\fCssh\-agent\fR uses in its protocol. +.SH SEE ALSO +.PP +.BR ssh-keygen (1), +.BR openssl (1) +.SH BUGS +.PP +Encrypted (password\-protected) keys are not supported. +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-sign.1 b/node_modules/sshpk/man/man1/sshpk-sign.1 new file mode 100644 index 0000000..749916b --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-sign.1 @@ -0,0 +1,81 @@ +.TH sshpk\-sign 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-sign \- sign data using an SSH key +.SH SYNOPSYS +.PP +\fB\fCsshpk\-sign\fR \-i KEYPATH [OPTION...] +.SH DESCRIPTION +.PP +Takes in arbitrary bytes, and signs them using an SSH private key. The key can +be of any type or format supported by the \fB\fCsshpk\fR library, including the +standard OpenSSH formats, as well as PEM PKCS#1 and PKCS#8. +.PP +The signature is printed out in Base64 encoding, unless the \fB\fC\-\-binary\fR or \fB\fC\-b\fR +option is given. +.SH EXAMPLES +.PP +Signing with default settings: +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa +MEUCIAMdLS/vXrrtWFepwe... +.fi +.RE +.PP +Signing in SSH (RFC 4253) format (rather than the default ASN.1): +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \-t ssh +AAAAFGVjZHNhLXNoYTIt... +.fi +.RE +.PP +Saving the binary signature to a file: +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \\ + \-o signature.bin \-b +$ cat signature.bin | base64 +MEUCIAMdLS/vXrrtWFepwe... +.fi +.RE +.SH OPTIONS +.TP +\fB\fC\-v, \-\-verbose\fR +Print extra information about the key and signature to stderr when signing. +.TP +\fB\fC\-b, \-\-binary\fR +Don't base64\-encode the signature before outputting it. +.TP +\fB\fC\-i KEY, \-\-identity=KEY\fR +Select the key to be used for signing. \fB\fCKEY\fR must be a relative or absolute +filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR library +is supported, including OpenSSH formats and standard PEM PKCS. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to sign instead of stdin. +.TP +\fB\fC\-o PATH, \-\-out=PATH\fR +Output file to save signature in instead of stdout. +.TP +\fB\fC\-H HASH, \-\-hash=HASH\fR +Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, +\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash +algorithms may be used (e.g. ED25519 keys can only use SHA\-512). +.TP +\fB\fC\-t FORMAT, \-\-format=FORMAT\fR +Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for +ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format +used with TLS and typically the standard in most non\-SSH libraries (e.g. +OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. +.SH SEE ALSO +.PP +.BR sshpk-verify (1) +.SH BUGS +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-verify.1 b/node_modules/sshpk/man/man1/sshpk-verify.1 new file mode 100644 index 0000000..f79169d --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-verify.1 @@ -0,0 +1,68 @@ +.TH sshpk\-verify 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-verify \- verify a signature on data using an SSH key +.SH SYNOPSYS +.PP +\fB\fCsshpk\-verify\fR \-i KEYPATH \-s SIGNATURE [OPTION...] +.SH DESCRIPTION +.PP +Takes in arbitrary bytes and a Base64\-encoded signature, and verifies that the +signature was produced by the private half of the given SSH public key. +.SH EXAMPLES +.PP +.RS +.nf +$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s MEUCIQCYp... +OK +$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s GARBAGE... +NOT OK +.fi +.RE +.SH EXIT STATUS +.TP +\fB\fC0\fR +Signature validates and matches the key. +.TP +\fB\fC1\fR +Signature is parseable and the correct length but does not match the key or +otherwise is invalid. +.TP +\fB\fC2\fR +The signature or key could not be parsed. +.TP +\fB\fC3\fR +Invalid commandline options were supplied. +.SH OPTIONS +.TP +\fB\fC\-v, \-\-verbose\fR +Print extra information about the key and signature to stderr when verifying. +.TP +\fB\fC\-i KEY, \-\-identity=KEY\fR +Select the key to be used for verification. \fB\fCKEY\fR must be a relative or +absolute filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR +library is supported, including OpenSSH formats and standard PEM PKCS. +.TP +\fB\fC\-s BASE64, \-\-signature=BASE64\fR +Supplies the base64\-encoded signature to be verified. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to verify instead of stdin. +.TP +\fB\fC\-H HASH, \-\-hash=HASH\fR +Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, +\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash +algorithms may be used (e.g. ED25519 keys can only use SHA\-512). +.TP +\fB\fC\-t FORMAT, \-\-format=FORMAT\fR +Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for +ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format +used with TLS and typically the standard in most non\-SSH libraries (e.g. +OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. +.SH SEE ALSO +.PP +.BR sshpk-sign (1) +.SH BUGS +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/package.json b/node_modules/sshpk/package.json new file mode 100644 index 0000000..9fbaa25 --- /dev/null +++ b/node_modules/sshpk/package.json @@ -0,0 +1,99 @@ +{ + "_args": [ + [ + "sshpk@1.16.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "sshpk@1.16.1", + "_id": "sshpk@1.16.1", + "_inBundle": false, + "_integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "_location": "/sshpk", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "sshpk@1.16.1", + "name": "sshpk", + "escapedName": "sshpk", + "rawSpec": "1.16.1", + "saveSpec": null, + "fetchSpec": "1.16.1" + }, + "_requiredBy": [ + "/http-signature" + ], + "_resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "_spec": "1.16.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Joyent, Inc" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "bugs": { + "url": "https://github.com/arekinath/node-sshpk/issues" + }, + "contributors": [ + { + "name": "Dave Eddy", + "email": "dave@daveeddy.com" + }, + { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + { + "name": "Alex Wilson", + "email": "alex@cooperi.net" + } + ], + "dependencies": { + "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" + }, + "description": "A library for finding and using SSH public keys", + "devDependencies": { + "benchmark": "^1.0.0", + "sinon": "^1.17.2", + "tape": "^3.5.0", + "temp": "^0.8.2" + }, + "directories": { + "bin": "./bin", + "lib": "./lib", + "man": "./man/man1" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/arekinath/node-sshpk#readme", + "license": "MIT", + "main": "lib/index.js", + "man": [ + "D:\\Cricbuzzz\\node_modules\\sshpk\\man\\man1\\sshpk-conv.1", + "D:\\Cricbuzzz\\node_modules\\sshpk\\man\\man1\\sshpk-sign.1", + "D:\\Cricbuzzz\\node_modules\\sshpk\\man\\man1\\sshpk-verify.1" + ], + "name": "sshpk", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/joyent/node-sshpk.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "version": "1.16.1" +} diff --git a/node_modules/statuses/HISTORY.md b/node_modules/statuses/HISTORY.md new file mode 100644 index 0000000..a1977b2 --- /dev/null +++ b/node_modules/statuses/HISTORY.md @@ -0,0 +1,65 @@ +1.5.0 / 2018-03-27 +================== + + * Add `103 Early Hints` + +1.4.0 / 2017-10-20 +================== + + * Add `STATUS_CODES` export + +1.3.1 / 2016-11-11 +================== + + * Fix return type in JSDoc + +1.3.0 / 2016-05-17 +================== + + * Add `421 Misdirected Request` + * perf: enable strict mode + +1.2.1 / 2015-02-01 +================== + + * Fix message for status 451 + - `451 Unavailable For Legal Reasons` + +1.2.0 / 2014-09-28 +================== + + * Add `208 Already Repored` + * Add `226 IM Used` + * Add `306 (Unused)` + * Add `415 Unable For Legal Reasons` + * Add `508 Loop Detected` + +1.1.1 / 2014-09-24 +================== + + * Add missing 308 to `codes.json` + +1.1.0 / 2014-09-21 +================== + + * Add `codes.json` for universal support + +1.0.4 / 2014-08-20 +================== + + * Package cleanup + +1.0.3 / 2014-06-08 +================== + + * Add 308 to `.redirect` category + +1.0.2 / 2014-03-13 +================== + + * Add `.retry` category + +1.0.1 / 2014-03-12 +================== + + * Initial release diff --git a/node_modules/statuses/LICENSE b/node_modules/statuses/LICENSE new file mode 100644 index 0000000..28a3161 --- /dev/null +++ b/node_modules/statuses/LICENSE @@ -0,0 +1,23 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/statuses/README.md b/node_modules/statuses/README.md new file mode 100644 index 0000000..0fe5720 --- /dev/null +++ b/node_modules/statuses/README.md @@ -0,0 +1,127 @@ +# Statuses + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +HTTP status utility for node. + +This module provides a list of status codes and messages sourced from +a few different projects: + + * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) + * The [Node.js project](https://nodejs.org/) + * The [NGINX project](https://www.nginx.com/) + * The [Apache HTTP Server project](https://httpd.apache.org/) + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install statuses +``` + +## API + + + +```js +var status = require('statuses') +``` + +### var code = status(Integer || String) + +If `Integer` or `String` is a valid HTTP code or status message, then the +appropriate `code` will be returned. Otherwise, an error will be thrown. + + + +```js +status(403) // => 403 +status('403') // => 403 +status('forbidden') // => 403 +status('Forbidden') // => 403 +status(306) // throws, as it's not supported by node.js +``` + +### status.STATUS_CODES + +Returns an object which maps status codes to status messages, in +the same format as the +[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). + +### status.codes + +Returns an array of all the status codes as `Integer`s. + +### var msg = status[code] + +Map of `code` to `status message`. `undefined` for invalid `code`s. + + + +```js +status[404] // => 'Not Found' +``` + +### var code = status[msg] + +Map of `status message` to `code`. `msg` can either be title-cased or +lower-cased. `undefined` for invalid `status message`s. + + + +```js +status['not found'] // => 404 +status['Not Found'] // => 404 +``` + +### status.redirect[code] + +Returns `true` if a status code is a valid redirect status. + + + +```js +status.redirect[200] // => undefined +status.redirect[301] // => true +``` + +### status.empty[code] + +Returns `true` if a status code expects an empty body. + + + +```js +status.empty[200] // => undefined +status.empty[204] // => true +status.empty[304] // => true +``` + +### status.retry[code] + +Returns `true` if you should retry the rest. + + + +```js +status.retry[501] // => undefined +status.retry[503] // => true +``` + +[npm-image]: https://img.shields.io/npm/v/statuses.svg +[npm-url]: https://npmjs.org/package/statuses +[node-version-image]: https://img.shields.io/node/v/statuses.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg +[travis-url]: https://travis-ci.org/jshttp/statuses +[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg +[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master +[downloads-image]: https://img.shields.io/npm/dm/statuses.svg +[downloads-url]: https://npmjs.org/package/statuses diff --git a/node_modules/statuses/codes.json b/node_modules/statuses/codes.json new file mode 100644 index 0000000..a09283a --- /dev/null +++ b/node_modules/statuses/codes.json @@ -0,0 +1,66 @@ +{ + "100": "Continue", + "101": "Switching Protocols", + "102": "Processing", + "103": "Early Hints", + "200": "OK", + "201": "Created", + "202": "Accepted", + "203": "Non-Authoritative Information", + "204": "No Content", + "205": "Reset Content", + "206": "Partial Content", + "207": "Multi-Status", + "208": "Already Reported", + "226": "IM Used", + "300": "Multiple Choices", + "301": "Moved Permanently", + "302": "Found", + "303": "See Other", + "304": "Not Modified", + "305": "Use Proxy", + "306": "(Unused)", + "307": "Temporary Redirect", + "308": "Permanent Redirect", + "400": "Bad Request", + "401": "Unauthorized", + "402": "Payment Required", + "403": "Forbidden", + "404": "Not Found", + "405": "Method Not Allowed", + "406": "Not Acceptable", + "407": "Proxy Authentication Required", + "408": "Request Timeout", + "409": "Conflict", + "410": "Gone", + "411": "Length Required", + "412": "Precondition Failed", + "413": "Payload Too Large", + "414": "URI Too Long", + "415": "Unsupported Media Type", + "416": "Range Not Satisfiable", + "417": "Expectation Failed", + "418": "I'm a teapot", + "421": "Misdirected Request", + "422": "Unprocessable Entity", + "423": "Locked", + "424": "Failed Dependency", + "425": "Unordered Collection", + "426": "Upgrade Required", + "428": "Precondition Required", + "429": "Too Many Requests", + "431": "Request Header Fields Too Large", + "451": "Unavailable For Legal Reasons", + "500": "Internal Server Error", + "501": "Not Implemented", + "502": "Bad Gateway", + "503": "Service Unavailable", + "504": "Gateway Timeout", + "505": "HTTP Version Not Supported", + "506": "Variant Also Negotiates", + "507": "Insufficient Storage", + "508": "Loop Detected", + "509": "Bandwidth Limit Exceeded", + "510": "Not Extended", + "511": "Network Authentication Required" +} diff --git a/node_modules/statuses/index.js b/node_modules/statuses/index.js new file mode 100644 index 0000000..4df469a --- /dev/null +++ b/node_modules/statuses/index.js @@ -0,0 +1,113 @@ +/*! + * statuses + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var codes = require('./codes.json') + +/** + * Module exports. + * @public + */ + +module.exports = status + +// status code to message map +status.STATUS_CODES = codes + +// array of status codes +status.codes = populateStatusesMap(status, codes) + +// status codes for redirects +status.redirect = { + 300: true, + 301: true, + 302: true, + 303: true, + 305: true, + 307: true, + 308: true +} + +// status codes for empty bodies +status.empty = { + 204: true, + 205: true, + 304: true +} + +// status codes for when you should retry the request +status.retry = { + 502: true, + 503: true, + 504: true +} + +/** + * Populate the statuses map for given codes. + * @private + */ + +function populateStatusesMap (statuses, codes) { + var arr = [] + + Object.keys(codes).forEach(function forEachCode (code) { + var message = codes[code] + var status = Number(code) + + // Populate properties + statuses[status] = message + statuses[message] = status + statuses[message.toLowerCase()] = status + + // Add to array + arr.push(status) + }) + + return arr +} + +/** + * Get the status code. + * + * Given a number, this will throw if it is not a known status + * code, otherwise the code will be returned. Given a string, + * the string will be parsed for a number and return the code + * if valid, otherwise will lookup the code assuming this is + * the status message. + * + * @param {string|number} code + * @returns {number} + * @public + */ + +function status (code) { + if (typeof code === 'number') { + if (!status[code]) throw new Error('invalid status code: ' + code) + return code + } + + if (typeof code !== 'string') { + throw new TypeError('code must be a number or string') + } + + // '403' + var n = parseInt(code, 10) + if (!isNaN(n)) { + if (!status[n]) throw new Error('invalid status code: ' + n) + return n + } + + n = status[code.toLowerCase()] + if (!n) throw new Error('invalid status message: "' + code + '"') + return n +} diff --git a/node_modules/statuses/package.json b/node_modules/statuses/package.json new file mode 100644 index 0000000..1eca12d --- /dev/null +++ b/node_modules/statuses/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "statuses@1.5.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "statuses@1.5.0", + "_id": "statuses@1.5.0", + "_inBundle": false, + "_integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "_location": "/statuses", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "statuses@1.5.0", + "name": "statuses", + "escapedName": "statuses", + "rawSpec": "1.5.0", + "saveSpec": null, + "fetchSpec": "1.5.0" + }, + "_requiredBy": [ + "/express", + "/finalhandler", + "/http-errors", + "/send" + ], + "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "_spec": "1.5.0", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/jshttp/statuses/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "description": "HTTP status utility", + "devDependencies": { + "csv-parse": "1.2.4", + "eslint": "4.19.1", + "eslint-config-standard": "11.0.0", + "eslint-plugin-import": "2.9.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "6.0.1", + "eslint-plugin-promise": "3.7.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "mocha": "1.21.5", + "raw-body": "2.3.2", + "stream-to-array": "2.3.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "index.js", + "codes.json", + "LICENSE" + ], + "homepage": "https://github.com/jshttp/statuses#readme", + "keywords": [ + "http", + "status", + "code" + ], + "license": "MIT", + "name": "statuses", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/statuses.git" + }, + "scripts": { + "build": "node scripts/build.js", + "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "update": "npm run fetch && npm run build" + }, + "version": "1.5.0" +} diff --git a/node_modules/stream-spigot/.npmignore b/node_modules/stream-spigot/.npmignore new file mode 100644 index 0000000..6a59b3d --- /dev/null +++ b/node_modules/stream-spigot/.npmignore @@ -0,0 +1,2 @@ +node_modules +.tern-port diff --git a/node_modules/stream-spigot/LICENSE b/node_modules/stream-spigot/LICENSE new file mode 100644 index 0000000..540900f --- /dev/null +++ b/node_modules/stream-spigot/LICENSE @@ -0,0 +1,9 @@ +(The MIT License) + +Copyright (c) Bryce B. Baril + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/stream-spigot/README.md b/node_modules/stream-spigot/README.md new file mode 100644 index 0000000..57f7c63 --- /dev/null +++ b/node_modules/stream-spigot/README.md @@ -0,0 +1,97 @@ +Stream Spigot +============= + +[![NPM](https://nodei.co/npm/stream-spigot.png)](https://nodei.co/npm/stream-spigot/) + +[![david-dm](https://david-dm.org/brycebaril/node-stream-spigot.png)](https://david-dm.org/brycebaril/node-stream-spigot/) +[![david-dm](https://david-dm.org/brycebaril/node-stream-spigot/dev-status.png)](https://david-dm.org/brycebaril/node-stream-spigot#info=devDependencies/) + + +A generator for (streams2) Readable streams, useful for testing or converting simple lazy functions into Readable streams, or just creating Readable streams without all the boilerplate. + +```javascript +var spigot = require("stream-spigot") + +spigot.array(["ABCDEFG"]).pipe(process.stdout) +// ABCDEFG + +spigot.array(["ABC", "DEF", "G"]).pipe(process.stdout) +// same as: (short form) +spigot(["ABC", "DEF", "G"]).pipe(process.stdout) +// ABCDEFG + + +// Create a stream out of a synchronous generator: +var count = 0 +function gen() { + if (count++ < 5) { + return {val: count} + } +} + +spigot.sync({objectMode: true}, gen).pipe(...) +/* +{val: 1} +{val: 2} +{val: 3} +{val: 4} +{val: 5} +*/ + + +// Create a more traditional Readable stream: +var source = spigot({objectMode: true}, function () { + var self = this + iterator.next(function (err, value) { + if (err) return self.emit("error", err) + self.push(value) + }) +}) + +source.pipe(...) + +``` + +Usage +===== + +spigot([options,] _read) +--- + +Create a Readable stream instance with the specified _read method. Your _read method should follow the normal [stream.Readable _read](http://nodejs.org/api/stream.html#stream_readable_read_size_1) syntax. (I.e. it should call `this.push(chunk)`) + +spigot([options, ], array) +--- + +Create a Readable stream instance that will emit each member of the specified array until it is consumed. Creates a copy of the given array and consumes that -- if this will cause memory issues, consider implementing your own _read function to consume your array. + +var Spigot = spigot.ctor([options,], _read) +--- + +Same as the above except provides a constructor for your Readable class. You can then create instances by using either `var source = new Spigot()` or `var source = Spigot()`. + +var Spigot = spigot.ctor([options,], array) +--- + +Same as the above except provides a constructor for your Readable class. You can then create instances by using either `var source = new Spigot()` or `var source = Spigot()`. + +spigot.array([options, ], array) +--- + +A manual version of the above to specify an array. + + +spigot.sync([options,] fn) +------------------------ + +Create a readable instance providing a synchronous generator function. It will internally wrap your synchronous function as an async function. + +Options +------- + +Accepts standard [readable-stream](http://npmjs.org/api/stream.html) options. + +LICENSE +======= + +MIT diff --git a/node_modules/stream-spigot/index.js b/node_modules/stream-spigot/index.js new file mode 100644 index 0000000..9557f04 --- /dev/null +++ b/node_modules/stream-spigot/index.js @@ -0,0 +1,82 @@ +module.exports = make +module.exports.ctor = ctor + +module.exports.array = array +module.exports.sync = sync + +const Readable = require("readable-stream/readable") + , inherits = require("util").inherits + , xtend = require("xtend") + , setImmediate = global.setImmediate || process.nextTick + +function ctor (options, _read) { + if (_read == null) { + _read = options + options = {} + } + + if (Array.isArray(_read)) + _read = _shifter(_read) + + if (typeof _read != "function") + throw new Error("You must implement an _read function for Spigot") + + function Spigot (override) { + if (!(this instanceof Spigot)) + return new Spigot(override) + + this.options = xtend(options, override) + Readable.call(this, this.options) + } + + inherits(Spigot, Readable) + + Spigot.prototype._read = _read + + return Spigot +} + +function make(options, _read) { + return ctor(options, _read)() +} + +function _shifter(array) { + var copy = array.slice(0) + return function _shift() { + var self = this + setImmediate(function later() { + var val = copy.shift() + if (val === undefined) { + val = null + } + self.push(val) + }) + } +} + +function array(options, array) { + if (Array.isArray(options)) { + array = options + options = {} + } + + return make(options, _shifter(array)) +} + +function sync(options, fn) { + if (typeof options == "function") { + fn = options + options = {} + } + var toAsync = function toAsync() { + var self = this + setImmediate(function later() { + var val = fn() + if (val === undefined) { + val = null + } + self.push(val) + }) + } + return make(options, toAsync) +} diff --git a/node_modules/stream-spigot/package.json b/node_modules/stream-spigot/package.json new file mode 100644 index 0000000..bc9531a --- /dev/null +++ b/node_modules/stream-spigot/package.json @@ -0,0 +1,65 @@ +{ + "_from": "stream-spigot@~3.0.3", + "_id": "stream-spigot@3.0.6", + "_inBundle": false, + "_integrity": "sha1-34faJjAiFoKxPZTx72OuVqTXzvo=", + "_location": "/stream-spigot", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "stream-spigot@~3.0.3", + "name": "stream-spigot", + "escapedName": "stream-spigot", + "rawSpec": "~3.0.3", + "saveSpec": null, + "fetchSpec": "~3.0.3" + }, + "_requiredBy": [ + "/cool-ascii-faces" + ], + "_resolved": "https://registry.npmjs.org/stream-spigot/-/stream-spigot-3.0.6.tgz", + "_shasum": "df87da2630221682b13d94f1ef63ae56a4d7cefa", + "_spec": "stream-spigot@~3.0.3", + "_where": "D:\\Cricbuzzz\\node_modules\\cool-ascii-faces", + "author": { + "name": "Bryce B. Baril" + }, + "browser": { + "readable-stream/readable": "_stream_readable" + }, + "bugs": { + "url": "https://github.com/brycebaril/node-stream-spigot/issues" + }, + "bundleDependencies": false, + "dependencies": { + "readable-stream": "~2.2.6", + "xtend": "~4.0.0" + }, + "deprecated": false, + "description": "A readable stream generator, useful for testing or converting simple functions into Readable streams.", + "devDependencies": { + "concat-stream": "~1.6.0", + "tape": "~4.6.3" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/brycebaril/node-stream-spigot#readme", + "keywords": [ + "streams2", + "testing", + "readable" + ], + "license": "MIT", + "main": "index.js", + "name": "stream-spigot", + "repository": { + "type": "git", + "url": "git+https://github.com/brycebaril/node-stream-spigot.git" + }, + "scripts": { + "test": "node test/" + }, + "version": "3.0.6" +} diff --git a/node_modules/stream-spigot/test/index.js b/node_modules/stream-spigot/test/index.js new file mode 100644 index 0000000..15b8e07 --- /dev/null +++ b/node_modules/stream-spigot/test/index.js @@ -0,0 +1,185 @@ +var test = require("tape").test +var concat = require("concat-stream") + +var spigot = require("../") + +test("simple", function (t) { + t.plan(1) + + var content = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + function match(d) { + t.equals(d.toString(), content) + } + + var s = spigot.array([content]).pipe(concat(match)) +}) + +test("chunked", function (t) { + t.plan(1) + + var content = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + function match(d) { + t.equals(d.toString(), content) + } + + var s = spigot.array(["ABCDEFG","HIJKLMNOPQ","RSTUVWXYZ"]).pipe(concat(match)) +}) + +test("chunked auto-detect array", function (t) { + t.plan(1) + + var content = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + function match(d) { + t.equals(d.toString(), content) + } + + var s = spigot(["ABCDEFG","HIJKLMNOPQ","RSTUVWXYZ"]).pipe(concat(match)) +}) + +test("chunked auto-detect array objectMode", function (t) { + t.plan(1) + + var input = [{cats: "meow", dogs: "woof"}, {birds: "tweet", elephant: "toot"}] + + function match(d) { + t.deepEquals(d, input) + } + + var s = spigot.array({objectMode: true}, input).pipe(concat(match)) +}) + +test("null in array", function (t) { + t.plan(1) + + var content = "AB" + + function match(d) { + t.equals(d.toString(), content) + } + + var s = spigot.array(["A", "B", null, "C"]).pipe(concat(match)) +}) + +test("objectMode", function (t) { + t.plan(1) + + var input = {cats: "meow", dogs: "woof"} + + function match(d) { + t.equals(d[0], input) + } + + var s = spigot.array({objectMode: true}, [input]).pipe(concat(match)) +}) + +test("function", function (t) { + t.plan(1) + + var c = 0 + var fn = function () { + if (c++ < 5) { + return c.toString() + } + } + + function match(d) { + t.equals(d.toString(), "12345") + } + + var s = spigot.sync(fn).pipe(concat(match)) +}) + +test("async", function (t) { + t.plan(1) + + var c = 0 + var fn = function (cb) { + var self = this + if (c++ < 5) { + setTimeout(function () { + self.push(c.toString()) + }, 10) + } + else { + setTimeout(function () { + self.push(null) + }, 10) + } + } + + function match(d) { + t.equals(d.toString(), "12345") + } + + var s = spigot(fn).pipe(concat(match)) +}) + +test("async objectMode", function (t) { + t.plan(1) + + var c = 0 + var fn = function (cb) { + var self = this + if (c++ < 5) { + setTimeout(function () { + self.push(c) + }, 10) + } + else { + setTimeout(function () { + self.push(null) + }, 10) + } + } + + function match(d) { + t.deepEquals(d, [1, 2, 3, 4, 5]) + } + + var s = spigot({objectMode: true}, fn).pipe(concat({encoding: "object"}, match)) +}) + +test("async ctor", function (t) { + t.plan(1) + + var c = 0 + var fn = function (cb) { + var self = this + if (c++ < 5) { + setTimeout(function () { + self.push(c.toString()) + }, 10) + } + else { + setTimeout(function () { + self.push(null) + }, 10) + } + } + + function match(d) { + t.equals(d.toString(), "12345") + } + var spig = spigot.ctor(fn) + var s = spig().pipe(concat(match)) +}) + +test("function objectMode", function (t) { + t.plan(1) + + var c = 0 + var fn = function () { + if (c++ < 5) { + return {val: c} + } + } + + function match(d) { + t.deepEquals(d, [{val: 1}, {val: 2}, {val: 3}, {val: 4}, {val: 5}]) + } + + var s = spigot.sync({objectMode: true}, fn).pipe(concat(match)) +}) diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts new file mode 100644 index 0000000..12b5309 --- /dev/null +++ b/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 0000000..f4d261a --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/string-width/license b/node_modules/string-width/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json new file mode 100644 index 0000000..5d061e4 --- /dev/null +++ b/node_modules/string-width/package.json @@ -0,0 +1,91 @@ +{ + "_from": "string-width@^4.2.2", + "_id": "string-width@4.2.3", + "_inBundle": false, + "_integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "_location": "/string-width", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string-width@^4.2.2", + "name": "string-width", + "escapedName": "string-width", + "rawSpec": "^4.2.2", + "saveSpec": null, + "fetchSpec": "^4.2.2" + }, + "_requiredBy": [ + "/ansi-align", + "/boxen", + "/widest-line", + "/wrap-ansi" + ], + "_resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "_shasum": "269c7117d27b05ad2e536830a8ec895ef9c6d010", + "_spec": "string-width@^4.2.2", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/string-width/issues" + }, + "bundleDependencies": false, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "deprecated": false, + "description": "Get the visual width of a string - the number of columns required to display it", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/string-width#readme", + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "license": "MIT", + "name": "string-width", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/string-width.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.2.3" +} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md new file mode 100644 index 0000000..bdd3141 --- /dev/null +++ b/node_modules/string-width/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/string_decoder/.npmignore b/node_modules/string_decoder/.npmignore new file mode 100644 index 0000000..206320c --- /dev/null +++ b/node_modules/string_decoder/.npmignore @@ -0,0 +1,2 @@ +build +test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE new file mode 100644 index 0000000..778edb2 --- /dev/null +++ b/node_modules/string_decoder/LICENSE @@ -0,0 +1,48 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md new file mode 100644 index 0000000..dc3a2d2 --- /dev/null +++ b/node_modules/string_decoder/README.md @@ -0,0 +1,28 @@ +# string_decoder + +***Node-core v7.0.0 string_decoder for userland*** + + +[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) +[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) + + +```bash +npm install --save string_decoder +``` + +***Node-core string_decoderstring_decoder for userland*** + +This package is a mirror of the string_decoder implementation in Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v7.8.0/docs/api/). + +As of version 1.0.0 **string_decoder** uses semantic versioning. + +## Previous versions + +Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. + +## Update + +The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. diff --git a/node_modules/string_decoder/lib/string_decoder.js b/node_modules/string_decoder/lib/string_decoder.js new file mode 100644 index 0000000..26fb94c --- /dev/null +++ b/node_modules/string_decoder/lib/string_decoder.js @@ -0,0 +1,272 @@ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return -1; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'.repeat(p); + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'.repeat(p + 1); + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'.repeat(p + 2); + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character for each buffered byte of a (partial) +// character needs to be added to the output. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed); + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} \ No newline at end of file diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json new file mode 100644 index 0000000..35881fa --- /dev/null +++ b/node_modules/string_decoder/package.json @@ -0,0 +1,56 @@ +{ + "_from": "string_decoder@~1.0.0", + "_id": "string_decoder@1.0.3", + "_inBundle": false, + "_integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "_location": "/string_decoder", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string_decoder@~1.0.0", + "name": "string_decoder", + "escapedName": "string_decoder", + "rawSpec": "~1.0.0", + "saveSpec": null, + "fetchSpec": "~1.0.0" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "_shasum": "0fc67d7c141825de94282dd536bec6b9bce860ab", + "_spec": "string_decoder@~1.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\readable-stream", + "bugs": { + "url": "https://github.com/rvagg/string_decoder/issues" + }, + "bundleDependencies": false, + "dependencies": { + "safe-buffer": "~5.1.0" + }, + "deprecated": false, + "description": "The string_decoder module from Node core", + "devDependencies": { + "babel-polyfill": "^6.23.0", + "tap": "~0.4.8" + }, + "homepage": "https://github.com/rvagg/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT", + "main": "lib/string_decoder.js", + "name": "string_decoder", + "repository": { + "type": "git", + "url": "git://github.com/rvagg/string_decoder.git" + }, + "scripts": { + "test": "tap test/parallel/*.js && node test/verify-dependencies" + }, + "version": "1.0.3" +} diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000..907fccc --- /dev/null +++ b/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 0000000..9a593df --- /dev/null +++ b/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 0000000..7a8bb9d --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,87 @@ +{ + "_from": "strip-ansi@^6.0.1", + "_id": "strip-ansi@6.0.1", + "_inBundle": false, + "_integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "_location": "/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^6.0.1", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^6.0.1", + "saveSpec": null, + "fetchSpec": "^6.0.1" + }, + "_requiredBy": [ + "/string-width", + "/wrap-ansi" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "_shasum": "9e26c63d30f53443e9489495b2105d37b67a85d9", + "_spec": "strip-ansi@^6.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "deprecated": false, + "description": "Strip ANSI escape codes from a string", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "6.0.1" +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000..7c4b56d --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js new file mode 100644 index 0000000..4e6576e --- /dev/null +++ b/node_modules/strip-json-comments/index.js @@ -0,0 +1,70 @@ +'use strict'; +var singleComment = 1; +var multiComment = 2; + +function stripWithoutWhitespace() { + return ''; +} + +function stripWithWhitespace(str, start, end) { + return str.slice(start, end).replace(/\S/g, ' '); +} + +module.exports = function (str, opts) { + opts = opts || {}; + + var currentChar; + var nextChar; + var insideString = false; + var insideComment = false; + var offset = 0; + var ret = ''; + var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; + + for (var i = 0; i < str.length; i++) { + currentChar = str[i]; + nextChar = str[i + 1]; + + if (!insideComment && currentChar === '"') { + var escaped = str[i - 1] === '\\' && str[i - 2] !== '\\'; + if (!escaped) { + insideString = !insideString; + } + } + + if (insideString) { + continue; + } + + if (!insideComment && currentChar + nextChar === '//') { + ret += str.slice(offset, i); + offset = i; + insideComment = singleComment; + i++; + } else if (insideComment === singleComment && currentChar + nextChar === '\r\n') { + i++; + insideComment = false; + ret += strip(str, offset, i); + offset = i; + continue; + } else if (insideComment === singleComment && currentChar === '\n') { + insideComment = false; + ret += strip(str, offset, i); + offset = i; + } else if (!insideComment && currentChar + nextChar === '/*') { + ret += str.slice(offset, i); + offset = i; + insideComment = multiComment; + i++; + continue; + } else if (insideComment === multiComment && currentChar + nextChar === '*/') { + i++; + insideComment = false; + ret += strip(str, offset, i + 1); + offset = i + 1; + continue; + } + } + + return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset)); +}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/strip-json-comments/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json new file mode 100644 index 0000000..87f3f33 --- /dev/null +++ b/node_modules/strip-json-comments/package.json @@ -0,0 +1,74 @@ +{ + "_from": "strip-json-comments@~2.0.1", + "_id": "strip-json-comments@2.0.1", + "_inBundle": false, + "_integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "_location": "/strip-json-comments", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-json-comments@~2.0.1", + "name": "strip-json-comments", + "escapedName": "strip-json-comments", + "rawSpec": "~2.0.1", + "saveSpec": null, + "fetchSpec": "~2.0.1" + }, + "_requiredBy": [ + "/rc" + ], + "_resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "_shasum": "3c531942e908c2697c0ec344858c286c7ca0a60a", + "_spec": "strip-json-comments@~2.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\rc", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-json-comments/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Strip comments from JSON. Lets you use comments in your JSON files!", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/strip-json-comments#readme", + "keywords": [ + "json", + "strip", + "remove", + "delete", + "trim", + "comments", + "multiline", + "parse", + "config", + "configuration", + "conf", + "settings", + "util", + "env", + "environment" + ], + "license": "MIT", + "name": "strip-json-comments", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-json-comments.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.1" +} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md new file mode 100644 index 0000000..0ee58df --- /dev/null +++ b/node_modules/strip-json-comments/readme.md @@ -0,0 +1,64 @@ +# strip-json-comments [![Build Status](https://travis-ci.org/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-json-comments) + +> Strip comments from JSON. Lets you use comments in your JSON files! + +This is now possible: + +```js +{ + // rainbows + "unicorn": /* ❤ */ "cake" +} +``` + +It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +Also available as a [gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. + + +## Install + +``` +$ npm install --save strip-json-comments +``` + + +## Usage + +```js +const json = '{/*rainbows*/"unicorn":"cake"}'; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` + + +## API + +### stripJsonComments(input, [options]) + +#### input + +Type: `string` + +Accepts a string with JSON and returns a string without comments. + +#### options + +##### whitespace + +Type: `boolean` +Default: `true` + +Replace comments with whitespace instead of stripping them entirely. + + +## Related + +- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module +- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/supports-color/browser.js b/node_modules/supports-color/browser.js new file mode 100644 index 0000000..62afa3a --- /dev/null +++ b/node_modules/supports-color/browser.js @@ -0,0 +1,5 @@ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; diff --git a/node_modules/supports-color/index.js b/node_modules/supports-color/index.js new file mode 100644 index 0000000..1704131 --- /dev/null +++ b/node_modules/supports-color/index.js @@ -0,0 +1,131 @@ +'use strict'; +const os = require('os'); +const hasFlag = require('has-flag'); + +const env = process.env; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(stream) { + if (forceColor === false) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } + + const min = forceColor ? 1 : 0; + + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows + // release that supports 256 colors. Windows 10 build 14931 is the first release + // that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + if (env.TERM === 'dumb') { + return min; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; diff --git a/node_modules/supports-color/license b/node_modules/supports-color/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/supports-color/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/supports-color/package.json b/node_modules/supports-color/package.json new file mode 100644 index 0000000..d540bc9 --- /dev/null +++ b/node_modules/supports-color/package.json @@ -0,0 +1,85 @@ +{ + "_from": "supports-color@^5.5.0", + "_id": "supports-color@5.5.0", + "_inBundle": false, + "_integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "_location": "/supports-color", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "supports-color@^5.5.0", + "name": "supports-color", + "escapedName": "supports-color", + "rawSpec": "^5.5.0", + "saveSpec": null, + "fetchSpec": "^5.5.0" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "_shasum": "e2e69a44ac8772f78a1ec0b35b689df6530efc8f", + "_spec": "supports-color@^5.5.0", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/chalk/supports-color/issues" + }, + "bundleDependencies": false, + "dependencies": { + "has-flag": "^3.0.0" + }, + "deprecated": false, + "description": "Detect whether a terminal supports color", + "devDependencies": { + "ava": "^0.25.0", + "import-fresh": "^2.0.0", + "xo": "^0.20.0" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js", + "browser.js" + ], + "homepage": "https://github.com/chalk/supports-color#readme", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect", + "truecolor", + "16m" + ], + "license": "MIT", + "name": "supports-color", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/supports-color.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "5.5.0" +} diff --git a/node_modules/supports-color/readme.md b/node_modules/supports-color/readme.md new file mode 100644 index 0000000..f6e4019 --- /dev/null +++ b/node_modules/supports-color/readme.md @@ -0,0 +1,66 @@ +# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) + +> Detect whether a terminal supports color + + +## Install + +``` +$ npm install supports-color +``` + + +## Usage + +```js +const supportsColor = require('supports-color'); + +if (supportsColor.stdout) { + console.log('Terminal stdout supports color'); +} + +if (supportsColor.stdout.has256) { + console.log('Terminal stdout supports 256 colors'); +} + +if (supportsColor.stderr.has16m) { + console.log('Terminal stderr supports 16 million colors (truecolor)'); +} +``` + + +## API + +Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. + +The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: + +- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) +- `.level = 2` and `.has256 = true`: 256 color support +- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) + + +## Info + +It obeys the `--color` and `--no-color` CLI flags. + +Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add the environment variable `FORCE_COLOR=1` to forcefully enable color or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. + +Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. + + +## Related + +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff --git a/node_modules/to-readable-stream/index.js b/node_modules/to-readable-stream/index.js new file mode 100644 index 0000000..554bfa5 --- /dev/null +++ b/node_modules/to-readable-stream/index.js @@ -0,0 +1,11 @@ +'use strict'; +const {Readable} = require('stream'); + +module.exports = input => ( + new Readable({ + read() { + this.push(input); + this.push(null); + } + }) +); diff --git a/node_modules/to-readable-stream/license b/node_modules/to-readable-stream/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/to-readable-stream/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/to-readable-stream/package.json b/node_modules/to-readable-stream/package.json new file mode 100644 index 0000000..444018a --- /dev/null +++ b/node_modules/to-readable-stream/package.json @@ -0,0 +1,72 @@ +{ + "_from": "to-readable-stream@^1.0.0", + "_id": "to-readable-stream@1.0.0", + "_inBundle": false, + "_integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "_location": "/to-readable-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "to-readable-stream@^1.0.0", + "name": "to-readable-stream", + "escapedName": "to-readable-stream", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/got" + ], + "_resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "_shasum": "ce0aa0c2f3df6adf852efb404a783e77c0475771", + "_spec": "to-readable-stream@^1.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\got", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/to-readable-stream/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Convert a string/Buffer/Uint8Array to a readable stream", + "devDependencies": { + "ava": "*", + "get-stream": "^3.0.0", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/to-readable-stream#readme", + "keywords": [ + "stream", + "readablestream", + "string", + "buffer", + "uint8array", + "from", + "into", + "to", + "transform", + "convert", + "readable", + "pull" + ], + "license": "MIT", + "name": "to-readable-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/to-readable-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/to-readable-stream/readme.md b/node_modules/to-readable-stream/readme.md new file mode 100644 index 0000000..fc207c5 --- /dev/null +++ b/node_modules/to-readable-stream/readme.md @@ -0,0 +1,42 @@ +# to-readable-stream [![Build Status](https://travis-ci.org/sindresorhus/to-readable-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/to-readable-stream) + +> Convert a string/Buffer/Uint8Array to a [readable stream](https://nodejs.org/api/stream.html#stream_readable_streams) + + +## Install + +``` +$ npm install to-readable-stream +``` + + +## Usage + +```js +const toReadableStream = require('to-readable-stream'); + +toReadableStream('🦄🌈').pipe(process.stdout); +``` + + +## API + +### toReadableStream(input) + +Returns a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_readable_streams). + +#### input + +Type: `string` `Buffer` `Uint8Array` + +Value to convert to a stream. + + +## Related + +- [into-stream](https://github.com/sindresorhus/into-stream) - More advanced version of this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/to-regex-range/LICENSE b/node_modules/to-regex-range/LICENSE new file mode 100644 index 0000000..7cccaf9 --- /dev/null +++ b/node_modules/to-regex-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/to-regex-range/README.md b/node_modules/to-regex-range/README.md new file mode 100644 index 0000000..38887da --- /dev/null +++ b/node_modules/to-regex-range/README.md @@ -0,0 +1,305 @@ +# to-regex-range [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range) + +> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save to-regex-range +``` + +
      +What does this do? + +
      + +This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers. + +**Example** + +```js +const toRegexRange = require('to-regex-range'); +const regex = new RegExp(toRegexRange('15', '95')); +``` + +A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string). + +
      + +
      + +
      +Why use this library? + +
      + +### Convenience + +Creating regular expressions for matching numbers gets deceptively complicated pretty fast. + +For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc: + +* regex for matching `1` => `/1/` (easy enough) +* regex for matching `1` through `5` => `/[1-5]/` (not bad...) +* regex for matching `1` or `5` => `/(1|5)/` (still easy...) +* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...) +* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...) +* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...) +* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!) + +The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation. + +**Learn more** + +If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful. + +### Heavily tested + +As of April 07, 2019, this library runs [>1m test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are correct. + +Tests run in ~280ms on my MacBook Pro, 2.5 GHz Intel Core i7. + +### Optimized + +Generated regular expressions are optimized: + +* duplicate sequences and character classes are reduced using quantifiers +* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative +* uses fragment caching to avoid processing the same exact string more than once + +
      + +
      + +## Usage + +Add this library to your javascript application with the following line of code + +```js +const toRegexRange = require('to-regex-range'); +``` + +The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers). + +```js +const source = toRegexRange('15', '95'); +//=> 1[5-9]|[2-8][0-9]|9[0-5] + +const regex = new RegExp(`^${source}$`); +console.log(regex.test('14')); //=> false +console.log(regex.test('50')); //=> true +console.log(regex.test('94')); //=> true +console.log(regex.test('96')); //=> false +``` + +## Options + +### options.capture + +**Type**: `boolean` + +**Deafault**: `undefined` + +Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges. + +```js +console.log(toRegexRange('-10', '10')); +//=> -[1-9]|-?10|[0-9] + +console.log(toRegexRange('-10', '10', { capture: true })); +//=> (-[1-9]|-?10|[0-9]) +``` + +### options.shorthand + +**Type**: `boolean` + +**Deafault**: `undefined` + +Use the regex shorthand for `[0-9]`: + +```js +console.log(toRegexRange('0', '999999')); +//=> [0-9]|[1-9][0-9]{1,5} + +console.log(toRegexRange('0', '999999', { shorthand: true })); +//=> \d|[1-9]\d{1,5} +``` + +### options.relaxZeros + +**Type**: `boolean` + +**Default**: `true` + +This option relaxes matching for leading zeros when when ranges are zero-padded. + +```js +const source = toRegexRange('-0010', '0010'); +const regex = new RegExp(`^${source}$`); +console.log(regex.test('-10')); //=> true +console.log(regex.test('-010')); //=> true +console.log(regex.test('-0010')); //=> true +console.log(regex.test('10')); //=> true +console.log(regex.test('010')); //=> true +console.log(regex.test('0010')); //=> true +``` + +When `relaxZeros` is false, matching is strict: + +```js +const source = toRegexRange('-0010', '0010', { relaxZeros: false }); +const regex = new RegExp(`^${source}$`); +console.log(regex.test('-10')); //=> false +console.log(regex.test('-010')); //=> false +console.log(regex.test('-0010')); //=> true +console.log(regex.test('10')); //=> false +console.log(regex.test('010')); //=> false +console.log(regex.test('0010')); //=> true +``` + +## Examples + +| **Range** | **Result** | **Compile time** | +| --- | --- | --- | +| `toRegexRange(-10, 10)` | `-[1-9]\|-?10\|[0-9]` | _132μs_ | +| `toRegexRange(-100, -10)` | `-1[0-9]\|-[2-9][0-9]\|-100` | _50μs_ | +| `toRegexRange(-100, 100)` | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]` | _42μs_ | +| `toRegexRange(001, 100)` | `0{0,2}[1-9]\|0?[1-9][0-9]\|100` | _109μs_ | +| `toRegexRange(001, 555)` | `0{0,2}[1-9]\|0?[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _51μs_ | +| `toRegexRange(0010, 1000)` | `0{0,2}1[0-9]\|0{0,2}[2-9][0-9]\|0?[1-9][0-9]{2}\|1000` | _31μs_ | +| `toRegexRange(1, 50)` | `[1-9]\|[1-4][0-9]\|50` | _24μs_ | +| `toRegexRange(1, 55)` | `[1-9]\|[1-4][0-9]\|5[0-5]` | _23μs_ | +| `toRegexRange(1, 555)` | `[1-9]\|[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _30μs_ | +| `toRegexRange(1, 5555)` | `[1-9]\|[1-9][0-9]{1,2}\|[1-4][0-9]{3}\|5[0-4][0-9]{2}\|55[0-4][0-9]\|555[0-5]` | _43μs_ | +| `toRegexRange(111, 555)` | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _38μs_ | +| `toRegexRange(29, 51)` | `29\|[34][0-9]\|5[01]` | _24μs_ | +| `toRegexRange(31, 877)` | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]` | _32μs_ | +| `toRegexRange(5, 5)` | `5` | _8μs_ | +| `toRegexRange(5, 6)` | `5\|6` | _11μs_ | +| `toRegexRange(1, 2)` | `1\|2` | _6μs_ | +| `toRegexRange(1, 5)` | `[1-5]` | _15μs_ | +| `toRegexRange(1, 10)` | `[1-9]\|10` | _22μs_ | +| `toRegexRange(1, 100)` | `[1-9]\|[1-9][0-9]\|100` | _25μs_ | +| `toRegexRange(1, 1000)` | `[1-9]\|[1-9][0-9]{1,2}\|1000` | _31μs_ | +| `toRegexRange(1, 10000)` | `[1-9]\|[1-9][0-9]{1,3}\|10000` | _34μs_ | +| `toRegexRange(1, 100000)` | `[1-9]\|[1-9][0-9]{1,4}\|100000` | _36μs_ | +| `toRegexRange(1, 1000000)` | `[1-9]\|[1-9][0-9]{1,5}\|1000000` | _42μs_ | +| `toRegexRange(1, 10000000)` | `[1-9]\|[1-9][0-9]{1,6}\|10000000` | _42μs_ | + +## Heads up! + +**Order of arguments** + +When the `min` is larger than the `max`, values will be flipped to create a valid range: + +```js +toRegexRange('51', '29'); +``` + +Is effectively flipped to: + +```js +toRegexRange('29', '51'); +//=> 29|[3-4][0-9]|5[0-1] +``` + +**Steps / increments** + +This library does not support steps (increments). A pr to add support would be welcome. + +## History + +### v2.0.0 - 2017-04-21 + +**New features** + +Adds support for zero-padding! + +### v1.0.0 + +**Optimizations** + +Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching. + +## Attribution + +Inspired by the python library [range-regex](https://github.com/dimka665/range-regex). + +## About + +
      +Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
      + +
      +Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
      + +
      +Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
      + +### Related projects + +You might also be interested in these projects: + +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by micromatch.") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") +* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") +* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 63 | [jonschlinkert](https://github.com/jonschlinkert) | +| 3 | [doowb](https://github.com/doowb) | +| 2 | [realityking](https://github.com/realityking) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +Please consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)! + + + + + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 07, 2019._ \ No newline at end of file diff --git a/node_modules/to-regex-range/index.js b/node_modules/to-regex-range/index.js new file mode 100644 index 0000000..77fbace --- /dev/null +++ b/node_modules/to-regex-range/index.js @@ -0,0 +1,288 @@ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +const isNumber = require('is-number'); + +const toRegexRange = (min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } + + if (max === void 0 || min === max) { + return String(min); + } + + if (isNumber(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } + + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } + + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + + let a = Math.min(min, max); + let b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives, opts); + + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; + } + + toRegexRange.cache[cacheKey] = state; + return state.result; +}; + +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; + let onlyPositive = filterPatterns(pos, neg, '', false, options) || []; + let intersected = filterPatterns(neg, pos, '-?', true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + + let stop = countNines(min, nines); + let stops = new Set([max]); + + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops = [...stops]; + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit, options); + + } else { + count++; + } + } + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; + } + + return { pattern, count: [count], digits }; +} + +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + + for (let ele of arr) { + let { string } = ele; + + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } + + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} + +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} + +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; +} + +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} + +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} + +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} + +/** + * Cache + */ + +toRegexRange.cache = {}; +toRegexRange.clearCache = () => (toRegexRange.cache = {}); + +/** + * Expose `toRegexRange` + */ + +module.exports = toRegexRange; diff --git a/node_modules/to-regex-range/package.json b/node_modules/to-regex-range/package.json new file mode 100644 index 0000000..ba4c033 --- /dev/null +++ b/node_modules/to-regex-range/package.json @@ -0,0 +1,125 @@ +{ + "_from": "to-regex-range@^5.0.1", + "_id": "to-regex-range@5.0.1", + "_inBundle": false, + "_integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "_location": "/to-regex-range", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "to-regex-range@^5.0.1", + "name": "to-regex-range", + "escapedName": "to-regex-range", + "rawSpec": "^5.0.1", + "saveSpec": null, + "fetchSpec": "^5.0.1" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "_shasum": "1648c44aae7c8d988a326018ed72f5b4dd0392e4", + "_spec": "to-regex-range@^5.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/micromatch/to-regex-range/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Rouven Weßling", + "url": "www.rouvenwessling.de" + } + ], + "dependencies": { + "is-number": "^7.0.0" + }, + "deprecated": false, + "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", + "devDependencies": { + "fill-range": "^6.0.0", + "gulp-format-md": "^2.0.0", + "mocha": "^6.0.2", + "text-table": "^0.2.0", + "time-diff": "^0.3.1" + }, + "engines": { + "node": ">=8.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/micromatch/to-regex-range", + "keywords": [ + "bash", + "date", + "expand", + "expansion", + "expression", + "glob", + "match", + "match date", + "match number", + "match numbers", + "match year", + "matches", + "matching", + "number", + "numbers", + "numerical", + "range", + "ranges", + "regex", + "regexp", + "regular", + "regular expression", + "sequence" + ], + "license": "MIT", + "main": "index.js", + "name": "to-regex-range", + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/to-regex-range.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "layout": "default", + "toc": false, + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "helpers": { + "examples": { + "displayName": "examples" + } + }, + "related": { + "list": [ + "expand-range", + "fill-range", + "micromatch", + "repeat-element", + "repeat-string" + ] + } + }, + "version": "5.0.1" +} diff --git a/node_modules/toidentifier/LICENSE b/node_modules/toidentifier/LICENSE new file mode 100644 index 0000000..de22d15 --- /dev/null +++ b/node_modules/toidentifier/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/toidentifier/README.md b/node_modules/toidentifier/README.md new file mode 100644 index 0000000..7c8794e --- /dev/null +++ b/node_modules/toidentifier/README.md @@ -0,0 +1,61 @@ +# toidentifier + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][codecov-image]][codecov-url] + +> Convert a string of words to a JavaScript identifier + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```bash +$ npm install toidentifier +``` + +## Example + +```js +var toIdentifier = require('toidentifier') + +console.log(toIdentifier('Bad Request')) +// => "BadRequest" +``` + +## API + +This CommonJS module exports a single default function: `toIdentifier`. + +### toIdentifier(string) + +Given a string as the argument, it will be transformed according to +the following rules and the new string will be returned: + +1. Split into words separated by space characters (`0x20`). +2. Upper case the first character of each word. +3. Join the words together with no separator. +4. Remove all non-word (`[0-9a-z_]`) characters. + +## License + +[MIT](LICENSE) + +[codecov-image]: https://img.shields.io/codecov/c/github/component/toidentifier.svg +[codecov-url]: https://codecov.io/gh/component/toidentifier +[downloads-image]: https://img.shields.io/npm/dm/toidentifier.svg +[downloads-url]: https://npmjs.org/package/toidentifier +[npm-image]: https://img.shields.io/npm/v/toidentifier.svg +[npm-url]: https://npmjs.org/package/toidentifier +[travis-image]: https://img.shields.io/travis/component/toidentifier/master.svg +[travis-url]: https://travis-ci.org/component/toidentifier + + +## + +[npm]: https://www.npmjs.com/ + +[yarn]: https://yarnpkg.com/ diff --git a/node_modules/toidentifier/index.js b/node_modules/toidentifier/index.js new file mode 100644 index 0000000..bba5411 --- /dev/null +++ b/node_modules/toidentifier/index.js @@ -0,0 +1,30 @@ +/*! + * toidentifier + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + * @public + */ + +module.exports = toIdentifier + +/** + * Trasform the given string into a JavaScript identifier + * + * @param {string} str + * @returns {string} + * @public + */ + +function toIdentifier (str) { + return str + .split(' ') + .map(function (token) { + return token.slice(0, 1).toUpperCase() + token.slice(1) + }) + .join('') + .replace(/[^ _0-9a-z]/gi, '') +} diff --git a/node_modules/toidentifier/package.json b/node_modules/toidentifier/package.json new file mode 100644 index 0000000..982b9d1 --- /dev/null +++ b/node_modules/toidentifier/package.json @@ -0,0 +1,79 @@ +{ + "_args": [ + [ + "toidentifier@1.0.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "toidentifier@1.0.0", + "_id": "toidentifier@1.0.0", + "_inBundle": false, + "_integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "_location": "/toidentifier", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "toidentifier@1.0.0", + "name": "toidentifier", + "escapedName": "toidentifier", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/http-errors" + ], + "_resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/component/toidentifier/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Nick Baugh", + "email": "niftylettuce@gmail.com", + "url": "http://niftylettuce.com/" + } + ], + "description": "Convert a string of words to a JavaScript identifier", + "devDependencies": { + "eslint": "4.19.1", + "eslint-config-standard": "11.0.0", + "eslint-plugin-import": "2.11.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "6.0.1", + "eslint-plugin-promise": "3.7.0", + "eslint-plugin-standard": "3.1.0", + "mocha": "1.21.5", + "nyc": "11.8.0" + }, + "engines": { + "node": ">=0.6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/component/toidentifier#readme", + "license": "MIT", + "name": "toidentifier", + "repository": { + "type": "git", + "url": "git+https://github.com/component/toidentifier.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "version": "1.0.0" +} diff --git a/node_modules/touch/LICENSE b/node_modules/touch/LICENSE new file mode 100644 index 0000000..05eeeb8 --- /dev/null +++ b/node_modules/touch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/touch/README.md b/node_modules/touch/README.md new file mode 100644 index 0000000..b5a361e --- /dev/null +++ b/node_modules/touch/README.md @@ -0,0 +1,52 @@ +# node-touch + +For all your node touching needs. + +## Installing + +```bash +npm install touch +``` + +## CLI Usage: + +See `man touch` + +This package exports a binary called `nodetouch` that works mostly +like the unix builtin `touch(1)`. + +## API Usage: + +```javascript +var touch = require("touch") +``` + +Gives you the following functions: + +* `touch(filename, options, cb)` +* `touch.sync(filename, options)` +* `touch.ftouch(fd, options, cb)` +* `touch.ftouchSync(fd, options)` + +All the `options` objects are optional. + +All the async functions return a Promise. If a callback function is +provided, then it's attached to the Promise. + +## Options + +* `force` like `touch -f` Boolean +* `time` like `touch -t ` Can be a Date object, or any parseable + Date string, or epoch ms number. +* `atime` like `touch -a` Can be either a Boolean, or a Date. +* `mtime` like `touch -m` Can be either a Boolean, or a Date. +* `ref` like `touch -r ` Must be path to a file. +* `nocreate` like `touch -c` Boolean + +If neither `atime` nor `mtime` are set, then both values are set. If +one of them is set, then the other is not. + +## cli + +This package creates a `nodetouch` command line executable that works +very much like the unix builtin `touch(1)` diff --git a/node_modules/touch/bin/nodetouch.js b/node_modules/touch/bin/nodetouch.js new file mode 100644 index 0000000..f78f082 --- /dev/null +++ b/node_modules/touch/bin/nodetouch.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node +const touch = require("../index.js") + +const usage = code => { + console[code ? 'error' : 'log']( + 'usage:\n' + + 'touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...' + ) + process.exit(code) +} + +const singleFlags = { + a: 'atime', + m: 'mtime', + c: 'nocreate', + f: 'force' +} + +const singleOpts = { + r: 'ref', + t: 'time' +} + +const files = [] +const args = process.argv.slice(2) +const options = {} +for (let i = 0; i < args.length; i++) { + const arg = args[i] + if (!arg.match(/^-/)) { + files.push(arg) + continue + } + + // expand shorthands + if (arg.charAt(1) !== '-') { + const expand = [] + for (let f = 1; f < arg.length; f++) { + const fc = arg.charAt(f) + const sf = singleFlags[fc] + const so = singleOpts[fc] + if (sf) + expand.push('--' + sf) + else if (so) { + const soslice = arg.slice(f + 1) + const soval = soslice.charAt(0) === '=' ? soslice : '=' + soslice + expand.push('--' + so + soval) + f = arg.length + } else if (arg !== '-' + fc) + expand.push('-' + fc) + } + if (expand.length) { + args.splice.apply(args, [i, 1].concat(expand)) + i-- + continue + } + } + + const argsplit = arg.split('=') + const key = argsplit.shift().replace(/^\-\-/, '') + const val = argsplit.length ? argsplit.join('=') : null + + switch (key) { + case 'time': + const timestr = val || args[++i] + // [-t [[CC]YY]MMDDhhmm[.SS]] + const parsedtime = timestr.match( + /^(([0-9]{2})?([0-9]{2}))?([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})(\.([0-9]{2}))?$/ + ) + if (!parsedtime) { + console.error('touch: out of range or illegal ' + + 'time specification: ' + + '[[CC]YY]MMDDhhmm[.SS]') + process.exit(1) + } else { + const y = +parsedtime[1] + const year = parsedtime[2] ? y + : y <= 68 ? 2000 + y + : 1900 + y + + const MM = +parsedtime[4] - 1 + const dd = +parsedtime[5] + const hh = +parsedtime[6] + const mm = +parsedtime[7] + const ss = +parsedtime[8] + + options.time = new Date(Date.UTC(year, MM, dd, hh, mm, ss)) + } + continue + + case 'ref': + options.ref = val || args[++i] + continue + + case 'mtime': + case 'nocreate': + case 'atime': + case 'force': + options[key] = true + continue + + default: + console.error('touch: illegal option -- ' + arg) + usage(1) + } +} + +if (!files.length) + usage() + +process.exitCode = 0 +Promise.all(files.map(f => touch(f, options))) + .catch(er => process.exitCode = 1) diff --git a/node_modules/touch/index.js b/node_modules/touch/index.js new file mode 100644 index 0000000..f942e42 --- /dev/null +++ b/node_modules/touch/index.js @@ -0,0 +1,224 @@ +'use strict' + +const EE = require('events').EventEmitter +const cons = require('constants') +const fs = require('fs') + +module.exports = (f, options, cb) => { + if (typeof options === 'function') + cb = options, options = {} + + const p = new Promise((res, rej) => { + new Touch(validOpts(options, f, null)) + .on('done', res).on('error', rej) + }) + + return cb ? p.then(res => cb(null, res), cb) : p +} + +module.exports.sync = module.exports.touchSync = (f, options) => + (new TouchSync(validOpts(options, f, null)), undefined) + +module.exports.ftouch = (fd, options, cb) => { + if (typeof options === 'function') + cb = options, options = {} + + const p = new Promise((res, rej) => { + new Touch(validOpts(options, null, fd)) + .on('done', res).on('error', rej) + }) + + return cb ? p.then(res => cb(null, res), cb) : p +} + +module.exports.ftouchSync = (fd, opt) => + (new TouchSync(validOpts(opt, null, fd)), undefined) + +const validOpts = (options, path, fd) => { + options = Object.create(options || {}) + options.fd = fd + options.path = path + + // {mtime: true}, {ctime: true} + // If set to something else, then treat as epoch ms value + const now = parseInt(new Date(options.time || Date.now()).getTime() / 1000) + if (!options.atime && !options.mtime) + options.atime = options.mtime = now + else { + if (true === options.atime) + options.atime = now + + if (true === options.mtime) + options.mtime = now + } + + let oflags = 0 + if (!options.force) + oflags = oflags | cons.O_RDWR + + if (!options.nocreate) + oflags = oflags | cons.O_CREAT + + options.oflags = oflags + return options +} + +class Touch extends EE { + constructor (options) { + super(options) + this.fd = options.fd + this.path = options.path + this.atime = options.atime + this.mtime = options.mtime + this.ref = options.ref + this.nocreate = !!options.nocreate + this.force = !!options.force + this.closeAfter = options.closeAfter + this.oflags = options.oflags + this.options = options + + if (typeof this.fd !== 'number') { + this.closeAfter = true + this.open() + } else + this.onopen(null, this.fd) + } + + emit (ev, data) { + // we only emit when either done or erroring + // in both cases, need to close + this.close() + return super.emit(ev, data) + } + + close () { + if (typeof this.fd === 'number' && this.closeAfter) + fs.close(this.fd, () => {}) + } + + open () { + fs.open(this.path, this.oflags, (er, fd) => this.onopen(er, fd)) + } + + onopen (er, fd) { + if (er) { + if (er.code === 'EISDIR') + this.onopen(null, null) + else if (er.code === 'ENOENT' && this.nocreate) + this.emit('done') + else + this.emit('error', er) + } else { + this.fd = fd + if (this.ref) + this.statref() + else if (!this.atime || !this.mtime) + this.fstat() + else + this.futimes() + } + } + + statref () { + fs.stat(this.ref, (er, st) => { + if (er) + this.emit('error', er) + else + this.onstatref(st) + }) + } + + onstatref (st) { + this.atime = this.atime && parseInt(st.atime.getTime()/1000, 10) + this.mtime = this.mtime && parseInt(st.mtime.getTime()/1000, 10) + if (!this.atime || !this.mtime) + this.fstat() + else + this.futimes() + } + + fstat () { + const stat = this.fd ? 'fstat' : 'stat' + const target = this.fd || this.path + fs[stat](target, (er, st) => { + if (er) + this.emit('error', er) + else + this.onfstat(st) + }) + } + + onfstat (st) { + if (typeof this.atime !== 'number') + this.atime = parseInt(st.atime.getTime()/1000, 10) + + if (typeof this.mtime !== 'number') + this.mtime = parseInt(st.mtime.getTime()/1000, 10) + + this.futimes() + } + + futimes () { + const utimes = this.fd ? 'futimes' : 'utimes' + const target = this.fd || this.path + fs[utimes](target, ''+this.atime, ''+this.mtime, er => { + if (er) + this.emit('error', er) + else + this.emit('done') + }) + } +} + +class TouchSync extends Touch { + open () { + try { + this.onopen(null, fs.openSync(this.path, this.oflags)) + } catch (er) { + this.onopen(er) + } + } + + statref () { + let threw = true + try { + this.onstatref(fs.statSync(this.ref)) + threw = false + } finally { + if (threw) + this.close() + } + } + + fstat () { + let threw = true + const stat = this.fd ? 'fstatSync' : 'statSync' + const target = this.fd || this.path + try { + this.onfstat(fs[stat](target)) + threw = false + } finally { + if (threw) + this.close() + } + } + + futimes () { + let threw = true + const utimes = this.fd ? 'futimesSync' : 'utimesSync' + const target = this.fd || this.path + try { + fs[utimes](target, this.atime, this.mtime) + threw = false + } finally { + if (threw) + this.close() + } + this.emit('done') + } + + close () { + if (typeof this.fd === 'number' && this.closeAfter) + try { fs.closeSync(this.fd) } catch (er) {} + } +} diff --git a/node_modules/touch/package.json b/node_modules/touch/package.json new file mode 100644 index 0000000..857675a --- /dev/null +++ b/node_modules/touch/package.json @@ -0,0 +1,64 @@ +{ + "_from": "touch@^3.1.0", + "_id": "touch@3.1.0", + "_inBundle": false, + "_integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "_location": "/touch", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "touch@^3.1.0", + "name": "touch", + "escapedName": "touch", + "rawSpec": "^3.1.0", + "saveSpec": null, + "fetchSpec": "^3.1.0" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "_shasum": "fe365f5f75ec9ed4e56825e0bb76d24ab74af83b", + "_spec": "touch@^3.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + }, + "bugs": { + "url": "https://github.com/isaacs/node-touch/issues" + }, + "bundleDependencies": false, + "dependencies": { + "nopt": "~1.0.10" + }, + "deprecated": false, + "description": "like touch(1) in node", + "devDependencies": { + "mutate-fs": "^1.1.0", + "tap": "^10.7.0" + }, + "files": [ + "index.js", + "bin/nodetouch.js" + ], + "homepage": "https://github.com/isaacs/node-touch#readme", + "license": "ISC", + "name": "touch", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-touch.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100 -J" + }, + "version": "3.1.0" +} diff --git a/node_modules/tough-cookie/LICENSE b/node_modules/tough-cookie/LICENSE new file mode 100644 index 0000000..22204e8 --- /dev/null +++ b/node_modules/tough-cookie/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2015, Salesforce.com, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/tough-cookie/README.md b/node_modules/tough-cookie/README.md new file mode 100644 index 0000000..d28bd46 --- /dev/null +++ b/node_modules/tough-cookie/README.md @@ -0,0 +1,507 @@ +[RFC6265](https://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js + +[![npm package](https://nodei.co/npm/tough-cookie.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/tough-cookie/) + +[![Build Status](https://travis-ci.org/salesforce/tough-cookie.png?branch=master)](https://travis-ci.org/salesforce/tough-cookie) + +# Synopsis + +``` javascript +var tough = require('tough-cookie'); +var Cookie = tough.Cookie; +var cookie = Cookie.parse(header); +cookie.value = 'somethingdifferent'; +header = cookie.toString(); + +var cookiejar = new tough.CookieJar(); +cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); +// ... +cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { + res.headers['cookie'] = cookies.join('; '); +}); +``` + +# Installation + +It's _so_ easy! + +`npm install tough-cookie` + +Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. + +## Version Support + +Support for versions of node.js will follow that of the [request](https://www.npmjs.com/package/request) module. + +# API + +## tough + +Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". + +**Note**: prior to 1.0.x, several of these functions took a `strict` parameter. This has since been removed from the API as it was no longer necessary. + +### `parseDate(string)` + +Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. + +### `formatDate(date)` + +Format a Date into a RFC1123 string (the RFC6265-recommended format). + +### `canonicalDomain(str)` + +Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). + +### `domainMatch(str,domStr[,canonicalize=true])` + +Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". + +The `canonicalize` parameter will run the other two parameters through `canonicalDomain` or not. + +### `defaultPath(path)` + +Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. + +The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. + +### `pathMatch(reqPath,cookiePath)` + +Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. + +This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. + +### `parse(cookieString[, options])` + +alias for `Cookie.parse(cookieString[, options])` + +### `fromJSON(string)` + +alias for `Cookie.fromJSON(string)` + +### `getPublicSuffix(hostname)` + +Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. + +For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. + +For further information, see http://publicsuffix.org/. This module derives its list from that site. This call is currently a wrapper around [`psl`](https://www.npmjs.com/package/psl)'s [get() method](https://www.npmjs.com/package/psl#pslgetdomain). + +### `cookieCompare(a,b)` + +For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). The sort algorithm is, in order of precedence: + +* Longest `.path` +* oldest `.creation` (which has a 1ms precision, same as `Date`) +* lowest `.creationIndex` (to get beyond the 1ms precision) + +``` javascript +var cookies = [ /* unsorted array of Cookie objects */ ]; +cookies = cookies.sort(cookieCompare); +``` + +**Note**: Since JavaScript's `Date` is limited to a 1ms precision, cookies within the same milisecond are entirely possible. This is especially true when using the `now` option to `.setCookie()`. The `.creationIndex` property is a per-process global counter, assigned during construction with `new Cookie()`. This preserves the spirit of the RFC sorting: older cookies go first. This works great for `MemoryCookieStore`, since `Set-Cookie` headers are parsed in order, but may not be so great for distributed systems. Sophisticated `Store`s may wish to set this to some other _logical clock_ such that if cookies A and B are created in the same millisecond, but cookie A is created before cookie B, then `A.creationIndex < B.creationIndex`. If you want to alter the global counter, which you probably _shouldn't_ do, it's stored in `Cookie.cookiesCreated`. + +### `permuteDomain(domain)` + +Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. + +### `permutePath(path)` + +Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. + + +## Cookie + +Exported via `tough.Cookie`. + +### `Cookie.parse(cookieString[, options])` + +Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. + +The options parameter is not required and currently has only one property: + + * _loose_ - boolean - if `true` enable parsing of key-less cookies like `=abc` and `=`, which are not RFC-compliant. + +If options is not an object, it is ignored, which means you can use `Array#map` with it. + +Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: + +``` javascript +if (res.headers['set-cookie'] instanceof Array) + cookies = res.headers['set-cookie'].map(Cookie.parse); +else + cookies = [Cookie.parse(res.headers['set-cookie'])]; +``` + +_Note:_ in version 2.3.3, tough-cookie limited the number of spaces before the `=` to 256 characters. This limitation has since been removed. +See [Issue 92](https://github.com/salesforce/tough-cookie/issues/92) + +### Properties + +Cookie object properties: + + * _key_ - string - the name or key of the cookie (default "") + * _value_ - string - the value of the cookie (default "") + * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` + * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` + * _domain_ - string - the `Domain=` attribute of the cookie + * _path_ - string - the `Path=` of the cookie + * _secure_ - boolean - the `Secure` cookie flag + * _httpOnly_ - boolean - the `HttpOnly` cookie flag + * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) + * _creation_ - `Date` - when this cookie was constructed + * _creationIndex_ - number - set at construction, used to provide greater sort precision (please see `cookieCompare(a,b)` for a full explanation) + +After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: + + * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) + * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. + * _creation_ - `Date` - **modified** from construction to when the cookie was added to the jar + * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. + +### `Cookie([{properties}])` + +Receives an options object that can contain any of the above Cookie properties, uses the default for unspecified properties. + +### `.toString()` + +encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. + +### `.cookieString()` + +encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). + +### `.setExpires(String)` + +sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. + +### `.setMaxAge(number)` + +sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. + +### `.expiryTime([now=Date.now()])` + +### `.expiryDate([now=Date.now()])` + +expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. + +Max-Age takes precedence over Expires (as per the RFC). The `.creation` attribute -- or, by default, the `now` parameter -- is used to offset the `.maxAge` attribute. + +If Expires (`.expires`) is set, that's returned. + +Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). + +### `.TTL([now=Date.now()])` + +compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. + +The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. + +### `.canonicalizedDoman()` + +### `.cdomain()` + +return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. + +### `.toJSON()` + +For convenience in using `JSON.serialize(cookie)`. Returns a plain-old `Object` that can be JSON-serialized. + +Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are exported in ISO format (`.toISOString()`). + +**NOTE**: Custom `Cookie` properties will be discarded. In tough-cookie 1.x, since there was no `.toJSON` method explicitly defined, all enumerable properties were captured. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. + +### `Cookie.fromJSON(strOrObj)` + +Does the reverse of `cookie.toJSON()`. If passed a string, will `JSON.parse()` that first. + +Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are parsed via `Date.parse()`, not the tough-cookie `parseDate`, since it's JavaScript/JSON-y timestamps being handled at this layer. + +Returns `null` upon JSON parsing error. + +### `.clone()` + +Does a deep clone of this cookie, exactly implemented as `Cookie.fromJSON(cookie.toJSON())`. + +### `.validate()` + +Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. + +validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: + +``` javascript +if (cookie.validate() === true) { + // it's tasty +} else { + // yuck! +} +``` + + +## CookieJar + +Exported via `tough.CookieJar`. + +### `CookieJar([store],[options])` + +Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. + +The `options` object can be omitted and can have the following properties: + + * _rejectPublicSuffixes_ - boolean - default `true` - reject cookies with domains like "com" and "co.uk" + * _looseMode_ - boolean - default `false` - accept malformed cookies like `bar` and `=bar`, which have an implied empty name. + This is not in the standard, but is used sometimes on the web and is accepted by (most) browsers. + +Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. + +### `.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))` + +Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.creation`, `.lastAccessed` and `.hostOnly` properties. + +The `options` object can be omitted and can have the following properties: + + * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. + * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. + * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies + * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. `Store` errors aren't ignored by this option. + +As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). + +### `.setCookieSync(cookieOrString, currentUrl, [{options}])` + +Synchronous version of `setCookie`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). + +### `.getCookies(currentUrl, [{options},] cb(err,cookies))` + +Retrieve the list of cookies that can be sent in a Cookie header for the current url. + +If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. + +The `options` object can be omitted and can have the following properties: + + * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. + * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. + * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies + * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). + * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the underlying store (the default `MemoryCookieStore` supports it). + +The `.lastAccessed` property of the returned cookies will have been updated. + +### `.getCookiesSync(currentUrl, [{options}])` + +Synchronous version of `getCookies`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). + +### `.getCookieString(...)` + +Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. + +### `.getCookieStringSync(...)` + +Synchronous version of `getCookieString`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). + +### `.getSetCookieStrings(...)` + +Returns an array of strings suitable for **Set-Cookie** headers. Accepts the same options as `.getCookies()`. Simply maps the cookie array via `.toString()`. + +### `.getSetCookieStringsSync(...)` + +Synchronous version of `getSetCookieStrings`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). + +### `.serialize(cb(err,serializedObject))` + +Serialize the Jar if the underlying store supports `.getAllCookies`. + +**NOTE**: Custom `Cookie` properties will be discarded. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. + +See [Serialization Format]. + +### `.serializeSync()` + +Sync version of .serialize + +### `.toJSON()` + +Alias of .serializeSync() for the convenience of `JSON.stringify(cookiejar)`. + +### `CookieJar.deserialize(serialized, [store], cb(err,object))` + +A new Jar is created and the serialized Cookies are added to the underlying store. Each `Cookie` is added via `store.putCookie` in the order in which they appear in the serialization. + +The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. + +As a convenience, if `serialized` is a string, it is passed through `JSON.parse` first. If that throws an error, this is passed to the callback. + +### `CookieJar.deserializeSync(serialized, [store])` + +Sync version of `.deserialize`. _Note_ that the `store` must be synchronous for this to work. + +### `CookieJar.fromJSON(string)` + +Alias of `.deserializeSync` to provide consistency with `Cookie.fromJSON()`. + +### `.clone([store,]cb(err,newJar))` + +Produces a deep clone of this jar. Modifications to the original won't affect the clone, and vice versa. + +The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. Transferring between store types is supported so long as the source implements `.getAllCookies()` and the destination implements `.putCookie()`. + +### `.cloneSync([store])` + +Synchronous version of `.clone`, returning a new `CookieJar` instance. + +The `store` argument is optional, but must be a _synchronous_ `Store` instance if specified. If not passed, a new instance of `MemoryCookieStore` is used. + +The _source_ and _destination_ must both be synchronous `Store`s. If one or both stores are asynchronous, use `.clone` instead. Recall that `MemoryCookieStore` supports both synchronous and asynchronous API calls. + +## Store + +Base class for CookieJar stores. Available as `tough.Store`. + +## Store API + +The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. + +Stores should inherit from the base `Store` class, which is available as `require('tough-cookie').Store`. + +Stores are asynchronous by default, but if `store.synchronous` is set to `true`, then the `*Sync` methods on the of the containing `CookieJar` can be used (however, the continuation-passing style + +All `domain` parameters will have been normalized before calling. + +The Cookie store must have all of the following methods. + +### `store.findCookie(domain, path, key, cb(err,cookie))` + +Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. + +Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). + +### `store.findCookies(domain, path, cb(err,cookies))` + +Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. + +If no cookies are found, the callback MUST be passed an empty array. + +The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. + +As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). + +### `store.putCookie(cookie, cb(err))` + +Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. + +The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. + +Pass an error if the cookie cannot be stored. + +### `store.updateCookie(oldCookie, newCookie, cb(err))` + +Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. + +The `.lastAccessed` property will always be different between the two objects (to the precision possible via JavaScript's clock). Both `.creation` and `.creationIndex` are guaranteed to be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are selected for automatic deletion (e.g., least-recently-used, which is up to the store to implement). + +Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. + +The `newCookie` and `oldCookie` objects MUST NOT be modified. + +Pass an error if the newCookie cannot be stored. + +### `store.removeCookie(domain, path, key, cb(err))` + +Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). + +The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. + +### `store.removeCookies(domain, path, cb(err))` + +Removes matching cookies from the store. The `path` parameter is optional, and if missing means all paths in a domain should be removed. + +Pass an error ONLY if removing any existing cookies failed. + +### `store.getAllCookies(cb(err, cookies))` + +Produces an `Array` of all cookies during `jar.serialize()`. The items in the array can be true `Cookie` objects or generic `Object`s with the [Serialization Format] data structure. + +Cookies SHOULD be returned in creation order to preserve sorting via `compareCookies()`. For reference, `MemoryCookieStore` will sort by `.creationIndex` since it uses true `Cookie` objects internally. If you don't return the cookies in creation order, they'll still be sorted by creation time, but this only has a precision of 1ms. See `compareCookies` for more detail. + +Pass an error if retrieval fails. + +## MemoryCookieStore + +Inherits from `Store`. + +A just-in-memory CookieJar synchronous store implementation, used by default. Despite being a synchronous implementation, it's usable with both the synchronous and asynchronous forms of the `CookieJar` API. + +## Community Cookie Stores + +These are some Store implementations authored and maintained by the community. They aren't official and we don't vouch for them but you may be interested to have a look: + +- [`db-cookie-store`](https://github.com/JSBizon/db-cookie-store): SQL including SQLite-based databases +- [`file-cookie-store`](https://github.com/JSBizon/file-cookie-store): Netscape cookie file format on disk +- [`redis-cookie-store`](https://github.com/benkroeger/redis-cookie-store): Redis +- [`tough-cookie-filestore`](https://github.com/mitsuru/tough-cookie-filestore): JSON on disk +- [`tough-cookie-web-storage-store`](https://github.com/exponentjs/tough-cookie-web-storage-store): DOM localStorage and sessionStorage + + +# Serialization Format + +**NOTE**: if you want to have custom `Cookie` properties serialized, add the property name to `Cookie.serializableProperties`. + +```js + { + // The version of tough-cookie that serialized this jar. + version: 'tough-cookie@1.x.y', + + // add the store type, to make humans happy: + storeType: 'MemoryCookieStore', + + // CookieJar configuration: + rejectPublicSuffixes: true, + // ... future items go here + + // Gets filled from jar.store.getAllCookies(): + cookies: [ + { + key: 'string', + value: 'string', + // ... + /* other Cookie.serializableProperties go here */ + } + ] + } +``` + +# Copyright and License + +(tl;dr: BSD-3-Clause with some MPL/2.0) + +```text + Copyright (c) 2015, Salesforce.com, Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. Neither the name of Salesforce.com nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +``` diff --git a/node_modules/tough-cookie/lib/cookie.js b/node_modules/tough-cookie/lib/cookie.js new file mode 100644 index 0000000..039a0e7 --- /dev/null +++ b/node_modules/tough-cookie/lib/cookie.js @@ -0,0 +1,1431 @@ +/*! + * Copyright (c) 2015, Salesforce.com, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of Salesforce.com nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +'use strict'; +var net = require('net'); +var urlParse = require('url').parse; +var util = require('util'); +var pubsuffix = require('./pubsuffix-psl'); +var Store = require('./store').Store; +var MemoryCookieStore = require('./memstore').MemoryCookieStore; +var pathMatch = require('./pathMatch').pathMatch; +var VERSION = require('../package.json').version; + +var punycode; +try { + punycode = require('punycode'); +} catch(e) { + console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization"); +} + +// From RFC6265 S4.1.1 +// note that it excludes \x3B ";" +var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; + +var CONTROL_CHARS = /[\x00-\x1F]/; + +// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in +// the "relaxed" mode, see: +// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60 +var TERMINATORS = ['\n', '\r', '\0']; + +// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"' +// Note ';' is \x3B +var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/; + +// date-time parsing constants (RFC6265 S5.1.1) + +var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; + +var MONTH_TO_NUM = { + jan:0, feb:1, mar:2, apr:3, may:4, jun:5, + jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 +}; +var NUM_TO_MONTH = [ + 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' +]; +var NUM_TO_DAY = [ + 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' +]; + +var MAX_TIME = 2147483647000; // 31-bit max +var MIN_TIME = 0; // 31-bit min + +/* + * Parses a Natural number (i.e., non-negative integer) with either the + * *DIGIT ( non-digit *OCTET ) + * or + * *DIGIT + * grammar (RFC6265 S5.1.1). + * + * The "trailingOK" boolean controls if the grammar accepts a + * "( non-digit *OCTET )" trailer. + */ +function parseDigits(token, minDigits, maxDigits, trailingOK) { + var count = 0; + while (count < token.length) { + var c = token.charCodeAt(count); + // "non-digit = %x00-2F / %x3A-FF" + if (c <= 0x2F || c >= 0x3A) { + break; + } + count++; + } + + // constrain to a minimum and maximum number of digits. + if (count < minDigits || count > maxDigits) { + return null; + } + + if (!trailingOK && count != token.length) { + return null; + } + + return parseInt(token.substr(0,count), 10); +} + +function parseTime(token) { + var parts = token.split(':'); + var result = [0,0,0]; + + /* RF6256 S5.1.1: + * time = hms-time ( non-digit *OCTET ) + * hms-time = time-field ":" time-field ":" time-field + * time-field = 1*2DIGIT + */ + + if (parts.length !== 3) { + return null; + } + + for (var i = 0; i < 3; i++) { + // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be + // followed by "( non-digit *OCTET )" so therefore the last time-field can + // have a trailer + var trailingOK = (i == 2); + var num = parseDigits(parts[i], 1, 2, trailingOK); + if (num === null) { + return null; + } + result[i] = num; + } + + return result; +} + +function parseMonth(token) { + token = String(token).substr(0,3).toLowerCase(); + var num = MONTH_TO_NUM[token]; + return num >= 0 ? num : null; +} + +/* + * RFC6265 S5.1.1 date parser (see RFC for full grammar) + */ +function parseDate(str) { + if (!str) { + return; + } + + /* RFC6265 S5.1.1: + * 2. Process each date-token sequentially in the order the date-tokens + * appear in the cookie-date + */ + var tokens = str.split(DATE_DELIM); + if (!tokens) { + return; + } + + var hour = null; + var minute = null; + var second = null; + var dayOfMonth = null; + var month = null; + var year = null; + + for (var i=0; i= 70 && year <= 99) { + year += 1900; + } else if (year >= 0 && year <= 69) { + year += 2000; + } + } + } + } + + /* RFC 6265 S5.1.1 + * "5. Abort these steps and fail to parse the cookie-date if: + * * at least one of the found-day-of-month, found-month, found- + * year, or found-time flags is not set, + * * the day-of-month-value is less than 1 or greater than 31, + * * the year-value is less than 1601, + * * the hour-value is greater than 23, + * * the minute-value is greater than 59, or + * * the second-value is greater than 59. + * (Note that leap seconds cannot be represented in this syntax.)" + * + * So, in order as above: + */ + if ( + dayOfMonth === null || month === null || year === null || second === null || + dayOfMonth < 1 || dayOfMonth > 31 || + year < 1601 || + hour > 23 || + minute > 59 || + second > 59 + ) { + return; + } + + return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second)); +} + +function formatDate(date) { + var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; + var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; + var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; + var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; + return NUM_TO_DAY[date.getUTCDay()] + ', ' + + d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ + h+':'+m+':'+s+' GMT'; +} + +// S5.1.2 Canonicalized Host Names +function canonicalDomain(str) { + if (str == null) { + return null; + } + str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . + + // convert to IDN if any non-ASCII characters + if (punycode && /[^\u0001-\u007f]/.test(str)) { + str = punycode.toASCII(str); + } + + return str.toLowerCase(); +} + +// S5.1.3 Domain Matching +function domainMatch(str, domStr, canonicalize) { + if (str == null || domStr == null) { + return null; + } + if (canonicalize !== false) { + str = canonicalDomain(str); + domStr = canonicalDomain(domStr); + } + + /* + * "The domain string and the string are identical. (Note that both the + * domain string and the string will have been canonicalized to lower case at + * this point)" + */ + if (str == domStr) { + return true; + } + + /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ + + /* "* The string is a host name (i.e., not an IP address)." */ + if (net.isIP(str)) { + return false; + } + + /* "* The domain string is a suffix of the string" */ + var idx = str.indexOf(domStr); + if (idx <= 0) { + return false; // it's a non-match (-1) or prefix (0) + } + + // e.g "a.b.c".indexOf("b.c") === 2 + // 5 === 3+2 + if (str.length !== domStr.length + idx) { // it's not a suffix + return false; + } + + /* "* The last character of the string that is not included in the domain + * string is a %x2E (".") character." */ + if (str.substr(idx-1,1) !== '.') { + return false; + } + + return true; +} + + +// RFC6265 S5.1.4 Paths and Path-Match + +/* + * "The user agent MUST use an algorithm equivalent to the following algorithm + * to compute the default-path of a cookie:" + * + * Assumption: the path (and not query part or absolute uri) is passed in. + */ +function defaultPath(path) { + // "2. If the uri-path is empty or if the first character of the uri-path is not + // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. + if (!path || path.substr(0,1) !== "/") { + return "/"; + } + + // "3. If the uri-path contains no more than one %x2F ("/") character, output + // %x2F ("/") and skip the remaining step." + if (path === "/") { + return path; + } + + var rightSlash = path.lastIndexOf("/"); + if (rightSlash === 0) { + return "/"; + } + + // "4. Output the characters of the uri-path from the first character up to, + // but not including, the right-most %x2F ("/")." + return path.slice(0, rightSlash); +} + +function trimTerminator(str) { + for (var t = 0; t < TERMINATORS.length; t++) { + var terminatorIdx = str.indexOf(TERMINATORS[t]); + if (terminatorIdx !== -1) { + str = str.substr(0,terminatorIdx); + } + } + + return str; +} + +function parseCookiePair(cookiePair, looseMode) { + cookiePair = trimTerminator(cookiePair); + + var firstEq = cookiePair.indexOf('='); + if (looseMode) { + if (firstEq === 0) { // '=' is immediately at start + cookiePair = cookiePair.substr(1); + firstEq = cookiePair.indexOf('='); // might still need to split on '=' + } + } else { // non-loose mode + if (firstEq <= 0) { // no '=' or is at start + return; // needs to have non-empty "cookie-name" + } + } + + var cookieName, cookieValue; + if (firstEq <= 0) { + cookieName = ""; + cookieValue = cookiePair.trim(); + } else { + cookieName = cookiePair.substr(0, firstEq).trim(); + cookieValue = cookiePair.substr(firstEq+1).trim(); + } + + if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) { + return; + } + + var c = new Cookie(); + c.key = cookieName; + c.value = cookieValue; + return c; +} + +function parse(str, options) { + if (!options || typeof options !== 'object') { + options = {}; + } + str = str.trim(); + + // We use a regex to parse the "name-value-pair" part of S5.2 + var firstSemi = str.indexOf(';'); // S5.2 step 1 + var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi); + var c = parseCookiePair(cookiePair, !!options.loose); + if (!c) { + return; + } + + if (firstSemi === -1) { + return c; + } + + // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string + // (including the %x3B (";") in question)." plus later on in the same section + // "discard the first ";" and trim". + var unparsed = str.slice(firstSemi + 1).trim(); + + // "If the unparsed-attributes string is empty, skip the rest of these + // steps." + if (unparsed.length === 0) { + return c; + } + + /* + * S5.2 says that when looping over the items "[p]rocess the attribute-name + * and attribute-value according to the requirements in the following + * subsections" for every item. Plus, for many of the individual attributes + * in S5.3 it says to use the "attribute-value of the last attribute in the + * cookie-attribute-list". Therefore, in this implementation, we overwrite + * the previous value. + */ + var cookie_avs = unparsed.split(';'); + while (cookie_avs.length) { + var av = cookie_avs.shift().trim(); + if (av.length === 0) { // happens if ";;" appears + continue; + } + var av_sep = av.indexOf('='); + var av_key, av_value; + + if (av_sep === -1) { + av_key = av; + av_value = null; + } else { + av_key = av.substr(0,av_sep); + av_value = av.substr(av_sep+1); + } + + av_key = av_key.trim().toLowerCase(); + + if (av_value) { + av_value = av_value.trim(); + } + + switch(av_key) { + case 'expires': // S5.2.1 + if (av_value) { + var exp = parseDate(av_value); + // "If the attribute-value failed to parse as a cookie date, ignore the + // cookie-av." + if (exp) { + // over and underflow not realistically a concern: V8's getTime() seems to + // store something larger than a 32-bit time_t (even with 32-bit node) + c.expires = exp; + } + } + break; + + case 'max-age': // S5.2.2 + if (av_value) { + // "If the first character of the attribute-value is not a DIGIT or a "-" + // character ...[or]... If the remainder of attribute-value contains a + // non-DIGIT character, ignore the cookie-av." + if (/^-?[0-9]+$/.test(av_value)) { + var delta = parseInt(av_value, 10); + // "If delta-seconds is less than or equal to zero (0), let expiry-time + // be the earliest representable date and time." + c.setMaxAge(delta); + } + } + break; + + case 'domain': // S5.2.3 + // "If the attribute-value is empty, the behavior is undefined. However, + // the user agent SHOULD ignore the cookie-av entirely." + if (av_value) { + // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E + // (".") character." + var domain = av_value.trim().replace(/^\./, ''); + if (domain) { + // "Convert the cookie-domain to lower case." + c.domain = domain.toLowerCase(); + } + } + break; + + case 'path': // S5.2.4 + /* + * "If the attribute-value is empty or if the first character of the + * attribute-value is not %x2F ("/"): + * Let cookie-path be the default-path. + * Otherwise: + * Let cookie-path be the attribute-value." + * + * We'll represent the default-path as null since it depends on the + * context of the parsing. + */ + c.path = av_value && av_value[0] === "/" ? av_value : null; + break; + + case 'secure': // S5.2.5 + /* + * "If the attribute-name case-insensitively matches the string "Secure", + * the user agent MUST append an attribute to the cookie-attribute-list + * with an attribute-name of Secure and an empty attribute-value." + */ + c.secure = true; + break; + + case 'httponly': // S5.2.6 -- effectively the same as 'secure' + c.httpOnly = true; + break; + + default: + c.extensions = c.extensions || []; + c.extensions.push(av); + break; + } + } + + return c; +} + +// avoid the V8 deoptimization monster! +function jsonParse(str) { + var obj; + try { + obj = JSON.parse(str); + } catch (e) { + return e; + } + return obj; +} + +function fromJSON(str) { + if (!str) { + return null; + } + + var obj; + if (typeof str === 'string') { + obj = jsonParse(str); + if (obj instanceof Error) { + return null; + } + } else { + // assume it's an Object + obj = str; + } + + var c = new Cookie(); + for (var i=0; i 1) { + var lindex = path.lastIndexOf('/'); + if (lindex === 0) { + break; + } + path = path.substr(0,lindex); + permutations.push(path); + } + permutations.push('/'); + return permutations; +} + +function getCookieContext(url) { + if (url instanceof Object) { + return url; + } + // NOTE: decodeURI will throw on malformed URIs (see GH-32). + // Therefore, we will just skip decoding for such URIs. + try { + url = decodeURI(url); + } + catch(err) { + // Silently swallow error + } + + return urlParse(url); +} + +function Cookie(options) { + options = options || {}; + + Object.keys(options).forEach(function(prop) { + if (Cookie.prototype.hasOwnProperty(prop) && + Cookie.prototype[prop] !== options[prop] && + prop.substr(0,1) !== '_') + { + this[prop] = options[prop]; + } + }, this); + + this.creation = this.creation || new Date(); + + // used to break creation ties in cookieCompare(): + Object.defineProperty(this, 'creationIndex', { + configurable: false, + enumerable: false, // important for assert.deepEqual checks + writable: true, + value: ++Cookie.cookiesCreated + }); +} + +Cookie.cookiesCreated = 0; // incremented each time a cookie is created + +Cookie.parse = parse; +Cookie.fromJSON = fromJSON; + +Cookie.prototype.key = ""; +Cookie.prototype.value = ""; + +// the order in which the RFC has them: +Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity +Cookie.prototype.maxAge = null; // takes precedence over expires for TTL +Cookie.prototype.domain = null; +Cookie.prototype.path = null; +Cookie.prototype.secure = false; +Cookie.prototype.httpOnly = false; +Cookie.prototype.extensions = null; + +// set by the CookieJar: +Cookie.prototype.hostOnly = null; // boolean when set +Cookie.prototype.pathIsDefault = null; // boolean when set +Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse +Cookie.prototype.lastAccessed = null; // Date when set +Object.defineProperty(Cookie.prototype, 'creationIndex', { + configurable: true, + enumerable: false, + writable: true, + value: 0 +}); + +Cookie.serializableProperties = Object.keys(Cookie.prototype) + .filter(function(prop) { + return !( + Cookie.prototype[prop] instanceof Function || + prop === 'creationIndex' || + prop.substr(0,1) === '_' + ); + }); + +Cookie.prototype.inspect = function inspect() { + var now = Date.now(); + return 'Cookie="'+this.toString() + + '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + + '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + + '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + + '"'; +}; + +// Use the new custom inspection symbol to add the custom inspect function if +// available. +if (util.inspect.custom) { + Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect; +} + +Cookie.prototype.toJSON = function() { + var obj = {}; + + var props = Cookie.serializableProperties; + for (var i=0; i + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/tough-cookie/node_modules/punycode/README.md b/node_modules/tough-cookie/node_modules/punycode/README.md new file mode 100644 index 0000000..7ad7d1f --- /dev/null +++ b/node_modules/tough-cookie/node_modules/punycode/README.md @@ -0,0 +1,176 @@ +# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) + +A robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms. + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) and [io.js v1.0.0+](https://github.com/iojs/io.js/blob/v1.x/lib/punycode.js). + +## Installation + +Via [npm](https://www.npmjs.com/) (only required for Node.js releases older than v0.6.2): + +```bash +npm install punycode +``` + +Via [Bower](http://bower.io/): + +```bash +bower install punycode +``` + +Via [Component](https://github.com/component/component): + +```bash +component install bestiejs/punycode.js +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var punycode = require('punycode'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('punycode.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'punycode': 'path/to/punycode' + } + }, + ['punycode'], + function(punycode) { + console.log(punycode); + } +); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Unit tests & code coverage + +After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +Feel free to fork if you see possible improvements! + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## Contributors + +| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/tough-cookie/node_modules/punycode/package.json b/node_modules/tough-cookie/node_modules/punycode/package.json new file mode 100644 index 0000000..97855ca --- /dev/null +++ b/node_modules/tough-cookie/node_modules/punycode/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "punycode@1.4.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "punycode@1.4.1", + "_id": "punycode@1.4.1", + "_inBundle": false, + "_integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "_location": "/tough-cookie/punycode", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "punycode@1.4.1", + "name": "punycode", + "escapedName": "punycode", + "rawSpec": "1.4.1", + "saveSpec": null, + "fetchSpec": "1.4.1" + }, + "_requiredBy": [ + "/tough-cookie" + ], + "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "_spec": "1.4.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/bestiejs/punycode.js/issues" + }, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + { + "name": "John-David Dalton", + "url": "http://allyoucanleet.com/" + } + ], + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "devDependencies": { + "coveralls": "^2.11.4", + "grunt": "^0.4.5", + "grunt-contrib-uglify": "^0.11.0", + "grunt-shell": "^1.1.2", + "istanbul": "^0.4.1", + "qunit-extras": "^1.4.4", + "qunitjs": "~1.11.0", + "requirejs": "^2.1.22" + }, + "files": [ + "LICENSE-MIT.txt", + "punycode.js" + ], + "homepage": "https://mths.be/punycode", + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "main": "punycode.js", + "name": "punycode", + "repository": { + "type": "git", + "url": "git+https://github.com/bestiejs/punycode.js.git" + }, + "scripts": { + "test": "node tests/tests.js" + }, + "version": "1.4.1" +} diff --git a/node_modules/tough-cookie/node_modules/punycode/punycode.js b/node_modules/tough-cookie/node_modules/punycode/punycode.js new file mode 100644 index 0000000..2c87f6c --- /dev/null +++ b/node_modules/tough-cookie/node_modules/punycode/punycode.js @@ -0,0 +1,533 @@ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); diff --git a/node_modules/tough-cookie/package.json b/node_modules/tough-cookie/package.json new file mode 100644 index 0000000..62a15bf --- /dev/null +++ b/node_modules/tough-cookie/package.json @@ -0,0 +1,97 @@ +{ + "_args": [ + [ + "tough-cookie@2.4.3", + "D:\\Cricbuzzz" + ] + ], + "_from": "tough-cookie@2.4.3", + "_id": "tough-cookie@2.4.3", + "_inBundle": false, + "_integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "_location": "/tough-cookie", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "tough-cookie@2.4.3", + "name": "tough-cookie", + "escapedName": "tough-cookie", + "rawSpec": "2.4.3", + "saveSpec": null, + "fetchSpec": "2.4.3" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "_spec": "2.4.3", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Jeremy Stashewsky", + "email": "jstash@gmail.com" + }, + "bugs": { + "url": "https://github.com/salesforce/tough-cookie/issues" + }, + "contributors": [ + { + "name": "Alexander Savin" + }, + { + "name": "Ian Livingstone" + }, + { + "name": "Ivan Nikulin" + }, + { + "name": "Lalit Kapoor" + }, + { + "name": "Sam Thompson" + }, + { + "name": "Sebastian Mayr" + } + ], + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "description": "RFC6265 Cookies and Cookie Jar for node.js", + "devDependencies": { + "async": "^1.4.2", + "nyc": "^11.6.0", + "string.prototype.repeat": "^0.2.0", + "vows": "^0.8.1" + }, + "engines": { + "node": ">=0.8" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/salesforce/tough-cookie", + "keywords": [ + "HTTP", + "cookie", + "cookies", + "set-cookie", + "cookiejar", + "jar", + "RFC6265", + "RFC2965" + ], + "license": "BSD-3-Clause", + "main": "./lib/cookie", + "name": "tough-cookie", + "repository": { + "type": "git", + "url": "git://github.com/salesforce/tough-cookie.git" + }, + "scripts": { + "cover": "nyc --reporter=lcov --reporter=html vows test/*_test.js", + "test": "vows test/*_test.js" + }, + "version": "2.4.3" +} diff --git a/node_modules/tunnel-agent/LICENSE b/node_modules/tunnel-agent/LICENSE new file mode 100644 index 0000000..a4a9aee --- /dev/null +++ b/node_modules/tunnel-agent/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/tunnel-agent/README.md b/node_modules/tunnel-agent/README.md new file mode 100644 index 0000000..bb533d5 --- /dev/null +++ b/node_modules/tunnel-agent/README.md @@ -0,0 +1,4 @@ +tunnel-agent +============ + +HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/tunnel-agent/index.js b/node_modules/tunnel-agent/index.js new file mode 100644 index 0000000..3ee9abc --- /dev/null +++ b/node_modules/tunnel-agent/index.js @@ -0,0 +1,244 @@ +'use strict' + +var net = require('net') + , tls = require('tls') + , http = require('http') + , https = require('https') + , events = require('events') + , assert = require('assert') + , util = require('util') + , Buffer = require('safe-buffer').Buffer + ; + +exports.httpOverHttp = httpOverHttp +exports.httpsOverHttp = httpsOverHttp +exports.httpOverHttps = httpOverHttps +exports.httpsOverHttps = httpsOverHttps + + +function httpOverHttp(options) { + var agent = new TunnelingAgent(options) + agent.request = http.request + return agent +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options) + agent.request = http.request + agent.createSocket = createSecureSocket + agent.defaultPort = 443 + return agent +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options) + agent.request = https.request + return agent +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options) + agent.request = https.request + agent.createSocket = createSecureSocket + agent.defaultPort = 443 + return agent +} + + +function TunnelingAgent(options) { + var self = this + self.options = options || {} + self.proxyOptions = self.options.proxy || {} + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets + self.requests = [] + self.sockets = [] + + self.on('free', function onFree(socket, host, port) { + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i] + if (pending.host === host && pending.port === port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1) + pending.request.onSocket(socket) + return + } + } + socket.destroy() + self.removeSocket(socket) + }) +} +util.inherits(TunnelingAgent, events.EventEmitter) + +TunnelingAgent.prototype.addRequest = function addRequest(req, options) { + var self = this + + // Legacy API: addRequest(req, host, port, path) + if (typeof options === 'string') { + options = { + host: options, + port: arguments[2], + path: arguments[3] + }; + } + + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push({host: options.host, port: options.port, request: req}) + return + } + + // If we are under maxSockets create a new one. + self.createConnection({host: options.host, port: options.port, request: req}) +} + +TunnelingAgent.prototype.createConnection = function createConnection(pending) { + var self = this + + self.createSocket(pending, function(socket) { + socket.on('free', onFree) + socket.on('close', onCloseOrRemove) + socket.on('agentRemove', onCloseOrRemove) + pending.request.onSocket(socket) + + function onFree() { + self.emit('free', socket, pending.host, pending.port) + } + + function onCloseOrRemove(err) { + self.removeSocket(socket) + socket.removeListener('free', onFree) + socket.removeListener('close', onCloseOrRemove) + socket.removeListener('agentRemove', onCloseOrRemove) + } + }) +} + +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this + var placeholder = {} + self.sockets.push(placeholder) + + var connectOptions = mergeOptions({}, self.proxyOptions, + { method: 'CONNECT' + , path: options.host + ':' + options.port + , agent: false + } + ) + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {} + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + Buffer.from(connectOptions.proxyAuth).toString('base64') + } + + debug('making CONNECT request') + var connectReq = self.request(connectOptions) + connectReq.useChunkedEncodingByDefault = false // for v0.6 + connectReq.once('response', onResponse) // for v0.6 + connectReq.once('upgrade', onUpgrade) // for v0.6 + connectReq.once('connect', onConnect) // for v0.7 or later + connectReq.once('error', onError) + connectReq.end() + + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true + } + + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head) + }) + } + + function onConnect(res, socket, head) { + connectReq.removeAllListeners() + socket.removeAllListeners() + + if (res.statusCode === 200) { + assert.equal(head.length, 0) + debug('tunneling connection has established') + self.sockets[self.sockets.indexOf(placeholder)] = socket + cb(socket) + } else { + debug('tunneling socket could not be established, statusCode=%d', res.statusCode) + var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) + error.code = 'ECONNRESET' + options.request.emit('error', error) + self.removeSocket(placeholder) + } + } + + function onError(cause) { + connectReq.removeAllListeners() + + debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) + var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) + error.code = 'ECONNRESET' + options.request.emit('error', error) + self.removeSocket(placeholder) + } +} + +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) return + + this.sockets.splice(pos, 1) + + var pending = this.requests.shift() + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createConnection(pending) + } +} + +function createSecureSocket(options, cb) { + var self = this + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, mergeOptions({}, self.options, + { servername: options.host + , socket: socket + } + )) + self.sockets[self.sockets.indexOf(socket)] = secureSocket + cb(secureSocket) + }) +} + + +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i] + if (typeof overrides === 'object') { + var keys = Object.keys(overrides) + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j] + if (overrides[k] !== undefined) { + target[k] = overrides[k] + } + } + } + } + return target +} + + +var debug +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments) + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0] + } else { + args.unshift('TUNNEL:') + } + console.error.apply(console, args) + } +} else { + debug = function() {} +} +exports.debug = debug // for test diff --git a/node_modules/tunnel-agent/package.json b/node_modules/tunnel-agent/package.json new file mode 100644 index 0000000..2b9f9c1 --- /dev/null +++ b/node_modules/tunnel-agent/package.json @@ -0,0 +1,58 @@ +{ + "_args": [ + [ + "tunnel-agent@0.6.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "tunnel-agent@0.6.0", + "_id": "tunnel-agent@0.6.0", + "_inBundle": false, + "_integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "_location": "/tunnel-agent", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "tunnel-agent@0.6.0", + "name": "tunnel-agent", + "escapedName": "tunnel-agent", + "rawSpec": "0.6.0", + "saveSpec": null, + "fetchSpec": "0.6.0" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "_spec": "0.6.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": "http://www.futurealoof.com" + }, + "bugs": { + "url": "https://github.com/mikeal/tunnel-agent/issues" + }, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", + "devDependencies": {}, + "engines": { + "node": "*" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/mikeal/tunnel-agent#readme", + "license": "Apache-2.0", + "main": "index.js", + "name": "tunnel-agent", + "optionalDependencies": {}, + "repository": { + "url": "git+https://github.com/mikeal/tunnel-agent.git" + }, + "version": "0.6.0" +} diff --git a/node_modules/tweetnacl/.npmignore b/node_modules/tweetnacl/.npmignore new file mode 100644 index 0000000..7d98dcb --- /dev/null +++ b/node_modules/tweetnacl/.npmignore @@ -0,0 +1,4 @@ +.eslintrc +.travis.yml +bower.json +test diff --git a/node_modules/tweetnacl/AUTHORS.md b/node_modules/tweetnacl/AUTHORS.md new file mode 100644 index 0000000..6d74d40 --- /dev/null +++ b/node_modules/tweetnacl/AUTHORS.md @@ -0,0 +1,28 @@ +List of TweetNaCl.js authors +============================ + + Alphabetical order by first name. + Format: Name (GitHub username or URL) + +* AndSDev (@AndSDev) +* Devi Mandiri (@devi) +* Dmitry Chestnykh (@dchest) + +List of authors of third-party public domain code from which TweetNaCl.js code was derived +========================================================================================== + +[TweetNaCl](http://tweetnacl.cr.yp.to/) +-------------------------------------- + +* Bernard van Gastel +* Daniel J. Bernstein +* Peter Schwabe +* Sjaak Smetsers +* Tanja Lange +* Wesley Janssen + + +[Poly1305-donna](https://github.com/floodyberry/poly1305-donna) +-------------------------------------------------------------- + +* Andrew Moon (@floodyberry) diff --git a/node_modules/tweetnacl/CHANGELOG.md b/node_modules/tweetnacl/CHANGELOG.md new file mode 100644 index 0000000..92a4fdc --- /dev/null +++ b/node_modules/tweetnacl/CHANGELOG.md @@ -0,0 +1,221 @@ +TweetNaCl.js Changelog +====================== + + +v0.14.5 +------- + +* Fixed incomplete return types in TypeScript typings. +* Replaced COPYING.txt with LICENSE file, which now has public domain dedication + text from The Unlicense. License fields in package.json and bower.json have + been set to "Unlicense". The project was and will be in the public domain -- + this change just makes it easier for automated tools to know about this fact by + using the widely recognized and SPDX-compatible template for public domain + dedication. + + +v0.14.4 +------- + +* Added TypeScript type definitions (contributed by @AndSDev). +* Improved benchmarking code. + + +v0.14.3 +------- + +Fixed a bug in the fast version of Poly1305 and brought it back. + +Thanks to @floodyberry for promptly responding and fixing the original C code: + +> "The issue was not properly detecting if st->h was >= 2^130 - 5, coupled with +> [testing mistake] not catching the failure. The chance of the bug affecting +> anything in the real world is essentially zero luckily, but it's good to have +> it fixed." + +https://github.com/floodyberry/poly1305-donna/issues/2#issuecomment-202698577 + + +v0.14.2 +------- + +Switched Poly1305 fast version back to original (slow) version due to a bug. + + +v0.14.1 +------- + +No code changes, just tweaked packaging and added COPYING.txt. + + +v0.14.0 +------- + +* **Breaking change!** All functions from `nacl.util` have been removed. These + functions are no longer available: + + nacl.util.decodeUTF8 + nacl.util.encodeUTF8 + nacl.util.decodeBase64 + nacl.util.encodeBase64 + + If want to continue using them, you can include + package: + + + + + or + + var nacl = require('tweetnacl'); + nacl.util = require('tweetnacl-util'); + + However it is recommended to use better packages that have wider + compatibility and better performance. Functions from `nacl.util` were never + intended to be robust solution for string conversion and were included for + convenience: cryptography library is not the right place for them. + + Currently calling these functions will throw error pointing to + `tweetnacl-util-js` (in the next version this error message will be removed). + +* Improved detection of available random number generators, making it possible + to use `nacl.randomBytes` and related functions in Web Workers without + changes. + +* Changes to testing (see README). + + +v0.13.3 +------- + +No code changes. + +* Reverted license field in package.json to "Public domain". + +* Fixed typo in README. + + +v0.13.2 +------- + +* Fixed undefined variable bug in fast version of Poly1305. No worries, this + bug was *never* triggered. + +* Specified CC0 public domain dedication. + +* Updated development dependencies. + + +v0.13.1 +------- + +* Exclude `crypto` and `buffer` modules from browserify builds. + + +v0.13.0 +------- + +* Made `nacl-fast` the default version in NPM package. Now + `require("tweetnacl")` will use fast version; to get the original version, + use `require("tweetnacl/nacl.js")`. + +* Cleanup temporary array after generating random bytes. + + +v0.12.2 +------- + +* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, + `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. + + +v0.12.1 +------- + +* Significantly improved performance of Salsa20 (~1.5x faster) and + Poly1305 (~3.5x faster) in `nacl-fast` version. + + +v0.12.0 +------- + +* Instead of using the given secret key directly, TweetNaCl.js now copies it to + a new array in `nacl.box.keyPair.fromSecretKey` and + `nacl.sign.keyPair.fromSecretKey`. + + +v0.11.2 +------- + +* Added new constant: `nacl.sign.seedLength`. + + +v0.11.1 +------- + +* Even faster hash for both short and long inputs (in `nacl-fast`). + + +v0.11.0 +------- + +* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs + deterministically from a 32-byte seed. (It behaves like + [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) + `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) + +* Fast version now has an improved hash implementation that is 2x-5x faster. + +* Fixed benchmarks, which may have produced incorrect measurements. + + +v0.10.1 +------- + +* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. + + +v0.10.0 +------- + +* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal + with signed messages, and new `nacl.sign.detached` and + `nacl.sign.detached.verify` are available. + + Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a + message and "detached" signature. This was unlike NaCl's API, which dealt with + signed messages (concatenation of signature and message). + + The new API is: + + nacl.sign(message, secretKey) -> signedMessage + nacl.sign.open(signedMessage, publicKey) -> message | null + + Since detached signatures are common, two new API functions were introduced: + + nacl.sign.detached(message, secretKey) -> signature + nacl.sign.detached.verify(message, signature, publicKey) -> true | false + + (Note that it's `verify`, not `open`, and it returns a boolean value, unlike + `open`, which returns an "unsigned" message.) + +* NPM package now comes without `test` directory to keep it small. + + +v0.9.2 +------ + +* Improved documentation. +* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 + bytes in Poly1305 (and thus, secretbox and box). However this has no impact + in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit + indexes, and most implementations won't allocate more than a gigabyte or so. + (Obviously, there are no tests for the correctness of implementation.) Also, + it's not recommended to use messages that large without splitting them into + smaller packets anyway. + + +v0.9.1 +------ + +* Initial release diff --git a/node_modules/tweetnacl/LICENSE b/node_modules/tweetnacl/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/node_modules/tweetnacl/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a8eb4a9 --- /dev/null +++ b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# Important! + +If your contribution is not trivial (not a typo fix, etc.), we can only accept +it if you dedicate your copyright for the contribution to the public domain. +Make sure you understand what it means (see http://unlicense.org/)! If you +agree, please add yourself to AUTHORS.md file, and include the following text +to your pull request description or a comment in it: + +------------------------------------------------------------------------------ + + I dedicate any and all copyright interest in this software to the + public domain. I make this dedication for the benefit of the public at + large and to the detriment of my heirs and successors. I intend this + dedication to be an overt act of relinquishment in perpetuity of all + present and future rights to this software under copyright law. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md new file mode 100644 index 0000000..ffb6871 --- /dev/null +++ b/node_modules/tweetnacl/README.md @@ -0,0 +1,459 @@ +TweetNaCl.js +============ + +Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) +to JavaScript for modern browsers and Node.js. Public domain. + +[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) +](https://travis-ci.org/dchest/tweetnacl-js) + +Demo: + +**:warning: The library is stable and API is frozen, however it has not been +independently reviewed. If you can help reviewing it, please [contact +me](mailto:dmitry@codingrobots.com).** + +Documentation +============= + +* [Overview](#overview) +* [Installation](#installation) +* [Usage](#usage) + * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) + * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) + * [Scalar multiplication](#scalar-multiplication) + * [Signatures](#signatures) + * [Hashing](#hashing) + * [Random bytes generation](#random-bytes-generation) + * [Constant-time comparison](#constant-time-comparison) +* [System requirements](#system-requirements) +* [Development and testing](#development-and-testing) +* [Benchmarks](#benchmarks) +* [Contributors](#contributors) +* [Who uses it](#who-uses-it) + + +Overview +-------- + +The primary goal of this project is to produce a translation of TweetNaCl to +JavaScript which is as close as possible to the original C implementation, plus +a thin layer of idiomatic high-level API on top of it. + +There are two versions, you can use either of them: + +* `nacl.js` is the port of TweetNaCl with minimum differences from the + original + high-level API. + +* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with + faster versions. + + +Installation +------------ + +You can install TweetNaCl.js via a package manager: + +[Bower](http://bower.io): + + $ bower install tweetnacl + +[NPM](https://www.npmjs.org/): + + $ npm install tweetnacl + +or [download source code](https://github.com/dchest/tweetnacl-js/releases). + + +Usage +----- + +All API functions accept and return bytes as `Uint8Array`s. If you need to +encode or decode strings, use functions from + or one of the more robust codec +packages. + +In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you +can freely pass them to TweetNaCl.js functions as arguments. The returned +objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to +convert them manually; make sure to convert using copying: `new Buffer(array)`, +instead of sharing: `new Buffer(array.buffer)`, because some functions return +subarrays of their buffers. + + +### Public-key authenticated encryption (box) + +Implements *curve25519-xsalsa20-poly1305*. + +#### nacl.box.keyPair() + +Generates a new random key pair for box and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 32-byte secret key + } + + +#### nacl.box.keyPair.fromSecretKey(secretKey) + +Returns a key pair for box with public key corresponding to the given secret +key. + +#### nacl.box(message, nonce, theirPublicKey, mySecretKey) + +Encrypt and authenticates message using peer's public key, our secret key, and +the given nonce, which must be unique for each distinct message for a key pair. + +Returns an encrypted and authenticated message, which is +`nacl.box.overheadLength` longer than the original message. + +#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) + +Authenticates and decrypts the given box with peer's public key, our secret +key, and the given nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.box.before(theirPublicKey, mySecretKey) + +Returns a precomputed shared key which can be used in `nacl.box.after` and +`nacl.box.open.after`. + +#### nacl.box.after(message, nonce, sharedKey) + +Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.open.after(box, nonce, sharedKey) + +Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.publicKeyLength = 32 + +Length of public key in bytes. + +#### nacl.box.secretKeyLength = 32 + +Length of secret key in bytes. + +#### nacl.box.sharedKeyLength = 32 + +Length of precomputed shared key in bytes. + +#### nacl.box.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.box.overheadLength = 16 + +Length of overhead added to box compared to original message. + + +### Secret-key authenticated encryption (secretbox) + +Implements *xsalsa20-poly1305*. + +#### nacl.secretbox(message, nonce, key) + +Encrypt and authenticates message using the key and the nonce. The nonce must +be unique for each distinct message for this key. + +Returns an encrypted and authenticated message, which is +`nacl.secretbox.overheadLength` longer than the original message. + +#### nacl.secretbox.open(box, nonce, key) + +Authenticates and decrypts the given secret box using the key and the nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.secretbox.keyLength = 32 + +Length of key in bytes. + +#### nacl.secretbox.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.secretbox.overheadLength = 16 + +Length of overhead added to secret box compared to original message. + + +### Scalar multiplication + +Implements *curve25519*. + +#### nacl.scalarMult(n, p) + +Multiplies an integer `n` by a group element `p` and returns the resulting +group element. + +#### nacl.scalarMult.base(n) + +Multiplies an integer `n` by a standard group element and returns the resulting +group element. + +#### nacl.scalarMult.scalarLength = 32 + +Length of scalar in bytes. + +#### nacl.scalarMult.groupElementLength = 32 + +Length of group element in bytes. + + +### Signatures + +Implements [ed25519](http://ed25519.cr.yp.to). + +#### nacl.sign.keyPair() + +Generates new random key pair for signing and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 64-byte secret key + } + +#### nacl.sign.keyPair.fromSecretKey(secretKey) + +Returns a signing key pair with public key corresponding to the given +64-byte secret key. The secret key must have been generated by +`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. + +#### nacl.sign.keyPair.fromSeed(seed) + +Returns a new signing key pair generated deterministically from a 32-byte seed. +The seed must contain enough entropy to be secure. This method is not +recommended for general use: instead, use `nacl.sign.keyPair` to generate a new +key pair from a random seed. + +#### nacl.sign(message, secretKey) + +Signs the message using the secret key and returns a signed message. + +#### nacl.sign.open(signedMessage, publicKey) + +Verifies the signed message and returns the message without signature. + +Returns `null` if verification failed. + +#### nacl.sign.detached(message, secretKey) + +Signs the message using the secret key and returns a signature. + +#### nacl.sign.detached.verify(message, signature, publicKey) + +Verifies the signature for the message and returns `true` if verification +succeeded or `false` if it failed. + +#### nacl.sign.publicKeyLength = 32 + +Length of signing public key in bytes. + +#### nacl.sign.secretKeyLength = 64 + +Length of signing secret key in bytes. + +#### nacl.sign.seedLength = 32 + +Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. + +#### nacl.sign.signatureLength = 64 + +Length of signature in bytes. + + +### Hashing + +Implements *SHA-512*. + +#### nacl.hash(message) + +Returns SHA-512 hash of the message. + +#### nacl.hash.hashLength = 64 + +Length of hash in bytes. + + +### Random bytes generation + +#### nacl.randomBytes(length) + +Returns a `Uint8Array` of the given length containing random bytes of +cryptographic quality. + +**Implementation note** + +TweetNaCl.js uses the following methods to generate random bytes, +depending on the platform it runs on: + +* `window.crypto.getRandomValues` (WebCrypto standard) +* `window.msCrypto.getRandomValues` (Internet Explorer 11) +* `crypto.randomBytes` (Node.js) + +If the platform doesn't provide a suitable PRNG, the following functions, +which require random numbers, will throw exception: + +* `nacl.randomBytes` +* `nacl.box.keyPair` +* `nacl.sign.keyPair` + +Other functions are deterministic and will continue working. + +If a platform you are targeting doesn't implement secure random number +generator, but you somehow have a cryptographically-strong source of entropy +(not `Math.random`!), and you know what you are doing, you can plug it into +TweetNaCl.js like this: + + nacl.setPRNG(function(x, n) { + // ... copy n random bytes into x ... + }); + +Note that `nacl.setPRNG` *completely replaces* internal random byte generator +with the one provided. + + +### Constant-time comparison + +#### nacl.verify(x, y) + +Compares `x` and `y` in constant time and returns `true` if their lengths are +non-zero and equal, and their contents are equal. + +Returns `false` if either of the arguments has zero length, or arguments have +different lengths, or their contents differ. + + +System requirements +------------------- + +TweetNaCl.js supports modern browsers that have a cryptographically secure +pseudorandom number generator and typed arrays, including the latest versions +of: + +* Chrome +* Firefox +* Safari (Mac, iOS) +* Internet Explorer 11 + +Other systems: + +* Node.js + + +Development and testing +------------------------ + +Install NPM modules needed for development: + + $ npm install + +To build minified versions: + + $ npm run build + +Tests use minified version, so make sure to rebuild it every time you change +`nacl.js` or `nacl-fast.js`. + +### Testing + +To run tests in Node.js: + + $ npm run test-node + +By default all tests described here work on `nacl.min.js`. To test other +versions, set environment variable `NACL_SRC` to the file name you want to test. +For example, the following command will test fast minified version: + + $ NACL_SRC=nacl-fast.min.js npm run test-node + +To run full suite of tests in Node.js, including comparing outputs of +JavaScript port to outputs of the original C version: + + $ npm run test-node-all + +To prepare tests for browsers: + + $ npm run build-test-browser + +and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to +run them. + +To run headless browser tests with `tape-run` (powered by Electron): + + $ npm run test-browser + +(If you get `Error: spawn ENOENT`, install *xvfb*: `sudo apt-get install xvfb`.) + +To run tests in both Node and Electron: + + $ npm test + +### Benchmarking + +To run benchmarks in Node.js: + + $ npm run bench + $ NACL_SRC=nacl-fast.min.js npm run bench + +To run benchmarks in a browser, open `test/benchmark/bench.html` (or +`test/benchmark/bench-fast.html`). + + +Benchmarks +---------- + +For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) +laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi +Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in +Chrome 52/Android: + +| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | +| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| +| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | +| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | +| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | +| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | +| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | +| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | +| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | +| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | + +(You can run benchmarks on your devices by clicking on the links at the bottom +of the [home page](https://tweetnacl.js.org)). + +In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and +authenticate more than 57000 messages per second on a typical laptop or more than +14000 messages per second on a $170 smartphone, sign about 200 and verify 100 +messages per second on a laptop or 60 and 30 messages per second on a smartphone, +per CPU core (with Web Workers you can do these operations in parallel), +which is good enough for most applications. + + +Contributors +------------ + +See AUTHORS.md file. + + +Third-party libraries based on TweetNaCl.js +------------------------------------------- + +* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation +* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption +* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) +* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules + + +Who uses it +----------- + +Some notable users of TweetNaCl.js: + +* [miniLock](http://minilock.io/) +* [Stellar](https://www.stellar.org/) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js new file mode 100644 index 0000000..5e4562f --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.js @@ -0,0 +1,2388 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js new file mode 100644 index 0000000..8bc47da --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.min.js @@ -0,0 +1,2 @@ +!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+c|0,B=B+u|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,c=new Uint8Array(16),u=new Uint8Array(64);for(s=0;s<16;s++)c[s]=0;for(s=0;s<8;s++)c[s]=i[s];for(;o>=64;){for(a(u,c,h,ur),s=0;s<64;s++)r[t+s]=n[e+s]^u[s];for(f=1,s=8;s<16;s++)f=f+(255&c[s])|0,c[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(u,c,h,ur),s=0;s=64;){for(a(s,f,o,ur),h=0;h<64;h++)r[t+h]=s[h];for(i=1,h=8;h<16;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,ur),h=0;h>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,c=0,u=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,c+=e*I,u+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,c+=e*F,u+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,c+=e*C,u+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,c+=e*N,u+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,c+=e*O,u+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],c+=e*P,u+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],u+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X;S+=e*D;K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,c+=38*m,u+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=c,r[6]=u,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g;r[14]=_;r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),c=$(),u=$(),y=$();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;o<16;o++)f[o]=h[o],c[o]=a[o]=s[o]=0;for(a[0]=c[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,c,e),x(u,a,s),M(a,a,s),x(s,f,c),M(f,f,c),B(c,u),B(y,a),m(a,s,a),m(s,f,u),x(u,a,s),M(a,a,s),B(f,a),M(s,c,y),m(a,s,ir),x(a,a,c),m(s,s,a),m(a,c,y),m(c,f,h),B(f,u),_(a,f,e),_(s,c,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=c[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,ur)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;U<16;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;U<80;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,c=N,u=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,u=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=c,k=u,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;E<16;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;o=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;o>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;o<32;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*vr[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),c=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var u=n+64;for(o=0;o>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],c=[$(),$(),$(),$()];if(h=-1,n<64)return-1;if(X(c,e))return-1;for(i=0;i>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),c=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|c<<8),k+=c>>>5|U,u=0,y=u,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),u=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),u+=y>>>13,y&=8191,l=u,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),u=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),u+=l>>>13,l&=8191,w=u,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),u=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),u+=w>>>13,w&=8191,p=u,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),u=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),u+=p>>>13,p&=8191,v=u,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,u=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),u+=v>>>13,v&=8191,b=u,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,u=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),u+=b>>>13,b&=8191,g=u,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,u=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),u+=g>>>13,g&=8191,_=u,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,u=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),u+=_>>>13,_&=8191,A=u,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,u=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),u+=A>>>13,A&=8191,d=u,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,u=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,u+=d>>>13,d&=8191,u=(u<<2)+u|0,u=u+y|0,y=8191&u,u>>>=13,l+=u,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;e=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;n void): void; +} diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js new file mode 100644 index 0000000..f72dd78 --- /dev/null +++ b/node_modules/tweetnacl/nacl.js @@ -0,0 +1,1175 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function L32(x, c) { return (x << c) | (x >>> (32 - c)); } + +function ld32(x, i) { + var u = x[i+3] & 0xff; + u = (u<<8)|(x[i+2] & 0xff); + u = (u<<8)|(x[i+1] & 0xff); + return (u<<8)|(x[i+0] & 0xff); +} + +function dl64(x, i) { + var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; + var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; + return new u64(h, l); +} + +function st32(x, j, u) { + var i; + for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } +} + +function ts64(x, i, u) { + x[i] = (u.hi >> 24) & 0xff; + x[i+1] = (u.hi >> 16) & 0xff; + x[i+2] = (u.hi >> 8) & 0xff; + x[i+3] = u.hi & 0xff; + x[i+4] = (u.lo >> 24) & 0xff; + x[i+5] = (u.lo >> 16) & 0xff; + x[i+6] = (u.lo >> 8) & 0xff; + x[i+7] = u.lo & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core(out,inp,k,c,h) { + var w = new Uint32Array(16), x = new Uint32Array(16), + y = new Uint32Array(16), t = new Uint32Array(4); + var i, j, m; + + for (i = 0; i < 4; i++) { + x[5*i] = ld32(c, 4*i); + x[1+i] = ld32(k, 4*i); + x[6+i] = ld32(inp, 4*i); + x[11+i] = ld32(k, 16+4*i); + } + + for (i = 0; i < 16; i++) y[i] = x[i]; + + for (i = 0; i < 20; i++) { + for (j = 0; j < 4; j++) { + for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; + t[1] ^= L32((t[0]+t[3])|0, 7); + t[2] ^= L32((t[1]+t[0])|0, 9); + t[3] ^= L32((t[2]+t[1])|0,13); + t[0] ^= L32((t[3]+t[2])|0,18); + for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; + } + for (m = 0; m < 16; m++) x[m] = w[m]; + } + + if (h) { + for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; + for (i = 0; i < 4; i++) { + x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; + x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; + } + for (i = 0; i < 4; i++) { + st32(out,4*i,x[5*i]); + st32(out,16+4*i,x[6+i]); + } + } else { + for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); + } +} + +function crypto_core_salsa20(out,inp,k,c) { + core(out,inp,k,c,false); + return 0; +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core(out,inp,k,c,true); + return 0; +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + if (!b) return 0; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + if (m) mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,d,n,k) { + return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); +} + +function add1305(h, c) { + var j, u = 0; + for (j = 0; j < 17; j++) { + u = (u + ((h[j] + c[j]) | 0)) | 0; + h[j] = u & 255; + u >>>= 8; + } +} + +var minusp = new Uint32Array([ + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +]); + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s, i, j, u; + var x = new Uint32Array(17), r = new Uint32Array(17), + h = new Uint32Array(17), c = new Uint32Array(17), + g = new Uint32Array(17); + for (j = 0; j < 17; j++) r[j]=h[j]=0; + for (j = 0; j < 16; j++) r[j]=k[j]; + r[3]&=15; + r[4]&=252; + r[7]&=15; + r[8]&=252; + r[11]&=15; + r[12]&=252; + r[15]&=15; + + while (n > 0) { + for (j = 0; j < 17; j++) c[j] = 0; + for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; + c[j] = 1; + mpos += j; n -= j; + add1305(h,c); + for (i = 0; i < 17; i++) { + x[i] = 0; + for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; + } + for (i = 0; i < 17; i++) h[i] = x[i]; + u = 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u & 3; + u = (5 * (u >>> 2)) | 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u; + } + + for (j = 0; j < 17; j++) g[j] = h[j]; + add1305(h,minusp); + s = (-(h[16] >>> 7) | 0); + for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); + + for (j = 0; j < 16; j++) c[j] = k[j + 16]; + c[16] = 0; + add1305(h,c); + for (j = 0; j < 16; j++) out[outpos+j] = h[j]; + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var c; + var i; + for (i = 0; i < 16; i++) { + o[i] += 65536; + c = Math.floor(o[i] / 65536); + o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); + o[i] -= (c * 65536); + } +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; +} + +function Z(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; +} + +function M(o, a, b) { + var i, j, t = new Float64Array(31); + for (i = 0; i < 31; i++) t[i] = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + t[i+j] += a[i] * b[j]; + } + } + for (i = 0; i < 15; i++) { + t[i] += 38 * t[i+16]; + } + for (i = 0; i < 16; i++) o[i] = t[i]; + car25519(o); + car25519(o); +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +function add64() { + var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; + for (i = 0; i < arguments.length; i++) { + l = arguments[i].lo; + h = arguments[i].hi; + a += (l & m16); b += (l >>> 16); + c += (h & m16); d += (h >>> 16); + } + + b += (a >>> 16); + c += (b >>> 16); + d += (c >>> 16); + + return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); +} + +function shr64(x, c) { + return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); +} + +function xor64() { + var l = 0, h = 0, i; + for (i = 0; i < arguments.length; i++) { + l ^= arguments[i].lo; + h ^= arguments[i].hi; + } + return new u64(h, l); +} + +function R(x, c) { + var h, l, c1 = 32 - c; + if (c < 32) { + h = (x.hi >>> c) | (x.lo << c1); + l = (x.lo >>> c) | (x.hi << c1); + } else if (c < 64) { + h = (x.lo >>> c) | (x.hi << c1); + l = (x.hi >>> c) | (x.lo << c1); + } + return new u64(h, l); +} + +function Ch(x, y, z) { + var h = (x.hi & y.hi) ^ (~x.hi & z.hi), + l = (x.lo & y.lo) ^ (~x.lo & z.lo); + return new u64(h, l); +} + +function Maj(x, y, z) { + var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), + l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); + return new u64(h, l); +} + +function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } +function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } +function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } +function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } + +var K = [ + new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), + new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), + new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), + new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), + new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), + new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), + new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), + new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), + new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), + new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), + new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), + new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), + new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), + new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), + new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), + new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), + new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), + new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), + new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), + new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), + new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), + new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), + new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), + new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), + new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), + new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), + new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), + new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), + new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), + new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), + new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), + new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), + new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), + new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), + new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), + new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), + new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), + new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), + new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), + new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) +]; + +function crypto_hashblocks(x, m, n) { + var z = [], b = [], a = [], w = [], t, i, j; + + for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); + for (i = 0; i < 80; i++) { + for (j = 0; j < 8; j++) b[j] = a[j]; + t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); + b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); + b[3] = add64(b[3], t); + for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); + } + } + } + + for (i = 0; i < 8; i++) { + a[i] = add64(a[i], z[i]); + z[i] = a[i]; + } + + pos += 128; + n -= 128; + } + + for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); + return n; +} + +var iv = new Uint8Array([ + 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, + 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, + 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, + 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, + 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, + 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, + 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, + 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 +]); + +function crypto_hash(out, m, n) { + var h = new Uint8Array(64), x = new Uint8Array(256); + var i, b = n; + + for (i = 0; i < 64; i++) h[i] = iv[i]; + + crypto_hashblocks(h, m, n); + n %= 128; + + for (i = 0; i < 256; i++) x[i] = 0; + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); + crypto_hashblocks(h, x, n); + + for (i = 0; i < 64; i++) out[i] = h[i]; + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js new file mode 100644 index 0000000..4484974 --- /dev/null +++ b/node_modules/tweetnacl/nacl.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new sr(e,t)}function o(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),l=new Uint32Array(16),s=new Uint32Array(16),h=new Uint32Array(4);for(u=0;u<4;u++)l[5*u]=e(a,4*u),l[1+u]=e(i,4*u),l[6+u]=e(t,4*u),l[11+u]=e(i,16+4*u);for(u=0;u<16;u++)s[u]=l[u];for(u=0;u<20;u++){for(c=0;c<4;c++){for(w=0;w<4;w++)h[w]=l[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;w<4;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;w<16;w++)l[w]=y[w]}if(f){for(u=0;u<16;u++)l[u]=l[u]+s[u]|0;for(u=0;u<4;u++)l[5*u]=l[5*u]-e(a,4*u)|0,l[6+u]=l[6+u]-e(t,4*u)|0;for(u=0;u<4;u++)o(r,4*u,l[5*u]),o(r,16+4*u,l[6+u])}else for(u=0;u<16;u++)o(r,4*u,l[u]+s[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function l(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;u>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;u<17;u++)s[u]=0;for(u=0;u<16&&u>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(v(l,Sr),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,v(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(e<32)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;e<16;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),l=hr();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(l,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,l),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,l),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return k(s,s),Y(h,h,s),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new sr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new sr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<=128;){for(a=0;a<16;a++)y[a]=t(n,8*a+l);for(a=0;a<80;a++){for(f=0;f<8;f++)c[f]=w[f];for(o=M(w[7],X(w[4]),q(w[4],w[5],w[6]),Yr[a],y[a%16]),c[7]=M(o,V(w[0]),I(w[0],w[1],w[2])),c[3]=M(c[3],o),f=0;f<8;f++)w[(f+1)%8]=c[f];if(a%16===15)for(f=0;f<16;f++)y[f]=M(y[f],y[(f+9)%16],D(y[(f+1)%16]),H(y[(f+14)%16]))}for(a=0;a<8;a++)w[a]=M(w[a],u[a]),u[a]=w[a];l+=128,e-=128}for(a=0;a<8;a++)i(r,8*a,u[a]);return e}function Q(r,n,e){var t,o=new Uint8Array(64),a=new Uint8Array(256),f=e;for(t=0;t<64;t++)o[t]=Lr[t];for(J(o,n,e),e%=128,t=0;t<256;t++)a[t]=0;for(t=0;t=0;--o)t=e[o/8|0]>>(7&o)&1,$(r,n,t),W(n,r),W(r,r),$(r,n,t)}function er(r,n){var e=[hr(),hr(),hr(),hr()];U(e[0],dr),U(e[1],xr),U(e[2],_r),Y(e[3],dr,xr),nr(r,e,n)}function tr(r,n,e){var t,o=new Uint8Array(64),i=[hr(),hr(),hr(),hr()];for(e||gr(n,32),Q(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),rr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}function or(r,n){var e,t,o,i;for(t=63;t>=32;--t){for(e=0,o=t-32,i=t-12;o>8,n[o]-=256*e;n[o]+=e,n[t]=0}for(e=0,o=0;o<32;o++)n[o]+=e-(n[31]>>4)*kr[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*kr[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function ir(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;or(r,e)}function ar(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[hr(),hr(),hr(),hr()];Q(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&T(r[0],pr,r[0]),Y(r[3],r[0],r[1]),0)}function ur(r,n,e,t){var o,i,a=new Uint8Array(32),f=new Uint8Array(64),c=[hr(),hr(),hr(),hr()],w=[hr(),hr(),hr(),hr()];if(i=-1,e<64)return-1;if(fr(w,t))return-1;for(o=0;o=0},r.sign.keyPair=function(){var r=new Uint8Array(Vr),n=new Uint8Array(Xr);return tr(r,n),{publicKey:r,secretKey:n}},r.sign.keyPair.fromSecretKey=function(r){if(yr(r),r.length!==Xr)throw new Error("bad secret key size");for(var n=new Uint8Array(Vr),e=0;e/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", + "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js", + "test": "npm run test-node-all && npm run test-browser", + "test-browser": "NACL_SRC=${NACL_SRC:='nacl.min.js'} && npm run build-test-browser && cat $NACL_SRC test/browser/_bundle.js | tape-run | faucet", + "test-node": "tape test/*.js | faucet", + "test-node-all": "make -C test/c && tape test/*.js test/c/*.js | faucet" + }, + "types": "nacl.d.ts", + "version": "0.14.5" +} diff --git a/node_modules/type-fest/base.d.ts b/node_modules/type-fest/base.d.ts new file mode 100644 index 0000000..9005ef9 --- /dev/null +++ b/node_modules/type-fest/base.d.ts @@ -0,0 +1,38 @@ +// Types that are compatible with all supported TypeScript versions. +// It's shared between all TypeScript version-specific definitions. + +// Basic +export * from './source/basic'; + +// Utilities +export {Except} from './source/except'; +export {Mutable} from './source/mutable'; +export {Merge} from './source/merge'; +export {MergeExclusive} from './source/merge-exclusive'; +export {RequireAtLeastOne} from './source/require-at-least-one'; +export {RequireExactlyOne} from './source/require-exactly-one'; +export {PartialDeep} from './source/partial-deep'; +export {ReadonlyDeep} from './source/readonly-deep'; +export {LiteralUnion} from './source/literal-union'; +export {Promisable} from './source/promisable'; +export {Opaque} from './source/opaque'; +export {SetOptional} from './source/set-optional'; +export {SetRequired} from './source/set-required'; +export {ValueOf} from './source/value-of'; +export {PromiseValue} from './source/promise-value'; +export {AsyncReturnType} from './source/async-return-type'; +export {ConditionalExcept} from './source/conditional-except'; +export {ConditionalKeys} from './source/conditional-keys'; +export {ConditionalPick} from './source/conditional-pick'; +export {UnionToIntersection} from './source/union-to-intersection'; +export {Stringified} from './source/stringified'; +export {FixedLengthArray} from './source/fixed-length-array'; +export {IterableElement} from './source/iterable-element'; +export {Entry} from './source/entry'; +export {Entries} from './source/entries'; +export {SetReturnType} from './source/set-return-type'; +export {Asyncify} from './source/asyncify'; + +// Miscellaneous +export {PackageJson} from './source/package-json'; +export {TsConfigJson} from './source/tsconfig-json'; diff --git a/node_modules/type-fest/index.d.ts b/node_modules/type-fest/index.d.ts new file mode 100644 index 0000000..206261c --- /dev/null +++ b/node_modules/type-fest/index.d.ts @@ -0,0 +1,2 @@ +// These are all the basic types that's compatible with all supported TypeScript versions. +export * from './base'; diff --git a/node_modules/type-fest/license b/node_modules/type-fest/license new file mode 100644 index 0000000..3e4c85a --- /dev/null +++ b/node_modules/type-fest/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https:/sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/type-fest/package.json b/node_modules/type-fest/package.json new file mode 100644 index 0000000..455f700 --- /dev/null +++ b/node_modules/type-fest/package.json @@ -0,0 +1,90 @@ +{ + "_from": "type-fest@^0.20.2", + "_id": "type-fest@0.20.2", + "_inBundle": false, + "_integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "_location": "/type-fest", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "type-fest@^0.20.2", + "name": "type-fest", + "escapedName": "type-fest", + "rawSpec": "^0.20.2", + "saveSpec": null, + "fetchSpec": "^0.20.2" + }, + "_requiredBy": [ + "/boxen" + ], + "_resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "_shasum": "1bf207f4b28f91583666cb5fbd327887301cd5f4", + "_spec": "type-fest@^0.20.2", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/type-fest/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A collection of essential TypeScript types", + "devDependencies": { + "@sindresorhus/tsconfig": "~0.7.0", + "tsd": "^0.13.1", + "typescript": "^4.1.2", + "xo": "^0.35.0" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.d.ts", + "base.d.ts", + "source", + "ts41" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/type-fest#readme", + "keywords": [ + "typescript", + "ts", + "types", + "utility", + "util", + "utilities", + "omit", + "merge", + "json" + ], + "license": "(MIT OR CC0-1.0)", + "name": "type-fest", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/type-fest.git" + }, + "scripts": { + "//test": "xo && tsd && tsc", + "test": "xo && tsc" + }, + "types": "./index.d.ts", + "typesVersions": { + ">=4.1": { + "*": [ + "ts41/*" + ] + } + }, + "version": "0.20.2", + "xo": { + "rules": { + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/indent": "off", + "node/no-unsupported-features/es-builtins": "off" + } + } +} diff --git a/node_modules/type-fest/readme.md b/node_modules/type-fest/readme.md new file mode 100644 index 0000000..714df78 --- /dev/null +++ b/node_modules/type-fest/readme.md @@ -0,0 +1,658 @@ +
      +
      +
      + type-fest +
      +
      + A collection of essential TypeScript types +
      +
      +
      +
      +
      + +[![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://giphy.com/gifs/illustration-rainbow-unicorn-26AHG5KGFxSkUWw1i) + + +Many of the types here should have been built-in. You can help by suggesting some of them to the [TypeScript project](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). + +Either add this package as a dependency or copy-paste the needed types. No credit required. 👌 + +PR welcome for additional commonly needed types and docs improvements. Read the [contributing guidelines](.github/contributing.md) first. + +## Install + +``` +$ npm install type-fest +``` + +*Requires TypeScript >=3.4* + +## Usage + +```ts +import {Except} from 'type-fest'; + +type Foo = { + unicorn: string; + rainbow: boolean; +}; + +type FooWithoutRainbow = Except; +//=> {unicorn: string} +``` + +## API + +Click the type names for complete docs. + +### Basic + +- [`Primitive`](source/basic.d.ts) - Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive). +- [`Class`](source/basic.d.ts) - Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). +- [`TypedArray`](source/basic.d.ts) - Matches any [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray), like `Uint8Array` or `Float64Array`. +- [`JsonObject`](source/basic.d.ts) - Matches a JSON object. +- [`JsonArray`](source/basic.d.ts) - Matches a JSON array. +- [`JsonValue`](source/basic.d.ts) - Matches any valid JSON value. +- [`ObservableLike`](source/basic.d.ts) - Matches a value that is like an [Observable](https://github.com/tc39/proposal-observable). + +### Utilities + +- [`Except`](source/except.d.ts) - Create a type from an object type without certain keys. This is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). +- [`Mutable`](source/mutable.d.ts) - Convert an object with `readonly` keys into a mutable object. The inverse of `Readonly`. +- [`Merge`](source/merge.d.ts) - Merge two types into a new type. Keys of the second type overrides keys of the first type. +- [`MergeExclusive`](source/merge-exclusive.d.ts) - Create a type that has mutually exclusive keys. +- [`RequireAtLeastOne`](source/require-at-least-one.d.ts) - Create a type that requires at least one of the given keys. +- [`RequireExactlyOne`](source/require-exactly-one.d.ts) - Create a type that requires exactly a single key of the given keys and disallows more. +- [`PartialDeep`](source/partial-deep.d.ts) - Create a deeply optional version of another type. Use [`Partial`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1401-L1406) if you only need one level deep. +- [`ReadonlyDeep`](source/readonly-deep.d.ts) - Create a deeply immutable version of an `object`/`Map`/`Set`/`Array` type. Use [`Readonly`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1415-L1420) if you only need one level deep. +- [`LiteralUnion`](source/literal-union.d.ts) - Create a union type by combining primitive types and literal types without sacrificing auto-completion in IDEs for the literal type part of the union. Workaround for [Microsoft/TypeScript#29729](https://github.com/Microsoft/TypeScript/issues/29729). +- [`Promisable`](source/promisable.d.ts) - Create a type that represents either the value or the value wrapped in `PromiseLike`. +- [`Opaque`](source/opaque.d.ts) - Create an [opaque type](https://codemix.com/opaque-types-in-javascript/). +- [`SetOptional`](source/set-optional.d.ts) - Create a type that makes the given keys optional. +- [`SetRequired`](source/set-required.d.ts) - Create a type that makes the given keys required. +- [`ValueOf`](source/value-of.d.ts) - Create a union of the given object's values, and optionally specify which keys to get the values from. +- [`PromiseValue`](source/promise-value.d.ts) - Returns the type that is wrapped inside a `Promise`. +- [`AsyncReturnType`](source/async-return-type.d.ts) - Unwrap the return type of a function that returns a `Promise`. +- [`ConditionalKeys`](source/conditional-keys.d.ts) - Extract keys from a shape where values extend the given `Condition` type. +- [`ConditionalPick`](source/conditional-pick.d.ts) - Like `Pick` except it selects properties from a shape where the values extend the given `Condition` type. +- [`ConditionalExcept`](source/conditional-except.d.ts) - Like `Omit` except it removes properties from a shape where the values extend the given `Condition` type. +- [`UnionToIntersection`](source/union-to-intersection.d.ts) - Convert a union type to an intersection type. +- [`Stringified`](source/stringified.d.ts) - Create a type with the keys of the given type changed to `string` type. +- [`FixedLengthArray`](source/fixed-length-array.d.ts) - Create a type that represents an array of the given type and length. +- [`IterableElement`](source/iterable-element.d.ts) - Get the element type of an `Iterable`/`AsyncIterable`. For example, an array or a generator. +- [`Entry`](source/entry.d.ts) - Create a type that represents the type of an entry of a collection. +- [`Entries`](source/entries.d.ts) - Create a type that represents the type of the entries of a collection. +- [`SetReturnType`](source/set-return-type.d.ts) - Create a function type with a return type of your choice and the same parameters as the given function type. +- [`Asyncify`](source/asyncify.d.ts) - Create an async version of the given function type. + +### Template literal types + +*Note:* These require [TypeScript 4.1 or newer](https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/#template-literal-types). + +- [`CamelCase`](ts41/camel-case.d.ts) – Convert a string literal to camel-case (`fooBar`). +- [`KebabCase`](ts41/kebab-case.d.ts) – Convert a string literal to kebab-case (`foo-bar`). +- [`PascalCase`](ts41/pascal-case.d.ts) – Converts a string literal to pascal-case (`FooBar`) +- [`SnakeCase`](ts41/snake-case.d.ts) – Convert a string literal to snake-case (`foo_bar`). +- [`DelimiterCase`](ts41/delimiter-case.d.ts) – Convert a string literal to a custom string delimiter casing. + +### Miscellaneous + +- [`PackageJson`](source/package-json.d.ts) - Type for [npm's `package.json` file](https://docs.npmjs.com/creating-a-package-json-file). +- [`TsConfigJson`](source/tsconfig-json.d.ts) - Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (TypeScript 3.7). + +## Declined types + +*If we decline a type addition, we will make sure to document the better solution here.* + +- [`Diff` and `Spread`](https://github.com/sindresorhus/type-fest/pull/7) - The PR author didn't provide any real-world use-cases and the PR went stale. If you think this type is useful, provide some real-world use-cases and we might reconsider. +- [`Dictionary`](https://github.com/sindresorhus/type-fest/issues/33) - You only save a few characters (`Dictionary` vs `Record`) from [`Record`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1429-L1434), which is more flexible and well-known. Also, you shouldn't use an object as a dictionary. We have `Map` in JavaScript now. +- [`SubType`](https://github.com/sindresorhus/type-fest/issues/22) - The type is powerful, but lacks good use-cases and is prone to misuse. +- [`ExtractProperties` and `ExtractMethods`](https://github.com/sindresorhus/type-fest/pull/4) - The types violate the single responsibility principle. Instead, refine your types into more granular type hierarchies. + +## Tips + +### Built-in types + +There are many advanced types most users don't know about. + +- [`Partial`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1401-L1406) - Make all properties in `T` optional. +
      + + Example + + + [Playground](https://www.typescriptlang.org/play/#code/JYOwLgpgTgZghgYwgAgHIHsAmEDC6QzADmyA3gLABQyycADnanALYQBcyAzmFKEQNxUaddFDAcQAV2YAjaIMoBfKlQQAbOJ05osEAIIMAQpOBrsUMkOR1eANziRkCfISKSoD4Pg4ZseAsTIALyW1DS0DEysHADkvvoMMQA0VsKi4sgAzAAMuVaKClY2wPaOknSYDrguADwA0sgQAB6QIJjaANYQAJ7oMDp+LsQAfAAUXd0cdUnI9mo+uv6uANp1ALoAlKHhyGAAFsCcAHTOAW4eYF4gyxNrwbNwago0ypRWp66jH8QcAApwYmAjxq8SWIy2FDCNDA3ToKFBQyIdR69wmfQG1TOhShyBgomQX3w3GQE2Q6IA8jIAFYQBBgI4TTiEs5bTQYsFInrLTbbHZOIlgZDlSqQABqj0kKBC3yINx6a2xfOQwH6o2FVXFaklwSCIUkbQghBAEEwENSfNOlykEGefNe5uhB2O6sgS3GPRmLogmslG1tLxUOKgEDA7hAuydtteryAA) + + ```ts + interface NodeConfig { + appName: string; + port: number; + } + + class NodeAppBuilder { + private configuration: NodeConfig = { + appName: 'NodeApp', + port: 3000 + }; + + private updateConfig(key: Key, value: NodeConfig[Key]) { + this.configuration[key] = value; + } + + config(config: Partial) { + type NodeConfigKey = keyof NodeConfig; + + for (const key of Object.keys(config) as NodeConfigKey[]) { + const updateValue = config[key]; + + if (updateValue === undefined) { + continue; + } + + this.updateConfig(key, updateValue); + } + + return this; + } + } + + // `Partial`` allows us to provide only a part of the + // NodeConfig interface. + new NodeAppBuilder().config({appName: 'ToDoApp'}); + ``` +
      + +- [`Required`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1408-L1413) - Make all properties in `T` required. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4SwOwFwUwJwGYEMDGNgGED21VQGJZwC2wA3gFCjXAzFJgA2A-AFzADOUckA5gNxUaIYjA4ckvGG07c+g6gF8KQkAgCuEFFDA5O6gEbEwUbLm2ESwABQIixACJIoSdgCUYAR3Vg4MACYAPGYuFvYAfACU5Ko0APRxwADKMBD+wFAAFuh2Vv7OSBlYGdmc8ABu8LHKsRyGxqY4oQT21pTCIHQMjOwA5DAAHgACxAAOjDAAdChYxL0ANLHUouKSMH0AEmAAhJhY6ozpAJ77GTCMjMCiV0ToSAb7UJPPC9WRgrEJwAAqR6MwSRQPFGUFocDgRHYxnEfGAowh-zgUCOwF6KwkUl6tXqJhCeEsxDaS1AXSYfUGI3GUxmc0WSneQA) + + ```ts + interface ContactForm { + email?: string; + message?: string; + } + + function submitContactForm(formData: Required) { + // Send the form data to the server. + } + + submitContactForm({ + email: 'ex@mple.com', + message: 'Hi! Could you tell me more about…', + }); + + // TypeScript error: missing property 'message' + submitContactForm({ + email: 'ex@mple.com', + }); + ``` +
      + +- [`Readonly`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1415-L1420) - Make all properties in `T` readonly. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4UwOwVwW2AZA9gc3mAbmANsA3gKFCOAHkAzMgGkOJABEwAjKZa2kAUQCcvEu32AMQCGAF2FYBIAL4BufDRABLCKLBcywgMZgEKZOoDCiCGSXI8i4hGEwwALmABnUVxXJ57YFgzZHSVF8sT1BpBSItLGEnJz1kAy5LLy0TM2RHACUwYQATEywATwAeAITjU3MAPnkrCJMXLigtUT4AClxgGztKbyDgaX99I1TzAEokr1BRAAslJwA6FIqLAF48TtswHp9MHDla9hJGACswZvmyLjAwAC8wVpm5xZHkUZDaMKIwqyWXYCW0oN4sNlsA1h0ug5gAByACyBQAggAHJHQ7ZBIFoXbzBjMCz7OoQP5YIaJNYQMAAdziCVaALGNSIAHomcAACoFJFgADKWjcSNEwG4vC4ji0wggEEQguiTnMEGALWAV1yAFp8gVgEjeFyuKICvMrCTgVxnst5jtsGC4ljsPNhXxGaAWcAAOq6YRXYDCRg+RWIcA5JSC+kWdCepQ+v3RYCU3RInzRMCGwlpC19NYBW1Ye08R1AA) + + ```ts + enum LogLevel { + Off, + Debug, + Error, + Fatal + }; + + interface LoggerConfig { + name: string; + level: LogLevel; + } + + class Logger { + config: Readonly; + + constructor({name, level}: LoggerConfig) { + this.config = {name, level}; + Object.freeze(this.config); + } + } + + const config: LoggerConfig = { + name: 'MyApp', + level: LogLevel.Debug + }; + + const logger = new Logger(config); + + // TypeScript Error: cannot assign to read-only property. + logger.config.level = LogLevel.Error; + + // We are able to edit config variable as we please. + config.level = LogLevel.Error; + ``` +
      + +- [`Pick`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1422-L1427) - From `T`, pick a set of properties whose keys are in the union `K`. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4SwOwFwUwJwGYEMDGNgEE5TCgNugN4BQoZwOUBAXMAM5RyQDmA3KeSFABYCuAtgCMISMHloMmENh04oA9tBjQJjFuzIBfYrOAB6PcADCcGElh1gEGAHcKATwAO6ebyjB5CTNlwFwSxFR0BX5HeToYABNgBDh5fm8cfBg6AHIKG3ldA2BHOOcfFNpUygJ0pAhokr4hETFUgDpswywkggAFUwA3MFtgAF5gQgowKhhVKTYKGuFRcXo1aVZgbTIoJ3RW3xhOmB6+wfbcAGsAHi3kgBpgEtGy4AAfG54BWfqAPnZm4AAlZUj4MAkMA8GAGB4vEgfMlLLw6CwPBA8PYRmMgZVgAC6CgmI4cIommQELwICh8RBgKZKvALh1ur0bHQABR5PYMui0Wk7em2ADaAF0AJS0AASABUALIAGQAogR+Mp3CROCAFBBwVC2ikBpj5CgBIqGjizLA5TAFdAmalImAuqlBRoVQh5HBgEy1eDWfs7J5cjzGYKhroVfpDEhHM4MV6GRR5NN0JrtnRg6BVirTFBeHAKYmYY6QNpdB73LmCJZBlSAXAubtvczeSmQMNSuMbmKNgBlHFgPEUNwusBIPAAQlS1xetTmxT0SDoESgdD0C4aACtHMwxytLrohawgA) + + ```ts + interface Article { + title: string; + thumbnail: string; + content: string; + } + + // Creates new type out of the `Article` interface composed + // from the Articles' two properties: `title` and `thumbnail`. + // `ArticlePreview = {title: string; thumbnail: string}` + type ArticlePreview = Pick; + + // Render a list of articles using only title and description. + function renderArticlePreviews(previews: ArticlePreview[]): HTMLElement { + const articles = document.createElement('div'); + + for (const preview of previews) { + // Append preview to the articles. + } + + return articles; + } + + const articles = renderArticlePreviews([ + { + title: 'TypeScript tutorial!', + thumbnail: '/assets/ts.jpg' + } + ]); + ``` +
      + +- [`Record`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1429-L1434) - Construct a type with a set of properties `K` of type `T`. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4ejYAUHsGcCWAXBMB2dgwGbAKYC2ADgDYwCeeemCaWArgE7ADGMxAhmuQHQBQoYEnJE8wALKEARnkaxEKdMAC8wAOS0kstGuAAfdQBM8ANzxlRjXQbVaWACwC0JPB0NqA3HwGgIwAJJoWozYHCxixnAsjAhStADmwESMMJYo1Fi4HMCIaPEu+MRklHj8gpqyoeHAAKJFFFTAAN4+giDYCIxwSAByHAR4AFw5SDF5Xm2gJBzdfQPD3WPxE5PAlBxdAPLYNQAelgh4aOHDaPQEMowrIAC+3oJ+AMKMrlrAXFhSAFZ4LEhC9g4-0BmA4JBISXgiCkBQABpILrJ5MhUGhYcATGD6Bk4Hh-jNgABrPDkOBlXyQAAq9ngYmJpOAAHcEOCRjAXqwYODfoo6DhakUSph+Uh7GI4P0xER4Cj0OSQGwMP8tP1hgAlX7swwAHgRl2RvIANALSA08ABtAC6AD4VM1Wm0Kow0MMrYaHYJjGYLLJXZb3at1HYnC43Go-QHQDcvA6-JsmEJXARgCDgMYWAhjIYhDAU+YiMAAFIwex0ZmilMITCGF79TLAGRsAgJYAAZRwSEZGzEABFTOZUrJ5Yn+jwnWgeER6HB7AAKJrADpdXqS4ZqYultTG6azVfqHswPBbtauLY7fayQ7HIbAAAMwBuAEoYw9IBq2Ixs9h2eFMOQYPQObALQKJgggABeYhghCIpikkKRpOQRIknAsZUiIeCttECBEP8NSMCkjDDAARMGziuIYxHwYOjDCMBmDNnAuTxA6irdCOBB1Lh5Dqpqn66tISIykawBnOCtqqC0gbjqc9DgpGkxegOliyfJDrRkAA) + + ```ts + // Positions of employees in our company. + type MemberPosition = 'intern' | 'developer' | 'tech-lead'; + + // Interface describing properties of a single employee. + interface Employee { + firstName: string; + lastName: string; + yearsOfExperience: number; + } + + // Create an object that has all possible `MemberPosition` values set as keys. + // Those keys will store a collection of Employees of the same position. + const team: Record = { + intern: [], + developer: [], + 'tech-lead': [], + }; + + // Our team has decided to help John with his dream of becoming Software Developer. + team.intern.push({ + firstName: 'John', + lastName: 'Doe', + yearsOfExperience: 0 + }); + + // `Record` forces you to initialize all of the property keys. + // TypeScript Error: "tech-lead" property is missing + const teamEmpty: Record = { + intern: null, + developer: null, + }; + ``` +
      + +- [`Exclude`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1436-L1439) - Exclude from `T` those types that are assignable to `U`. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/JYOwLgpgTgZghgYwgAgMrQG7QMIHsQzADmyA3gFDLIAOuUYAXMiAK4A2byAPsgM5hRQJHqwC2AI2gBucgF9y5MAE9qKAEoQAjiwj8AEnBAATNtGQBeZAAooWphu26wAGmS3e93bRC8IASgsAPmRDJRlyAHoI5ABRAA8ENhYjFFYOZGVVZBgoXFFkAAM0zh5+QRBhZhYJaAKAOkjogEkQZAQ4X2QAdwALCFbaemRgXmQtFjhOMFwq9K6ULuB0lk6U+HYwZAxJnQaYFhAEMGB8ZCIIMAAFOjAANR2IK0HGWISklIAedCgsKDwCYgAbQA5M9gQBdVzFQJ+JhiSRQMiUYYwayZCC4VHPCzmSzAspCYEBWxgFhQAZwKC+FpgJ43VwARgADH4ZFQSWSBjcZPJyPtDsdTvxKWBvr8rD1DCZoJ5HPopaYoK4EPhCEQmGKcKriLCtrhgEYkVQVT5Nr4fmZLLZtMBbFZgT0wGBqES6ghbHBIJqoBKFdBWQpjfh+DQbhY2tqiHVsbjLMVkAB+ZAAZiZaeQTHOVxu9ySjxNaujNwDVHNvzqbBGkBAdPoAfkQA) + + ```ts + interface ServerConfig { + port: null | string | number; + } + + type RequestHandler = (request: Request, response: Response) => void; + + // Exclude `null` type from `null | string | number`. + // In case the port is equal to `null`, we will use default value. + function getPortValue(port: Exclude): number { + if (typeof port === 'string') { + return parseInt(port, 10); + } + + return port; + } + + function startServer(handler: RequestHandler, config: ServerConfig): void { + const server = require('http').createServer(handler); + + const port = config.port === null ? 3000 : getPortValue(config.port); + server.listen(port); + } + ``` +
      + +- [`Extract`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1441-L1444) - Extract from `T` those types that are assignable to `U`. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXzSwEdkQBJYACgEoAueVZAWwCMQYBuAKDDwGcM8MgBF4AXngBlAJ6scESgHIRi6ty5ZUGdoihgEABXZ888AN5d48ANoiAuvUat23K6ihMQ9ATE0BzV3goPy8GZjZOLgBfLi4Aejj4AEEICBwAdz54MAALKFQQ+BxEeAAHY1NgKAwoIKy0grr4DByEUpgccpgMaXgAaxBerCzi+B9-ZulygDouFHRsU1z8kKMYE1RhaqgAHkt4AHkWACt4EAAPbVRgLLWNgBp9gGlBs8uQa6yAUUuYPQwdgNpKM7nh7mMML4CgA+R5WABqUAgpDeVxuhxO1he0jsXGh8EoOBO9COx3BQPo2PBADckaR6IjkSA6PBqTgsMBzPsicdrEC7OJWXSQNwYvFEgAVTS9JLXODpeDpKBZFg4GCoWa8VACIJykAKiQWKy2YQOAioYikCg0OEMDyhRSy4DyxS24KhAAMjyi6gS8AAwjh5OD0iBFHAkJoEOksC1mnkMJq8gUQKDNttKPlnfrwYp3J5XfBHXqoKpfYkAOI4ansTxaeDADmoRSCCBYAbxhC6TDx6rwYHIRX5bScjA4bLJwoDmDwDkfbA9JMrVMVdM1TN69LgkTgwgkchUahqIA) + + ```ts + declare function uniqueId(): number; + + const ID = Symbol('ID'); + + interface Person { + [ID]: number; + name: string; + age: number; + } + + // Allows changing the person data as long as the property key is of string type. + function changePersonData< + Obj extends Person, + Key extends Extract, + Value extends Obj[Key] + > (obj: Obj, key: Key, value: Value): void { + obj[key] = value; + } + + // Tiny Andrew was born. + const andrew = { + [ID]: uniqueId(), + name: 'Andrew', + age: 0, + }; + + // Cool, we're fine with that. + changePersonData(andrew, 'name', 'Pony'); + + // Goverment didn't like the fact that you wanted to change your identity. + changePersonData(andrew, ID, uniqueId()); + ``` +
      + +- [`NonNullable`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1446-L1449) - Exclude `null` and `undefined` from `T`. +
      + + Example + + Works with strictNullChecks set to true. (Read more here) + + [Playground](https://typescript-play.js.org/?target=6#code/C4TwDgpgBACg9gJ2AOQK4FsBGEFQLxQDOwCAlgHYDmUAPlORtrnQwDasDcAUFwPQBU-WAEMkUOADMowqAGNWwwoSgATCBIqlgpOOSjAAFsOBRSy1IQgr9cKJlSlW1mZYQA3HFH68u8xcoBlHA8EACEHJ08Aby4oKDBUTFZSWXjEFEYcAEIALihkXTR2YSSIAB54JDQsHAA+blj4xOTUsHSACkMzPKD3HHDHNQQAGjSkPMqMmoQASh7g-oihqBi4uNIpdraxPAI2VhmVxrX9AzMAOm2ppnwoAA4ABifuE4BfKAhWSyOTuK7CS7pao3AhXF5rV48E4ICDAVAIPT-cGQyG+XTEIgLMJLTx7CAAdygvRCA0iCHaMwarhJOIQjUBSHaACJHk8mYdeLwxtdcVAAOSsh58+lXdr7Dlcq7A3n3J4PEUdADMcspUE53OluAIUGVTx46oAKuAIAFZGQwCYAKIIBCILjUxaDHAMnla+iodjcIA) + + ```ts + type PortNumber = string | number | null; + + /** Part of a class definition that is used to build a server */ + class ServerBuilder { + portNumber!: NonNullable; + + port(this: ServerBuilder, port: PortNumber): ServerBuilder { + if (port == null) { + this.portNumber = 8000; + } else { + this.portNumber = port; + } + + return this; + } + } + + const serverBuilder = new ServerBuilder(); + + serverBuilder + .port('8000') // portNumber = '8000' + .port(null) // portNumber = 8000 + .port(3000); // portNumber = 3000 + + // TypeScript error + serverBuilder.portNumber = null; + ``` +
      + +- [`Parameters`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1451-L1454) - Obtain the parameters of a function type in a tuple. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/GYVwdgxgLglg9mABAZwBYmMANgUwBQxgAOIUAXIgIZgCeA2gLoCUFAbnDACaIDeAUIkQB6IYgCypSlBxUATrMo1ECsJzgBbLEoipqAc0J7EMKMgDkiHLnU4wp46pwAPHMgB0fAL58+oSLARECEosLAA5ABUYG2QAHgAxJGdpVWREPDdMylk9ZApqemZEAF4APipacrw-CApEgBogkKwAYThwckQwEHUAIxxZJl4BYVEImiIZKF0oZRwiWVdbeygJmThgOYgcGFYcbhqApCJsyhtpWXcR1cnEePBoeDAABVPzgbTixFeFd8uEsClADcIxGiygIFkSEOT3SmTc2VydQeRx+ZxwF2QQ34gkEwDgsnSuFmMBKiAADEDjIhYk1Qm0OlSYABqZnYka4xA1DJZHJYkGc7yCbyeRA+CAIZCzNAYbA4CIAdxg2zJwVCkWirjwMswuEaACYmCCgA) + + ```ts + function shuffle(input: any[]): void { + // Mutate array randomly changing its' elements indexes. + } + + function callNTimes any> (func: Fn, callCount: number) { + // Type that represents the type of the received function parameters. + type FunctionParameters = Parameters; + + return function (...args: FunctionParameters) { + for (let i = 0; i < callCount; i++) { + func(...args); + } + } + } + + const shuffleTwice = callNTimes(shuffle, 2); + ``` +
      + +- [`ConstructorParameters`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1456-L1459) - Obtain the parameters of a constructor function type in a tuple. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECCBOAXAlqApgWQPYBM0mgG8AoaaFRENALmgkXmQDsBzAblOmCycTV4D8teo1YdO3JiICuwRFngAKClWENmLAJRFOZRAAtkEAHQq00ALzlklNBzIBfYk+KhIMAJJTEYJsDQAwmDA+mgAPAAq0GgAHnxMODCKTGgA7tCKxllg8CwQtL4AngDaALraFgB80EWa1SRkAA6MAG5gfNAB4FABPDJyCrQR9tDNyG0dwMGhtBhgjWEiGgA00F70vv4RhY3hEZXVVinpc42KmuJkkv3y8Bly8EPaDWTkhiZd7r3e8LK3llwGCMXGQWGhEOsfH5zJlsrl8p0+gw-goAAo5MAAW3BaHgEEilU0tEhmzQ212BJ0ry4SOg+kg+gBBiMximIGA0nAfAQLGk2N4EAAEgzYcYcnkLsRdDTvNEYkYUKwSdCme9WdM0MYwYhFPSIPpJdTkAAzDKxBUaZX+aAAQgsVmkCTQxuYaBw2ng4Ok8CYcotSu8pMur09iG9vuObxZnx6SN+AyUWTF8MN0CcZE4Ywm5jZHK5aB5fP4iCFIqT4oRRTKRLo6lYVNeAHpG50wOzOe1zHr9NLQ+HoABybsD4HOKXXRA1JCoKhBELmI5pNaB6Fz0KKBAodDYPAgSUTmqYsAALx4m5nC6nW9nGq14KtaEUA9gR9PvuNCjQ9BgACNvcwNBtAcLiAA) + + ```ts + class ArticleModel { + title: string; + content?: string; + + constructor(title: string) { + this.title = title; + } + } + + class InstanceCache any)> { + private ClassConstructor: T; + private cache: Map> = new Map(); + + constructor (ctr: T) { + this.ClassConstructor = ctr; + } + + getInstance (...args: ConstructorParameters): InstanceType { + const hash = this.calculateArgumentsHash(...args); + + const existingInstance = this.cache.get(hash); + if (existingInstance !== undefined) { + return existingInstance; + } + + return new this.ClassConstructor(...args); + } + + private calculateArgumentsHash(...args: any[]): string { + // Calculate hash. + return 'hash'; + } + } + + const articleCache = new InstanceCache(ArticleModel); + const amazonArticle = articleCache.getInstance('Amazon forests burining!'); + ``` +
      + +- [`ReturnType`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1461-L1464) – Obtain the return type of a function type. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECSAmICmBlJAnAbgS2E6A3gFDTTwD2AcuQC4AW2AdgOYAUAlAFzSbnbyEAvkWFFQkGJSQB3GMVI1sNZNwg10TZgG4S0YOUY0kh1es07d+xmvQBXYDXLpWi5UlMaWAGj0GjJ6BtNdkJdBQYIADpXZGgAXmgYpB1ScOwoq38aeN9DYxoU6GFRKzVoJjUwRjwAYXJbPPRuAFkwAAcAHgAxBodsAx9GWwBbACMMAD4cxhloVraOCyYjdAAzMDxoOut1e0d0UNIZ6WhWSPOwdGYIbiqATwBtAF0uaHudUQB6ACpv6ABpJBINqJdAbADW0Do5BOw3u5R2VTwMHIq2gAANtjZ0bkbHsnFCwJh8ONjHp0EgwEZ4JFoN9PkRVr1FAZoMwkDRYIjqkgOrosepoEgAB7+eAwAV2BxOLy6ACCVxgIrFEoMeOl6AACpcwMMORgIB1JRMiBNWKVdhruJKfOdIpdrtwFddXlzKjyACp3Nq842HaDIbL6BrZBIVGhIpB1EMYSLsmjmtWW-YhAA+qegAAYLKQLQj3ZsEsdccmnGcLor2Dn8xGedHGpEIBzEzspfsfMHDNAANTQACMVaIljV5GQkRA5DYmIpVKQAgAJARO9le33BDXIyi0YuLW2nJFGLqkOvxFB0YPdBSaLZ0IwNzyPkO8-xkGgsLh8Al427a3hWAhXwwHA8EHT5PmgAB1bAQBAANJ24adKWpft72RaBUTgRBUCAj89HAM8xCTaBjggABRQx0DuHJv25P9dCkWRZVIAAiBjoFImpmjlFBgA0NpsjadByDacgIDAEAIAAQmYpjoGYgAZSBsmGPw6DtZiiFA8CoJguDmAQmoZ2QvtUKQLdoAYmBTwgdEiCAA) + + ```ts + /** Provides every element of the iterable `iter` into the `callback` function and stores the results in an array. */ + function mapIter< + Elem, + Func extends (elem: Elem) => any, + Ret extends ReturnType + >(iter: Iterable, callback: Func): Ret[] { + const mapped: Ret[] = []; + + for (const elem of iter) { + mapped.push(callback(elem)); + } + + return mapped; + } + + const setObject: Set = new Set(); + const mapObject: Map = new Map(); + + mapIter(setObject, (value: string) => value.indexOf('Foo')); // number[] + + mapIter(mapObject, ([key, value]: [number, string]) => { + return key % 2 === 0 ? value : 'Odd'; + }); // string[] + ``` +
      + +- [`InstanceType`](https://github.com/Microsoft/TypeScript/blob/2961bc3fc0ea1117d4e53bc8e97fa76119bc33e3/src/lib/es5.d.ts#L1466-L1469) – Obtain the instance type of a constructor function type. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECSAmICmBlJAnAbgS2E6A3gFDTTwD2AcuQC4AW2AdgOYAUAlAFzSbnbyEAvkWFFQkGJSQB3GMVI1sNZNwg10TZgG4S0YOUY0kh1es07d+xmvQBXYDXLpWi5UlMaWAGj0GjJ6BtNdkJdBQYIADpXZGgAXmgYpB1ScOwoq38aeN9DYxoU6GFRKzVoJjUwRjwAYXJbPPRuAFkwAAcAHgAxBodsAx9GWwBbACMMAD4cxhloVraOCyYjdAAzMDxoOut1e0d0UNIZ6WhWSPOwdGYIbiqATwBtAF0uaHudUQB6ACpv6ABpJBINqJdAbADW0Do5BOw3u5R2VTwMHIq2gAANtjZ0bkbHsnFCwJh8ONjHp0EgwEZ4JFoN9PkRVr1FAZoMwkDRYIjqkgOrosepoEgAB7+eAwAV2BxOLy6ACCVxgIrFEoMeOl6AACpcwMMORgIB1JRMiBNWKVdhruJKfOdIpdrtwFddXlzKjyACp3Nq842HaDIbL6BrZBIVGhIpB1EMYSLsmjmtWW-YhAA+qegAAYLKQLQj3ZsEsdccmnGcLor2Dn8xGedHGpEIBzEzspfsfMHDNAANTQACMVaIljV5GQkRA5DYmIpVKQAgAJARO9le33BDXIyi0YuLW2nJFGLqkOvxFB0YPdBSaLZ0IwNzyPkO8-xkGgsLh8Al427a3hWAhXwwHA8EHT5PmgAB1bAQBAANJ24adKWpft72RaBUTgRBUCAj89HAM8xCTaBjggABRQx0DuHJv25P9dCkWRZVIAAiBjoFImpmjlFBgA0NpsjadByDacgIDAEAIAAQmYpjoGYgAZSBsmGPw6DtZiiFA8CoJguDmAQmoZ2QvtUKQLdoAYmBTwgdEiCAA) + + ```ts + class IdleService { + doNothing (): void {} + } + + class News { + title: string; + content: string; + + constructor(title: string, content: string) { + this.title = title; + this.content = content; + } + } + + const instanceCounter: Map = new Map(); + + interface Constructor { + new(...args: any[]): any; + } + + // Keep track how many instances of `Constr` constructor have been created. + function getInstance< + Constr extends Constructor, + Args extends ConstructorParameters + >(constructor: Constr, ...args: Args): InstanceType { + let count = instanceCounter.get(constructor) || 0; + + const instance = new constructor(...args); + + instanceCounter.set(constructor, count + 1); + + console.log(`Created ${count + 1} instances of ${Constr.name} class`); + + return instance; + } + + + const idleService = getInstance(IdleService); + // Will log: `Created 1 instances of IdleService class` + const newsEntry = getInstance(News, 'New ECMAScript proposals!', 'Last month...'); + // Will log: `Created 1 instances of News class` + ``` +
      + +- [`Omit`](https://github.com/microsoft/TypeScript/blob/71af02f7459dc812e85ac31365bfe23daf14b4e4/src/lib/es5.d.ts#L1446) – Constructs a type by picking all properties from T and then removing K. +
      + + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/JYOwLgpgTgZghgYwgAgIImAWzgG2QbwChlks4BzCAVShwC5kBnMKUcgbmKYAcIFgIjBs1YgOXMpSFMWbANoBdTiW5woFddwAW0kfKWEAvoUIB6U8gDCUCHEiNkICAHdkYAJ69kz4GC3JcPG4oAHteKDABBxCYNAxsPFBIWEQUCAAPJG4wZABySUFcgJAAEzMLXNV1ck0dIuCw6EjBADpy5AB1FAQ4EGQAV0YUP2AHDy8wEOQbUugmBLwtEIA3OcmQnEjuZBgQqE7gAGtgZAhwKHdkHFGwNvGUdDIcAGUliIBJEF3kAF5kAHlML4ADyPBIAGjyBUYRQAPnkqho4NoYQA+TiEGD9EAISIhPozErQMG4AASK2gn2+AApek9pCSXm8wFSQooAJQMUkAFQAsgAZACiOAgmDOOSIJAQ+OYyGl4DgoDmf2QJRCCH6YvALQQNjsEGFovF1NyJWAy1y7OUyHMyE+yRAuFImG4Iq1YDswHxbRINjA-SgfXlHqVUE4xiAA) + + ```ts + interface Animal { + imageUrl: string; + species: string; + images: string[]; + paragraphs: string[]; + } + + // Creates new type with all properties of the `Animal` interface + // except 'images' and 'paragraphs' properties. We can use this + // type to render small hover tooltip for a wiki entry list. + type AnimalShortInfo = Omit; + + function renderAnimalHoverInfo (animals: AnimalShortInfo[]): HTMLElement { + const container = document.createElement('div'); + // Internal implementation. + return container; + } + ``` +
      + +You can find some examples in the [TypeScript docs](https://www.typescriptlang.org/docs/handbook/advanced-types.html#predefined-conditional-types). + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Jarek Radosz](https://github.com/CvX) +- [Dimitri Benin](https://github.com/BendingBender) +- [Pelle Wessman](https://github.com/voxpelli) + +## License + +(MIT OR CC0-1.0) + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/type-fest/source/async-return-type.d.ts b/node_modules/type-fest/source/async-return-type.d.ts new file mode 100644 index 0000000..79ec1e9 --- /dev/null +++ b/node_modules/type-fest/source/async-return-type.d.ts @@ -0,0 +1,23 @@ +import {PromiseValue} from './promise-value'; + +type AsyncFunction = (...args: any[]) => Promise; + +/** +Unwrap the return type of a function that returns a `Promise`. + +There has been [discussion](https://github.com/microsoft/TypeScript/pull/35998) about implementing this type in TypeScript. + +@example +```ts +import {AsyncReturnType} from 'type-fest'; +import {asyncFunction} from 'api'; + +// This type resolves to the unwrapped return type of `asyncFunction`. +type Value = AsyncReturnType; + +async function doSomething(value: Value) {} + +asyncFunction().then(value => doSomething(value)); +``` +*/ +export type AsyncReturnType = PromiseValue>; diff --git a/node_modules/type-fest/source/asyncify.d.ts b/node_modules/type-fest/source/asyncify.d.ts new file mode 100644 index 0000000..455f2eb --- /dev/null +++ b/node_modules/type-fest/source/asyncify.d.ts @@ -0,0 +1,31 @@ +import {PromiseValue} from './promise-value'; +import {SetReturnType} from './set-return-type'; + +/** +Create an async version of the given function type, by boxing the return type in `Promise` while keeping the same parameter types. + +Use-case: You have two functions, one synchronous and one asynchronous that do the same thing. Instead of having to duplicate the type definition, you can use `Asyncify` to reuse the synchronous type. + +@example +``` +import {Asyncify} from 'type-fest'; + +// Synchronous function. +function getFooSync(someArg: SomeType): Foo { + // … +} + +type AsyncifiedFooGetter = Asyncify; +//=> type AsyncifiedFooGetter = (someArg: SomeType) => Promise; + +// Same as `getFooSync` but asynchronous. +const getFooAsync: AsyncifiedFooGetter = (someArg) => { + // TypeScript now knows that `someArg` is `SomeType` automatically. + // It also knows that this function must return `Promise`. + // If you have `@typescript-eslint/promise-function-async` linter rule enabled, it will even report that "Functions that return promises must be async.". + + // … +} +``` +*/ +export type Asyncify any> = SetReturnType>>>; diff --git a/node_modules/type-fest/source/basic.d.ts b/node_modules/type-fest/source/basic.d.ts new file mode 100644 index 0000000..d380c8b --- /dev/null +++ b/node_modules/type-fest/source/basic.d.ts @@ -0,0 +1,67 @@ +/// + +// TODO: This can just be `export type Primitive = not object` when the `not` keyword is out. +/** +Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive). +*/ +export type Primitive = + | null + | undefined + | string + | number + | boolean + | symbol + | bigint; + +// TODO: Remove the `= unknown` sometime in the future when most users are on TS 3.5 as it's now the default +/** +Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). +*/ +export type Class = new(...arguments_: Arguments) => T; + +/** +Matches any [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray), like `Uint8Array` or `Float64Array`. +*/ +export type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + +/** +Matches a JSON object. + +This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. Don't use this as a direct return type as the user would have to double-cast it: `jsonObject as unknown as CustomResponse`. Instead, you could extend your CustomResponse type from it to ensure your type only uses JSON-compatible types: `interface CustomResponse extends JsonObject { … }`. +*/ +export type JsonObject = {[Key in string]?: JsonValue}; + +/** +Matches a JSON array. +*/ +export interface JsonArray extends Array {} + +/** +Matches any valid JSON value. +*/ +export type JsonValue = string | number | boolean | null | JsonObject | JsonArray; + +declare global { + interface SymbolConstructor { + readonly observable: symbol; + } +} + +/** +Matches a value that is like an [Observable](https://github.com/tc39/proposal-observable). +*/ +export interface ObservableLike { + subscribe(observer: (value: unknown) => void): void; + [Symbol.observable](): ObservableLike; +} diff --git a/node_modules/type-fest/source/conditional-except.d.ts b/node_modules/type-fest/source/conditional-except.d.ts new file mode 100644 index 0000000..ac506cc --- /dev/null +++ b/node_modules/type-fest/source/conditional-except.d.ts @@ -0,0 +1,43 @@ +import {Except} from './except'; +import {ConditionalKeys} from './conditional-keys'; + +/** +Exclude keys from a shape that matches the given `Condition`. + +This is useful when you want to create a new type with a specific set of keys from a shape. For example, you might want to exclude all the primitive properties from a class and form a new shape containing everything but the primitive properties. + +@example +``` +import {Primitive, ConditionalExcept} from 'type-fest'; + +class Awesome { + name: string; + successes: number; + failures: bigint; + + run() {} +} + +type ExceptPrimitivesFromAwesome = ConditionalExcept; +//=> {run: () => void} +``` + +@example +``` +import {ConditionalExcept} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c: () => void; + d: {}; +} + +type NonStringKeysOnly = ConditionalExcept; +//=> {b: string | number; c: () => void; d: {}} +``` +*/ +export type ConditionalExcept = Except< + Base, + ConditionalKeys +>; diff --git a/node_modules/type-fest/source/conditional-keys.d.ts b/node_modules/type-fest/source/conditional-keys.d.ts new file mode 100644 index 0000000..eb074dc --- /dev/null +++ b/node_modules/type-fest/source/conditional-keys.d.ts @@ -0,0 +1,43 @@ +/** +Extract the keys from a type where the value type of the key extends the given `Condition`. + +Internally this is used for the `ConditionalPick` and `ConditionalExcept` types. + +@example +``` +import {ConditionalKeys} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c?: string; + d: {}; +} + +type StringKeysOnly = ConditionalKeys; +//=> 'a' +``` + +To support partial types, make sure your `Condition` is a union of undefined (for example, `string | undefined`) as demonstrated below. + +@example +``` +type StringKeysAndUndefined = ConditionalKeys; +//=> 'a' | 'c' +``` +*/ +export type ConditionalKeys = NonNullable< + // Wrap in `NonNullable` to strip away the `undefined` type from the produced union. + { + // Map through all the keys of the given base type. + [Key in keyof Base]: + // Pick only keys with types extending the given `Condition` type. + Base[Key] extends Condition + // Retain this key since the condition passes. + ? Key + // Discard this key since the condition fails. + : never; + + // Convert the produced object into a union type of the keys which passed the conditional test. + }[keyof Base] +>; diff --git a/node_modules/type-fest/source/conditional-pick.d.ts b/node_modules/type-fest/source/conditional-pick.d.ts new file mode 100644 index 0000000..cecc3df --- /dev/null +++ b/node_modules/type-fest/source/conditional-pick.d.ts @@ -0,0 +1,42 @@ +import {ConditionalKeys} from './conditional-keys'; + +/** +Pick keys from the shape that matches the given `Condition`. + +This is useful when you want to create a new type from a specific subset of an existing type. For example, you might want to pick all the primitive properties from a class and form a new automatically derived type. + +@example +``` +import {Primitive, ConditionalPick} from 'type-fest'; + +class Awesome { + name: string; + successes: number; + failures: bigint; + + run() {} +} + +type PickPrimitivesFromAwesome = ConditionalPick; +//=> {name: string; successes: number; failures: bigint} +``` + +@example +``` +import {ConditionalPick} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c: () => void; + d: {}; +} + +type StringKeysOnly = ConditionalPick; +//=> {a: string} +``` +*/ +export type ConditionalPick = Pick< + Base, + ConditionalKeys +>; diff --git a/node_modules/type-fest/source/entries.d.ts b/node_modules/type-fest/source/entries.d.ts new file mode 100644 index 0000000..e02237a --- /dev/null +++ b/node_modules/type-fest/source/entries.d.ts @@ -0,0 +1,57 @@ +import {ArrayEntry, MapEntry, ObjectEntry, SetEntry} from './entry'; + +type ArrayEntries = Array>; +type MapEntries = Array>; +type ObjectEntries = Array>; +type SetEntries> = Array>; + +/** +Many collections have an `entries` method which returns an array of a given object's own enumerable string-keyed property [key, value] pairs. The `Entries` type will return the type of that collection's entries. + +For example the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries|`Object`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries|`Map`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries|`Array`}, and {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries|`Set`} collections all have this method. Note that `WeakMap` and `WeakSet` do not have this method since their entries are not enumerable. + +@see `Entry` if you want to just access the type of a single entry. + +@example +``` +import {Entries} from 'type-fest'; + +interface Example { + someKey: number; +} + +const manipulatesEntries = (examples: Entries) => examples.map(example => [ + // Does some arbitrary processing on the key (with type information available) + example[0].toUpperCase(), + + // Does some arbitrary processing on the value (with type information available) + example[1].toFixed() +]); + +const example: Example = {someKey: 1}; +const entries = Object.entries(example) as Entries; +const output = manipulatesEntries(entries); + +// Objects +const objectExample = {a: 1}; +const objectEntries: Entries = [['a', 1]]; + +// Arrays +const arrayExample = ['a', 1]; +const arrayEntries: Entries = [[0, 'a'], [1, 1]]; + +// Maps +const mapExample = new Map([['a', 1]]); +const mapEntries: Entries = [['a', 1]]; + +// Sets +const setExample = new Set(['a', 1]); +const setEntries: Entries = [['a', 'a'], [1, 1]]; +``` +*/ +export type Entries = + BaseType extends Map ? MapEntries + : BaseType extends Set ? SetEntries + : BaseType extends unknown[] ? ArrayEntries + : BaseType extends object ? ObjectEntries + : never; diff --git a/node_modules/type-fest/source/entry.d.ts b/node_modules/type-fest/source/entry.d.ts new file mode 100644 index 0000000..41a13a9 --- /dev/null +++ b/node_modules/type-fest/source/entry.d.ts @@ -0,0 +1,60 @@ +type MapKey = BaseType extends Map ? KeyType : never; +type MapValue = BaseType extends Map ? ValueType : never; + +export type ArrayEntry = [number, BaseType[number]]; +export type MapEntry = [MapKey, MapValue]; +export type ObjectEntry = [keyof BaseType, BaseType[keyof BaseType]]; +export type SetEntry = BaseType extends Set ? [ItemType, ItemType] : never; + +/** +Many collections have an `entries` method which returns an array of a given object's own enumerable string-keyed property [key, value] pairs. The `Entry` type will return the type of that collection's entry. + +For example the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries|`Object`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries|`Map`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries|`Array`}, and {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries|`Set`} collections all have this method. Note that `WeakMap` and `WeakSet` do not have this method since their entries are not enumerable. + +@see `Entries` if you want to just access the type of the array of entries (which is the return of the `.entries()` method). + +@example +``` +import {Entry} from 'type-fest'; + +interface Example { + someKey: number; +} + +const manipulatesEntry = (example: Entry) => [ + // Does some arbitrary processing on the key (with type information available) + example[0].toUpperCase(), + + // Does some arbitrary processing on the value (with type information available) + example[1].toFixed(), +]; + +const example: Example = {someKey: 1}; +const entry = Object.entries(example)[0] as Entry; +const output = manipulatesEntry(entry); + +// Objects +const objectExample = {a: 1}; +const objectEntry: Entry = ['a', 1]; + +// Arrays +const arrayExample = ['a', 1]; +const arrayEntryString: Entry = [0, 'a']; +const arrayEntryNumber: Entry = [1, 1]; + +// Maps +const mapExample = new Map([['a', 1]]); +const mapEntry: Entry = ['a', 1]; + +// Sets +const setExample = new Set(['a', 1]); +const setEntryString: Entry = ['a', 'a']; +const setEntryNumber: Entry = [1, 1]; +``` +*/ +export type Entry = + BaseType extends Map ? MapEntry + : BaseType extends Set ? SetEntry + : BaseType extends unknown[] ? ArrayEntry + : BaseType extends object ? ObjectEntry + : never; diff --git a/node_modules/type-fest/source/except.d.ts b/node_modules/type-fest/source/except.d.ts new file mode 100644 index 0000000..7dedbaa --- /dev/null +++ b/node_modules/type-fest/source/except.d.ts @@ -0,0 +1,22 @@ +/** +Create a type from an object type without certain keys. + +This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically. + +Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/30825) if you want to have the stricter version as a built-in in TypeScript. + +@example +``` +import {Except} from 'type-fest'; + +type Foo = { + a: number; + b: string; + c: boolean; +}; + +type FooWithoutA = Except; +//=> {b: string}; +``` +*/ +export type Except = Pick>; diff --git a/node_modules/type-fest/source/fixed-length-array.d.ts b/node_modules/type-fest/source/fixed-length-array.d.ts new file mode 100644 index 0000000..e3bc0f4 --- /dev/null +++ b/node_modules/type-fest/source/fixed-length-array.d.ts @@ -0,0 +1,38 @@ +/** +Methods to exclude. +*/ +type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift'; + +/** +Create a type that represents an array of the given type and length. The array's length and the `Array` prototype methods that manipulate its length are excluded in the resulting type. + +Please participate in [this issue](https://github.com/microsoft/TypeScript/issues/26223) if you want to have a similiar type built into TypeScript. + +Use-cases: +- Declaring fixed-length tuples or arrays with a large number of items. +- Creating a range union (for example, `0 | 1 | 2 | 3 | 4` from the keys of such a type) without having to resort to recursive types. +- Creating an array of coordinates with a static length, for example, length of 3 for a 3D vector. + +@example +``` +import {FixedLengthArray} from 'type-fest'; + +type FencingTeam = FixedLengthArray; + +const guestFencingTeam: FencingTeam = ['Josh', 'Michael', 'Robert']; + +const homeFencingTeam: FencingTeam = ['George', 'John']; +//=> error TS2322: Type string[] is not assignable to type 'FencingTeam' + +guestFencingTeam.push('Sam'); +//=> error TS2339: Property 'push' does not exist on type 'FencingTeam' +``` +*/ +export type FixedLengthArray = Pick< + ArrayPrototype, + Exclude +> & { + [index: number]: Element; + [Symbol.iterator]: () => IterableIterator; + readonly length: Length; +}; diff --git a/node_modules/type-fest/source/iterable-element.d.ts b/node_modules/type-fest/source/iterable-element.d.ts new file mode 100644 index 0000000..174cfbf --- /dev/null +++ b/node_modules/type-fest/source/iterable-element.d.ts @@ -0,0 +1,46 @@ +/** +Get the element type of an `Iterable`/`AsyncIterable`. For example, an array or a generator. + +This can be useful, for example, if you want to get the type that is yielded in a generator function. Often the return type of those functions are not specified. + +This type works with both `Iterable`s and `AsyncIterable`s, so it can be use with synchronous and asynchronous generators. + +Here is an example of `IterableElement` in action with a generator function: + +@example +``` +function * iAmGenerator() { + yield 1; + yield 2; +} + +type MeNumber = IterableElement> +``` + +And here is an example with an async generator: + +@example +``` +async function * iAmGeneratorAsync() { + yield 'hi'; + yield true; +} + +type MeStringOrBoolean = IterableElement> +``` + +Many types in JavaScript/TypeScript are iterables. This type works on all types that implement those interfaces. For example, `Array`, `Set`, `Map`, `stream.Readable`, etc. + +An example with an array of strings: + +@example +``` +type MeString = IterableElement +``` +*/ +export type IterableElement = + TargetIterable extends Iterable ? + ElementType : + TargetIterable extends AsyncIterable ? + ElementType : + never; diff --git a/node_modules/type-fest/source/literal-union.d.ts b/node_modules/type-fest/source/literal-union.d.ts new file mode 100644 index 0000000..8debd93 --- /dev/null +++ b/node_modules/type-fest/source/literal-union.d.ts @@ -0,0 +1,33 @@ +import {Primitive} from './basic'; + +/** +Allows creating a union type by combining primitive types and literal types without sacrificing auto-completion in IDEs for the literal type part of the union. + +Currently, when a union type of a primitive type is combined with literal types, TypeScript loses all information about the combined literals. Thus, when such type is used in an IDE with autocompletion, no suggestions are made for the declared literals. + +This type is a workaround for [Microsoft/TypeScript#29729](https://github.com/Microsoft/TypeScript/issues/29729). It will be removed as soon as it's not needed anymore. + +@example +``` +import {LiteralUnion} from 'type-fest'; + +// Before + +type Pet = 'dog' | 'cat' | string; + +const pet: Pet = ''; +// Start typing in your TypeScript-enabled IDE. +// You **will not** get auto-completion for `dog` and `cat` literals. + +// After + +type Pet2 = LiteralUnion<'dog' | 'cat', string>; + +const pet: Pet2 = ''; +// You **will** get auto-completion for `dog` and `cat` literals. +``` + */ +export type LiteralUnion< + LiteralType, + BaseType extends Primitive +> = LiteralType | (BaseType & {_?: never}); diff --git a/node_modules/type-fest/source/merge-exclusive.d.ts b/node_modules/type-fest/source/merge-exclusive.d.ts new file mode 100644 index 0000000..059bd2c --- /dev/null +++ b/node_modules/type-fest/source/merge-exclusive.d.ts @@ -0,0 +1,39 @@ +// Helper type. Not useful on its own. +type Without = {[KeyType in Exclude]?: never}; + +/** +Create a type that has mutually exclusive keys. + +This type was inspired by [this comment](https://github.com/Microsoft/TypeScript/issues/14094#issuecomment-373782604). + +This type works with a helper type, called `Without`. `Without` produces a type that has only keys from `FirstType` which are not present on `SecondType` and sets the value type for these keys to `never`. This helper type is then used in `MergeExclusive` to remove keys from either `FirstType` or `SecondType`. + +@example +``` +import {MergeExclusive} from 'type-fest'; + +interface ExclusiveVariation1 { + exclusive1: boolean; +} + +interface ExclusiveVariation2 { + exclusive2: string; +} + +type ExclusiveOptions = MergeExclusive; + +let exclusiveOptions: ExclusiveOptions; + +exclusiveOptions = {exclusive1: true}; +//=> Works +exclusiveOptions = {exclusive2: 'hi'}; +//=> Works +exclusiveOptions = {exclusive1: true, exclusive2: 'hi'}; +//=> Error +``` +*/ +export type MergeExclusive = + (FirstType | SecondType) extends object ? + (Without & SecondType) | (Without & FirstType) : + FirstType | SecondType; + diff --git a/node_modules/type-fest/source/merge.d.ts b/node_modules/type-fest/source/merge.d.ts new file mode 100644 index 0000000..4b3920b --- /dev/null +++ b/node_modules/type-fest/source/merge.d.ts @@ -0,0 +1,22 @@ +import {Except} from './except'; + +/** +Merge two types into a new type. Keys of the second type overrides keys of the first type. + +@example +``` +import {Merge} from 'type-fest'; + +type Foo = { + a: number; + b: string; +}; + +type Bar = { + b: number; +}; + +const ab: Merge = {a: 1, b: 2}; +``` +*/ +export type Merge = Except> & SecondType; diff --git a/node_modules/type-fest/source/mutable.d.ts b/node_modules/type-fest/source/mutable.d.ts new file mode 100644 index 0000000..03d0dda --- /dev/null +++ b/node_modules/type-fest/source/mutable.d.ts @@ -0,0 +1,22 @@ +/** +Convert an object with `readonly` keys into a mutable object. Inverse of `Readonly`. + +This can be used to [store and mutate options within a class](https://github.com/sindresorhus/pageres/blob/4a5d05fca19a5fbd2f53842cbf3eb7b1b63bddd2/source/index.ts#L72), [edit `readonly` objects within tests](https://stackoverflow.com/questions/50703834), and [construct a `readonly` object within a function](https://github.com/Microsoft/TypeScript/issues/24509). + +@example +``` +import {Mutable} from 'type-fest'; + +type Foo = { + readonly a: number; + readonly b: string; +}; + +const mutableFoo: Mutable = {a: 1, b: '2'}; +mutableFoo.a = 3; +``` +*/ +export type Mutable = { + // For each `Key` in the keys of `ObjectType`, make a mapped type by removing the `readonly` modifier from the key. + -readonly [KeyType in keyof ObjectType]: ObjectType[KeyType]; +}; diff --git a/node_modules/type-fest/source/opaque.d.ts b/node_modules/type-fest/source/opaque.d.ts new file mode 100644 index 0000000..20ab964 --- /dev/null +++ b/node_modules/type-fest/source/opaque.d.ts @@ -0,0 +1,65 @@ +/** +Create an opaque type, which hides its internal details from the public, and can only be created by being used explicitly. + +The generic type parameter can be anything. It doesn't have to be an object. + +[Read more about opaque types.](https://codemix.com/opaque-types-in-javascript/) + +There have been several discussions about adding this feature to TypeScript via the `opaque type` operator, similar to how Flow does it. Unfortunately, nothing has (yet) moved forward: + - [Microsoft/TypeScript#15408](https://github.com/Microsoft/TypeScript/issues/15408) + - [Microsoft/TypeScript#15807](https://github.com/Microsoft/TypeScript/issues/15807) + +@example +``` +import {Opaque} from 'type-fest'; + +type AccountNumber = Opaque; +type AccountBalance = Opaque; + +// The Token parameter allows the compiler to differentiate between types, whereas "unknown" will not. For example, consider the following structures: +type ThingOne = Opaque; +type ThingTwo = Opaque; + +// To the compiler, these types are allowed to be cast to each other as they have the same underlying type. They are both `string & { __opaque__: unknown }`. +// To avoid this behaviour, you would instead pass the "Token" parameter, like so. +type NewThingOne = Opaque; +type NewThingTwo = Opaque; + +// Now they're completely separate types, so the following will fail to compile. +function createNewThingOne (): NewThingOne { + // As you can see, casting from a string is still allowed. However, you may not cast NewThingOne to NewThingTwo, and vice versa. + return 'new thing one' as NewThingOne; +} + +// This will fail to compile, as they are fundamentally different types. +const thingTwo = createNewThingOne() as NewThingTwo; + +// Here's another example of opaque typing. +function createAccountNumber(): AccountNumber { + return 2 as AccountNumber; +} + +function getMoneyForAccount(accountNumber: AccountNumber): AccountBalance { + return 4 as AccountBalance; +} + +// This will compile successfully. +getMoneyForAccount(createAccountNumber()); + +// But this won't, because it has to be explicitly passed as an `AccountNumber` type. +getMoneyForAccount(2); + +// You can use opaque values like they aren't opaque too. +const accountNumber = createAccountNumber(); + +// This will not compile successfully. +const newAccountNumber = accountNumber + 2; + +// As a side note, you can (and should) use recursive types for your opaque types to make them stronger and hopefully easier to type. +type Person = { + id: Opaque; + name: string; +}; +``` +*/ +export type Opaque = Type & {readonly __opaque__: Token}; diff --git a/node_modules/type-fest/source/package-json.d.ts b/node_modules/type-fest/source/package-json.d.ts new file mode 100644 index 0000000..cf355d0 --- /dev/null +++ b/node_modules/type-fest/source/package-json.d.ts @@ -0,0 +1,611 @@ +import {LiteralUnion} from './literal-union'; + +declare namespace PackageJson { + /** + A person who has been involved in creating or maintaining the package. + */ + export type Person = + | string + | { + name: string; + url?: string; + email?: string; + }; + + export type BugsLocation = + | string + | { + /** + The URL to the package's issue tracker. + */ + url?: string; + + /** + The email address to which issues should be reported. + */ + email?: string; + }; + + export interface DirectoryLocations { + [directoryType: string]: unknown; + + /** + Location for executable scripts. Sugar to generate entries in the `bin` property by walking the folder. + */ + bin?: string; + + /** + Location for Markdown files. + */ + doc?: string; + + /** + Location for example scripts. + */ + example?: string; + + /** + Location for the bulk of the library. + */ + lib?: string; + + /** + Location for man pages. Sugar to generate a `man` array by walking the folder. + */ + man?: string; + + /** + Location for test files. + */ + test?: string; + } + + export type Scripts = { + /** + Run **before** the package is published (Also run on local `npm install` without any arguments). + */ + prepublish?: string; + + /** + Run both **before** the package is packed and published, and on local `npm install` without any arguments. This is run **after** `prepublish`, but **before** `prepublishOnly`. + */ + prepare?: string; + + /** + Run **before** the package is prepared and packed, **only** on `npm publish`. + */ + prepublishOnly?: string; + + /** + Run **before** a tarball is packed (on `npm pack`, `npm publish`, and when installing git dependencies). + */ + prepack?: string; + + /** + Run **after** the tarball has been generated and moved to its final destination. + */ + postpack?: string; + + /** + Run **after** the package is published. + */ + publish?: string; + + /** + Run **after** the package is published. + */ + postpublish?: string; + + /** + Run **before** the package is installed. + */ + preinstall?: string; + + /** + Run **after** the package is installed. + */ + install?: string; + + /** + Run **after** the package is installed and after `install`. + */ + postinstall?: string; + + /** + Run **before** the package is uninstalled and before `uninstall`. + */ + preuninstall?: string; + + /** + Run **before** the package is uninstalled. + */ + uninstall?: string; + + /** + Run **after** the package is uninstalled. + */ + postuninstall?: string; + + /** + Run **before** bump the package version and before `version`. + */ + preversion?: string; + + /** + Run **before** bump the package version. + */ + version?: string; + + /** + Run **after** bump the package version. + */ + postversion?: string; + + /** + Run with the `npm test` command, before `test`. + */ + pretest?: string; + + /** + Run with the `npm test` command. + */ + test?: string; + + /** + Run with the `npm test` command, after `test`. + */ + posttest?: string; + + /** + Run with the `npm stop` command, before `stop`. + */ + prestop?: string; + + /** + Run with the `npm stop` command. + */ + stop?: string; + + /** + Run with the `npm stop` command, after `stop`. + */ + poststop?: string; + + /** + Run with the `npm start` command, before `start`. + */ + prestart?: string; + + /** + Run with the `npm start` command. + */ + start?: string; + + /** + Run with the `npm start` command, after `start`. + */ + poststart?: string; + + /** + Run with the `npm restart` command, before `restart`. Note: `npm restart` will run the `stop` and `start` scripts if no `restart` script is provided. + */ + prerestart?: string; + + /** + Run with the `npm restart` command. Note: `npm restart` will run the `stop` and `start` scripts if no `restart` script is provided. + */ + restart?: string; + + /** + Run with the `npm restart` command, after `restart`. Note: `npm restart` will run the `stop` and `start` scripts if no `restart` script is provided. + */ + postrestart?: string; + } & Record; + + /** + Dependencies of the package. The version range is a string which has one or more space-separated descriptors. Dependencies can also be identified with a tarball or Git URL. + */ + export type Dependency = Record; + + /** + Conditions which provide a way to resolve a package entry point based on the environment. + */ + export type ExportCondition = LiteralUnion< + | 'import' + | 'require' + | 'node' + | 'deno' + | 'browser' + | 'electron' + | 'react-native' + | 'default', + string + >; + + /** + Entry points of a module, optionally with conditions and subpath exports. + */ + export type Exports = + | string + | {[key in ExportCondition]: Exports} + | {[key: string]: Exports}; // eslint-disable-line @typescript-eslint/consistent-indexed-object-style + + export interface NonStandardEntryPoints { + /** + An ECMAScript module ID that is the primary entry point to the program. + */ + module?: string; + + /** + A module ID with untranspiled code that is the primary entry point to the program. + */ + esnext?: + | string + | { + [moduleName: string]: string | undefined; + main?: string; + browser?: string; + }; + + /** + A hint to JavaScript bundlers or component tools when packaging modules for client side use. + */ + browser?: + | string + | Record; + + /** + Denote which files in your project are "pure" and therefore safe for Webpack to prune if unused. + + [Read more.](https://webpack.js.org/guides/tree-shaking/) + */ + sideEffects?: boolean | string[]; + } + + export interface TypeScriptConfiguration { + /** + Location of the bundled TypeScript declaration file. + */ + types?: string; + + /** + Location of the bundled TypeScript declaration file. Alias of `types`. + */ + typings?: string; + } + + /** + An alternative configuration for Yarn workspaces. + */ + export interface WorkspaceConfig { + /** + An array of workspace pattern strings which contain the workspace packages. + */ + packages?: WorkspacePattern[]; + + /** + Designed to solve the problem of packages which break when their `node_modules` are moved to the root workspace directory - a process known as hoisting. For these packages, both within your workspace, and also some that have been installed via `node_modules`, it is important to have a mechanism for preventing the default Yarn workspace behavior. By adding workspace pattern strings here, Yarn will resume non-workspace behavior for any package which matches the defined patterns. + + [Read more](https://classic.yarnpkg.com/blog/2018/02/15/nohoist/) + */ + nohoist?: WorkspacePattern[]; + } + + /** + A workspace pattern points to a directory or group of directories which contain packages that should be included in the workspace installation process. + + The patterns are handled with [minimatch](https://github.com/isaacs/minimatch). + + @example + `docs` → Include the docs directory and install its dependencies. + `packages/*` → Include all nested directories within the packages directory, like `packages/cli` and `packages/core`. + */ + type WorkspacePattern = string; + + export interface YarnConfiguration { + /** + Used to configure [Yarn workspaces](https://classic.yarnpkg.com/docs/workspaces/). + + Workspaces allow you to manage multiple packages within the same repository in such a way that you only need to run `yarn install` once to install all of them in a single pass. + + Please note that the top-level `private` property of `package.json` **must** be set to `true` in order to use workspaces. + */ + workspaces?: WorkspacePattern[] | WorkspaceConfig; + + /** + If your package only allows one version of a given dependency, and you’d like to enforce the same behavior as `yarn install --flat` on the command-line, set this to `true`. + + Note that if your `package.json` contains `"flat": true` and other packages depend on yours (e.g. you are building a library rather than an app), those other packages will also need `"flat": true` in their `package.json` or be installed with `yarn install --flat` on the command-line. + */ + flat?: boolean; + + /** + Selective version resolutions. Allows the definition of custom package versions inside dependencies without manual edits in the `yarn.lock` file. + */ + resolutions?: Dependency; + } + + export interface JSPMConfiguration { + /** + JSPM configuration. + */ + jspm?: PackageJson; + } + + /** + Type for [npm's `package.json` file](https://docs.npmjs.com/creating-a-package-json-file). Containing standard npm properties. + */ + export interface PackageJsonStandard { + /** + The name of the package. + */ + name?: string; + + /** + Package version, parseable by [`node-semver`](https://github.com/npm/node-semver). + */ + version?: string; + + /** + Package description, listed in `npm search`. + */ + description?: string; + + /** + Keywords associated with package, listed in `npm search`. + */ + keywords?: string[]; + + /** + The URL to the package's homepage. + */ + homepage?: LiteralUnion<'.', string>; + + /** + The URL to the package's issue tracker and/or the email address to which issues should be reported. + */ + bugs?: BugsLocation; + + /** + The license for the package. + */ + license?: string; + + /** + The licenses for the package. + */ + licenses?: Array<{ + type?: string; + url?: string; + }>; + + author?: Person; + + /** + A list of people who contributed to the package. + */ + contributors?: Person[]; + + /** + A list of people who maintain the package. + */ + maintainers?: Person[]; + + /** + The files included in the package. + */ + files?: string[]; + + /** + Resolution algorithm for importing ".js" files from the package's scope. + + [Read more.](https://nodejs.org/api/esm.html#esm_package_json_type_field) + */ + type?: 'module' | 'commonjs'; + + /** + The module ID that is the primary entry point to the program. + */ + main?: string; + + /** + Standard entry points of the package, with enhanced support for ECMAScript Modules. + + [Read more.](https://nodejs.org/api/esm.html#esm_package_entry_points) + */ + exports?: Exports; + + /** + The executable files that should be installed into the `PATH`. + */ + bin?: + | string + | Record; + + /** + Filenames to put in place for the `man` program to find. + */ + man?: string | string[]; + + /** + Indicates the structure of the package. + */ + directories?: DirectoryLocations; + + /** + Location for the code repository. + */ + repository?: + | string + | { + type: string; + url: string; + + /** + Relative path to package.json if it is placed in non-root directory (for example if it is part of a monorepo). + + [Read more.](https://github.com/npm/rfcs/blob/latest/implemented/0010-monorepo-subdirectory-declaration.md) + */ + directory?: string; + }; + + /** + Script commands that are run at various times in the lifecycle of the package. The key is the lifecycle event, and the value is the command to run at that point. + */ + scripts?: Scripts; + + /** + Is used to set configuration parameters used in package scripts that persist across upgrades. + */ + config?: Record; + + /** + The dependencies of the package. + */ + dependencies?: Dependency; + + /** + Additional tooling dependencies that are not required for the package to work. Usually test, build, or documentation tooling. + */ + devDependencies?: Dependency; + + /** + Dependencies that are skipped if they fail to install. + */ + optionalDependencies?: Dependency; + + /** + Dependencies that will usually be required by the package user directly or via another dependency. + */ + peerDependencies?: Dependency; + + /** + Indicate peer dependencies that are optional. + */ + peerDependenciesMeta?: Record; + + /** + Package names that are bundled when the package is published. + */ + bundledDependencies?: string[]; + + /** + Alias of `bundledDependencies`. + */ + bundleDependencies?: string[]; + + /** + Engines that this package runs on. + */ + engines?: { + [EngineName in 'npm' | 'node' | string]: string; + }; + + /** + @deprecated + */ + engineStrict?: boolean; + + /** + Operating systems the module runs on. + */ + os?: Array>; + + /** + CPU architectures the module runs on. + */ + cpu?: Array>; + + /** + If set to `true`, a warning will be shown if package is installed locally. Useful if the package is primarily a command-line application that should be installed globally. + + @deprecated + */ + preferGlobal?: boolean; + + /** + If set to `true`, then npm will refuse to publish it. + */ + private?: boolean; + + /** + A set of config values that will be used at publish-time. It's especially handy to set the tag, registry or access, to ensure that a given package is not tagged with 'latest', published to the global public registry or that a scoped module is private by default. + */ + publishConfig?: Record; + + /** + Describes and notifies consumers of a package's monetary support information. + + [Read more.](https://github.com/npm/rfcs/blob/latest/accepted/0017-add-funding-support.md) + */ + funding?: string | { + /** + The type of funding. + */ + type?: LiteralUnion< + | 'github' + | 'opencollective' + | 'patreon' + | 'individual' + | 'foundation' + | 'corporation', + string + >; + + /** + The URL to the funding page. + */ + url: string; + }; + } +} + +/** +Type for [npm's `package.json` file](https://docs.npmjs.com/creating-a-package-json-file). Also includes types for fields used by other popular projects, like TypeScript and Yarn. +*/ +export type PackageJson = +PackageJson.PackageJsonStandard & +PackageJson.NonStandardEntryPoints & +PackageJson.TypeScriptConfiguration & +PackageJson.YarnConfiguration & +PackageJson.JSPMConfiguration; diff --git a/node_modules/type-fest/source/partial-deep.d.ts b/node_modules/type-fest/source/partial-deep.d.ts new file mode 100644 index 0000000..b962b84 --- /dev/null +++ b/node_modules/type-fest/source/partial-deep.d.ts @@ -0,0 +1,72 @@ +import {Primitive} from './basic'; + +/** +Create a type from another type with all keys and nested keys set to optional. + +Use-cases: +- Merging a default settings/config object with another object, the second object would be a deep partial of the default object. +- Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test. + +@example +``` +import {PartialDeep} from 'type-fest'; + +const settings: Settings = { + textEditor: { + fontSize: 14; + fontColor: '#000000'; + fontWeight: 400; + } + autocomplete: false; + autosave: true; +}; + +const applySavedSettings = (savedSettings: PartialDeep) => { + return {...settings, ...savedSettings}; +} + +settings = applySavedSettings({textEditor: {fontWeight: 500}}); +``` +*/ +export type PartialDeep = T extends Primitive + ? Partial + : T extends Map + ? PartialMapDeep + : T extends Set + ? PartialSetDeep + : T extends ReadonlyMap + ? PartialReadonlyMapDeep + : T extends ReadonlySet + ? PartialReadonlySetDeep + : T extends ((...arguments: any[]) => unknown) + ? T | undefined + : T extends object + ? PartialObjectDeep + : unknown; + +/** +Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`. +*/ +interface PartialMapDeep extends Map, PartialDeep> {} + +/** +Same as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`. +*/ +interface PartialSetDeep extends Set> {} + +/** +Same as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`. +*/ +interface PartialReadonlyMapDeep extends ReadonlyMap, PartialDeep> {} + +/** +Same as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`. +*/ +interface PartialReadonlySetDeep extends ReadonlySet> {} + +/** +Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`. +*/ +type PartialObjectDeep = { + [KeyType in keyof ObjectType]?: PartialDeep +}; diff --git a/node_modules/type-fest/source/promisable.d.ts b/node_modules/type-fest/source/promisable.d.ts new file mode 100644 index 0000000..71242a5 --- /dev/null +++ b/node_modules/type-fest/source/promisable.d.ts @@ -0,0 +1,23 @@ +/** +Create a type that represents either the value or the value wrapped in `PromiseLike`. + +Use-cases: +- A function accepts a callback that may either return a value synchronously or may return a promised value. +- This type could be the return type of `Promise#then()`, `Promise#catch()`, and `Promise#finally()` callbacks. + +Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/31394) if you want to have this type as a built-in in TypeScript. + +@example +``` +import {Promisable} from 'type-fest'; + +async function logger(getLogEntry: () => Promisable): Promise { + const entry = await getLogEntry(); + console.log(entry); +} + +logger(() => 'foo'); +logger(() => Promise.resolve('bar')); +``` +*/ +export type Promisable = T | PromiseLike; diff --git a/node_modules/type-fest/source/promise-value.d.ts b/node_modules/type-fest/source/promise-value.d.ts new file mode 100644 index 0000000..642ddeb --- /dev/null +++ b/node_modules/type-fest/source/promise-value.d.ts @@ -0,0 +1,27 @@ +/** +Returns the type that is wrapped inside a `Promise` type. +If the type is a nested Promise, it is unwrapped recursively until a non-Promise type is obtained. +If the type is not a `Promise`, the type itself is returned. + +@example +``` +import {PromiseValue} from 'type-fest'; + +type AsyncData = Promise; +let asyncData: PromiseValue = Promise.resolve('ABC'); + +type Data = PromiseValue; +let data: Data = await asyncData; + +// Here's an example that shows how this type reacts to non-Promise types. +type SyncData = PromiseValue; +let syncData: SyncData = getSyncData(); + +// Here's an example that shows how this type reacts to recursive Promise types. +type RecursiveAsyncData = Promise >; +let recursiveAsyncData: PromiseValue = Promise.resolve(Promise.resolve('ABC')); +``` +*/ +export type PromiseValue = PromiseType extends Promise + ? { 0: PromiseValue; 1: Value }[PromiseType extends Promise ? 0 : 1] + : Otherwise; diff --git a/node_modules/type-fest/source/readonly-deep.d.ts b/node_modules/type-fest/source/readonly-deep.d.ts new file mode 100644 index 0000000..b8c04de --- /dev/null +++ b/node_modules/type-fest/source/readonly-deep.d.ts @@ -0,0 +1,59 @@ +import {Primitive} from './basic'; + +/** +Convert `object`s, `Map`s, `Set`s, and `Array`s and all of their keys/elements into immutable structures recursively. + +This is useful when a deeply nested structure needs to be exposed as completely immutable, for example, an imported JSON module or when receiving an API response that is passed around. + +Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/13923) if you want to have this type as a built-in in TypeScript. + +@example +``` +// data.json +{ + "foo": ["bar"] +} + +// main.ts +import {ReadonlyDeep} from 'type-fest'; +import dataJson = require('./data.json'); + +const data: ReadonlyDeep = dataJson; + +export default data; + +// test.ts +import data from './main'; + +data.foo.push('bar'); +//=> error TS2339: Property 'push' does not exist on type 'readonly string[]' +``` +*/ +export type ReadonlyDeep = T extends Primitive | ((...arguments: any[]) => unknown) + ? T + : T extends ReadonlyMap + ? ReadonlyMapDeep + : T extends ReadonlySet + ? ReadonlySetDeep + : T extends object + ? ReadonlyObjectDeep + : unknown; + +/** +Same as `ReadonlyDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `ReadonlyDeep`. +*/ +interface ReadonlyMapDeep + extends ReadonlyMap, ReadonlyDeep> {} + +/** +Same as `ReadonlyDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `ReadonlyDeep`. +*/ +interface ReadonlySetDeep + extends ReadonlySet> {} + +/** +Same as `ReadonlyDeep`, but accepts only `object`s as inputs. Internal helper for `ReadonlyDeep`. +*/ +type ReadonlyObjectDeep = { + readonly [KeyType in keyof ObjectType]: ReadonlyDeep +}; diff --git a/node_modules/type-fest/source/require-at-least-one.d.ts b/node_modules/type-fest/source/require-at-least-one.d.ts new file mode 100644 index 0000000..b3b8719 --- /dev/null +++ b/node_modules/type-fest/source/require-at-least-one.d.ts @@ -0,0 +1,33 @@ +import {Except} from './except'; + +/** +Create a type that requires at least one of the given keys. The remaining keys are kept as is. + +@example +``` +import {RequireAtLeastOne} from 'type-fest'; + +type Responder = { + text?: () => string; + json?: () => string; + + secure?: boolean; +}; + +const responder: RequireAtLeastOne = { + json: () => '{"message": "ok"}', + secure: true +}; +``` +*/ +export type RequireAtLeastOne< + ObjectType, + KeysType extends keyof ObjectType = keyof ObjectType +> = { + // For each `Key` in `KeysType` make a mapped type: + [Key in KeysType]-?: Required> & // 1. Make `Key`'s type required + // 2. Make all other keys in `KeysType` optional + Partial>>; +}[KeysType] & + // 3. Add the remaining keys not in `KeysType` + Except; diff --git a/node_modules/type-fest/source/require-exactly-one.d.ts b/node_modules/type-fest/source/require-exactly-one.d.ts new file mode 100644 index 0000000..c3e7e7e --- /dev/null +++ b/node_modules/type-fest/source/require-exactly-one.d.ts @@ -0,0 +1,35 @@ +// TODO: Remove this when we target TypeScript >=3.5. +type _Omit = Pick>; + +/** +Create a type that requires exactly one of the given keys and disallows more. The remaining keys are kept as is. + +Use-cases: +- Creating interfaces for components that only need one of the keys to display properly. +- Declaring generic keys in a single place for a single use-case that gets narrowed down via `RequireExactlyOne`. + +The caveat with `RequireExactlyOne` is that TypeScript doesn't always know at compile time every key that will exist at runtime. Therefore `RequireExactlyOne` can't do anything to prevent extra keys it doesn't know about. + +@example +``` +import {RequireExactlyOne} from 'type-fest'; + +type Responder = { + text: () => string; + json: () => string; + secure: boolean; +}; + +const responder: RequireExactlyOne = { + // Adding a `text` key here would cause a compile error. + + json: () => '{"message": "ok"}', + secure: true +}; +``` +*/ +export type RequireExactlyOne = + {[Key in KeysType]: ( + Required> & + Partial, never>> + )}[KeysType] & _Omit; diff --git a/node_modules/type-fest/source/set-optional.d.ts b/node_modules/type-fest/source/set-optional.d.ts new file mode 100644 index 0000000..3539899 --- /dev/null +++ b/node_modules/type-fest/source/set-optional.d.ts @@ -0,0 +1,34 @@ +import {Except} from './except'; + +/** +Create a type that makes the given keys optional. The remaining keys are kept as is. The sister of the `SetRequired` type. + +Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are optional. + +@example +``` +import {SetOptional} from 'type-fest'; + +type Foo = { + a: number; + b?: string; + c: boolean; +} + +type SomeOptional = SetOptional; +// type SomeOptional = { +// a: number; +// b?: string; // Was already optional and still is. +// c?: boolean; // Is now optional. +// } +``` +*/ +export type SetOptional = + // Pick just the keys that are not optional from the base type. + Except & + // Pick the keys that should be optional from the base type and make them optional. + Partial> extends + // If `InferredType` extends the previous, then for each key, use the inferred type key. + infer InferredType + ? {[KeyType in keyof InferredType]: InferredType[KeyType]} + : never; diff --git a/node_modules/type-fest/source/set-required.d.ts b/node_modules/type-fest/source/set-required.d.ts new file mode 100644 index 0000000..0a72330 --- /dev/null +++ b/node_modules/type-fest/source/set-required.d.ts @@ -0,0 +1,34 @@ +import {Except} from './except'; + +/** +Create a type that makes the given keys required. The remaining keys are kept as is. The sister of the `SetOptional` type. + +Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are required. + +@example +``` +import {SetRequired} from 'type-fest'; + +type Foo = { + a?: number; + b: string; + c?: boolean; +} + +type SomeRequired = SetRequired; +// type SomeRequired = { +// a?: number; +// b: string; // Was already required and still is. +// c: boolean; // Is now required. +// } +``` +*/ +export type SetRequired = + // Pick just the keys that are not required from the base type. + Except & + // Pick the keys that should be required from the base type and make them required. + Required> extends + // If `InferredType` extends the previous, then for each key, use the inferred type key. + infer InferredType + ? {[KeyType in keyof InferredType]: InferredType[KeyType]} + : never; diff --git a/node_modules/type-fest/source/set-return-type.d.ts b/node_modules/type-fest/source/set-return-type.d.ts new file mode 100644 index 0000000..98766b1 --- /dev/null +++ b/node_modules/type-fest/source/set-return-type.d.ts @@ -0,0 +1,29 @@ +type IsAny = 0 extends (1 & T) ? true : false; // https://stackoverflow.com/a/49928360/3406963 +type IsNever = [T] extends [never] ? true : false; +type IsUnknown = IsNever extends false ? T extends unknown ? unknown extends T ? IsAny extends false ? true : false : false : false : false; + +/** +Create a function type with a return type of your choice and the same parameters as the given function type. + +Use-case: You want to define a wrapped function that returns something different while receiving the same parameters. For example, you might want to wrap a function that can throw an error into one that will return `undefined` instead. + +@example +``` +import {SetReturnType} from 'type-fest'; + +type MyFunctionThatCanThrow = (foo: SomeType, bar: unknown) => SomeOtherType; + +type MyWrappedFunction = SetReturnType; +//=> type MyWrappedFunction = (foo: SomeType, bar: unknown) => SomeOtherType | undefined; +``` +*/ +export type SetReturnType any, TypeToReturn> = + // Just using `Parameters` isn't ideal because it doesn't handle the `this` fake parameter. + Fn extends (this: infer ThisArg, ...args: infer Arguments) => any ? ( + // If a function did not specify the `this` fake parameter, it will be inferred to `unknown`. + // We want to detect this situation just to display a friendlier type upon hovering on an IntelliSense-powered IDE. + IsUnknown extends true ? (...args: Arguments) => TypeToReturn : (this: ThisArg, ...args: Arguments) => TypeToReturn + ) : ( + // This part should be unreachable, but we make it meaningful just in case… + (...args: Parameters) => TypeToReturn + ); diff --git a/node_modules/type-fest/source/stringified.d.ts b/node_modules/type-fest/source/stringified.d.ts new file mode 100644 index 0000000..9688b67 --- /dev/null +++ b/node_modules/type-fest/source/stringified.d.ts @@ -0,0 +1,21 @@ +/** +Create a type with the keys of the given type changed to `string` type. + +Use-case: Changing interface values to strings in order to use them in a form model. + +@example +``` +import {Stringified} from 'type-fest'; + +type Car { + model: string; + speed: number; +} + +const carForm: Stringified = { + model: 'Foo', + speed: '101' +}; +``` +*/ +export type Stringified = {[KeyType in keyof ObjectType]: string}; diff --git a/node_modules/type-fest/source/tsconfig-json.d.ts b/node_modules/type-fest/source/tsconfig-json.d.ts new file mode 100644 index 0000000..89f6e9d --- /dev/null +++ b/node_modules/type-fest/source/tsconfig-json.d.ts @@ -0,0 +1,870 @@ +declare namespace TsConfigJson { + namespace CompilerOptions { + export type JSX = + | 'preserve' + | 'react' + | 'react-native'; + + export type Module = + | 'CommonJS' + | 'AMD' + | 'System' + | 'UMD' + | 'ES6' + | 'ES2015' + | 'ESNext' + | 'None' + // Lowercase alternatives + | 'commonjs' + | 'amd' + | 'system' + | 'umd' + | 'es6' + | 'es2015' + | 'esnext' + | 'none'; + + export type NewLine = + | 'CRLF' + | 'LF' + // Lowercase alternatives + | 'crlf' + | 'lf'; + + export type Target = + | 'ES3' + | 'ES5' + | 'ES6' + | 'ES2015' + | 'ES2016' + | 'ES2017' + | 'ES2018' + | 'ES2019' + | 'ES2020' + | 'ESNext' + // Lowercase alternatives + | 'es3' + | 'es5' + | 'es6' + | 'es2015' + | 'es2016' + | 'es2017' + | 'es2018' + | 'es2019' + | 'es2020' + | 'esnext'; + + export type Lib = + | 'ES5' + | 'ES6' + | 'ES7' + | 'ES2015' + | 'ES2015.Collection' + | 'ES2015.Core' + | 'ES2015.Generator' + | 'ES2015.Iterable' + | 'ES2015.Promise' + | 'ES2015.Proxy' + | 'ES2015.Reflect' + | 'ES2015.Symbol.WellKnown' + | 'ES2015.Symbol' + | 'ES2016' + | 'ES2016.Array.Include' + | 'ES2017' + | 'ES2017.Intl' + | 'ES2017.Object' + | 'ES2017.SharedMemory' + | 'ES2017.String' + | 'ES2017.TypedArrays' + | 'ES2018' + | 'ES2018.AsyncIterable' + | 'ES2018.Intl' + | 'ES2018.Promise' + | 'ES2018.Regexp' + | 'ES2019' + | 'ES2019.Array' + | 'ES2019.Object' + | 'ES2019.String' + | 'ES2019.Symbol' + | 'ES2020' + | 'ES2020.String' + | 'ES2020.Symbol.WellKnown' + | 'ESNext' + | 'ESNext.Array' + | 'ESNext.AsyncIterable' + | 'ESNext.BigInt' + | 'ESNext.Intl' + | 'ESNext.Symbol' + | 'DOM' + | 'DOM.Iterable' + | 'ScriptHost' + | 'WebWorker' + | 'WebWorker.ImportScripts' + // Lowercase alternatives + | 'es5' + | 'es6' + | 'es7' + | 'es2015' + | 'es2015.collection' + | 'es2015.core' + | 'es2015.generator' + | 'es2015.iterable' + | 'es2015.promise' + | 'es2015.proxy' + | 'es2015.reflect' + | 'es2015.symbol.wellknown' + | 'es2015.symbol' + | 'es2016' + | 'es2016.array.include' + | 'es2017' + | 'es2017.intl' + | 'es2017.object' + | 'es2017.sharedmemory' + | 'es2017.string' + | 'es2017.typedarrays' + | 'es2018' + | 'es2018.asynciterable' + | 'es2018.intl' + | 'es2018.promise' + | 'es2018.regexp' + | 'es2019' + | 'es2019.array' + | 'es2019.object' + | 'es2019.string' + | 'es2019.symbol' + | 'es2020' + | 'es2020.string' + | 'es2020.symbol.wellknown' + | 'esnext' + | 'esnext.array' + | 'esnext.asynciterable' + | 'esnext.bigint' + | 'esnext.intl' + | 'esnext.symbol' + | 'dom' + | 'dom.iterable' + | 'scripthost' + | 'webworker' + | 'webworker.importscripts'; + + export interface Plugin { + [key: string]: unknown; + /** + Plugin name. + */ + name?: string; + } + } + + export interface CompilerOptions { + /** + The character set of the input files. + + @default 'utf8' + */ + charset?: string; + + /** + Enables building for project references. + + @default true + */ + composite?: boolean; + + /** + Generates corresponding d.ts files. + + @default false + */ + declaration?: boolean; + + /** + Specify output directory for generated declaration files. + + Requires TypeScript version 2.0 or later. + */ + declarationDir?: string; + + /** + Show diagnostic information. + + @default false + */ + diagnostics?: boolean; + + /** + Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. + + @default false + */ + emitBOM?: boolean; + + /** + Only emit `.d.ts` declaration files. + + @default false + */ + emitDeclarationOnly?: boolean; + + /** + Enable incremental compilation. + + @default `composite` + */ + incremental?: boolean; + + /** + Specify file to store incremental compilation information. + + @default '.tsbuildinfo' + */ + tsBuildInfoFile?: string; + + /** + Emit a single file with source maps instead of having a separate file. + + @default false + */ + inlineSourceMap?: boolean; + + /** + Emit the source alongside the sourcemaps within a single file. + + Requires `--inlineSourceMap` to be set. + + @default false + */ + inlineSources?: boolean; + + /** + Specify JSX code generation: `'preserve'`, `'react'`, or `'react-native'`. + + @default 'preserve' + */ + jsx?: CompilerOptions.JSX; + + /** + Specifies the object invoked for `createElement` and `__spread` when targeting `'react'` JSX emit. + + @default 'React' + */ + reactNamespace?: string; + + /** + Print names of files part of the compilation. + + @default false + */ + listFiles?: boolean; + + /** + Specifies the location where debugger should locate map files instead of generated locations. + */ + mapRoot?: string; + + /** + Specify module code generation: 'None', 'CommonJS', 'AMD', 'System', 'UMD', 'ES6', 'ES2015' or 'ESNext'. Only 'AMD' and 'System' can be used in conjunction with `--outFile`. 'ES6' and 'ES2015' values may be used when targeting 'ES5' or lower. + + @default ['ES3', 'ES5'].includes(target) ? 'CommonJS' : 'ES6' + */ + module?: CompilerOptions.Module; + + /** + Specifies the end of line sequence to be used when emitting files: 'crlf' (Windows) or 'lf' (Unix). + + Default: Platform specific + */ + newLine?: CompilerOptions.NewLine; + + /** + Do not emit output. + + @default false + */ + noEmit?: boolean; + + /** + Do not generate custom helper functions like `__extends` in compiled output. + + @default false + */ + noEmitHelpers?: boolean; + + /** + Do not emit outputs if any type checking errors were reported. + + @default false + */ + noEmitOnError?: boolean; + + /** + Warn on expressions and declarations with an implied 'any' type. + + @default false + */ + noImplicitAny?: boolean; + + /** + Raise error on 'this' expressions with an implied any type. + + @default false + */ + noImplicitThis?: boolean; + + /** + Report errors on unused locals. + + Requires TypeScript version 2.0 or later. + + @default false + */ + noUnusedLocals?: boolean; + + /** + Report errors on unused parameters. + + Requires TypeScript version 2.0 or later. + + @default false + */ + noUnusedParameters?: boolean; + + /** + Do not include the default library file (lib.d.ts). + + @default false + */ + noLib?: boolean; + + /** + Do not add triple-slash references or module import targets to the list of compiled files. + + @default false + */ + noResolve?: boolean; + + /** + Disable strict checking of generic signatures in function types. + + @default false + */ + noStrictGenericChecks?: boolean; + + /** + @deprecated use `skipLibCheck` instead. + */ + skipDefaultLibCheck?: boolean; + + /** + Skip type checking of declaration files. + + Requires TypeScript version 2.0 or later. + + @default false + */ + skipLibCheck?: boolean; + + /** + Concatenate and emit output to single file. + */ + outFile?: string; + + /** + Redirect output structure to the directory. + */ + outDir?: string; + + /** + Do not erase const enum declarations in generated code. + + @default false + */ + preserveConstEnums?: boolean; + + /** + Do not resolve symlinks to their real path; treat a symlinked file like a real one. + + @default false + */ + preserveSymlinks?: boolean; + + /** + Keep outdated console output in watch mode instead of clearing the screen. + + @default false + */ + preserveWatchOutput?: boolean; + + /** + Stylize errors and messages using color and context (experimental). + + @default true // Unless piping to another program or redirecting output to a file. + */ + pretty?: boolean; + + /** + Do not emit comments to output. + + @default false + */ + removeComments?: boolean; + + /** + Specifies the root directory of input files. + + Use to control the output directory structure with `--outDir`. + */ + rootDir?: string; + + /** + Unconditionally emit imports for unresolved files. + + @default false + */ + isolatedModules?: boolean; + + /** + Generates corresponding '.map' file. + + @default false + */ + sourceMap?: boolean; + + /** + Specifies the location where debugger should locate TypeScript files instead of source locations. + */ + sourceRoot?: string; + + /** + Suppress excess property checks for object literals. + + @default false + */ + suppressExcessPropertyErrors?: boolean; + + /** + Suppress noImplicitAny errors for indexing objects lacking index signatures. + + @default false + */ + suppressImplicitAnyIndexErrors?: boolean; + + /** + Do not emit declarations for code that has an `@internal` annotation. + */ + stripInternal?: boolean; + + /** + Specify ECMAScript target version. + + @default 'es3' + */ + target?: CompilerOptions.Target; + + /** + Watch input files. + + @default false + */ + watch?: boolean; + + /** + Enables experimental support for ES7 decorators. + + @default false + */ + experimentalDecorators?: boolean; + + /** + Emit design-type metadata for decorated declarations in source. + + @default false + */ + emitDecoratorMetadata?: boolean; + + /** + Specifies module resolution strategy: 'node' (Node) or 'classic' (TypeScript pre 1.6). + + @default ['AMD', 'System', 'ES6'].includes(module) ? 'classic' : 'node' + */ + moduleResolution?: 'classic' | 'node'; + + /** + Do not report errors on unused labels. + + @default false + */ + allowUnusedLabels?: boolean; + + /** + Report error when not all code paths in function return a value. + + @default false + */ + noImplicitReturns?: boolean; + + /** + Report errors for fallthrough cases in switch statement. + + @default false + */ + noFallthroughCasesInSwitch?: boolean; + + /** + Do not report errors on unreachable code. + + @default false + */ + allowUnreachableCode?: boolean; + + /** + Disallow inconsistently-cased references to the same file. + + @default false + */ + forceConsistentCasingInFileNames?: boolean; + + /** + Base directory to resolve non-relative module names. + */ + baseUrl?: string; + + /** + Specify path mapping to be computed relative to baseUrl option. + */ + paths?: Record; + + /** + List of TypeScript language server plugins to load. + + Requires TypeScript version 2.3 or later. + */ + plugins?: CompilerOptions.Plugin[]; + + /** + Specify list of root directories to be used when resolving modules. + */ + rootDirs?: string[]; + + /** + Specify list of directories for type definition files to be included. + + Requires TypeScript version 2.0 or later. + */ + typeRoots?: string[]; + + /** + Type declaration files to be included in compilation. + + Requires TypeScript version 2.0 or later. + */ + types?: string[]; + + /** + Enable tracing of the name resolution process. + + @default false + */ + traceResolution?: boolean; + + /** + Allow javascript files to be compiled. + + @default false + */ + allowJs?: boolean; + + /** + Do not truncate error messages. + + @default false + */ + noErrorTruncation?: boolean; + + /** + Allow default imports from modules with no default export. This does not affect code emit, just typechecking. + + @default module === 'system' || esModuleInterop + */ + allowSyntheticDefaultImports?: boolean; + + /** + Do not emit `'use strict'` directives in module output. + + @default false + */ + noImplicitUseStrict?: boolean; + + /** + Enable to list all emitted files. + + Requires TypeScript version 2.0 or later. + + @default false + */ + listEmittedFiles?: boolean; + + /** + Disable size limit for JavaScript project. + + Requires TypeScript version 2.0 or later. + + @default false + */ + disableSizeLimit?: boolean; + + /** + List of library files to be included in the compilation. + + Requires TypeScript version 2.0 or later. + */ + lib?: CompilerOptions.Lib[]; + + /** + Enable strict null checks. + + Requires TypeScript version 2.0 or later. + + @default false + */ + strictNullChecks?: boolean; + + /** + The maximum dependency depth to search under `node_modules` and load JavaScript files. Only applicable with `--allowJs`. + + @default 0 + */ + maxNodeModuleJsDepth?: number; + + /** + Import emit helpers (e.g. `__extends`, `__rest`, etc..) from tslib. + + Requires TypeScript version 2.1 or later. + + @default false + */ + importHelpers?: boolean; + + /** + Specify the JSX factory function to use when targeting React JSX emit, e.g. `React.createElement` or `h`. + + Requires TypeScript version 2.1 or later. + + @default 'React.createElement' + */ + jsxFactory?: string; + + /** + Parse in strict mode and emit `'use strict'` for each source file. + + Requires TypeScript version 2.1 or later. + + @default false + */ + alwaysStrict?: boolean; + + /** + Enable all strict type checking options. + + Requires TypeScript version 2.3 or later. + + @default false + */ + strict?: boolean; + + /** + Enable stricter checking of of the `bind`, `call`, and `apply` methods on functions. + + @default false + */ + strictBindCallApply?: boolean; + + /** + Provide full support for iterables in `for-of`, spread, and destructuring when targeting `ES5` or `ES3`. + + Requires TypeScript version 2.3 or later. + + @default false + */ + downlevelIteration?: boolean; + + /** + Report errors in `.js` files. + + Requires TypeScript version 2.3 or later. + + @default false + */ + checkJs?: boolean; + + /** + Disable bivariant parameter checking for function types. + + Requires TypeScript version 2.6 or later. + + @default false + */ + strictFunctionTypes?: boolean; + + /** + Ensure non-undefined class properties are initialized in the constructor. + + Requires TypeScript version 2.7 or later. + + @default false + */ + strictPropertyInitialization?: boolean; + + /** + Emit `__importStar` and `__importDefault` helpers for runtime Babel ecosystem compatibility and enable `--allowSyntheticDefaultImports` for typesystem compatibility. + + Requires TypeScript version 2.7 or later. + + @default false + */ + esModuleInterop?: boolean; + + /** + Allow accessing UMD globals from modules. + + @default false + */ + allowUmdGlobalAccess?: boolean; + + /** + Resolve `keyof` to string valued property names only (no numbers or symbols). + + Requires TypeScript version 2.9 or later. + + @default false + */ + keyofStringsOnly?: boolean; + + /** + Emit ECMAScript standard class fields. + + Requires TypeScript version 3.7 or later. + + @default false + */ + useDefineForClassFields?: boolean; + + /** + Generates a sourcemap for each corresponding `.d.ts` file. + + Requires TypeScript version 2.9 or later. + + @default false + */ + declarationMap?: boolean; + + /** + Include modules imported with `.json` extension. + + Requires TypeScript version 2.9 or later. + + @default false + */ + resolveJsonModule?: boolean; + } + + /** + Auto type (.d.ts) acquisition options for this project. + + Requires TypeScript version 2.1 or later. + */ + export interface TypeAcquisition { + /** + Enable auto type acquisition. + */ + enable?: boolean; + + /** + Specifies a list of type declarations to be included in auto type acquisition. For example, `['jquery', 'lodash']`. + */ + include?: string[]; + + /** + Specifies a list of type declarations to be excluded from auto type acquisition. For example, `['jquery', 'lodash']`. + */ + exclude?: string[]; + } + + export interface References { + /** + A normalized path on disk. + */ + path: string; + + /** + The path as the user originally wrote it. + */ + originalPath?: string; + + /** + True if the output of this reference should be prepended to the output of this project. + + Only valid for `--outFile` compilations. + */ + prepend?: boolean; + + /** + True if it is intended that this reference form a circularity. + */ + circular?: boolean; + } +} + +export interface TsConfigJson { + /** + Instructs the TypeScript compiler how to compile `.ts` files. + */ + compilerOptions?: TsConfigJson.CompilerOptions; + + /** + Auto type (.d.ts) acquisition options for this project. + + Requires TypeScript version 2.1 or later. + */ + typeAcquisition?: TsConfigJson.TypeAcquisition; + + /** + Enable Compile-on-Save for this project. + */ + compileOnSave?: boolean; + + /** + Path to base configuration file to inherit from. + + Requires TypeScript version 2.1 or later. + */ + extends?: string; + + /** + If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. When a `files` property is specified, only those files and those specified by `include` are included. + */ + files?: string[]; + + /** + Specifies a list of files to be excluded from compilation. The `exclude` property only affects the files included via the `include` property and not the `files` property. + + Glob patterns require TypeScript version 2.0 or later. + */ + exclude?: string[]; + + /** + Specifies a list of glob patterns that match files to be included in compilation. + + If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. + + Requires TypeScript version 2.0 or later. + */ + include?: string[]; + + /** + Referenced projects. + + Requires TypeScript version 3.0 or later. + */ + references?: TsConfigJson.References[]; +} diff --git a/node_modules/type-fest/source/union-to-intersection.d.ts b/node_modules/type-fest/source/union-to-intersection.d.ts new file mode 100644 index 0000000..5f9837f --- /dev/null +++ b/node_modules/type-fest/source/union-to-intersection.d.ts @@ -0,0 +1,58 @@ +/** +Convert a union type to an intersection type using [distributive conditional types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types). + +Inspired by [this Stack Overflow answer](https://stackoverflow.com/a/50375286/2172153). + +@example +``` +import {UnionToIntersection} from 'type-fest'; + +type Union = {the(): void} | {great(arg: string): void} | {escape: boolean}; + +type Intersection = UnionToIntersection; +//=> {the(): void; great(arg: string): void; escape: boolean}; +``` + +A more applicable example which could make its way into your library code follows. + +@example +``` +import {UnionToIntersection} from 'type-fest'; + +class CommandOne { + commands: { + a1: () => undefined, + b1: () => undefined, + } +} + +class CommandTwo { + commands: { + a2: (argA: string) => undefined, + b2: (argB: string) => undefined, + } +} + +const union = [new CommandOne(), new CommandTwo()].map(instance => instance.commands); +type Union = typeof union; +//=> {a1(): void; b1(): void} | {a2(argA: string): void; b2(argB: string): void} + +type Intersection = UnionToIntersection; +//=> {a1(): void; b1(): void; a2(argA: string): void; b2(argB: string): void} +``` +*/ +export type UnionToIntersection = ( + // `extends unknown` is always going to be the case and is used to convert the + // `Union` into a [distributive conditional + // type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types). + Union extends unknown + // The union type is used as the only argument to a function since the union + // of function arguments is an intersection. + ? (distributedUnion: Union) => void + // This won't happen. + : never + // Infer the `Intersection` type since TypeScript represents the positional + // arguments of unions of functions as an intersection of the union. + ) extends ((mergedIntersection: infer Intersection) => void) + ? Intersection + : never; diff --git a/node_modules/type-fest/source/utilities.d.ts b/node_modules/type-fest/source/utilities.d.ts new file mode 100644 index 0000000..0bd75e6 --- /dev/null +++ b/node_modules/type-fest/source/utilities.d.ts @@ -0,0 +1,3 @@ +export type UpperCaseCharacters = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'; + +export type WordSeparators = '-' | '_' | ' '; diff --git a/node_modules/type-fest/source/value-of.d.ts b/node_modules/type-fest/source/value-of.d.ts new file mode 100644 index 0000000..1279373 --- /dev/null +++ b/node_modules/type-fest/source/value-of.d.ts @@ -0,0 +1,40 @@ +/** +Create a union of the given object's values, and optionally specify which keys to get the values from. + +Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/31438) if you want to have this type as a built-in in TypeScript. + +@example +``` +// data.json +{ + 'foo': 1, + 'bar': 2, + 'biz': 3 +} + +// main.ts +import {ValueOf} from 'type-fest'; +import data = require('./data.json'); + +export function getData(name: string): ValueOf { + return data[name]; +} + +export function onlyBar(name: string): ValueOf { + return data[name]; +} + +// file.ts +import {getData, onlyBar} from './main'; + +getData('foo'); +//=> 1 + +onlyBar('foo'); +//=> TypeError ... + +onlyBar('bar'); +//=> 2 +``` +*/ +export type ValueOf = ObjectType[ValueType]; diff --git a/node_modules/type-fest/ts41/camel-case.d.ts b/node_modules/type-fest/ts41/camel-case.d.ts new file mode 100644 index 0000000..4476fd3 --- /dev/null +++ b/node_modules/type-fest/ts41/camel-case.d.ts @@ -0,0 +1,72 @@ +import {WordSeparators} from '../source/utilities'; + +/** +Recursively split a string literal into two parts on the first occurence of the given string, returning an array literal of all the separate parts. +*/ +export type Split = + string extends S ? string[] : + S extends '' ? [] : + S extends `${infer T}${D}${infer U}` ? [T, ...Split] : + [S]; + +/** +Step by step takes the first item in an array literal, formats it and adds it to a string literal, and then recursively appends the remainder. + +Only to be used by `CamelCaseStringArray<>`. + +@see CamelCaseStringArray +*/ +type InnerCamelCaseStringArray = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? FirstPart extends undefined + ? '' + : FirstPart extends '' + ? InnerCamelCaseStringArray + : `${PreviousPart extends '' ? FirstPart : Capitalize}${InnerCamelCaseStringArray}` + : ''; + +/** +Starts fusing the output of `Split<>`, an array literal of strings, into a camel-cased string literal. + +It's separate from `InnerCamelCaseStringArray<>` to keep a clean API outwards to the rest of the code. + +@see Split +*/ +type CamelCaseStringArray = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? Uncapitalize<`${FirstPart}${InnerCamelCaseStringArray}`> + : never; + +/** +Convert a string literal to camel-case. + +This can be useful when, for example, converting some kebab-cased command-line flags or a snake-cased database result. + +@example +``` +import {CamelCase} from 'type-fest'; + +// Simple + +const someVariable: CamelCase<'foo-bar'> = 'fooBar'; + +// Advanced + +type CamelCasedProps = { + [K in keyof T as CamelCase]: T[K] +}; + +interface RawOptions { + 'dry-run': boolean; + 'full_family_name': string; + foo: number; +} + +const dbResult: CamelCasedProps = { + dryRun: true, + fullFamilyName: 'bar.js', + foo: 123 +}; +``` +*/ +export type CamelCase = K extends string ? CamelCaseStringArray> : K; diff --git a/node_modules/type-fest/ts41/delimiter-case.d.ts b/node_modules/type-fest/ts41/delimiter-case.d.ts new file mode 100644 index 0000000..52f4eb9 --- /dev/null +++ b/node_modules/type-fest/ts41/delimiter-case.d.ts @@ -0,0 +1,85 @@ +import {UpperCaseCharacters, WordSeparators} from '../source/utilities'; + +/** +Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters. +*/ +export type SplitIncludingDelimiters = + Source extends '' ? [] : + Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? + ( + Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` + ? UsedDelimiter extends Delimiter + ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` + ? [...SplitIncludingDelimiters, UsedDelimiter, ...SplitIncludingDelimiters] + : never + : never + : never + ) : + [Source]; + +/** +Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing. + +@see StringArrayToDelimiterCase +*/ +type StringPartToDelimiterCase = + StringPart extends UsedWordSeparators ? Delimiter : + StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase}` : + StringPart; + +/** +Takes the result of a splitted string literal and recursively concatenates it together into the desired casing. + +It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated. + +@see SplitIncludingDelimiters +*/ +type StringArrayToDelimiterCase = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? `${StringPartToDelimiterCase}${StringArrayToDelimiterCase}` + : ''; + +/** +Convert a string literal to a custom string delimiter casing. + +This can be useful when, for example, converting a camel-cased object property to an oddly cased one. + +@see KebabCase +@see SnakeCase + +@example +``` +import {DelimiterCase} from 'type-fest'; + +// Simple + +const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar'; + +// Advanced + +type OddlyCasedProps = { + [K in keyof T as DelimiterCase]: T[K] +}; + +interface SomeOptions { + dryRun: boolean; + includeFile: string; + foo: number; +} + +const rawCliOptions: OddlyCasedProps = { + 'dry#run': true, + 'include#file': 'bar.js', + foo: 123 +}; +``` +*/ + +export type DelimiterCase = Value extends string + ? StringArrayToDelimiterCase< + SplitIncludingDelimiters, + WordSeparators, + UpperCaseCharacters, + Delimiter + > + : Value; diff --git a/node_modules/type-fest/ts41/index.d.ts b/node_modules/type-fest/ts41/index.d.ts new file mode 100644 index 0000000..fbaec82 --- /dev/null +++ b/node_modules/type-fest/ts41/index.d.ts @@ -0,0 +1,9 @@ +// These are all the basic types that's compatible with all supported TypeScript versions. +export * from '../base'; + +// These are special types that require at least TypeScript 4.1. +export {CamelCase} from './camel-case'; +export {KebabCase} from './kebab-case'; +export {PascalCase} from './pascal-case'; +export {SnakeCase} from './snake-case'; +export {DelimiterCase} from './delimiter-case'; diff --git a/node_modules/type-fest/ts41/kebab-case.d.ts b/node_modules/type-fest/ts41/kebab-case.d.ts new file mode 100644 index 0000000..ba6a99d --- /dev/null +++ b/node_modules/type-fest/ts41/kebab-case.d.ts @@ -0,0 +1,36 @@ +import {DelimiterCase} from './delimiter-case'; + +/** +Convert a string literal to kebab-case. + +This can be useful when, for example, converting a camel-cased object property to a kebab-cased CSS class name or a command-line flag. + +@example +``` +import {KebabCase} from 'type-fest'; + +// Simple + +const someVariable: KebabCase<'fooBar'> = 'foo-bar'; + +// Advanced + +type KebabCasedProps = { + [K in keyof T as KebabCase]: T[K] +}; + +interface CliOptions { + dryRun: boolean; + includeFile: string; + foo: number; +} + +const rawCliOptions: KebabCasedProps = { + 'dry-run': true, + 'include-file': 'bar.js', + foo: 123 +}; +``` +*/ + +export type KebabCase = DelimiterCase; diff --git a/node_modules/type-fest/ts41/pascal-case.d.ts b/node_modules/type-fest/ts41/pascal-case.d.ts new file mode 100644 index 0000000..bfb2a36 --- /dev/null +++ b/node_modules/type-fest/ts41/pascal-case.d.ts @@ -0,0 +1,36 @@ +import {CamelCase} from './camel-case'; + +/** +Converts a string literal to pascal-case. + +@example +``` +import {PascalCase} from 'type-fest'; + +// Simple + +const someVariable: PascalCase<'foo-bar'> = 'FooBar'; + +// Advanced + +type PascalCaseProps = { + [K in keyof T as PascalCase]: T[K] +}; + +interface RawOptions { + 'dry-run': boolean; + 'full_family_name': string; + foo: number; +} + +const dbResult: CamelCasedProps = { + DryRun: true, + FullFamilyName: 'bar.js', + Foo: 123 +}; +``` +*/ + +export type PascalCase = CamelCase extends string + ? Capitalize> + : CamelCase; diff --git a/node_modules/type-fest/ts41/snake-case.d.ts b/node_modules/type-fest/ts41/snake-case.d.ts new file mode 100644 index 0000000..272b3d3 --- /dev/null +++ b/node_modules/type-fest/ts41/snake-case.d.ts @@ -0,0 +1,35 @@ +import {DelimiterCase} from './delimiter-case'; + +/** +Convert a string literal to snake-case. + +This can be useful when, for example, converting a camel-cased object property to a snake-cased SQL column name. + +@example +``` +import {SnakeCase} from 'type-fest'; + +// Simple + +const someVariable: SnakeCase<'fooBar'> = 'foo_bar'; + +// Advanced + +type SnakeCasedProps = { + [K in keyof T as SnakeCase]: T[K] +}; + +interface ModelProps { + isHappy: boolean; + fullFamilyName: string; + foo: number; +} + +const dbResult: SnakeCasedProps = { + 'is_happy': true, + 'full_family_name': 'Carla Smith', + foo: 123 +}; +``` +*/ +export type SnakeCase = DelimiterCase; diff --git a/node_modules/type-is/HISTORY.md b/node_modules/type-is/HISTORY.md new file mode 100644 index 0000000..8de21f7 --- /dev/null +++ b/node_modules/type-is/HISTORY.md @@ -0,0 +1,259 @@ +1.6.18 / 2019-04-26 +=================== + + * Fix regression passing request object to `typeis.is` + +1.6.17 / 2019-04-25 +=================== + + * deps: mime-types@~2.1.24 + - Add Apple file extensions from IANA + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add extension `.owl` to `application/rdf+xml` + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add extensions from IANA for `image/*` types + - Add extensions from IANA for `model/*` types + - Add extensions to HEIC image types + - Add new mime types + - Add `text/mdx` with extension `.mdx` + * perf: prevent internal `throw` on invalid type + +1.6.16 / 2018-02-16 +=================== + + * deps: mime-types@~2.1.18 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add extension `.mjs` to `application/javascript` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add glTF types and extensions + - Add new mime types + - Update extensions `.md` and `.markdown` to be `text/markdown` + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +1.6.15 / 2017-03-31 +=================== + + * deps: mime-types@~2.1.15 + - Add new mime types + +1.6.14 / 2016-11-18 +=================== + + * deps: mime-types@~2.1.13 + - Add new mime types + +1.6.13 / 2016-05-18 +=================== + + * deps: mime-types@~2.1.11 + - Add new mime types + +1.6.12 / 2016-02-28 +=================== + + * deps: mime-types@~2.1.10 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +1.6.11 / 2016-01-29 +=================== + + * deps: mime-types@~2.1.9 + - Add new mime types + +1.6.10 / 2015-12-01 +=================== + + * deps: mime-types@~2.1.8 + - Add new mime types + +1.6.9 / 2015-09-27 +================== + + * deps: mime-types@~2.1.7 + - Add new mime types + +1.6.8 / 2015-09-04 +================== + + * deps: mime-types@~2.1.6 + - Add new mime types + +1.6.7 / 2015-08-20 +================== + + * Fix type error when given invalid type to match against + * deps: mime-types@~2.1.5 + - Add new mime types + +1.6.6 / 2015-07-31 +================== + + * deps: mime-types@~2.1.4 + - Add new mime types + +1.6.5 / 2015-07-16 +================== + + * deps: mime-types@~2.1.3 + - Add new mime types + +1.6.4 / 2015-07-01 +================== + + * deps: mime-types@~2.1.2 + - Add new mime types + * perf: enable strict mode + * perf: remove argument reassignment + +1.6.3 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - Add new mime types + * perf: reduce try block size + * perf: remove bitwise operations + +1.6.2 / 2015-05-10 +================== + + * deps: mime-types@~2.0.11 + - Add new mime types + +1.6.1 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - Add new mime types + +1.6.0 / 2015-02-12 +================== + + * fix false-positives in `hasBody` `Transfer-Encoding` check + * support wildcard for both type and subtype (`*/*`) + +1.5.7 / 2015-02-09 +================== + + * fix argument reassignment + * deps: mime-types@~2.0.9 + - Add new mime types + +1.5.6 / 2015-01-29 +================== + + * deps: mime-types@~2.0.8 + - Add new mime types + +1.5.5 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - Add new mime types + - Fix missing extensions + - Fix various invalid MIME type entries + - Remove example template MIME types + - deps: mime-db@~1.5.0 + +1.5.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - Add new mime types + - deps: mime-db@~1.3.0 + +1.5.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - Add new mime types + - deps: mime-db@~1.2.0 + +1.5.2 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - Add new mime types + - deps: mime-db@~1.1.0 + +1.5.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + * deps: media-typer@0.3.0 + * deps: mime-types@~2.0.1 + - Support Node.js 0.6 + +1.5.0 / 2014-09-05 +================== + + * fix `hasbody` to be true for `content-length: 0` + +1.4.0 / 2014-09-02 +================== + + * update mime-types + +1.3.2 / 2014-06-24 +================== + + * use `~` range on mime-types + +1.3.1 / 2014-06-19 +================== + + * fix global variable leak + +1.3.0 / 2014-06-19 +================== + + * improve type parsing + + - invalid media type never matches + - media type not case-sensitive + - extra LWS does not affect results + +1.2.2 / 2014-06-19 +================== + + * fix behavior on unknown type argument + +1.2.1 / 2014-06-03 +================== + + * switch dependency from `mime` to `mime-types@1.0.0` + +1.2.0 / 2014-05-11 +================== + + * support suffix matching: + + - `+json` matches `application/vnd+json` + - `*/vnd+json` matches `application/vnd+json` + - `application/*+json` matches `application/vnd+json` + +1.1.0 / 2014-04-12 +================== + + * add non-array values support + * expose internal utilities: + + - `.is()` + - `.hasBody()` + - `.normalize()` + - `.match()` + +1.0.1 / 2014-03-30 +================== + + * add `multipart` as a shorthand diff --git a/node_modules/type-is/LICENSE b/node_modules/type-is/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/node_modules/type-is/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/type-is/README.md b/node_modules/type-is/README.md new file mode 100644 index 0000000..b85ef8f --- /dev/null +++ b/node_modules/type-is/README.md @@ -0,0 +1,170 @@ +# type-is + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Infer the content-type of a request. + +### Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install type-is +``` + +## API + +```js +var http = require('http') +var typeis = require('type-is') + +http.createServer(function (req, res) { + var istext = typeis(req, ['text/*']) + res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text') +}) +``` + +### typeis(request, types) + +Checks if the `request` is one of the `types`. If the request has no body, +even if there is a `Content-Type` header, then `null` is returned. If the +`Content-Type` header is invalid or does not matches any of the `types`, then +`false` is returned. Otherwise, a string of the type that matched is returned. + +The `request` argument is expected to be a Node.js HTTP request. The `types` +argument is an array of type strings. + +Each type in the `types` array can be one of the following: + +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. + +Some examples to illustrate the inputs and returned value: + + + +```js +// req.headers.content-type = 'application/json' + +typeis(req, ['json']) // => 'json' +typeis(req, ['html', 'json']) // => 'json' +typeis(req, ['application/*']) // => 'application/json' +typeis(req, ['application/json']) // => 'application/json' + +typeis(req, ['html']) // => false +``` + +### typeis.hasBody(request) + +Returns a Boolean if the given `request` has a body, regardless of the +`Content-Type` header. + +Having a body has no relation to how large the body is (it may be 0 bytes). +This is similar to how file existence works. If a body does exist, then this +indicates that there is data to read from the Node.js request stream. + + + +```js +if (typeis.hasBody(req)) { + // read the body, since there is one + + req.on('data', function (chunk) { + // ... + }) +} +``` + +### typeis.is(mediaType, types) + +Checks if the `mediaType` is one of the `types`. If the `mediaType` is invalid +or does not matches any of the `types`, then `false` is returned. Otherwise, a +string of the type that matched is returned. + +The `mediaType` argument is expected to be a +[media type](https://tools.ietf.org/html/rfc6838) string. The `types` argument +is an array of type strings. + +Each type in the `types` array can be one of the following: + +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. + +Some examples to illustrate the inputs and returned value: + + + +```js +var mediaType = 'application/json' + +typeis.is(mediaType, ['json']) // => 'json' +typeis.is(mediaType, ['html', 'json']) // => 'json' +typeis.is(mediaType, ['application/*']) // => 'application/json' +typeis.is(mediaType, ['application/json']) // => 'application/json' + +typeis.is(mediaType, ['html']) // => false +``` + +## Examples + +### Example body parser + +```js +var express = require('express') +var typeis = require('type-is') + +var app = express() + +app.use(function bodyParser (req, res, next) { + if (!typeis.hasBody(req)) { + return next() + } + + switch (typeis(req, ['urlencoded', 'json', 'multipart'])) { + case 'urlencoded': + // parse urlencoded body + throw new Error('implement urlencoded body parsing') + case 'json': + // parse json body + throw new Error('implement json body parsing') + case 'multipart': + // parse multipart body + throw new Error('implement multipart body parsing') + default: + // 415 error code + res.statusCode = 415 + res.end() + break + } +}) +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/type-is/master +[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master +[node-version-image]: https://badgen.net/npm/node/type-is +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/type-is +[npm-url]: https://npmjs.org/package/type-is +[npm-version-image]: https://badgen.net/npm/v/type-is +[travis-image]: https://badgen.net/travis/jshttp/type-is/master +[travis-url]: https://travis-ci.org/jshttp/type-is diff --git a/node_modules/type-is/index.js b/node_modules/type-is/index.js new file mode 100644 index 0000000..890ad76 --- /dev/null +++ b/node_modules/type-is/index.js @@ -0,0 +1,266 @@ +/*! + * type-is + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var typer = require('media-typer') +var mime = require('mime-types') + +/** + * Module exports. + * @public + */ + +module.exports = typeofrequest +module.exports.is = typeis +module.exports.hasBody = hasbody +module.exports.normalize = normalize +module.exports.match = mimeMatch + +/** + * Compare a `value` content-type with `types`. + * Each `type` can be an extension like `html`, + * a special shortcut like `multipart` or `urlencoded`, + * or a mime type. + * + * If no types match, `false` is returned. + * Otherwise, the first `type` that matches is returned. + * + * @param {String} value + * @param {Array} types + * @public + */ + +function typeis (value, types_) { + var i + var types = types_ + + // remove parameters and normalize + var val = tryNormalizeType(value) + + // no type or invalid + if (!val) { + return false + } + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length - 1) + for (i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // no types, return the content type + if (!types || !types.length) { + return val + } + + var type + for (i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), val)) { + return type[0] === '+' || type.indexOf('*') !== -1 + ? val + : type + } + } + + // no matches + return false +} + +/** + * Check if a request has a request body. + * A request with a body __must__ either have `transfer-encoding` + * or `content-length` headers set. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 + * + * @param {Object} request + * @return {Boolean} + * @public + */ + +function hasbody (req) { + return req.headers['transfer-encoding'] !== undefined || + !isNaN(req.headers['content-length']) +} + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains any of the give mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @public + */ + +function typeofrequest (req, types_) { + var types = types_ + + // no body + if (!hasbody(req)) { + return null + } + + // support flattened arguments + if (arguments.length > 2) { + types = new Array(arguments.length - 1) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // request content type + var value = req.headers['content-type'] + + return typeis(value, types) +} + +/** + * Normalize a mime type. + * If it's a shorthand, expand it to a valid mime type. + * + * In general, you probably want: + * + * var type = is(req, ['urlencoded', 'json', 'multipart']); + * + * Then use the appropriate body parsers. + * These three are the most common request body types + * and are thus ensured to work. + * + * @param {String} type + * @private + */ + +function normalize (type) { + if (typeof type !== 'string') { + // invalid type + return false + } + + switch (type) { + case 'urlencoded': + return 'application/x-www-form-urlencoded' + case 'multipart': + return 'multipart/*' + } + + if (type[0] === '+') { + // "+json" -> "*/*+json" expando + return '*/*' + type + } + + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if `expected` mime type + * matches `actual` mime type with + * wildcard and +suffix support. + * + * @param {String} expected + * @param {String} actual + * @return {Boolean} + * @private + */ + +function mimeMatch (expected, actual) { + // invalid type + if (expected === false) { + return false + } + + // split types + var actualParts = actual.split('/') + var expectedParts = expected.split('/') + + // invalid format + if (actualParts.length !== 2 || expectedParts.length !== 2) { + return false + } + + // validate type + if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) { + return false + } + + // validate suffix wildcard + if (expectedParts[1].substr(0, 2) === '*+') { + return expectedParts[1].length <= actualParts[1].length + 1 && + expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length) + } + + // validate subtype + if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) { + return false + } + + return true +} + +/** + * Normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function normalizeType (value) { + // parse the type + var type = typer.parse(value) + + // remove the parameters + type.parameters = undefined + + // reformat it + return typer.format(type) +} + +/** + * Try to normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function tryNormalizeType (value) { + if (!value) { + return null + } + + try { + return normalizeType(value) + } catch (err) { + return null + } +} diff --git a/node_modules/type-is/package.json b/node_modules/type-is/package.json new file mode 100644 index 0000000..ba49099 --- /dev/null +++ b/node_modules/type-is/package.json @@ -0,0 +1,88 @@ +{ + "_args": [ + [ + "type-is@1.6.18", + "D:\\Cricbuzzz" + ] + ], + "_from": "type-is@1.6.18", + "_id": "type-is@1.6.18", + "_inBundle": false, + "_integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "_location": "/type-is", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "type-is@1.6.18", + "name": "type-is", + "escapedName": "type-is", + "rawSpec": "1.6.18", + "saveSpec": null, + "fetchSpec": "1.6.18" + }, + "_requiredBy": [ + "/body-parser", + "/express" + ], + "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "_spec": "1.6.18", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/jshttp/type-is/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "description": "Infer the content-type of a request.", + "devDependencies": { + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/type-is#readme", + "keywords": [ + "content", + "type", + "checking" + ], + "license": "MIT", + "name": "type-is", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/type-is.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" + }, + "version": "1.6.18" +} diff --git a/node_modules/typedarray-to-buffer/.airtap.yml b/node_modules/typedarray-to-buffer/.airtap.yml new file mode 100644 index 0000000..3417780 --- /dev/null +++ b/node_modules/typedarray-to-buffer/.airtap.yml @@ -0,0 +1,15 @@ +sauce_connect: true +loopback: airtap.local +browsers: + - name: chrome + version: latest + - name: firefox + version: latest + - name: safari + version: latest + - name: microsoftedge + version: latest + - name: ie + version: latest + - name: iphone + version: latest diff --git a/node_modules/typedarray-to-buffer/.travis.yml b/node_modules/typedarray-to-buffer/.travis.yml new file mode 100644 index 0000000..f25afbd --- /dev/null +++ b/node_modules/typedarray-to-buffer/.travis.yml @@ -0,0 +1,11 @@ +language: node_js +node_js: + - lts/* +addons: + sauce_connect: true + hosts: + - airtap.local +env: + global: + - secure: i51rE9rZGHbcZWlL58j3H1qtL23OIV2r0X4TcQKNI3pw2mubdHFJmfPNNO19ItfReu8wwQMxOehKamwaNvqMiKWyHfn/QcThFQysqzgGZ6AgnUbYx9od6XFNDeWd1sVBf7QBAL07y7KWlYGWCwFwWjabSVySzQhEBdisPcskfkI= + - secure: BKq6/5z9LK3KDkTjs7BGeBZ1KsWgz+MsAXZ4P64NSeVGFaBdXU45+ww1mwxXFt5l22/mhyOQZfebQl+kGVqRSZ+DEgQeCymkNZ6CD8c6w6cLuOJXiXwuu/cDM2DD0tfGeu2YZC7yEikP7BqEFwH3D324rRzSGLF2RSAAwkOI7bE= diff --git a/node_modules/typedarray-to-buffer/LICENSE b/node_modules/typedarray-to-buffer/LICENSE new file mode 100644 index 0000000..0c068ce --- /dev/null +++ b/node_modules/typedarray-to-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/typedarray-to-buffer/README.md b/node_modules/typedarray-to-buffer/README.md new file mode 100644 index 0000000..35761fb --- /dev/null +++ b/node_modules/typedarray-to-buffer/README.md @@ -0,0 +1,85 @@ +# typedarray-to-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/typedarray-to-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/typedarray-to-buffer +[npm-image]: https://img.shields.io/npm/v/typedarray-to-buffer.svg +[npm-url]: https://npmjs.org/package/typedarray-to-buffer +[downloads-image]: https://img.shields.io/npm/dm/typedarray-to-buffer.svg +[downloads-url]: https://npmjs.org/package/typedarray-to-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Convert a typed array to a [Buffer](https://github.com/feross/buffer) without a copy. + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/typedarray-to-buffer.svg +[saucelabs-url]: https://saucelabs.com/u/typedarray-to-buffer + +Say you're using the ['buffer'](https://github.com/feross/buffer) module on npm, or +[browserify](http://browserify.org/) and you're working with lots of binary data. + +Unfortunately, sometimes the browser or someone else's API gives you a typed array like +`Uint8Array` to work with and you need to convert it to a `Buffer`. What do you do? + +Of course: `Buffer.from(uint8array)` + +But, alas, every time you do `Buffer.from(uint8array)` **the entire array gets copied**. +The `Buffer` constructor does a copy; this is +defined by the [node docs](http://nodejs.org/api/buffer.html) and the 'buffer' module +matches the node API exactly. + +So, how can we avoid this expensive copy in +[performance critical applications](https://github.com/feross/buffer/issues/22)? + +***Simply use this module, of course!*** + +If you have an `ArrayBuffer`, you don't need this module, because +`Buffer.from(arrayBuffer)` +[is already efficient](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length). + +## install + +```bash +npm install typedarray-to-buffer +``` + +## usage + +To convert a typed array to a `Buffer` **without a copy**, do this: + +```js +var toBuffer = require('typedarray-to-buffer') + +var arr = new Uint8Array([1, 2, 3]) +arr = toBuffer(arr) + +// arr is a buffer now! + +arr.toString() // '\u0001\u0002\u0003' +arr.readUInt16BE(0) // 258 +``` + +## how it works + +If the browser supports typed arrays, then `toBuffer` will **augment the typed array** you +pass in with the `Buffer` methods and return it. See [how does Buffer +work?](https://github.com/feross/buffer#how-does-it-work) for more about how augmentation +works. + +This module uses the typed array's underlying `ArrayBuffer` to back the new `Buffer`. This +respects the "view" on the `ArrayBuffer`, i.e. `byteOffset` and `byteLength`. In other +words, if you do `toBuffer(new Uint32Array([1, 2, 3]))`, then the new `Buffer` will +contain `[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]`, **not** `[1, 2, 3]`. And it still doesn't +require a copy. + +If the browser doesn't support typed arrays, then `toBuffer` will create a new `Buffer` +object, copy the data into it, and return it. There's no simple performance optimization +we can do for old browsers. Oh well. + +If this module is used in node, then it will just call `Buffer.from`. This is just for +the convenience of modules that work in both node and the browser. + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). diff --git a/node_modules/typedarray-to-buffer/index.js b/node_modules/typedarray-to-buffer/index.js new file mode 100644 index 0000000..5fa394d --- /dev/null +++ b/node_modules/typedarray-to-buffer/index.js @@ -0,0 +1,25 @@ +/** + * Convert a typed array to a Buffer without a copy + * + * Author: Feross Aboukhadijeh + * License: MIT + * + * `npm install typedarray-to-buffer` + */ + +var isTypedArray = require('is-typedarray').strict + +module.exports = function typedarrayToBuffer (arr) { + if (isTypedArray(arr)) { + // To avoid a copy, use the typed array's underlying ArrayBuffer to back new Buffer + var buf = Buffer.from(arr.buffer) + if (arr.byteLength !== arr.buffer.byteLength) { + // Respect the "view", i.e. byteOffset and byteLength, without doing a copy + buf = buf.slice(arr.byteOffset, arr.byteOffset + arr.byteLength) + } + return buf + } else { + // Pass through all other types to `Buffer.from` + return Buffer.from(arr) + } +} diff --git a/node_modules/typedarray-to-buffer/package.json b/node_modules/typedarray-to-buffer/package.json new file mode 100644 index 0000000..05e5eac --- /dev/null +++ b/node_modules/typedarray-to-buffer/package.json @@ -0,0 +1,75 @@ +{ + "_from": "typedarray-to-buffer@^3.1.5", + "_id": "typedarray-to-buffer@3.1.5", + "_inBundle": false, + "_integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "_location": "/typedarray-to-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "typedarray-to-buffer@^3.1.5", + "name": "typedarray-to-buffer", + "escapedName": "typedarray-to-buffer", + "rawSpec": "^3.1.5", + "saveSpec": null, + "fetchSpec": "^3.1.5" + }, + "_requiredBy": [ + "/write-file-atomic" + ], + "_resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "_shasum": "a97ee7a9ff42691b9f783ff1bc5112fe3fca9080", + "_spec": "typedarray-to-buffer@^3.1.5", + "_where": "D:\\Cricbuzzz\\node_modules\\write-file-atomic", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org/" + }, + "bugs": { + "url": "https://github.com/feross/typedarray-to-buffer/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-typedarray": "^1.0.0" + }, + "deprecated": false, + "description": "Convert a typed array to a Buffer without a copy", + "devDependencies": { + "airtap": "0.0.4", + "standard": "*", + "tape": "^4.0.0" + }, + "homepage": "http://feross.org", + "keywords": [ + "buffer", + "typed array", + "convert", + "no copy", + "uint8array", + "uint16array", + "uint32array", + "int16array", + "int32array", + "float32array", + "float64array", + "browser", + "arraybuffer", + "dataview" + ], + "license": "MIT", + "main": "index.js", + "name": "typedarray-to-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/typedarray-to-buffer.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "airtap -- test/*.js", + "test-browser-local": "airtap --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "version": "3.1.5" +} diff --git a/node_modules/typedarray-to-buffer/test/basic.js b/node_modules/typedarray-to-buffer/test/basic.js new file mode 100644 index 0000000..3521096 --- /dev/null +++ b/node_modules/typedarray-to-buffer/test/basic.js @@ -0,0 +1,50 @@ +var test = require('tape') +var toBuffer = require('../') + +test('convert to buffer from Uint8Array', function (t) { + if (typeof Uint8Array !== 'undefined') { + var arr = new Uint8Array([1, 2, 3]) + arr = toBuffer(arr) + + t.deepEqual(arr, Buffer.from([1, 2, 3]), 'contents equal') + t.ok(Buffer.isBuffer(arr), 'is buffer') + t.equal(arr.readUInt8(0), 1) + t.equal(arr.readUInt8(1), 2) + t.equal(arr.readUInt8(2), 3) + } else { + t.pass('browser lacks Uint8Array support, skip test') + } + t.end() +}) + +test('convert to buffer from another arrayview type (Uint32Array)', function (t) { + if (typeof Uint32Array !== 'undefined' && Buffer.TYPED_ARRAY_SUPPORT !== false) { + var arr = new Uint32Array([1, 2, 3]) + arr = toBuffer(arr) + + t.deepEqual(arr, Buffer.from([1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]), 'contents equal') + t.ok(Buffer.isBuffer(arr), 'is buffer') + t.equal(arr.readUInt32LE(0), 1) + t.equal(arr.readUInt32LE(4), 2) + t.equal(arr.readUInt32LE(8), 3) + t.equal(arr instanceof Uint8Array, true) + } else { + t.pass('browser lacks Uint32Array support, skip test') + } + t.end() +}) + +test('convert to buffer from ArrayBuffer', function (t) { + if (typeof Uint32Array !== 'undefined' && Buffer.TYPED_ARRAY_SUPPORT !== false) { + var arr = new Uint32Array([1, 2, 3]).subarray(1, 2) + arr = toBuffer(arr) + + t.deepEqual(arr, Buffer.from([2, 0, 0, 0]), 'contents equal') + t.ok(Buffer.isBuffer(arr), 'is buffer') + t.equal(arr.readUInt32LE(0), 2) + t.equal(arr instanceof Uint8Array, true) + } else { + t.pass('browser lacks ArrayBuffer support, skip test') + } + t.end() +}) diff --git a/node_modules/undefsafe/.github/workflows/release.yml b/node_modules/undefsafe/.github/workflows/release.yml new file mode 100644 index 0000000..e6ee886 --- /dev/null +++ b/node_modules/undefsafe/.github/workflows/release.yml @@ -0,0 +1,25 @@ +name: Release +on: + push: + branches: + - master +jobs: + release: + name: Release + runs-on: ubuntu-18.04 + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 16 + - name: Install dependencies + run: npm ci + - name: Test + run: npm run test + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npx semantic-release diff --git a/node_modules/undefsafe/.jscsrc b/node_modules/undefsafe/.jscsrc new file mode 100644 index 0000000..9e01c9b --- /dev/null +++ b/node_modules/undefsafe/.jscsrc @@ -0,0 +1,13 @@ +{ + "preset": "node-style-guide", + "requireCapitalizedComments": null, + "requireSpacesInAnonymousFunctionExpression": { + "beforeOpeningCurlyBrace": true, + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "excludeFiles": ["node_modules/**"], + "disallowSpacesInFunction": null +} diff --git a/node_modules/undefsafe/.jshintrc b/node_modules/undefsafe/.jshintrc new file mode 100644 index 0000000..b47f672 --- /dev/null +++ b/node_modules/undefsafe/.jshintrc @@ -0,0 +1,16 @@ +{ + "browser": false, + "camelcase": true, + "curly": true, + "devel": true, + "eqeqeq": true, + "forin": true, + "indent": 2, + "noarg": true, + "node": true, + "quotmark": "single", + "undef": true, + "strict": false, + "unused": true +} + diff --git a/node_modules/undefsafe/.travis.yml b/node_modules/undefsafe/.travis.yml new file mode 100644 index 0000000..a1ace24 --- /dev/null +++ b/node_modules/undefsafe/.travis.yml @@ -0,0 +1,18 @@ +sudo: false +language: node_js +cache: + directories: + - node_modules +notifications: + email: false +node_js: + - '4' +before_install: + - npm i -g npm@^2.0.0 +before_script: + - npm prune +after_success: + - npm run semantic-release +branches: + except: + - "/^v\\d+\\.\\d+\\.\\d+$/" diff --git a/node_modules/undefsafe/LICENSE b/node_modules/undefsafe/LICENSE new file mode 100644 index 0000000..caaf03a --- /dev/null +++ b/node_modules/undefsafe/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright © 2016 Remy Sharp, http://remysharp.com + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/undefsafe/README.md b/node_modules/undefsafe/README.md new file mode 100644 index 0000000..46a706b --- /dev/null +++ b/node_modules/undefsafe/README.md @@ -0,0 +1,63 @@ +# undefsafe + +Simple *function* for retrieving deep object properties without getting "Cannot read property 'X' of undefined" + +Can also be used to safely set deep values. + +## Usage + +```js +var object = { + a: { + b: { + c: 1, + d: [1,2,3], + e: 'remy' + } + } +}; + +console.log(undefsafe(object, 'a.b.e')); // "remy" +console.log(undefsafe(object, 'a.b.not.found')); // undefined +``` + +Demo: [https://jsbin.com/eroqame/3/edit?js,console](https://jsbin.com/eroqame/3/edit?js,console) + +## Setting + +```js +var object = { + a: { + b: [1,2,3] + } +}; + +// modified object +var res = undefsafe(object, 'a.b.0', 10); + +console.log(object); // { a: { b: [10, 2, 3] } } +console.log(res); // 1 - previous value +``` + +## Star rules in paths + +As of 1.2.0, `undefsafe` supports a `*` in the path if you want to search all of the properties (or array elements) for a particular element. + +The function will only return a single result, either the 3rd argument validation value, or the first positive match. For example, the following github data: + +```js +const githubData = { + commits: [{ + modified: [ + "one", + "two" + ] + }, /* ... */ ] + }; + +// first modified file found in the first commit +console.log(undefsafe(githubData, 'commits.*.modified.0')); + +// returns `two` or undefined if not found +console.log(undefsafe(githubData, 'commits.*.modified.*', 'two')); +``` diff --git a/node_modules/undefsafe/example.js b/node_modules/undefsafe/example.js new file mode 100644 index 0000000..ed93c23 --- /dev/null +++ b/node_modules/undefsafe/example.js @@ -0,0 +1,14 @@ +var undefsafe = require('undefsafe'); + +var object = { + a: { + b: { + c: 1, + d: [1, 2, 3], + e: 'remy' + } + } +}; + +console.log(undefsafe(object, 'a.b.e')); // "remy" +console.log(undefsafe(object, 'a.b.not.found')); // undefined diff --git a/node_modules/undefsafe/lib/undefsafe.js b/node_modules/undefsafe/lib/undefsafe.js new file mode 100644 index 0000000..7446878 --- /dev/null +++ b/node_modules/undefsafe/lib/undefsafe.js @@ -0,0 +1,125 @@ +'use strict'; + +function undefsafe(obj, path, value, __res) { + // I'm not super keen on this private function, but it's because + // it'll also be use in the browser and I wont *one* function exposed + function split(path) { + var res = []; + var level = 0; + var key = ''; + + for (var i = 0; i < path.length; i++) { + var c = path.substr(i, 1); + + if (level === 0 && (c === '.' || c === '[')) { + if (c === '[') { + level++; + i++; + c = path.substr(i, 1); + } + + if (key) { + // the first value could be a string + res.push(key); + } + key = ''; + continue; + } + + if (c === ']') { + level--; + key = key.slice(0, -1); + continue; + } + + key += c; + } + + res.push(key); + + return res; + } + + // bail if there's nothing + if (obj === undefined || obj === null) { + return undefined; + } + + var parts = split(path); + var key = null; + var type = typeof obj; + var root = obj; + var parent = obj; + + var star = + parts.filter(function(_) { + return _ === '*'; + }).length > 0; + + // we're dealing with a primitive + if (type !== 'object' && type !== 'function') { + return obj; + } else if (path.trim() === '') { + return obj; + } + + key = parts[0]; + var i = 0; + for (; i < parts.length; i++) { + key = parts[i]; + parent = obj; + + if (key === '*') { + // loop through each property + var prop = ''; + var res = __res || []; + + for (prop in parent) { + var shallowObj = undefsafe( + obj[prop], + parts.slice(i + 1).join('.'), + value, + res + ); + if (shallowObj && shallowObj !== res) { + if ((value && shallowObj === value) || value === undefined) { + if (value !== undefined) { + return shallowObj; + } + + res.push(shallowObj); + } + } + } + + if (res.length === 0) { + return undefined; + } + + return res; + } + + if (Object.getOwnPropertyNames(obj).indexOf(key) == -1) { + return undefined; + } + + obj = obj[key]; + if (obj === undefined || obj === null) { + break; + } + } + + // if we have a null object, make sure it's the one the user was after, + // if it's not (i.e. parts has a length) then give undefined back. + if (obj === null && i !== parts.length - 1) { + obj = undefined; + } else if (!star && value) { + key = path.split('.').pop(); + parent[key] = value; + } + return obj; +} + +if (typeof module !== 'undefined') { + module.exports = undefsafe; +} diff --git a/node_modules/undefsafe/package.json b/node_modules/undefsafe/package.json new file mode 100644 index 0000000..7567d4c --- /dev/null +++ b/node_modules/undefsafe/package.json @@ -0,0 +1,65 @@ +{ + "_from": "undefsafe@^2.0.5", + "_id": "undefsafe@2.0.5", + "_inBundle": false, + "_integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "_location": "/undefsafe", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "undefsafe@^2.0.5", + "name": "undefsafe", + "escapedName": "undefsafe", + "rawSpec": "^2.0.5", + "saveSpec": null, + "fetchSpec": "^2.0.5" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "_shasum": "38733b9327bdcd226db889fb723a6efd162e6e2c", + "_spec": "undefsafe@^2.0.5", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "author": { + "name": "Remy Sharp" + }, + "bugs": { + "url": "https://github.com/remy/undefsafe/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Undefined safe way of extracting object properties", + "devDependencies": { + "semantic-release": "^18.0.0", + "tap": "^5.7.1", + "tap-only": "0.0.5" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/remy/undefsafe#readme", + "keywords": [ + "undefined" + ], + "license": "MIT", + "main": "lib/undefsafe.js", + "name": "undefsafe", + "prettier": { + "trailingComma": "none", + "singleQuote": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/remy/undefsafe.git" + }, + "scripts": { + "cover": "tap test/*.test.js --cov --coverage-report=lcov", + "semantic-release": "semantic-release", + "test": "tap test/**/*.test.js -R spec" + }, + "tonicExampleFilename": "example.js", + "version": "2.0.5" +} diff --git a/node_modules/unique-string/index.d.ts b/node_modules/unique-string/index.d.ts new file mode 100644 index 0000000..08959a6 --- /dev/null +++ b/node_modules/unique-string/index.d.ts @@ -0,0 +1,16 @@ +/** +Generate a unique random string. + +@returns A 32 character unique string. Matches the length of MD5, which is [unique enough](https://stackoverflow.com/a/2444336/64949) for non-crypto purposes. + +@example +``` +import uniqueString = require('unique-string'); + +uniqueString(); +//=> 'b4de2a49c8ffa3fbee04446f045483b2' +``` +*/ +declare function uniqueString(): string; + +export = uniqueString; diff --git a/node_modules/unique-string/index.js b/node_modules/unique-string/index.js new file mode 100644 index 0000000..5bc7787 --- /dev/null +++ b/node_modules/unique-string/index.js @@ -0,0 +1,4 @@ +'use strict'; +const cryptoRandomString = require('crypto-random-string'); + +module.exports = () => cryptoRandomString(32); diff --git a/node_modules/unique-string/license b/node_modules/unique-string/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/unique-string/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/unique-string/package.json b/node_modules/unique-string/package.json new file mode 100644 index 0000000..bff94cd --- /dev/null +++ b/node_modules/unique-string/package.json @@ -0,0 +1,72 @@ +{ + "_from": "unique-string@^2.0.0", + "_id": "unique-string@2.0.0", + "_inBundle": false, + "_integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "_location": "/unique-string", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "unique-string@^2.0.0", + "name": "unique-string", + "escapedName": "unique-string", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/configstore" + ], + "_resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "_shasum": "39c6451f81afb2749de2b233e3f7c5e8843bd89d", + "_spec": "unique-string@^2.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\configstore", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/unique-string/issues" + }, + "bundleDependencies": false, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "deprecated": false, + "description": "Generate a unique random string", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/unique-string#readme", + "keywords": [ + "unique", + "string", + "random", + "text", + "id", + "identifier", + "slug", + "hex" + ], + "license": "MIT", + "name": "unique-string", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/unique-string.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.0.0" +} diff --git a/node_modules/unique-string/readme.md b/node_modules/unique-string/readme.md new file mode 100644 index 0000000..9213f11 --- /dev/null +++ b/node_modules/unique-string/readme.md @@ -0,0 +1,32 @@ +# unique-string [![Build Status](https://travis-ci.org/sindresorhus/unique-string.svg?branch=master)](https://travis-ci.org/sindresorhus/unique-string) + +> Generate a unique random string + + +## Install + +``` +$ npm install unique-string +``` + + +## Usage + +```js +const uniqueString = require('unique-string'); + +uniqueString(); +//=> 'b4de2a49c8ffa3fbee04446f045483b2' +``` + + +## API + +### uniqueString() + +Returns a 32 character unique string. Matches the length of MD5, which is [unique enough](https://stackoverflow.com/a/2444336/64949) for non-crypto purposes. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/unpipe/HISTORY.md b/node_modules/unpipe/HISTORY.md new file mode 100644 index 0000000..85e0f8d --- /dev/null +++ b/node_modules/unpipe/HISTORY.md @@ -0,0 +1,4 @@ +1.0.0 / 2015-06-14 +================== + + * Initial release diff --git a/node_modules/unpipe/LICENSE b/node_modules/unpipe/LICENSE new file mode 100644 index 0000000..aed0138 --- /dev/null +++ b/node_modules/unpipe/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/unpipe/README.md b/node_modules/unpipe/README.md new file mode 100644 index 0000000..e536ad2 --- /dev/null +++ b/node_modules/unpipe/README.md @@ -0,0 +1,43 @@ +# unpipe + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Unpipe a stream from all destinations. + +## Installation + +```sh +$ npm install unpipe +``` + +## API + +```js +var unpipe = require('unpipe') +``` + +### unpipe(stream) + +Unpipes all destinations from a given stream. With stream 2+, this is +equivalent to `stream.unpipe()`. When used with streams 1 style streams +(typically Node.js 0.8 and below), this module attempts to undo the +actions done in `stream.pipe(dest)`. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/unpipe.svg +[npm-url]: https://npmjs.org/package/unpipe +[node-image]: https://img.shields.io/node/v/unpipe.svg +[node-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg +[travis-url]: https://travis-ci.org/stream-utils/unpipe +[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg +[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master +[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg +[downloads-url]: https://npmjs.org/package/unpipe diff --git a/node_modules/unpipe/index.js b/node_modules/unpipe/index.js new file mode 100644 index 0000000..15c3d97 --- /dev/null +++ b/node_modules/unpipe/index.js @@ -0,0 +1,69 @@ +/*! + * unpipe + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = unpipe + +/** + * Determine if there are Node.js pipe-like data listeners. + * @private + */ + +function hasPipeDataListeners(stream) { + var listeners = stream.listeners('data') + + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].name === 'ondata') { + return true + } + } + + return false +} + +/** + * Unpipe a stream from all destinations. + * + * @param {object} stream + * @public + */ + +function unpipe(stream) { + if (!stream) { + throw new TypeError('argument stream is required') + } + + if (typeof stream.unpipe === 'function') { + // new-style + stream.unpipe() + return + } + + // Node.js 0.8 hack + if (!hasPipeDataListeners(stream)) { + return + } + + var listener + var listeners = stream.listeners('close') + + for (var i = 0; i < listeners.length; i++) { + listener = listeners[i] + + if (listener.name !== 'cleanup' && listener.name !== 'onclose') { + continue + } + + // invoke the listener + listener.call(stream) + } +} diff --git a/node_modules/unpipe/package.json b/node_modules/unpipe/package.json new file mode 100644 index 0000000..6fc69c1 --- /dev/null +++ b/node_modules/unpipe/package.json @@ -0,0 +1,66 @@ +{ + "_args": [ + [ + "unpipe@1.0.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "unpipe@1.0.0", + "_id": "unpipe@1.0.0", + "_inBundle": false, + "_integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "_location": "/unpipe", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "unpipe@1.0.0", + "name": "unpipe", + "escapedName": "unpipe", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/finalhandler", + "/raw-body" + ], + "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "_spec": "1.0.0", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/stream-utils/unpipe/issues" + }, + "description": "Unpipe a stream from all destinations", + "devDependencies": { + "istanbul": "0.3.15", + "mocha": "2.2.5", + "readable-stream": "1.1.13" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/stream-utils/unpipe#readme", + "license": "MIT", + "name": "unpipe", + "repository": { + "type": "git", + "url": "git+https://github.com/stream-utils/unpipe.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.0.0" +} diff --git a/node_modules/update-notifier/check.js b/node_modules/update-notifier/check.js new file mode 100644 index 0000000..fc0ee9c --- /dev/null +++ b/node_modules/update-notifier/check.js @@ -0,0 +1,28 @@ +/* eslint-disable unicorn/no-process-exit */ +'use strict'; +let updateNotifier = require('.'); + +const options = JSON.parse(process.argv[2]); + +updateNotifier = new updateNotifier.UpdateNotifier(options); + +(async () => { + // Exit process when offline + setTimeout(process.exit, 1000 * 30); + + const update = await updateNotifier.fetchInfo(); + + // Only update the last update check time on success + updateNotifier.config.set('lastUpdateCheck', Date.now()); + + if (update.type && update.type !== 'latest') { + updateNotifier.config.set('update', update); + } + + // Call process exit explicitly to terminate the child process, + // otherwise the child process will run forever, according to the Node.js docs + process.exit(); +})().catch(error => { + console.error(error); + process.exit(1); +}); diff --git a/node_modules/update-notifier/index.js b/node_modules/update-notifier/index.js new file mode 100644 index 0000000..5e89216 --- /dev/null +++ b/node_modules/update-notifier/index.js @@ -0,0 +1,188 @@ +'use strict'; +const {spawn} = require('child_process'); +const path = require('path'); +const {format} = require('util'); +const importLazy = require('import-lazy')(require); + +const configstore = importLazy('configstore'); +const chalk = importLazy('chalk'); +const semver = importLazy('semver'); +const semverDiff = importLazy('semver-diff'); +const latestVersion = importLazy('latest-version'); +const isNpm = importLazy('is-npm'); +const isInstalledGlobally = importLazy('is-installed-globally'); +const isYarnGlobal = importLazy('is-yarn-global'); +const hasYarn = importLazy('has-yarn'); +const boxen = importLazy('boxen'); +const xdgBasedir = importLazy('xdg-basedir'); +const isCi = importLazy('is-ci'); +const pupa = importLazy('pupa'); + +const ONE_DAY = 1000 * 60 * 60 * 24; + +class UpdateNotifier { + constructor(options = {}) { + this.options = options; + options.pkg = options.pkg || {}; + options.distTag = options.distTag || 'latest'; + + // Reduce pkg to the essential keys. with fallback to deprecated options + // TODO: Remove deprecated options at some point far into the future + options.pkg = { + name: options.pkg.name || options.packageName, + version: options.pkg.version || options.packageVersion + }; + + if (!options.pkg.name || !options.pkg.version) { + throw new Error('pkg.name and pkg.version required'); + } + + this.packageName = options.pkg.name; + this.packageVersion = options.pkg.version; + this.updateCheckInterval = typeof options.updateCheckInterval === 'number' ? options.updateCheckInterval : ONE_DAY; + this.disabled = 'NO_UPDATE_NOTIFIER' in process.env || + process.env.NODE_ENV === 'test' || + process.argv.includes('--no-update-notifier') || + isCi(); + this.shouldNotifyInNpmScript = options.shouldNotifyInNpmScript; + + if (!this.disabled) { + try { + const ConfigStore = configstore(); + this.config = new ConfigStore(`update-notifier-${this.packageName}`, { + optOut: false, + // Init with the current time so the first check is only + // after the set interval, so not to bother users right away + lastUpdateCheck: Date.now() + }); + } catch { + // Expecting error code EACCES or EPERM + const message = + chalk().yellow(format(' %s update check failed ', options.pkg.name)) + + format('\n Try running with %s or get access ', chalk().cyan('sudo')) + + '\n to the local update config store via \n' + + chalk().cyan(format(' sudo chown -R $USER:$(id -gn $USER) %s ', xdgBasedir().config)); + + process.on('exit', () => { + console.error(boxen()(message, {align: 'center'})); + }); + } + } + } + + check() { + if ( + !this.config || + this.config.get('optOut') || + this.disabled + ) { + return; + } + + this.update = this.config.get('update'); + + if (this.update) { + // Use the real latest version instead of the cached one + this.update.current = this.packageVersion; + + // Clear cached information + this.config.delete('update'); + } + + // Only check for updates on a set interval + if (Date.now() - this.config.get('lastUpdateCheck') < this.updateCheckInterval) { + return; + } + + // Spawn a detached process, passing the options as an environment property + spawn(process.execPath, [path.join(__dirname, 'check.js'), JSON.stringify(this.options)], { + detached: true, + stdio: 'ignore' + }).unref(); + } + + async fetchInfo() { + const {distTag} = this.options; + const latest = await latestVersion()(this.packageName, {version: distTag}); + + return { + latest, + current: this.packageVersion, + type: semverDiff()(this.packageVersion, latest) || distTag, + name: this.packageName + }; + } + + notify(options) { + const suppressForNpm = !this.shouldNotifyInNpmScript && isNpm().isNpmOrYarn; + if (!process.stdout.isTTY || suppressForNpm || !this.update || !semver().gt(this.update.latest, this.update.current)) { + return this; + } + + options = { + isGlobal: isInstalledGlobally(), + isYarnGlobal: isYarnGlobal()(), + ...options + }; + + let installCommand; + if (options.isYarnGlobal) { + installCommand = `yarn global add ${this.packageName}`; + } else if (options.isGlobal) { + installCommand = `npm i -g ${this.packageName}`; + } else if (hasYarn()()) { + installCommand = `yarn add ${this.packageName}`; + } else { + installCommand = `npm i ${this.packageName}`; + } + + const defaultTemplate = 'Update available ' + + chalk().dim('{currentVersion}') + + chalk().reset(' → ') + + chalk().green('{latestVersion}') + + ' \nRun ' + chalk().cyan('{updateCommand}') + ' to update'; + + const template = options.message || defaultTemplate; + + options.boxenOptions = options.boxenOptions || { + padding: 1, + margin: 1, + align: 'center', + borderColor: 'yellow', + borderStyle: 'round' + }; + + const message = boxen()( + pupa()(template, { + packageName: this.packageName, + currentVersion: this.update.current, + latestVersion: this.update.latest, + updateCommand: installCommand + }), + options.boxenOptions + ); + + if (options.defer === false) { + console.error(message); + } else { + process.on('exit', () => { + console.error(message); + }); + + process.on('SIGINT', () => { + console.error(''); + process.exit(); + }); + } + + return this; + } +} + +module.exports = options => { + const updateNotifier = new UpdateNotifier(options); + updateNotifier.check(); + return updateNotifier; +}; + +module.exports.UpdateNotifier = UpdateNotifier; diff --git a/node_modules/update-notifier/license b/node_modules/update-notifier/license new file mode 100644 index 0000000..cea5a35 --- /dev/null +++ b/node_modules/update-notifier/license @@ -0,0 +1,9 @@ +Copyright Google + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/update-notifier/node_modules/.bin/semver b/node_modules/update-notifier/node_modules/.bin/semver new file mode 100644 index 0000000..7e36527 --- /dev/null +++ b/node_modules/update-notifier/node_modules/.bin/semver @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" + ret=$? +else + node "$basedir/../semver/bin/semver.js" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/update-notifier/node_modules/.bin/semver.cmd b/node_modules/update-notifier/node_modules/.bin/semver.cmd new file mode 100644 index 0000000..164cdea --- /dev/null +++ b/node_modules/update-notifier/node_modules/.bin/semver.cmd @@ -0,0 +1,17 @@ +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\semver\bin\semver.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/update-notifier/node_modules/.bin/semver.ps1 b/node_modules/update-notifier/node_modules/.bin/semver.ps1 new file mode 100644 index 0000000..6a85e34 --- /dev/null +++ b/node_modules/update-notifier/node_modules/.bin/semver.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../semver/bin/semver.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/update-notifier/node_modules/semver/CHANGELOG.md b/node_modules/update-notifier/node_modules/semver/CHANGELOG.md new file mode 100644 index 0000000..220af17 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/CHANGELOG.md @@ -0,0 +1,111 @@ +# changes log + +## 7.3.0 + +* Add `subset(r1, r2)` method to determine if `r1` range is entirely + contained by `r2` range. + +## 7.2.3 + +* Fix handling of `includePrelease` mode where version ranges like `1.0.0 - + 2.0.0` would include `3.0.0-pre` and not `1.0.0-pre`. + +## 7.2.2 + +* Fix bug where `2.0.0-pre` would be included in `^1.0.0` if + `includePrerelease` was set to true. + +## 7.2.0 + +* Add `simplifyRange` method to attempt to generate a more human-readable + range expression that is equivalent to a supplied range, for a given set + of versions. + +## 7.1.2 + +* Remove fancy lazy-loading logic, as it was causing problems for webpack + users. + +## 7.1.0 + +* Add `require('semver/preload')` to load the entire module without using + lazy getter methods. + +## 7.0.0 + +* Refactor module into separate files for better tree-shaking +* Drop support for very old node versions, use const/let, `=>` functions, + and classes. + +## 6.3.0 + +* Expose the token enum on the exports + +## 6.2.0 + +* Coerce numbers to strings when passed to semver.coerce() +* Add `rtl` option to coerce from right to left + +## 6.1.3 + +* Handle X-ranges properly in includePrerelease mode + +## 6.1.2 + +* Do not throw when testing invalid version strings + +## 6.1.1 + +* Add options support for semver.coerce() +* Handle undefined version passed to Range.test + +## 6.1.0 + +* Add semver.compareBuild function +* Support `*` in semver.intersects + +## 6.0 + +* Fix `intersects` logic. + + This is technically a bug fix, but since it is also a change to behavior + that may require users updating their code, it is marked as a major + version increment. + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/update-notifier/node_modules/semver/LICENSE b/node_modules/update-notifier/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/update-notifier/node_modules/semver/README.md b/node_modules/update-notifier/node_modules/semver/README.md new file mode 100644 index 0000000..9bef045 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/README.md @@ -0,0 +1,566 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +You can also just load the module for the function that you care about, if +you'd like to minimize your footprint. + +```js +// load the whole API at once in a single object +const semver = require('semver') + +// or just load the bits you need +// all of them listed here, just pick and choose what you want + +// classes +const SemVer = require('semver/classes/semver') +const Comparator = require('semver/classes/comparator') +const Range = require('semver/classes/range') + +// functions for working with versions +const semverParse = require('semver/functions/parse') +const semverValid = require('semver/functions/valid') +const semverClean = require('semver/functions/clean') +const semverInc = require('semver/functions/inc') +const semverDiff = require('semver/functions/diff') +const semverMajor = require('semver/functions/major') +const semverMinor = require('semver/functions/minor') +const semverPatch = require('semver/functions/patch') +const semverPrerelease = require('semver/functions/prerelease') +const semverCompare = require('semver/functions/compare') +const semverRcompare = require('semver/functions/rcompare') +const semverCompareLoose = require('semver/functions/compare-loose') +const semverCompareBuild = require('semver/functions/compare-build') +const semverSort = require('semver/functions/sort') +const semverRsort = require('semver/functions/rsort') + +// low-level comparators between versions +const semverGt = require('semver/functions/gt') +const semverLt = require('semver/functions/lt') +const semverEq = require('semver/functions/eq') +const semverNeq = require('semver/functions/neq') +const semverGte = require('semver/functions/gte') +const semverLte = require('semver/functions/lte') +const semverCmp = require('semver/functions/cmp') +const semverCoerce = require('semver/functions/coerce') + +// working with ranges +const semverSatisfies = require('semver/functions/satisfies') +const semverMaxSatisfying = require('semver/ranges/max-satisfying') +const semverMinSatisfying = require('semver/ranges/min-satisfying') +const semverToComparators = require('semver/ranges/to-comparators') +const semverMinVersion = require('semver/ranges/min-version') +const semverValidRange = require('semver/ranges/valid') +const semverOutside = require('semver/ranges/outside') +const semverGtr = require('semver/ranges/gtr') +const semverLtr = require('semver/ranges/ltr') +const semverIntersects = require('semver/ranges/intersects') +const simplifyRange = require('semver/ranges/simplify') +const rangeSubset = require('semver/ranges/subset') +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0-0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0-0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0-0` +* `^0.2.3` := `>=0.2.3 <0.3.0-0` +* `^0.0.3` := `>=0.0.3 <0.0.4-0` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0-0` +* `^0.0.x` := `>=0.0.0 <0.1.0-0` +* `^0.0` := `>=0.0.0 <0.1.0-0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0-0` +* `^0.x` := `>=0.0.0 <1.0.0-0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect +* `simplifyRange(versions, range)`: Return a "simplified" range that + matches the same items in `versions` list as the range specified. Note + that it does *not* guarantee that it would match the same versions in all + cases, only for the set of versions provided. This is useful when + generating ranges by joining together multiple versions with `||` + programmatically, to provide the user with something a bit more + ergonomic. If the provided range is shorter in string-length than the + generated range, then that is returned. +* `subset(subRange, superRange)`: Return `true` if the `subRange` range is + entirely contained by the `superRange` range. + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version, options)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string, and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). + +If the `options.rtl` flag is set, then `coerce` will return the right-most +coercible tuple that does not share an ending index with a longer coercible +tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not +`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of +any other overlapping SemVer tuple. + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided +version is not valid a null will be returned. This does not work for +ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `2.1.5` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` + +## Exported Modules + + + +You may pull in just the part of this semver utility that you need, if you +are sensitive to packing and tree-shaking concerns. The main +`require('semver')` export uses getter functions to lazily load the parts +of the API that are used. + +The following modules are available: + +* `require('semver')` +* `require('semver/classes')` +* `require('semver/classes/comparator')` +* `require('semver/classes/range')` +* `require('semver/classes/semver')` +* `require('semver/functions/clean')` +* `require('semver/functions/cmp')` +* `require('semver/functions/coerce')` +* `require('semver/functions/compare')` +* `require('semver/functions/compare-build')` +* `require('semver/functions/compare-loose')` +* `require('semver/functions/diff')` +* `require('semver/functions/eq')` +* `require('semver/functions/gt')` +* `require('semver/functions/gte')` +* `require('semver/functions/inc')` +* `require('semver/functions/lt')` +* `require('semver/functions/lte')` +* `require('semver/functions/major')` +* `require('semver/functions/minor')` +* `require('semver/functions/neq')` +* `require('semver/functions/parse')` +* `require('semver/functions/patch')` +* `require('semver/functions/prerelease')` +* `require('semver/functions/rcompare')` +* `require('semver/functions/rsort')` +* `require('semver/functions/satisfies')` +* `require('semver/functions/sort')` +* `require('semver/functions/valid')` +* `require('semver/ranges/gtr')` +* `require('semver/ranges/intersects')` +* `require('semver/ranges/ltr')` +* `require('semver/ranges/max-satisfying')` +* `require('semver/ranges/min-satisfying')` +* `require('semver/ranges/min-version')` +* `require('semver/ranges/outside')` +* `require('semver/ranges/to-comparators')` +* `require('semver/ranges/valid')` diff --git a/node_modules/update-notifier/node_modules/semver/bin/semver.js b/node_modules/update-notifier/node_modules/semver/bin/semver.js new file mode 100644 index 0000000..73fe295 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/bin/semver.js @@ -0,0 +1,173 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +const argv = process.argv.slice(2) + +let versions = [] + +const range = [] + +let inc = null + +const version = require('../package.json').version + +let loose = false + +let includePrerelease = false + +let coerce = false + +let rtl = false + +let identifier + +const semver = require('../') + +let reverse = false + +const options = {} + +const main = () => { + if (!argv.length) return help() + while (argv.length) { + let a = argv.shift() + const indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '--rtl': + rtl = true + break + case '--ltr': + rtl = false + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + const options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } + + versions = versions.map((v) => { + return coerce ? (semver.coerce(v, options) || { version: v }).version : v + }).filter((v) => { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (let i = 0, l = range.length; i < l; i++) { + versions = versions.filter((v) => { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + + +const failInc = () => { + console.error('--inc can only be used on a single version with no range') + fail() +} + +const fail = () => process.exit(1) + +const success = () => { + const compare = reverse ? 'rcompare' : 'compare' + versions.sort((a, b) => { + return semver[compare](a, b, options) + }).map((v) => { + return semver.clean(v, options) + }).map((v) => { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach((v, i, _) => { console.log(v) }) +} + +const help = () => console.log( +`SemVer ${version} + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them.`) + +main() diff --git a/node_modules/update-notifier/node_modules/semver/classes/comparator.js b/node_modules/update-notifier/node_modules/semver/classes/comparator.js new file mode 100644 index 0000000..dbbef2d --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/classes/comparator.js @@ -0,0 +1,135 @@ +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + const sameSemVer = this.semver.version === comp.semver.version + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<') + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>') + + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } +} + +module.exports = Comparator + +const parseOptions = require('../internal/parse-options') +const {re, t} = require('../internal/re') +const cmp = require('../functions/cmp') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const Range = require('./range') diff --git a/node_modules/update-notifier/node_modules/semver/classes/index.js b/node_modules/update-notifier/node_modules/semver/classes/index.js new file mode 100644 index 0000000..198b84d --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/classes/index.js @@ -0,0 +1,5 @@ +module.exports = { + SemVer: require('./semver.js'), + Range: require('./range.js'), + Comparator: require('./comparator.js') +} diff --git a/node_modules/update-notifier/node_modules/semver/classes/range.js b/node_modules/update-notifier/node_modules/semver/classes/range.js new file mode 100644 index 0000000..aa04f6b --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/classes/range.js @@ -0,0 +1,510 @@ +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range + .split(/\s*\|\|\s*/) + // map the range to a 2d array of comparators + .map(range => this.parseRange(range.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) + this.set = [first] + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.format() + } + + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim() + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + range = range.trim() + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) + return cached + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + // in loose mode, throw out any that are not valid comparators + .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) + .map(comp => new Comparator(comp, this.options)) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const l = rangeList.length + const rangeMap = new Map() + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete('') + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} +module.exports = Range + +const LRU = require('lru-cache') +const cache = new LRU({ max: 1000 }) + +const parseOptions = require('../internal/parse-options') +const Comparator = require('./comparator') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace +} = require('../internal/re') + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceTilde(comp, options) + }).join(' ') + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceCaret(comp, options) + }).join(' ') + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map((comp) => { + return replaceXRange(comp, options) + }).join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') + pr = '-0' + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp.trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return (`${from} ${to}`).trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} diff --git a/node_modules/update-notifier/node_modules/semver/classes/semver.js b/node_modules/update-notifier/node_modules/semver/classes/semver.js new file mode 100644 index 0000000..ed81a7e --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/classes/semver.js @@ -0,0 +1,287 @@ +const debug = require('../internal/debug') +const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') +const { re, t } = require('../internal/re') + +const parseOptions = require('../internal/parse-options') +const { compareIdentifiers } = require('../internal/identifiers') +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format() + this.raw = this.version + return this + } +} + +module.exports = SemVer diff --git a/node_modules/update-notifier/node_modules/semver/functions/clean.js b/node_modules/update-notifier/node_modules/semver/functions/clean.js new file mode 100644 index 0000000..811fe6b --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/clean.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean diff --git a/node_modules/update-notifier/node_modules/semver/functions/cmp.js b/node_modules/update-notifier/node_modules/semver/functions/cmp.js new file mode 100644 index 0000000..3b89db7 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/cmp.js @@ -0,0 +1,48 @@ +const eq = require('./eq') +const neq = require('./neq') +const gt = require('./gt') +const gte = require('./gte') +const lt = require('./lt') +const lte = require('./lte') + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp diff --git a/node_modules/update-notifier/node_modules/semver/functions/coerce.js b/node_modules/update-notifier/node_modules/semver/functions/coerce.js new file mode 100644 index 0000000..106ca71 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/coerce.js @@ -0,0 +1,51 @@ +const SemVer = require('../classes/semver') +const parse = require('./parse') +const {re, t} = require('../internal/re') + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) + return null + + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) +} +module.exports = coerce diff --git a/node_modules/update-notifier/node_modules/semver/functions/compare-build.js b/node_modules/update-notifier/node_modules/semver/functions/compare-build.js new file mode 100644 index 0000000..9eb881b --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/compare-build.js @@ -0,0 +1,7 @@ +const SemVer = require('../classes/semver') +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild diff --git a/node_modules/update-notifier/node_modules/semver/functions/compare-loose.js b/node_modules/update-notifier/node_modules/semver/functions/compare-loose.js new file mode 100644 index 0000000..4881fbe --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/compare-loose.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose diff --git a/node_modules/update-notifier/node_modules/semver/functions/compare.js b/node_modules/update-notifier/node_modules/semver/functions/compare.js new file mode 100644 index 0000000..748b7af --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/compare.js @@ -0,0 +1,5 @@ +const SemVer = require('../classes/semver') +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare diff --git a/node_modules/update-notifier/node_modules/semver/functions/diff.js b/node_modules/update-notifier/node_modules/semver/functions/diff.js new file mode 100644 index 0000000..87200ef --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/diff.js @@ -0,0 +1,23 @@ +const parse = require('./parse') +const eq = require('./eq') + +const diff = (version1, version2) => { + if (eq(version1, version2)) { + return null + } else { + const v1 = parse(version1) + const v2 = parse(version2) + const hasPre = v1.prerelease.length || v2.prerelease.length + const prefix = hasPre ? 'pre' : '' + const defaultResult = hasPre ? 'prerelease' : '' + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} +module.exports = diff diff --git a/node_modules/update-notifier/node_modules/semver/functions/eq.js b/node_modules/update-notifier/node_modules/semver/functions/eq.js new file mode 100644 index 0000000..271fed9 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/eq.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq diff --git a/node_modules/update-notifier/node_modules/semver/functions/gt.js b/node_modules/update-notifier/node_modules/semver/functions/gt.js new file mode 100644 index 0000000..d9b2156 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/gt.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt diff --git a/node_modules/update-notifier/node_modules/semver/functions/gte.js b/node_modules/update-notifier/node_modules/semver/functions/gte.js new file mode 100644 index 0000000..5aeaa63 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/gte.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte diff --git a/node_modules/update-notifier/node_modules/semver/functions/inc.js b/node_modules/update-notifier/node_modules/semver/functions/inc.js new file mode 100644 index 0000000..aa4d83a --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/inc.js @@ -0,0 +1,15 @@ +const SemVer = require('../classes/semver') + +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options + options = undefined + } + + try { + return new SemVer(version, options).inc(release, identifier).version + } catch (er) { + return null + } +} +module.exports = inc diff --git a/node_modules/update-notifier/node_modules/semver/functions/lt.js b/node_modules/update-notifier/node_modules/semver/functions/lt.js new file mode 100644 index 0000000..b440ab7 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/lt.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt diff --git a/node_modules/update-notifier/node_modules/semver/functions/lte.js b/node_modules/update-notifier/node_modules/semver/functions/lte.js new file mode 100644 index 0000000..6dcc956 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/lte.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte diff --git a/node_modules/update-notifier/node_modules/semver/functions/major.js b/node_modules/update-notifier/node_modules/semver/functions/major.js new file mode 100644 index 0000000..4283165 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/major.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major diff --git a/node_modules/update-notifier/node_modules/semver/functions/minor.js b/node_modules/update-notifier/node_modules/semver/functions/minor.js new file mode 100644 index 0000000..57b3455 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/minor.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor diff --git a/node_modules/update-notifier/node_modules/semver/functions/neq.js b/node_modules/update-notifier/node_modules/semver/functions/neq.js new file mode 100644 index 0000000..f944c01 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/neq.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq diff --git a/node_modules/update-notifier/node_modules/semver/functions/parse.js b/node_modules/update-notifier/node_modules/semver/functions/parse.js new file mode 100644 index 0000000..11f20f0 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/parse.js @@ -0,0 +1,33 @@ +const {MAX_LENGTH} = require('../internal/constants') +const { re, t } = require('../internal/re') +const SemVer = require('../classes/semver') + +const parseOptions = require('../internal/parse-options') +const parse = (version, options) => { + options = parseOptions(options) + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + const r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +module.exports = parse diff --git a/node_modules/update-notifier/node_modules/semver/functions/patch.js b/node_modules/update-notifier/node_modules/semver/functions/patch.js new file mode 100644 index 0000000..63afca2 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/patch.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch diff --git a/node_modules/update-notifier/node_modules/semver/functions/prerelease.js b/node_modules/update-notifier/node_modules/semver/functions/prerelease.js new file mode 100644 index 0000000..06aa132 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/prerelease.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} +module.exports = prerelease diff --git a/node_modules/update-notifier/node_modules/semver/functions/rcompare.js b/node_modules/update-notifier/node_modules/semver/functions/rcompare.js new file mode 100644 index 0000000..0ac509e --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/rcompare.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare diff --git a/node_modules/update-notifier/node_modules/semver/functions/rsort.js b/node_modules/update-notifier/node_modules/semver/functions/rsort.js new file mode 100644 index 0000000..82404c5 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/rsort.js @@ -0,0 +1,3 @@ +const compareBuild = require('./compare-build') +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort diff --git a/node_modules/update-notifier/node_modules/semver/functions/satisfies.js b/node_modules/update-notifier/node_modules/semver/functions/satisfies.js new file mode 100644 index 0000000..50af1c1 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/satisfies.js @@ -0,0 +1,10 @@ +const Range = require('../classes/range') +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies diff --git a/node_modules/update-notifier/node_modules/semver/functions/sort.js b/node_modules/update-notifier/node_modules/semver/functions/sort.js new file mode 100644 index 0000000..4d10917 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/sort.js @@ -0,0 +1,3 @@ +const compareBuild = require('./compare-build') +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort diff --git a/node_modules/update-notifier/node_modules/semver/functions/valid.js b/node_modules/update-notifier/node_modules/semver/functions/valid.js new file mode 100644 index 0000000..f27bae1 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/functions/valid.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null +} +module.exports = valid diff --git a/node_modules/update-notifier/node_modules/semver/index.js b/node_modules/update-notifier/node_modules/semver/index.js new file mode 100644 index 0000000..57e2ae6 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/index.js @@ -0,0 +1,48 @@ +// just pre-load all the stuff that index.js lazily exports +const internalRe = require('./internal/re') +module.exports = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION, + SemVer: require('./classes/semver'), + compareIdentifiers: require('./internal/identifiers').compareIdentifiers, + rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers, + parse: require('./functions/parse'), + valid: require('./functions/valid'), + clean: require('./functions/clean'), + inc: require('./functions/inc'), + diff: require('./functions/diff'), + major: require('./functions/major'), + minor: require('./functions/minor'), + patch: require('./functions/patch'), + prerelease: require('./functions/prerelease'), + compare: require('./functions/compare'), + rcompare: require('./functions/rcompare'), + compareLoose: require('./functions/compare-loose'), + compareBuild: require('./functions/compare-build'), + sort: require('./functions/sort'), + rsort: require('./functions/rsort'), + gt: require('./functions/gt'), + lt: require('./functions/lt'), + eq: require('./functions/eq'), + neq: require('./functions/neq'), + gte: require('./functions/gte'), + lte: require('./functions/lte'), + cmp: require('./functions/cmp'), + coerce: require('./functions/coerce'), + Comparator: require('./classes/comparator'), + Range: require('./classes/range'), + satisfies: require('./functions/satisfies'), + toComparators: require('./ranges/to-comparators'), + maxSatisfying: require('./ranges/max-satisfying'), + minSatisfying: require('./ranges/min-satisfying'), + minVersion: require('./ranges/min-version'), + validRange: require('./ranges/valid'), + outside: require('./ranges/outside'), + gtr: require('./ranges/gtr'), + ltr: require('./ranges/ltr'), + intersects: require('./ranges/intersects'), + simplifyRange: require('./ranges/simplify'), + subset: require('./ranges/subset'), +} diff --git a/node_modules/update-notifier/node_modules/semver/internal/constants.js b/node_modules/update-notifier/node_modules/semver/internal/constants.js new file mode 100644 index 0000000..49df215 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/internal/constants.js @@ -0,0 +1,17 @@ +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +module.exports = { + SEMVER_SPEC_VERSION, + MAX_LENGTH, + MAX_SAFE_INTEGER, + MAX_SAFE_COMPONENT_LENGTH +} diff --git a/node_modules/update-notifier/node_modules/semver/internal/debug.js b/node_modules/update-notifier/node_modules/semver/internal/debug.js new file mode 100644 index 0000000..1c00e13 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/internal/debug.js @@ -0,0 +1,9 @@ +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug diff --git a/node_modules/update-notifier/node_modules/semver/internal/identifiers.js b/node_modules/update-notifier/node_modules/semver/internal/identifiers.js new file mode 100644 index 0000000..ed13094 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/internal/identifiers.js @@ -0,0 +1,23 @@ +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers +} diff --git a/node_modules/update-notifier/node_modules/semver/internal/parse-options.js b/node_modules/update-notifier/node_modules/semver/internal/parse-options.js new file mode 100644 index 0000000..42d2ebd --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/internal/parse-options.js @@ -0,0 +1,11 @@ +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true + return options + }, {}) +module.exports = parseOptions diff --git a/node_modules/update-notifier/node_modules/semver/internal/re.js b/node_modules/update-notifier/node_modules/semver/internal/re.js new file mode 100644 index 0000000..54d4176 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/internal/re.js @@ -0,0 +1,182 @@ +const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants') +const debug = require('./debug') +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 + +const createToken = (name, value, isGlobal) => { + const index = R++ + debug(index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') diff --git a/node_modules/update-notifier/node_modules/semver/package.json b/node_modules/update-notifier/node_modules/semver/package.json new file mode 100644 index 0000000..a0cd785 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/package.json @@ -0,0 +1,73 @@ +{ + "_from": "semver@^7.3.4", + "_id": "semver@7.3.5", + "_inBundle": false, + "_integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "_location": "/update-notifier/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@^7.3.4", + "name": "semver", + "escapedName": "semver", + "rawSpec": "^7.3.4", + "saveSpec": null, + "fetchSpec": "^7.3.4" + }, + "_requiredBy": [ + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "_shasum": "0b621c879348d8998e4b0e4be94b3f12e6018ef7", + "_spec": "semver@^7.3.4", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "bin": { + "semver": "bin/semver.js" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^14.10.7" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "bin/**/*.js", + "range.bnf", + "classes/**/*.js", + "functions/**/*.js", + "internal/**/*.js", + "ranges/**/*.js", + "index.js", + "preload.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "index.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "postpublish": "git push origin --follow-tags", + "postversion": "npm publish", + "preversion": "npm test", + "snap": "tap", + "test": "tap" + }, + "tap": { + "check-coverage": true, + "coverage-map": "map.js" + }, + "version": "7.3.5" +} diff --git a/node_modules/update-notifier/node_modules/semver/preload.js b/node_modules/update-notifier/node_modules/semver/preload.js new file mode 100644 index 0000000..947cd4f --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/preload.js @@ -0,0 +1,2 @@ +// XXX remove in v8 or beyond +module.exports = require('./index.js') diff --git a/node_modules/update-notifier/node_modules/semver/range.bnf b/node_modules/update-notifier/node_modules/semver/range.bnf new file mode 100644 index 0000000..d4c6ae0 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/update-notifier/node_modules/semver/ranges/gtr.js b/node_modules/update-notifier/node_modules/semver/ranges/gtr.js new file mode 100644 index 0000000..db7e355 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/gtr.js @@ -0,0 +1,4 @@ +// Determine if version is greater than all the versions possible in the range. +const outside = require('./outside') +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr diff --git a/node_modules/update-notifier/node_modules/semver/ranges/intersects.js b/node_modules/update-notifier/node_modules/semver/ranges/intersects.js new file mode 100644 index 0000000..3d1a6f3 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/intersects.js @@ -0,0 +1,7 @@ +const Range = require('../classes/range') +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} +module.exports = intersects diff --git a/node_modules/update-notifier/node_modules/semver/ranges/ltr.js b/node_modules/update-notifier/node_modules/semver/ranges/ltr.js new file mode 100644 index 0000000..528a885 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/ltr.js @@ -0,0 +1,4 @@ +const outside = require('./outside') +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr diff --git a/node_modules/update-notifier/node_modules/semver/ranges/max-satisfying.js b/node_modules/update-notifier/node_modules/semver/ranges/max-satisfying.js new file mode 100644 index 0000000..6e3d993 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/max-satisfying.js @@ -0,0 +1,25 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} +module.exports = maxSatisfying diff --git a/node_modules/update-notifier/node_modules/semver/ranges/min-satisfying.js b/node_modules/update-notifier/node_modules/semver/ranges/min-satisfying.js new file mode 100644 index 0000000..9b60974 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/min-satisfying.js @@ -0,0 +1,24 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} +module.exports = minSatisfying diff --git a/node_modules/update-notifier/node_modules/semver/ranges/min-version.js b/node_modules/update-notifier/node_modules/semver/ranges/min-version.js new file mode 100644 index 0000000..2fac412 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/min-version.js @@ -0,0 +1,60 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const gt = require('../functions/gt') + +const minVersion = (range, loose) => { + range = new Range(range, loose) + + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) + minver = setMin + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} +module.exports = minVersion diff --git a/node_modules/update-notifier/node_modules/semver/ranges/outside.js b/node_modules/update-notifier/node_modules/semver/ranges/outside.js new file mode 100644 index 0000000..2a4b0a1 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/outside.js @@ -0,0 +1,80 @@ +const SemVer = require('../classes/semver') +const Comparator = require('../classes/comparator') +const {ANY} = Comparator +const Range = require('../classes/range') +const satisfies = require('../functions/satisfies') +const gt = require('../functions/gt') +const lt = require('../functions/lt') +const lte = require('../functions/lte') +const gte = require('../functions/gte') + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let high = null + let low = null + + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +module.exports = outside diff --git a/node_modules/update-notifier/node_modules/semver/ranges/simplify.js b/node_modules/update-notifier/node_modules/semver/ranges/simplify.js new file mode 100644 index 0000000..b792f97 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/simplify.js @@ -0,0 +1,44 @@ +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') +module.exports = (versions, range, options) => { + const set = [] + let min = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!min) + min = version + } else { + if (prev) { + set.push([min, prev]) + } + prev = null + min = null + } + } + if (min) + set.push([min, null]) + + const ranges = [] + for (const [min, max] of set) { + if (min === max) + ranges.push(min) + else if (!max && min === v[0]) + ranges.push('*') + else if (!max) + ranges.push(`>=${min}`) + else if (min === v[0]) + ranges.push(`<=${max}`) + else + ranges.push(`${min} - ${max}`) + } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} diff --git a/node_modules/update-notifier/node_modules/semver/ranges/subset.js b/node_modules/update-notifier/node_modules/semver/ranges/subset.js new file mode 100644 index 0000000..532fd13 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/subset.js @@ -0,0 +1,222 @@ +const Range = require('../classes/range.js') +const Comparator = require('../classes/comparator.js') +const { ANY } = Comparator +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a null set, OR +// - Every simple range `r1, r2, ...` which is not a null set is a subset of +// some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else if in prerelease mode, return false +// - else replace c with `[>=0.0.0]` +// - If C is only the ANY comparator +// - if in prerelease mode, return true +// - else replace C with `[>=0.0.0]` +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If any C is a = range, and GT or LT are set, return false +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the GT.semver tuple, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the LT.semver tuple, return false +// - Else return true + +const subset = (sub, dom, options = {}) => { + if (sub === dom) + return true + + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) + continue OUTER + } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) + return false + } + return true +} + +const simpleSubset = (sub, dom, options) => { + if (sub === dom) + return true + + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) + return true + else if (options.includePrerelease) + sub = [ new Comparator('>=0.0.0-0') ] + else + sub = [ new Comparator('>=0.0.0') ] + } + + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) + return true + else + dom = [ new Comparator('>=0.0.0') ] + } + + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') + gt = higherGT(gt, c, options) + else if (c.operator === '<' || c.operator === '<=') + lt = lowerLT(lt, c, options) + else + eqSet.add(c.semver) + } + + if (eqSet.size > 1) + return null + + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) + return null + else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) + return null + } + + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) + return null + + if (lt && !satisfies(eq, String(lt), options)) + return null + + for (const c of dom) { + if (!satisfies(eq, String(c), options)) + return false + } + + return true + } + + let higher, lower + let hasDomLT, hasDomGT + // if the subset has a prerelease, we need a comparator in the superset + // with the same tuple and a prerelease, or it's not a subset + let needDomLTPre = lt && + !options.includePrerelease && + lt.semver.prerelease.length ? lt.semver : false + let needDomGTPre = gt && + !options.includePrerelease && + gt.semver.prerelease.length ? gt.semver : false + // exception: <1.2.3-0 is the same as <1.2.3 + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && + lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false + } + + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomGTPre.major && + c.semver.minor === needDomGTPre.minor && + c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false + } + } + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) + return false + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + return false + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomLTPre.major && + c.semver.minor === needDomLTPre.minor && + c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false + } + } + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) + return false + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + return false + } + if (!c.operator && (lt || gt) && gtltComp !== 0) + return false + } + + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) + return false + + if (lt && hasDomGT && !gt && gtltComp !== 0) + return false + + // we needed a prerelease range in a specific tuple, but didn't get one + // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, + // because it includes prereleases in the 1.2.3 tuple + if (needDomGTPre || needDomLTPre) + return false + + return true +} + +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a +} + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a +} + +module.exports = subset diff --git a/node_modules/update-notifier/node_modules/semver/ranges/to-comparators.js b/node_modules/update-notifier/node_modules/semver/ranges/to-comparators.js new file mode 100644 index 0000000..6c8bc7e --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/to-comparators.js @@ -0,0 +1,8 @@ +const Range = require('../classes/range') + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators diff --git a/node_modules/update-notifier/node_modules/semver/ranges/valid.js b/node_modules/update-notifier/node_modules/semver/ranges/valid.js new file mode 100644 index 0000000..365f356 --- /dev/null +++ b/node_modules/update-notifier/node_modules/semver/ranges/valid.js @@ -0,0 +1,11 @@ +const Range = require('../classes/range') +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} +module.exports = validRange diff --git a/node_modules/update-notifier/package.json b/node_modules/update-notifier/package.json new file mode 100644 index 0000000..ae4c931 --- /dev/null +++ b/node_modules/update-notifier/package.json @@ -0,0 +1,94 @@ +{ + "_from": "update-notifier@^5.1.0", + "_id": "update-notifier@5.1.0", + "_inBundle": false, + "_integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "_location": "/update-notifier", + "_phantomChildren": { + "lru-cache": "6.0.0" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "update-notifier@^5.1.0", + "name": "update-notifier", + "escapedName": "update-notifier", + "rawSpec": "^5.1.0", + "saveSpec": null, + "fetchSpec": "^5.1.0" + }, + "_requiredBy": [ + "/nodemon" + ], + "_resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "_shasum": "4ab0d7c7f36a231dd7316cf7729313f0214d9ad9", + "_spec": "update-notifier@^5.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\nodemon", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/yeoman/update-notifier/issues" + }, + "bundleDependencies": false, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "deprecated": false, + "description": "Update notifications for your CLI app", + "devDependencies": { + "ava": "^2.4.0", + "clear-module": "^4.1.1", + "fixture-stdout": "^0.2.1", + "mock-require": "^3.0.3", + "strip-ansi": "^6.0.0", + "xo": "^0.37.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "check.js" + ], + "funding": "https://github.com/yeoman/update-notifier?sponsor=1", + "homepage": "https://github.com/yeoman/update-notifier#readme", + "keywords": [ + "npm", + "update", + "updater", + "notify", + "notifier", + "check", + "checker", + "cli", + "module", + "package", + "version" + ], + "license": "BSD-2-Clause", + "name": "update-notifier", + "repository": { + "type": "git", + "url": "git+https://github.com/yeoman/update-notifier.git" + }, + "scripts": { + "test": "xo && ava --timeout=20s --serial" + }, + "version": "5.1.0" +} diff --git a/node_modules/update-notifier/readme.md b/node_modules/update-notifier/readme.md new file mode 100644 index 0000000..140c987 --- /dev/null +++ b/node_modules/update-notifier/readme.md @@ -0,0 +1,223 @@ +# update-notifier + +> Update notifications for your CLI app + +![](screenshot.png) + +Inform users of your package of updates in a non-intrusive way. + +#### Contents + +- [Install](#install) +- [Usage](#usage) +- [How](#how) +- [API](#api) +- [About](#about) +- [Users](#users) + +## Install + +``` +$ npm install update-notifier +``` + +## Usage + +### Simple + +```js +const updateNotifier = require('update-notifier'); +const pkg = require('./package.json'); + +updateNotifier({pkg}).notify(); +``` + +### Comprehensive + +```js +const updateNotifier = require('update-notifier'); +const pkg = require('./package.json'); + +// Checks for available update and returns an instance +const notifier = updateNotifier({pkg}); + +// Notify using the built-in convenience method +notifier.notify(); + +// `notifier.update` contains some useful info about the update +console.log(notifier.update); +/* +{ + latest: '1.0.1', + current: '1.0.0', + type: 'patch', // Possible values: latest, major, minor, patch, prerelease, build + name: 'pageres' +} +*/ +``` + +### Options and custom message + +```js +const notifier = updateNotifier({ + pkg, + updateCheckInterval: 1000 * 60 * 60 * 24 * 7 // 1 week +}); + +if (notifier.update) { + console.log(`Update available: ${notifier.update.latest}`); +} +``` + +## How + +Whenever you initiate the update notifier and it's not within the interval threshold, it will asynchronously check with npm in the background for available updates, then persist the result. The next time the notifier is initiated, the result will be loaded into the `.update` property. This prevents any impact on your package startup performance. +The update check is done in a unref'ed [child process](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options). This means that if you call `process.exit`, the check will still be performed in its own process. + +The first time the user runs your app, it will check for an update, and even if an update is available, it will wait the specified `updateCheckInterval` before notifying the user. This is done to not be annoying to the user, but might surprise you as an implementer if you're testing whether it works. Check out [`example.js`](example.js) to quickly test out `update-notifier` and see how you can test that it works in your app. + +## API + +### notifier = updateNotifier(options) + +Checks if there is an available update. Accepts options defined below. Returns an instance with an `.update` property if there is an available update, otherwise `undefined`. + +### options + +Type: `object` + +#### pkg + +Type: `object` + +##### name + +*Required*\ +Type: `string` + +##### version + +*Required*\ +Type: `string` + +#### updateCheckInterval + +Type: `number`\ +Default: `1000 * 60 * 60 * 24` *(1 day)* + +How often to check for updates. + +#### shouldNotifyInNpmScript + +Type: `boolean`\ +Default: `false` + +Allows notification to be shown when running as an npm script. + +#### distTag + +Type: `string`\ +Default: `'latest'` + +Which [dist-tag](https://docs.npmjs.com/adding-dist-tags-to-packages) to use to find the latest version. + +### notifier.fetchInfo() + +Check update information. + +Returns an `object` with: + +- `latest` _(String)_ - Latest version. +- `current` _(String)_ - Current version. +- `type` _(String)_ - Type of current update. Possible values: `latest`, `major`, `minor`, `patch`, `prerelease`, `build`. +- `name` _(String)_ - Package name. + +### notifier.notify(options?) + +Convenience method to display a notification message. *(See screenshot)* + +Only notifies if there is an update and the process is [TTY](https://nodejs.org/api/process.html#process_a_note_on_process_i_o). + +#### options + +Type: `object` + +##### defer + +Type: `boolean`\ +Default: `true` + +Defer showing the notification to after the process has exited. + +##### message + +Type: `string`\ +Default: [See above screenshot](https://github.com/yeoman/update-notifier#update-notifier-) + +Message that will be shown when an update is available. + +Available placeholders: + +- `{packageName}` - Package name. +- `{currentVersion}` - Current version. +- `{latestVersion}` - Latest version. +- `{updateCommand}` - Update command. + +```js +notifier.notify({message: 'Run `{updateCommand}` to update.'}); + +// Output: +// Run `npm install update-notifier-tester@1.0.0` to update. +``` + +##### isGlobal + +Type: `boolean`\ +Default: Auto-detect + +Include the `-g` argument in the default message's `npm i` recommendation. You may want to change this if your CLI package can be installed as a dependency of another project, and don't want to recommend a global installation. This option is ignored if you supply your own `message` (see above). + +##### boxenOptions + +Type: `object`\ +Default: `{padding: 1, margin: 1, align: 'center', borderColor: 'yellow', borderStyle: 'round'}` *(See screenshot)* + +Options object that will be passed to [`boxen`](https://github.com/sindresorhus/boxen). + +### User settings + +Users of your module have the ability to opt-out of the update notifier by changing the `optOut` property to `true` in `~/.config/configstore/update-notifier-[your-module-name].json`. The path is available in `notifier.config.path`. + +Users can also opt-out by [setting the environment variable](https://github.com/sindresorhus/guides/blob/main/set-environment-variables.md) `NO_UPDATE_NOTIFIER` with any value or by using the `--no-update-notifier` flag on a per run basis. + +The check is also skipped automatically: + - on CI + - in unit tests (when the `NODE_ENV` environment variable is `test`) + +## About + +The idea for this module came from the desire to apply the browser update strategy to CLI tools, where everyone is always on the latest version. We first tried automatic updating, which we discovered wasn't popular. This is the second iteration of that idea, but limited to just update notifications. + +## Users + +There are a bunch projects using it: + +- [npm](https://github.com/npm/npm) - Package manager for JavaScript +- [Yeoman](https://yeoman.io) - Modern workflows for modern webapps +- [AVA](https://avajs.dev) - Simple concurrent test runner +- [XO](https://github.com/xojs/xo) - JavaScript happiness style linter +- [Node GH](https://github.com/node-gh/gh) - GitHub command line tool + +[And 2700+ more…](https://www.npmjs.org/browse/depended/update-notifier) + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/uri-js/README.md b/node_modules/uri-js/README.md new file mode 100644 index 0000000..3f225e7 --- /dev/null +++ b/node_modules/uri-js/README.md @@ -0,0 +1,199 @@ +# URI.js + +URI.js is an [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt) compliant, scheme extendable URI parsing/validating/resolving library for all JavaScript environments (browsers, Node.js, etc). +It is also compliant with the IRI ([RFC 3987](http://www.ietf.org/rfc/rfc3987.txt)), IDNA ([RFC 5890](http://www.ietf.org/rfc/rfc5890.txt)), IPv6 Address ([RFC 5952](http://www.ietf.org/rfc/rfc5952.txt)), IPv6 Zone Identifier ([RFC 6874](http://www.ietf.org/rfc/rfc6874.txt)) specifications. + +URI.js has an extensive test suite, and works in all (Node.js, web) environments. It weighs in at 6.2kb (gzipped, 16kb deflated). + +## API + +### Parsing + + URI.parse("uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body"); + //returns: + //{ + // scheme : "uri", + // userinfo : "user:pass", + // host : "example.com", + // port : 123, + // path : "/one/two.three", + // query : "q1=a1&q2=a2", + // fragment : "body" + //} + +### Serializing + + URI.serialize({scheme : "http", host : "example.com", fragment : "footer"}) === "http://example.com/#footer" + +### Resolving + + URI.resolve("uri://a/b/c/d?q", "../../g") === "uri://a/g" + +### Normalizing + + URI.normalize("HTTP://ABC.com:80/%7Esmith/home.html") === "http://abc.com/~smith/home.html" + +### Comparison + + URI.equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d") === true + +### IP Support + + //IPv4 normalization + URI.normalize("//192.068.001.000") === "//192.68.1.0" + + //IPv6 normalization + URI.normalize("//[2001:0:0DB8::0:0001]") === "//[2001:0:db8::1]" + + //IPv6 zone identifier support + URI.parse("//[2001:db8::7%25en1]"); + //returns: + //{ + // host : "2001:db8::7%en1" + //} + +### IRI Support + + //convert IRI to URI + URI.serialize(URI.parse("http://examplé.org/rosé")) === "http://xn--exampl-gva.org/ros%C3%A9" + //convert URI to IRI + URI.serialize(URI.parse("http://xn--exampl-gva.org/ros%C3%A9"), {iri:true}) === "http://examplé.org/rosé" + +### Options + +All of the above functions can accept an additional options argument that is an object that can contain one or more of the following properties: + +* `scheme` (string) + + Indicates the scheme that the URI should be treated as, overriding the URI's normal scheme parsing behavior. + +* `reference` (string) + + If set to `"suffix"`, it indicates that the URI is in the suffix format, and the validator will use the option's `scheme` property to determine the URI's scheme. + +* `tolerant` (boolean, false) + + If set to `true`, the parser will relax URI resolving rules. + +* `absolutePath` (boolean, false) + + If set to `true`, the serializer will not resolve a relative `path` component. + +* `iri` (boolean, false) + + If set to `true`, the serializer will unescape non-ASCII characters as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). + +* `unicodeSupport` (boolean, false) + + If set to `true`, the parser will unescape non-ASCII characters in the parsed output as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). + +* `domainHost` (boolean, false) + + If set to `true`, the library will treat the `host` component as a domain name, and convert IDNs (International Domain Names) as per [RFC 5891](http://www.ietf.org/rfc/rfc5891.txt). + +## Scheme Extendable + +URI.js supports inserting custom [scheme](http://en.wikipedia.org/wiki/URI_scheme) dependent processing rules. Currently, URI.js has built in support for the following schemes: + +* http \[[RFC 2616](http://www.ietf.org/rfc/rfc2616.txt)\] +* https \[[RFC 2818](http://www.ietf.org/rfc/rfc2818.txt)\] +* mailto \[[RFC 6068](http://www.ietf.org/rfc/rfc6068.txt)\] +* urn \[[RFC 2141](http://www.ietf.org/rfc/rfc2141.txt)\] +* urn:uuid \[[RFC 4122](http://www.ietf.org/rfc/rfc4122.txt)\] + +### HTTP Support + + URI.equal("HTTP://ABC.COM:80", "http://abc.com/") === true + +### Mailto Support + + URI.parse("mailto:alpha@example.com,bravo@example.com?subject=SUBSCRIBE&body=Sign%20me%20up!"); + //returns: + //{ + // scheme : "mailto", + // to : ["alpha@example.com", "bravo@example.com"], + // subject : "SUBSCRIBE", + // body : "Sign me up!" + //} + + URI.serialize({ + scheme : "mailto", + to : ["alpha@example.com"], + subject : "REMOVE", + body : "Please remove me", + headers : { + cc : "charlie@example.com" + } + }) === "mailto:alpha@example.com?cc=charlie@example.com&subject=REMOVE&body=Please%20remove%20me" + +### URN Support + + URI.parse("urn:example:foo"); + //returns: + //{ + // scheme : "urn", + // nid : "example", + // nss : "foo", + //} + +#### URN UUID Support + + URI.parse("urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); + //returns: + //{ + // scheme : "urn", + // nid : "example", + // uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", + //} + +## Usage + +To load in a browser, use the following tag: + + + +To load in a CommonJS (Node.js) environment, first install with npm by running on the command line: + + npm install uri-js + +Then, in your code, load it using: + + const URI = require("uri-js"); + +If you are writing your code in ES6+ (ESNEXT) or TypeScript, you would load it using: + + import * as URI from "uri-js"; + +Or you can load just what you need using named exports: + + import { parse, serialize, resolve, resolveComponents, normalize, equal, removeDotSegments, pctEncChar, pctDecChars, escapeComponent, unescapeComponent } from "uri-js"; + +## Breaking changes + +### Breaking changes from 3.x + +URN parsing has been completely changed to better align with the specification. Scheme is now always `urn`, but has two new properties: `nid` which contains the Namspace Identifier, and `nss` which contains the Namespace Specific String. The `nss` property will be removed by higher order scheme handlers, such as the UUID URN scheme handler. + +The UUID of a URN can now be found in the `uuid` property. + +### Breaking changes from 2.x + +URI validation has been removed as it was slow, exposed a vulnerabilty, and was generally not useful. + +### Breaking changes from 1.x + +The `errors` array on parsed components is now an `error` string. + +## License ([Simplified BSD](http://en.wikipedia.org/wiki/BSD_licenses#2-clause)) + +Copyright 2011 Gary Court. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY GARY COURT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Gary Court. diff --git a/node_modules/uri-js/bower.json b/node_modules/uri-js/bower.json new file mode 100644 index 0000000..7a40440 --- /dev/null +++ b/node_modules/uri-js/bower.json @@ -0,0 +1,47 @@ +{ + "name": "uri-js", + "description": "An RFC 3986/3987 compliant, scheme extendable URI/IRI parsing/validating/resolving library for JavaScript.", + "main": "dist/es5/uri.all.js", + "moduleType": [ + "globals", + "amd", + "node", + "es6" + ], + "authors": [ + "Gary Court " + ], + "license": "BSD-2-Clause", + "keywords": [ + "URI", + "IRI", + "IDN", + "URN", + "HTTP", + "HTTPS", + "MAILTO", + "RFC3986", + "RFC3987", + "RFC5891", + "RFC2616", + "RFC2818", + "RFC2141", + "RFC4122", + "RFC6068" + ], + "homepage": "https://github.com/garycourt/uri-js", + "repository": { + "type": "git", + "url": "http://github.com/garycourt/uri-js" + }, + "dependencies": { + "punycode": "^2.1.0" + }, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/node_modules/uri-js/dist/es5/uri.all.d.ts b/node_modules/uri-js/dist/es5/uri.all.d.ts new file mode 100644 index 0000000..da51e23 --- /dev/null +++ b/node_modules/uri-js/dist/es5/uri.all.d.ts @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/es5/uri.all.js b/node_modules/uri-js/dist/es5/uri.all.js new file mode 100644 index 0000000..2df0609 --- /dev/null +++ b/node_modules/uri-js/dist/es5/uri.all.js @@ -0,0 +1,1389 @@ +/** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.URI = global.URI || {}))); +}(this, (function (exports) { 'use strict'; + +function merge() { + for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) { + sets[_key] = arguments[_key]; + } + + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + var xl = sets.length - 1; + for (var x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } else { + return sets[0]; + } +} +function subexp(str) { + return "(?:" + str + ")"; +} +function typeOf(o) { + return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); +} +function toUpperCase(str) { + return str.toUpperCase(); +} +function toArray(obj) { + return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; +} +function assign(target, source) { + var obj = target; + if (source) { + for (var key in source) { + obj[key] = source[key]; + } + } + return obj; +} + +function buildExps(isIRI) { + var ALPHA$$ = "[A-Za-z]", + CR$ = "[\\x0D]", + DIGIT$$ = "[0-9]", + DQUOTE$$ = "[\\x22]", + HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), + //case-insensitive + LF$$ = "[\\x0A]", + SP$$ = "[\\x20]", + PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), + //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", + SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", + RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), + UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", + //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", + //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), + SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), + USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), + DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), + DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), + //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), + H16$ = subexp(HEXDIG$$ + "{1,4}"), + LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), + IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), + // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), + // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), + //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), + //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), + //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), + //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), + //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), + //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), + //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), + ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), + //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), + //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), + //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), + IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), + //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), + HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), + PORT$ = subexp(DIGIT$$ + "*"), + AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), + PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), + SEGMENT$ = subexp(PCHAR$ + "*"), + SEGMENT_NZ$ = subexp(PCHAR$ + "+"), + SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), + PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), + PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), + //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), + //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), + //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", + PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), + FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), + HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), + RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), + ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), + GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", + SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +var URI_PROTOCOL = buildExps(false); + +var IRI_PROTOCOL = buildExps(true); + +var slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; +}(); + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +/** Highest positive signed 32-bit float value */ + +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 +var delimiter = '-'; // '\x2D' + +/** Regular expressions */ +var regexPunycode = /^xn--/; +var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +var errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +var baseMinusTMin = base - tMin; +var floor = Math.floor; +var stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error$1(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + var result = []; + var length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + while (counter < length) { + var value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { + // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +var ucs2encode = function ucs2encode(array) { + return String.fromCodePoint.apply(String, toConsumableArray(array)); +}; + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +var basicToDigit = function basicToDigit(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +var digitToBasic = function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +var adapt = function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +var decode = function decode(input) { + // Don't use UCS-2. + var output = []; + var inputLength = input.length; + var i = 0; + var n = initialN; + var bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + var basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (var j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error$1('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + var oldi = i; + for (var w = 1, k = base;; /* no condition */k += base) { + + if (index >= inputLength) { + error$1('invalid-input'); + } + + var digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error$1('overflow'); + } + + i += digit * w; + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + + if (digit < t) { + break; + } + + var baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error$1('overflow'); + } + + w *= baseMinusT; + } + + var out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error$1('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + } + + return String.fromCodePoint.apply(String, output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +var encode = function encode(input) { + var output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + var inputLength = input.length; + + // Initialize the state. + var n = initialN; + var delta = 0; + var bias = initialBias; + + // Handle the basic code points. + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _currentValue2 = _step.value; + + if (_currentValue2 < 0x80) { + output.push(stringFromCharCode(_currentValue2)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + var basicLength = output.length; + var handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + var m = maxInt; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var currentValue = _step2.value; + + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + var handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error$1('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var _currentValue = _step3.value; + + if (_currentValue < n && ++delta > maxInt) { + error$1('overflow'); + } + if (_currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + for (var k = base;; /* no condition */k += base) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) { + break; + } + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + ++delta; + ++n; + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +var toUnicode = function toUnicode(input) { + return mapDomain(input, function (string) { + return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +var toASCII = function toASCII(input) { + return mapDomain(input, function (string) { + return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +var punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ +var SCHEMES = {}; +function pctEncChar(chr) { + var c = chr.charCodeAt(0); + var e = void 0; + if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); + return e; +} +function pctDecChars(str) { + var newStr = ""; + var i = 0; + var il = str.length; + while (i < il) { + var c = parseInt(str.substr(i + 1, 2), 16); + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } else if (c >= 194 && c < 224) { + if (il - i >= 6) { + var c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); + } else { + newStr += str.substr(i, 6); + } + i += 6; + } else if (c >= 224) { + if (il - i >= 9) { + var _c = parseInt(str.substr(i + 4, 2), 16); + var c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); + } else { + newStr += str.substr(i, 9); + } + i += 9; + } else { + newStr += str.substr(i, 3); + i += 3; + } + } + return newStr; +} +function _normalizeComponentEncoding(components, protocol) { + function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(protocol.UNRESERVED) ? str : decStr; + } + if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + return components; +} + +function _stripLeadingZeros(str) { + return str.replace(/^0*(.*)/, "$1") || "0"; +} +function _normalizeIPv4(host, protocol) { + var matches = host.match(protocol.IPV4ADDRESS) || []; + + var _matches = slicedToArray(matches, 2), + address = _matches[1]; + + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } else { + return host; + } +} +function _normalizeIPv6(host, protocol) { + var matches = host.match(protocol.IPV6ADDRESS) || []; + + var _matches2 = slicedToArray(matches, 3), + address = _matches2[1], + zone = _matches2[2]; + + if (address) { + var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), + _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), + last = _address$toLowerCase$2[0], + first = _address$toLowerCase$2[1]; + + var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + var lastFields = last.split(":").map(_stripLeadingZeros); + var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + var fieldCount = isLastFieldIPv4Address ? 7 : 8; + var lastFieldsStart = lastFields.length - fieldCount; + var fields = Array(fieldCount); + for (var x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + var allZeroFields = fields.reduce(function (acc, field, index) { + if (!field || field === "0") { + var lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } else { + acc.push({ index: index, length: 1 }); + } + } + return acc; + }, []); + var longestZeroFields = allZeroFields.sort(function (a, b) { + return b.length - a.length; + })[0]; + var newHost = void 0; + if (longestZeroFields && longestZeroFields.length > 1) { + var newFirst = fields.slice(0, longestZeroFields.index); + var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } else { + newHost = fields.join(":"); + } + if (zone) { + newHost += "%" + zone; + } + return newHost; + } else { + return host; + } +} +var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; +function parse(uriString) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var components = {}; + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + var matches = uriString.match(URI_PARSE); + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } else { + //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; + components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; + components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; + //fix port number + if (isNaN(components.port)) { + components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; + } + } + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } else if (components.scheme === undefined) { + components.reference = "relative"; + } else if (components.fragment === undefined) { + components.reference = "absolute"; + } else { + components.reference = "uri"; + } + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } else { + components.error = components.error || "URI can not be parsed."; + } + return components; +} + +function _recomposeAuthority(components, options) { + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { + return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; + })); + } + if (typeof components.port === "number") { + uriTokens.push(":"); + uriTokens.push(components.port.toString(10)); + } + return uriTokens.length ? uriTokens.join("") : undefined; +} + +var RDS1 = /^\.\.?\//; +var RDS2 = /^\/\.(\/|$)/; +var RDS3 = /^\/\.\.(\/|$)/; +var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; +function removeDotSegments(input) { + var output = []; + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } else if (input === "." || input === "..") { + input = ""; + } else { + var im = input.match(RDS5); + if (im) { + var s = im[0]; + input = input.slice(s.length); + output.push(s); + } else { + throw new Error("Unexpected dot segment condition"); + } + } + } + return output.join(""); +} + +function serialize(components) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) {} + //TODO: normalize IPv6 address as per RFC 5952 + + //if host component is a domain name + else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { + //convert IDN via punycode + try { + components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + //normalize encoding + _normalizeComponentEncoding(components, protocol); + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + var authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + if (components.path !== undefined) { + var s = components.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + uriTokens.push(s); + } + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + return uriTokens.join(""); //merge tokens into a string +} + +function resolveComponents(base, relative) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var skipNormalization = arguments[3]; + + var target = {}; + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } else { + target.query = base.query; + } + } else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } else if (!base.path) { + target.path = relative.path; + } else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative.fragment; + return target; +} + +function resolve(baseURI, relativeURI, options) { + var schemelessOptions = assign({ scheme: 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +} + +function normalize(uri, options) { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + return uri; +} + +function equal(uriA, uriB, options) { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + return uriA === uriB; +} + +function escapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); +} + +function unescapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); +} + +var handler = { + scheme: "http", + domainHost: true, + parse: function parse(components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function serialize(components, options) { + //normalize the default port + if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; + +var handler$1 = { + scheme: "https", + domainHost: handler.domainHost, + parse: handler.parse, + serialize: handler.serialize +}; + +var O = {}; +var isIRI = true; +//RFC 3986 +var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +var UNRESERVED = new RegExp(UNRESERVED$$, "g"); +var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +var NOT_HFVALUE = NOT_HFNAME; +function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(UNRESERVED) ? str : decStr; +} +var handler$2 = { + scheme: "mailto", + parse: function parse$$1(components, options) { + var mailtoComponents = components; + var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; + mailtoComponents.path = undefined; + if (mailtoComponents.query) { + var unknownHeaders = false; + var headers = {}; + var hfields = mailtoComponents.query.split("&"); + for (var x = 0, xl = hfields.length; x < xl; ++x) { + var hfield = hfields[x].split("="); + switch (hfield[0]) { + case "to": + var toAddrs = hfield[1].split(","); + for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { + to.push(toAddrs[_x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + if (unknownHeaders) mailtoComponents.headers = headers; + } + mailtoComponents.query = undefined; + for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { + var addr = to[_x2].split("@"); + addr[0] = unescapeComponent(addr[0]); + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + to[_x2] = addr.join("@"); + } + return mailtoComponents; + }, + serialize: function serialize$$1(mailtoComponents, options) { + var components = mailtoComponents; + var to = toArray(mailtoComponents.to); + if (to) { + for (var x = 0, xl = to.length; x < xl; ++x) { + var toAddr = String(to[x]); + var atIdx = toAddr.lastIndexOf("@"); + var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + var domain = toAddr.slice(atIdx + 1); + //convert IDN via punycode + try { + domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); + } catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + to[x] = localPart + "@" + domain; + } + components.path = to.join(","); + } + var headers = mailtoComponents.headers = mailtoComponents.headers || {}; + if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) headers["body"] = mailtoComponents.body; + var fields = []; + for (var name in headers) { + if (headers[name] !== O[name]) { + fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + return components; + } +}; + +var URN_PARSE = /^([^\:]+)\:(.*)/; +//RFC 2141 +var handler$3 = { + scheme: "urn", + parse: function parse$$1(components, options) { + var matches = components.path && components.path.match(URN_PARSE); + var urnComponents = components; + if (matches) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = matches[1].toLowerCase(); + var nss = matches[2]; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function serialize$$1(urnComponents, options) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = urnComponents.nid; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + var uriComponents = urnComponents; + var nss = urnComponents.nss; + uriComponents.path = (nid || options.nid) + ":" + nss; + return uriComponents; + } +}; + +var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +//RFC 4122 +var handler$4 = { + scheme: "urn:uuid", + parse: function parse(urnComponents, options) { + var uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function serialize(uuidComponents, options) { + var urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + } +}; + +SCHEMES[handler.scheme] = handler; +SCHEMES[handler$1.scheme] = handler$1; +SCHEMES[handler$2.scheme] = handler$2; +SCHEMES[handler$3.scheme] = handler$3; +SCHEMES[handler$4.scheme] = handler$4; + +exports.SCHEMES = SCHEMES; +exports.pctEncChar = pctEncChar; +exports.pctDecChars = pctDecChars; +exports.parse = parse; +exports.removeDotSegments = removeDotSegments; +exports.serialize = serialize; +exports.resolveComponents = resolveComponents; +exports.resolve = resolve; +exports.normalize = normalize; +exports.equal = equal; +exports.escapeComponent = escapeComponent; +exports.unescapeComponent = unescapeComponent; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=uri.all.js.map diff --git a/node_modules/uri-js/dist/es5/uri.all.js.map b/node_modules/uri-js/dist/es5/uri.all.js.map new file mode 100644 index 0000000..536ffa8 --- /dev/null +++ b/node_modules/uri-js/dist/es5/uri.all.js.map @@ -0,0 +1 @@ +{"version":3,"file":"uri.all.js","sources":["../../src/index.ts","../../src/schemes/urn-uuid.ts","../../src/schemes/urn.ts","../../src/schemes/mailto.ts","../../src/schemes/https.ts","../../src/schemes/http.ts","../../src/uri.ts","../../node_modules/punycode/punycode.es6.js","../../src/regexps-iri.ts","../../src/regexps-uri.ts","../../src/util.ts"],"sourcesContent":["import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}"],"names":["SCHEMES","uuid","scheme","urn","mailto","https","http","urnComponents","nss","uuidComponents","toLowerCase","options","error","tolerant","match","UUID","undefined","handler","uriComponents","path","nid","schemeHandler","serialize","urnScheme","parse","matches","components","URN_PARSE","query","fields","join","length","push","name","replace","PCT_ENCODED","decodeUnreserved","toUpperCase","NOT_HFNAME","pctEncChar","headers","NOT_HFVALUE","O","mailtoComponents","body","subject","to","x","localPart","domain","iri","e","punycode","toASCII","unescapeComponent","toUnicode","toAddr","slice","atIdx","NOT_LOCAL_PART","lastIndexOf","String","xl","toArray","addr","unicodeSupport","split","unknownHeaders","hfield","toAddrs","hfields","decStr","UNRESERVED","str","pctDecChars","RegExp","merge","UNRESERVED$$","SOME_DELIMS$$","ATEXT$$","VCHAR$$","PCT_ENCODED$","QTEXT$$","subexp","HEXDIG$$","isIRI","domainHost","port","host","toString","URI_PROTOCOL","IRI_PROTOCOL","ESCAPE","escapeComponent","uriA","uriB","typeOf","equal","uri","normalize","resolveComponents","baseURI","schemelessOptions","relativeURI","assign","resolve","target","fragment","relative","base","userinfo","removeDotSegments","charAt","skipNormalization","uriTokens","s","authority","absolutePath","reference","_recomposeAuthority","protocol","IPV6ADDRESS","test","output","Error","input","im","RDS5","pop","RDS3","RDS2","RDS1","$1","$2","_normalizeIPv6","_normalizeIPv4","_","uriString","isNaN","indexOf","parseInt","NO_MATCH_IS_UNDEFINED","URI_PARSE","newHost","zone","newFirst","newLast","longestZeroFields","index","b","a","allZeroFields","sort","acc","lastLongest","field","reduce","fieldCount","isLastFieldIPv4Address","firstFields","lastFields","lastFieldsStart","Array","IPV4ADDRESS","last","map","_stripLeadingZeros","first","address","reverse","NOT_FRAGMENT","NOT_QUERY","NOT_PATH","NOT_PATH_NOSCHEME","NOT_HOST","NOT_USERINFO","NOT_SCHEME","_normalizeComponentEncoding","newStr","substr","i","fromCharCode","c","c2","c3","il","chr","charCodeAt","encode","decode","ucs2encode","ucs2decode","regexNonASCII","string","mapDomain","regexPunycode","n","delta","handledCPCount","adapt","handledCPCountPlusOne","basicLength","stringFromCharCode","digitToBasic","q","floor","qMinusT","baseMinusT","t","k","bias","tMin","tMax","currentValue","maxInt","m","inputLength","delimiter","initialBias","initialN","fromCodePoint","splice","out","oldi","w","digit","basicToDigit","basic","j","baseMinusTMin","skew","numPoints","firstTime","damp","flag","codePoint","array","value","extra","counter","result","encoded","labels","fn","regexSeparators","parts","RangeError","errors","type","Math","buildExps","IPV6ADDRESS$","ZONEID$","IPV4ADDRESS$","RESERVED$$","SUB_DELIMS$$","IPRIVATE$$","ALPHA$$","DIGIT$$","AUTHORITY_REF$","USERINFO$","HOST$","PORT$","SAMEDOC_REF$","FRAGMENT$","ABSOLUTE_REF$","SCHEME$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","RELATIVE_REF$","PATH_NOSCHEME$","GENERIC_REF$","ABSOLUTE_URI$","HIER_PART$","URI_REFERENCE$","URI$","RELATIVE$","RELATIVE_PART$","AUTHORITY$","PCHAR$","PATH$","SEGMENT_NZ$","SEGMENT_NZ_NC$","SEGMENT$","IP_LITERAL$","REG_NAME$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","H16$","LS32$","DEC_OCTET_RELAXED$","DEC_OCTET$","UCSCHAR$$","GEN_DELIMS$$","SP$$","DQUOTE$$","CR$","obj","key","source","setInterval","call","prototype","o","Object","shift","sets"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/es5/uri.all.min.d.ts b/node_modules/uri-js/dist/es5/uri.all.min.d.ts new file mode 100644 index 0000000..da51e23 --- /dev/null +++ b/node_modules/uri-js/dist/es5/uri.all.min.d.ts @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/es5/uri.all.min.js b/node_modules/uri-js/dist/es5/uri.all.min.js new file mode 100644 index 0000000..1b791ef --- /dev/null +++ b/node_modules/uri-js/dist/es5/uri.all.min.js @@ -0,0 +1,3 @@ +/** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.URI=e.URI||{})}(this,function(e){"use strict";function r(){for(var e=arguments.length,r=Array(e),n=0;n1){r[0]=r[0].slice(0,-1);for(var t=r.length-1,o=1;o1&&(t=n[0]+"@",e=n[1]),e=e.replace(j,"."),t+f(e.split("."),r).join(".")}function p(e){for(var r=[],n=0,t=e.length;n=55296&&o<=56319&&n>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function d(e){for(var r="",n=0,t=e.length;n=194&&o<224){if(t-n>=6){var a=parseInt(e.substr(n+4,2),16);r+=String.fromCharCode((31&o)<<6|63&a)}else r+=e.substr(n,6);n+=6}else if(o>=224){if(t-n>=9){var i=parseInt(e.substr(n+4,2),16),u=parseInt(e.substr(n+7,2),16);r+=String.fromCharCode((15&o)<<12|(63&i)<<6|63&u)}else r+=e.substr(n,9);n+=9}else r+=e.substr(n,3),n+=3}return r}function l(e,r){function n(e){var n=d(e);return n.match(r.UNRESERVED)?n:e}return e.scheme&&(e.scheme=String(e.scheme).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_SCHEME,"")),e.userinfo!==undefined&&(e.userinfo=String(e.userinfo).replace(r.PCT_ENCODED,n).replace(r.NOT_USERINFO,h).replace(r.PCT_ENCODED,o)),e.host!==undefined&&(e.host=String(e.host).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_HOST,h).replace(r.PCT_ENCODED,o)),e.path!==undefined&&(e.path=String(e.path).replace(r.PCT_ENCODED,n).replace(e.scheme?r.NOT_PATH:r.NOT_PATH_NOSCHEME,h).replace(r.PCT_ENCODED,o)),e.query!==undefined&&(e.query=String(e.query).replace(r.PCT_ENCODED,n).replace(r.NOT_QUERY,h).replace(r.PCT_ENCODED,o)),e.fragment!==undefined&&(e.fragment=String(e.fragment).replace(r.PCT_ENCODED,n).replace(r.NOT_FRAGMENT,h).replace(r.PCT_ENCODED,o)),e}function g(e){return e.replace(/^0*(.*)/,"$1")||"0"}function v(e,r){var n=e.match(r.IPV4ADDRESS)||[],t=R(n,2),o=t[1];return o?o.split(".").map(g).join("."):e}function m(e,r){var n=e.match(r.IPV6ADDRESS)||[],t=R(n,3),o=t[1],a=t[2];if(o){for(var i=o.toLowerCase().split("::").reverse(),u=R(i,2),s=u[0],f=u[1],c=f?f.split(":").map(g):[],p=s.split(":").map(g),h=r.IPV4ADDRESS.test(p[p.length-1]),d=h?7:8,l=p.length-d,m=Array(d),E=0;E1){var A=m.slice(0,y.index),D=m.slice(y.index+y.length);S=A.join(":")+"::"+D.join(":")}else S=m.join(":");return a&&(S+="%"+a),S}return e}function E(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n={},t=!1!==r.iri?N:F;"suffix"===r.reference&&(e=(r.scheme?r.scheme+":":"")+"//"+e);var o=e.match(J);if(o){K?(n.scheme=o[1],n.userinfo=o[3],n.host=o[4],n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=o[7],n.fragment=o[8],isNaN(n.port)&&(n.port=o[5])):(n.scheme=o[1]||undefined,n.userinfo=-1!==e.indexOf("@")?o[3]:undefined,n.host=-1!==e.indexOf("//")?o[4]:undefined,n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=-1!==e.indexOf("?")?o[7]:undefined,n.fragment=-1!==e.indexOf("#")?o[8]:undefined,isNaN(n.port)&&(n.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:undefined)),n.host&&(n.host=m(v(n.host,t),t)),n.scheme!==undefined||n.userinfo!==undefined||n.host!==undefined||n.port!==undefined||n.path||n.query!==undefined?n.scheme===undefined?n.reference="relative":n.fragment===undefined?n.reference="absolute":n.reference="uri":n.reference="same-document",r.reference&&"suffix"!==r.reference&&r.reference!==n.reference&&(n.error=n.error||"URI is not a "+r.reference+" reference.");var a=B[(r.scheme||n.scheme||"").toLowerCase()];if(r.unicodeSupport||a&&a.unicodeSupport)l(n,t);else{if(n.host&&(r.domainHost||a&&a.domainHost))try{n.host=Y.toASCII(n.host.replace(t.PCT_ENCODED,d).toLowerCase())}catch(i){n.error=n.error||"Host's domain name can not be converted to ASCII via punycode: "+i}l(n,F)}a&&a.parse&&a.parse(n,r)}else n.error=n.error||"URI can not be parsed.";return n}function C(e,r){var n=!1!==r.iri?N:F,t=[];return e.userinfo!==undefined&&(t.push(e.userinfo),t.push("@")),e.host!==undefined&&t.push(m(v(String(e.host),n),n).replace(n.IPV6ADDRESS,function(e,r,n){return"["+r+(n?"%25"+n:"")+"]"})),"number"==typeof e.port&&(t.push(":"),t.push(e.port.toString(10))),t.length?t.join(""):undefined}function y(e){for(var r=[];e.length;)if(e.match(W))e=e.replace(W,"");else if(e.match(X))e=e.replace(X,"/");else if(e.match(ee))e=e.replace(ee,"/"),r.pop();else if("."===e||".."===e)e="";else{var n=e.match(re);if(!n)throw new Error("Unexpected dot segment condition");var t=n[0];e=e.slice(t.length),r.push(t)}return r.join("")}function S(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n=r.iri?N:F,t=[],o=B[(r.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize&&o.serialize(e,r),e.host)if(n.IPV6ADDRESS.test(e.host));else if(r.domainHost||o&&o.domainHost)try{e.host=r.iri?Y.toUnicode(e.host):Y.toASCII(e.host.replace(n.PCT_ENCODED,d).toLowerCase())}catch(u){e.error=e.error||"Host's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+u}l(e,n),"suffix"!==r.reference&&e.scheme&&(t.push(e.scheme),t.push(":"));var a=C(e,r);if(a!==undefined&&("suffix"!==r.reference&&t.push("//"),t.push(a),e.path&&"/"!==e.path.charAt(0)&&t.push("/")),e.path!==undefined){var i=e.path;r.absolutePath||o&&o.absolutePath||(i=y(i)),a===undefined&&(i=i.replace(/^\/\//,"/%2F")),t.push(i)}return e.query!==undefined&&(t.push("?"),t.push(e.query)),e.fragment!==undefined&&(t.push("#"),t.push(e.fragment)),t.join("")}function A(e,r){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{},t=arguments[3],o={};return t||(e=E(S(e,n),n),r=E(S(r,n),n)),n=n||{},!n.tolerant&&r.scheme?(o.scheme=r.scheme,o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.userinfo!==undefined||r.host!==undefined||r.port!==undefined?(o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.path?("/"===r.path.charAt(0)?o.path=y(r.path):(e.userinfo===undefined&&e.host===undefined&&e.port===undefined||e.path?e.path?o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path:o.path=r.path:o.path="/"+r.path,o.path=y(o.path)),o.query=r.query):(o.path=e.path,r.query!==undefined?o.query=r.query:o.query=e.query),o.userinfo=e.userinfo,o.host=e.host,o.port=e.port),o.scheme=e.scheme),o.fragment=r.fragment,o}function D(e,r,n){var t=i({scheme:"null"},n);return S(A(E(e,t),E(r,t),t,!0),t)}function w(e,r){return"string"==typeof e?e=S(E(e,r),r):"object"===t(e)&&(e=E(S(e,r),r)),e}function b(e,r,n){return"string"==typeof e?e=S(E(e,n),n):"object"===t(e)&&(e=S(e,n)),"string"==typeof r?r=S(E(r,n),n):"object"===t(r)&&(r=S(r,n)),e===r}function x(e,r){return e&&e.toString().replace(r&&r.iri?N.ESCAPE:F.ESCAPE,h)}function O(e,r){return e&&e.toString().replace(r&&r.iri?N.PCT_ENCODED:F.PCT_ENCODED,d)}function I(e){var r=d(e);return r.match(fe)?r:e}var F=u(!1),N=u(!0),R=function(){function e(e,r){var n=[],t=!0,o=!1,a=undefined;try{for(var i,u=e[Symbol.iterator]();!(t=(i=u.next()).done)&&(n.push(i.value),!r||n.length!==r);t=!0);}catch(s){o=!0,a=s}finally{try{!t&&u["return"]&&u["return"]()}finally{if(o)throw a}}return n}return function(r,n){if(Array.isArray(r))return r;if(Symbol.iterator in Object(r))return e(r,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),T=function(e){if(Array.isArray(e)){for(var r=0,n=Array(e.length);r= 0x80 (not a basic code point)","invalid-input":"Invalid input"},H=Math.floor,z=String.fromCharCode,L=function(e){return String.fromCodePoint.apply(String,T(e))},$=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:36},M=function(e,r){return e+22+75*(e<26)-((0!=r)<<5)},V=function(e,r,n){var t=0;for(e=n?H(e/700):e>>1,e+=H(e/r);e>455;t+=36)e=H(e/35);return H(t+36*e/(e+38))},k=function(e){var r=[],n=e.length,t=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(var u=0;u=128&&s("not-basic"),r.push(e.charCodeAt(u));for(var f=i>0?i+1:0;f=n&&s("invalid-input");var d=$(e.charCodeAt(f++));(d>=36||d>H((_-t)/p))&&s("overflow"),t+=d*p;var l=h<=a?1:h>=a+26?26:h-a;if(dH(_/g)&&s("overflow"),p*=g}var v=r.length+1;a=V(t-c,v,0==c),H(t/v)>_-o&&s("overflow"),o+=H(t/v),t%=v,r.splice(t++,0,o)}return String.fromCodePoint.apply(String,r)},Z=function(e){var r=[];e=p(e);var n=e.length,t=128,o=0,a=72,i=!0,u=!1,f=undefined;try{for(var c,h=e[Symbol.iterator]();!(i=(c=h.next()).done);i=!0){var d=c.value;d<128&&r.push(z(d))}}catch(j){u=!0,f=j}finally{try{!i&&h["return"]&&h["return"]()}finally{if(u)throw f}}var l=r.length,g=l;for(l&&r.push("-");g=t&&AH((_-o)/D)&&s("overflow"),o+=(v-t)*D,t=v;var w=!0,b=!1,x=undefined;try{for(var O,I=e[Symbol.iterator]();!(w=(O=I.next()).done);w=!0){var F=O.value;if(F_&&s("overflow"),F==t){for(var N=o,R=36;;R+=36){var T=R<=a?1:R>=a+26?26:R-a;if(NA-Z\\x5E-\\x7E]",'[\\"\\\\]'),fe=new RegExp(ae,"g"),ce=new RegExp(ue,"g"),pe=new RegExp(r("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',se),"g"),he=new RegExp(r("[^]",ae,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),de=he,le={scheme:"mailto",parse:function(e,r){var n=e,t=n.to=n.path?n.path.split(","):[];if(n.path=undefined,n.query){for(var o=!1,a={},i=n.query.split("&"),u=0,s=i.length;u):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n"]} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/index.d.ts b/node_modules/uri-js/dist/esnext/index.d.ts new file mode 100644 index 0000000..f6be760 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/index.d.ts @@ -0,0 +1 @@ +export * from "./uri"; diff --git a/node_modules/uri-js/dist/esnext/index.js b/node_modules/uri-js/dist/esnext/index.js new file mode 100644 index 0000000..73dc8db --- /dev/null +++ b/node_modules/uri-js/dist/esnext/index.js @@ -0,0 +1,13 @@ +import { SCHEMES } from "./uri"; +import http from "./schemes/http"; +SCHEMES[http.scheme] = http; +import https from "./schemes/https"; +SCHEMES[https.scheme] = https; +import mailto from "./schemes/mailto"; +SCHEMES[mailto.scheme] = mailto; +import urn from "./schemes/urn"; +SCHEMES[urn.scheme] = urn; +import uuid from "./schemes/urn-uuid"; +SCHEMES[uuid.scheme] = uuid; +export * from "./uri"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/index.js.map b/node_modules/uri-js/dist/esnext/index.js.map new file mode 100644 index 0000000..e9e4008 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAE9B,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAEhC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAE1B,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,cAAc,OAAO,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.d.ts b/node_modules/uri-js/dist/esnext/regexps-iri.d.ts new file mode 100644 index 0000000..c91cdac --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-iri.d.ts @@ -0,0 +1,3 @@ +import { URIRegExps } from "./uri"; +declare const _default: URIRegExps; +export default _default; diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.js b/node_modules/uri-js/dist/esnext/regexps-iri.js new file mode 100644 index 0000000..34e7de9 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-iri.js @@ -0,0 +1,3 @@ +import { buildExps } from "./regexps-uri"; +export default buildExps(true); +//# sourceMappingURL=regexps-iri.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.js.map b/node_modules/uri-js/dist/esnext/regexps-iri.js.map new file mode 100644 index 0000000..2269c58 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-iri.js.map @@ -0,0 +1 @@ +{"version":3,"file":"regexps-iri.js","sourceRoot":"","sources":["../../src/regexps-iri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAe,SAAS,CAAC,IAAI,CAAC,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.d.ts b/node_modules/uri-js/dist/esnext/regexps-uri.d.ts new file mode 100644 index 0000000..6096bda --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-uri.d.ts @@ -0,0 +1,4 @@ +import { URIRegExps } from "./uri"; +export declare function buildExps(isIRI: boolean): URIRegExps; +declare const _default: URIRegExps; +export default _default; diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.js b/node_modules/uri-js/dist/esnext/regexps-uri.js new file mode 100644 index 0000000..1cc659f --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-uri.js @@ -0,0 +1,42 @@ +import { merge, subexp } from "./util"; +export function buildExps(isIRI) { + const ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive + LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$ + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +export default buildExps(false); +//# sourceMappingURL=regexps-uri.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.js.map b/node_modules/uri-js/dist/esnext/regexps-uri.js.map new file mode 100644 index 0000000..cb028b8 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/regexps-uri.js.map @@ -0,0 +1 @@ +{"version":3,"file":"regexps-uri.js","sourceRoot":"","sources":["../../src/regexps-uri.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/http.d.ts b/node_modules/uri-js/dist/esnext/schemes/http.d.ts new file mode 100644 index 0000000..fe5b2f3 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/http.d.ts @@ -0,0 +1,3 @@ +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/http.js b/node_modules/uri-js/dist/esnext/schemes/http.js new file mode 100644 index 0000000..092e16d --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/http.js @@ -0,0 +1,27 @@ +const handler = { + scheme: "http", + domainHost: true, + parse: function (components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function (components, options) { + //normalize the default port + if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; +export default handler; +//# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/http.js.map b/node_modules/uri-js/dist/esnext/schemes/http.js.map new file mode 100644 index 0000000..83e2ad5 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/http.js.map @@ -0,0 +1 @@ +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/schemes/http.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,MAAM;IAEf,UAAU,EAAG,IAAI;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,qBAAqB;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,6BAA6B,CAAC;SACrE;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,SAAS,EAAG,UAAU,UAAwB,EAAE,OAAkB;QACjE,4BAA4B;QAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,EAAE,EAAE;YACnH,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;SAC5B;QAED,0BAA0B;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;SACtB;QAED,mDAAmD;QACnD,oEAAoE;QACpE,wBAAwB;QAExB,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/https.d.ts b/node_modules/uri-js/dist/esnext/schemes/https.d.ts new file mode 100644 index 0000000..fe5b2f3 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/https.d.ts @@ -0,0 +1,3 @@ +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/https.js b/node_modules/uri-js/dist/esnext/schemes/https.js new file mode 100644 index 0000000..ec4b6e7 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/https.js @@ -0,0 +1,9 @@ +import http from "./http"; +const handler = { + scheme: "https", + domainHost: http.domainHost, + parse: http.parse, + serialize: http.serialize +}; +export default handler; +//# sourceMappingURL=https.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/https.js.map b/node_modules/uri-js/dist/esnext/schemes/https.js.map new file mode 100644 index 0000000..385b8ef --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/https.js.map @@ -0,0 +1 @@ +{"version":3,"file":"https.js","sourceRoot":"","sources":["../../../src/schemes/https.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,OAAO;IAChB,UAAU,EAAG,IAAI,CAAC,UAAU;IAC5B,KAAK,EAAG,IAAI,CAAC,KAAK;IAClB,SAAS,EAAG,IAAI,CAAC,SAAS;CAC1B,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts b/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts new file mode 100644 index 0000000..e2aefc2 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts @@ -0,0 +1,12 @@ +import { URISchemeHandler, URIComponents } from "../uri"; +export interface MailtoHeaders { + [hfname: string]: string; +} +export interface MailtoComponents extends URIComponents { + to: Array; + headers?: MailtoHeaders; + subject?: string; + body?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.js b/node_modules/uri-js/dist/esnext/schemes/mailto.js new file mode 100644 index 0000000..2553713 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/mailto.js @@ -0,0 +1,148 @@ +import { pctEncChar, pctDecChars, unescapeComponent } from "../uri"; +import punycode from "punycode"; +import { merge, subexp, toUpperCase, toArray } from "../util"; +const O = {}; +const isIRI = true; +//RFC 3986 +const UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +const HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +const PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +const ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +const QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +const VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +const DOT_ATOM_TEXT$ = subexp(ATEXT$$ + "+" + subexp("\\." + ATEXT$$ + "+") + "*"); +const QUOTED_PAIR$ = subexp("\\\\" + VCHAR$$); +const QCONTENT$ = subexp(QTEXT$$ + "|" + QUOTED_PAIR$); +const QUOTED_STRING$ = subexp('\\"' + QCONTENT$ + "*" + '\\"'); +//RFC 6068 +const DTEXT_NO_OBS$$ = "[\\x21-\\x5A\\x5E-\\x7E]"; //%d33-90 / %d94-126 +const SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +const QCHAR$ = subexp(UNRESERVED$$ + "|" + PCT_ENCODED$ + "|" + SOME_DELIMS$$); +const DOMAIN$ = subexp(DOT_ATOM_TEXT$ + "|" + "\\[" + DTEXT_NO_OBS$$ + "*" + "\\]"); +const LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + "|" + QUOTED_STRING$); +const ADDR_SPEC$ = subexp(LOCAL_PART$ + "\\@" + DOMAIN$); +const TO$ = subexp(ADDR_SPEC$ + subexp("\\," + ADDR_SPEC$) + "*"); +const HFNAME$ = subexp(QCHAR$ + "*"); +const HFVALUE$ = HFNAME$; +const HFIELD$ = subexp(HFNAME$ + "\\=" + HFVALUE$); +const HFIELDS2$ = subexp(HFIELD$ + subexp("\\&" + HFIELD$) + "*"); +const HFIELDS$ = subexp("\\?" + HFIELDS2$); +const MAILTO_URI = new RegExp("^mailto\\:" + TO$ + "?" + HFIELDS$ + "?$"); +const UNRESERVED = new RegExp(UNRESERVED$$, "g"); +const PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +const NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +const NOT_DOMAIN = new RegExp(merge("[^]", ATEXT$$, "[\\.]", "[\\[]", DTEXT_NO_OBS$$, "[\\]]"), "g"); +const NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +const NOT_HFVALUE = NOT_HFNAME; +const TO = new RegExp("^" + TO$ + "$"); +const HFIELDS = new RegExp("^" + HFIELDS2$ + "$"); +function decodeUnreserved(str) { + const decStr = pctDecChars(str); + return (!decStr.match(UNRESERVED) ? str : decStr); +} +const handler = { + scheme: "mailto", + parse: function (components, options) { + const mailtoComponents = components; + const to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(",") : []); + mailtoComponents.path = undefined; + if (mailtoComponents.query) { + let unknownHeaders = false; + const headers = {}; + const hfields = mailtoComponents.query.split("&"); + for (let x = 0, xl = hfields.length; x < xl; ++x) { + const hfield = hfields[x].split("="); + switch (hfield[0]) { + case "to": + const toAddrs = hfield[1].split(","); + for (let x = 0, xl = toAddrs.length; x < xl; ++x) { + to.push(toAddrs[x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + if (unknownHeaders) + mailtoComponents.headers = headers; + } + mailtoComponents.query = undefined; + for (let x = 0, xl = to.length; x < xl; ++x) { + const addr = to[x].split("@"); + addr[0] = unescapeComponent(addr[0]); + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } + catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } + else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + to[x] = addr.join("@"); + } + return mailtoComponents; + }, + serialize: function (mailtoComponents, options) { + const components = mailtoComponents; + const to = toArray(mailtoComponents.to); + if (to) { + for (let x = 0, xl = to.length; x < xl; ++x) { + const toAddr = String(to[x]); + const atIdx = toAddr.lastIndexOf("@"); + const localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + let domain = toAddr.slice(atIdx + 1); + //convert IDN via punycode + try { + domain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain)); + } + catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + to[x] = localPart + "@" + domain; + } + components.path = to.join(","); + } + const headers = mailtoComponents.headers = mailtoComponents.headers || {}; + if (mailtoComponents.subject) + headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) + headers["body"] = mailtoComponents.body; + const fields = []; + for (const name in headers) { + if (headers[name] !== O[name]) { + fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + + "=" + + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + return components; + } +}; +export default handler; +//# sourceMappingURL=mailto.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.js.map b/node_modules/uri-js/dist/esnext/schemes/mailto.js.map new file mode 100644 index 0000000..82dba9a --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/mailto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mailto.js","sourceRoot":"","sources":["../../../src/schemes/mailto.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts new file mode 100644 index 0000000..e75f2e7 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts @@ -0,0 +1,7 @@ +import { URISchemeHandler, URIOptions } from "../uri"; +import { URNComponents } from "./urn"; +export interface UUIDComponents extends URNComponents { + uuid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js new file mode 100644 index 0000000..d1fce49 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js @@ -0,0 +1,23 @@ +const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; +//RFC 4122 +const handler = { + scheme: "urn:uuid", + parse: function (urnComponents, options) { + const uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function (uuidComponents, options) { + const urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + }, +}; +export default handler; +//# sourceMappingURL=urn-uuid.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map new file mode 100644 index 0000000..3b7a8b3 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"urn-uuid.js","sourceRoot":"","sources":["../../../src/schemes/urn-uuid.ts"],"names":[],"mappings":"AAQA,MAAM,IAAI,GAAG,0DAA0D,CAAC;AACxE,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,UAAU;AACV,MAAM,OAAO,GAA+D;IAC3E,MAAM,EAAG,UAAU;IAEnB,KAAK,EAAG,UAAU,aAA2B,EAAE,OAAkB;QAChE,MAAM,cAAc,GAAG,aAA+B,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC;QACzC,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YACpF,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,oBAAoB,CAAC;SACpE;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,SAAS,EAAG,UAAU,cAA6B,EAAE,OAAkB;QACtE,MAAM,aAAa,GAAG,cAA+B,CAAC;QACtD,gBAAgB;QAChB,aAAa,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn.d.ts new file mode 100644 index 0000000..7e0c2fb --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn.d.ts @@ -0,0 +1,10 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +export interface URNComponents extends URIComponents { + nid?: string; + nss?: string; +} +export interface URNOptions extends URIOptions { + nid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.js b/node_modules/uri-js/dist/esnext/schemes/urn.js new file mode 100644 index 0000000..5d3f10a --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn.js @@ -0,0 +1,49 @@ +import { SCHEMES } from "../uri"; +const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; +const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; +const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; +const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; +const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); +const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); +const URN_PARSE = /^([^\:]+)\:(.*)/; +const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; +//RFC 2141 +const handler = { + scheme: "urn", + parse: function (components, options) { + const matches = components.path && components.path.match(URN_PARSE); + let urnComponents = components; + if (matches) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = matches[1].toLowerCase(); + const nss = matches[2]; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } + else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function (urnComponents, options) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = urnComponents.nid; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + const uriComponents = urnComponents; + const nss = urnComponents.nss; + uriComponents.path = `${nid || options.nid}:${nss}`; + return uriComponents; + }, +}; +export default handler; +//# sourceMappingURL=urn.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.js.map b/node_modules/uri-js/dist/esnext/schemes/urn.js.map new file mode 100644 index 0000000..ea43b0b --- /dev/null +++ b/node_modules/uri-js/dist/esnext/schemes/urn.js.map @@ -0,0 +1 @@ +{"version":3,"file":"urn.js","sourceRoot":"","sources":["../../../src/schemes/urn.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,OAAO,EAAE,MAAM,QAAQ,CAAC;AAW7C,MAAM,IAAI,GAAG,qCAAqC,CAAC;AACnD,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,OAAO,GAAG,mEAAmE,CAAC;AACpF,MAAM,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC;AAC7D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAEvE,UAAU;AACV,MAAM,OAAO,GAA8C;IAC1D,MAAM,EAAG,KAAK;IAEd,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,aAAa,GAAG,UAA2B,CAAC;QAEhD,IAAI,OAAO,EAAE;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;YAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAEzC,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAE/B,IAAI,aAAa,EAAE;gBAClB,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;aAC7E;SACD;aAAM;YACN,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,wBAAwB,CAAC;SACtE;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,EAAG,UAAU,aAA2B,EAAE,OAAkB;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;QAC/D,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,aAAa,EAAE;YAClB,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;SACjF;QAED,MAAM,aAAa,GAAG,aAA8B,CAAC;QACrD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,aAAa,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAEpD,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/uri.d.ts b/node_modules/uri-js/dist/esnext/uri.d.ts new file mode 100644 index 0000000..da51e23 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/uri.d.ts @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/esnext/uri.js b/node_modules/uri-js/dist/esnext/uri.js new file mode 100644 index 0000000..2fb6d71 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/uri.js @@ -0,0 +1,480 @@ +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ +import URI_PROTOCOL from "./regexps-uri"; +import IRI_PROTOCOL from "./regexps-iri"; +import punycode from "punycode"; +import { toUpperCase, typeOf, assign } from "./util"; +export const SCHEMES = {}; +export function pctEncChar(chr) { + const c = chr.charCodeAt(0); + let e; + if (c < 16) + e = "%0" + c.toString(16).toUpperCase(); + else if (c < 128) + e = "%" + c.toString(16).toUpperCase(); + else if (c < 2048) + e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + else + e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + return e; +} +export function pctDecChars(str) { + let newStr = ""; + let i = 0; + const il = str.length; + while (i < il) { + const c = parseInt(str.substr(i + 1, 2), 16); + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } + else if (c >= 194 && c < 224) { + if ((il - i) >= 6) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + } + else { + newStr += str.substr(i, 6); + } + i += 6; + } + else if (c >= 224) { + if ((il - i) >= 9) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + const c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + } + else { + newStr += str.substr(i, 9); + } + i += 9; + } + else { + newStr += str.substr(i, 3); + i += 3; + } + } + return newStr; +} +function _normalizeComponentEncoding(components, protocol) { + function decodeUnreserved(str) { + const decStr = pctDecChars(str); + return (!decStr.match(protocol.UNRESERVED) ? str : decStr); + } + if (components.scheme) + components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) + components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) + components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) + components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) + components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) + components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + return components; +} +; +function _stripLeadingZeros(str) { + return str.replace(/^0*(.*)/, "$1") || "0"; +} +function _normalizeIPv4(host, protocol) { + const matches = host.match(protocol.IPV4ADDRESS) || []; + const [, address] = matches; + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } + else { + return host; + } +} +function _normalizeIPv6(host, protocol) { + const matches = host.match(protocol.IPV6ADDRESS) || []; + const [, address, zone] = matches; + if (address) { + const [last, first] = address.toLowerCase().split('::').reverse(); + const firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + const lastFields = last.split(":").map(_stripLeadingZeros); + const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + const fieldCount = isLastFieldIPv4Address ? 7 : 8; + const lastFieldsStart = lastFields.length - fieldCount; + const fields = Array(fieldCount); + for (let x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + const allZeroFields = fields.reduce((acc, field, index) => { + if (!field || field === "0") { + const lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } + else { + acc.push({ index, length: 1 }); + } + } + return acc; + }, []); + const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0]; + let newHost; + if (longestZeroFields && longestZeroFields.length > 1) { + const newFirst = fields.slice(0, longestZeroFields.index); + const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } + else { + newHost = fields.join(":"); + } + if (zone) { + newHost += "%" + zone; + } + return newHost; + } + else { + return host; + } +} +const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +const NO_MATCH_IS_UNDEFINED = ("").match(/(){0}/)[1] === undefined; +export function parse(uriString, options = {}) { + const components = {}; + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + if (options.reference === "suffix") + uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + const matches = uriString.match(URI_PARSE); + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } + else { //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined); + components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined); + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined); + components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined); + //fix port number + if (isNaN(components.port)) { + components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined); + } + } + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } + else if (components.scheme === undefined) { + components.reference = "relative"; + } + else if (components.fragment === undefined) { + components.reference = "absolute"; + } + else { + components.reference = "uri"; + } + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } + catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } + else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } + else { + components.error = components.error || "URI can not be parsed."; + } + return components; +} +; +function _recomposeAuthority(components, options) { + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens = []; + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]")); + } + if (typeof components.port === "number") { + uriTokens.push(":"); + uriTokens.push(components.port.toString(10)); + } + return uriTokens.length ? uriTokens.join("") : undefined; +} +; +const RDS1 = /^\.\.?\//; +const RDS2 = /^\/\.(\/|$)/; +const RDS3 = /^\/\.\.(\/|$)/; +const RDS4 = /^\.\.?$/; +const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; +export function removeDotSegments(input) { + const output = []; + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } + else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } + else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } + else if (input === "." || input === "..") { + input = ""; + } + else { + const im = input.match(RDS5); + if (im) { + const s = im[0]; + input = input.slice(s.length); + output.push(s); + } + else { + throw new Error("Unexpected dot segment condition"); + } + } + } + return output.join(""); +} +; +export function serialize(components, options = {}) { + const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens = []; + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) + schemeHandler.serialize(components, options); + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) { + //TODO: normalize IPv6 address as per RFC 5952 + } + //if host component is a domain name + else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) { + //convert IDN via punycode + try { + components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host)); + } + catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + //normalize encoding + _normalizeComponentEncoding(components, protocol); + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + const authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + if (components.path !== undefined) { + let s = components.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + uriTokens.push(s); + } + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + return uriTokens.join(""); //merge tokens into a string +} +; +export function resolveComponents(base, relative, options = {}, skipNormalization) { + const target = {}; + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } + else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } + else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } + else { + target.query = base.query; + } + } + else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } + else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } + else if (!base.path) { + target.path = relative.path; + } + else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative.fragment; + return target; +} +; +export function resolve(baseURI, relativeURI, options) { + const schemelessOptions = assign({ scheme: 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +} +; +export function normalize(uri, options) { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } + else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + return uri; +} +; +export function equal(uriA, uriB, options) { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } + else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } + else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + return uriA === uriB; +} +; +export function escapeComponent(str, options) { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar); +} +; +export function unescapeComponent(str, options) { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars); +} +; +//# sourceMappingURL=uri.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/uri.js.map b/node_modules/uri-js/dist/esnext/uri.js.map new file mode 100644 index 0000000..e1d831c --- /dev/null +++ b/node_modules/uri-js/dist/esnext/uri.js.map @@ -0,0 +1 @@ +{"version":3,"file":"uri.js","sourceRoot":"","sources":["../../src/uri.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/util.d.ts b/node_modules/uri-js/dist/esnext/util.d.ts new file mode 100644 index 0000000..7c12857 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/util.d.ts @@ -0,0 +1,6 @@ +export declare function merge(...sets: Array): string; +export declare function subexp(str: string): string; +export declare function typeOf(o: any): string; +export declare function toUpperCase(str: string): string; +export declare function toArray(obj: any): Array; +export declare function assign(target: object, source: any): any; diff --git a/node_modules/uri-js/dist/esnext/util.js b/node_modules/uri-js/dist/esnext/util.js new file mode 100644 index 0000000..072711e --- /dev/null +++ b/node_modules/uri-js/dist/esnext/util.js @@ -0,0 +1,36 @@ +export function merge(...sets) { + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + const xl = sets.length - 1; + for (let x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } + else { + return sets[0]; + } +} +export function subexp(str) { + return "(?:" + str + ")"; +} +export function typeOf(o) { + return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); +} +export function toUpperCase(str) { + return str.toUpperCase(); +} +export function toArray(obj) { + return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; +} +export function assign(target, source) { + const obj = target; + if (source) { + for (const key in source) { + obj[key] = source[key]; + } + } + return obj; +} +//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/util.js.map b/node_modules/uri-js/dist/esnext/util.js.map new file mode 100644 index 0000000..05d9df0 --- /dev/null +++ b/node_modules/uri-js/dist/esnext/util.js.map @@ -0,0 +1 @@ +{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,IAAkB;IAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrB;SAAM;QACN,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KACf;AACF,CAAC;AAED,MAAM,iBAAiB,GAAU;IAChC,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,iBAAiB,CAAK;IAC3B,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpJ,CAAC;AAED,MAAM,sBAAsB,GAAU;IACrC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,kBAAkB,GAAO;IAC9B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvM,CAAC;AAGD,MAAM,iBAAiB,MAAc,EAAE,MAAW;IACjD,MAAM,GAAG,GAAG,MAAa,CAAC;IAC1B,IAAI,MAAM,EAAE;QACX,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACzB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACvB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"} \ No newline at end of file diff --git a/node_modules/uri-js/package.json b/node_modules/uri-js/package.json new file mode 100644 index 0000000..615a515 --- /dev/null +++ b/node_modules/uri-js/package.json @@ -0,0 +1,96 @@ +{ + "_args": [ + [ + "uri-js@4.2.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "uri-js@4.2.2", + "_id": "uri-js@4.2.2", + "_inBundle": false, + "_integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "_location": "/uri-js", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "uri-js@4.2.2", + "name": "uri-js", + "escapedName": "uri-js", + "rawSpec": "4.2.2", + "saveSpec": null, + "fetchSpec": "4.2.2" + }, + "_requiredBy": [ + "/ajv" + ], + "_resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "_spec": "4.2.2", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Gary Court", + "email": "gary.court@gmail.com" + }, + "bugs": { + "url": "https://github.com/garycourt/uri-js/issues" + }, + "dependencies": { + "punycode": "^2.1.0" + }, + "description": "An RFC 3986/3987 compliant, scheme extendable URI/IRI parsing/validating/resolving library for JavaScript.", + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-latest": "^6.24.1", + "mocha": "^3.2.0", + "mocha-qunit-ui": "^0.1.3", + "rollup": "^0.41.6", + "rollup-plugin-babel": "^2.7.1", + "rollup-plugin-node-resolve": "^2.0.0", + "sorcery": "^0.10.0", + "typescript": "^2.8.1", + "uglify-js": "^2.8.14" + }, + "directories": { + "test": "tests" + }, + "homepage": "https://github.com/garycourt/uri-js", + "keywords": [ + "URI", + "IRI", + "IDN", + "URN", + "UUID", + "HTTP", + "HTTPS", + "MAILTO", + "RFC3986", + "RFC3987", + "RFC5891", + "RFC2616", + "RFC2818", + "RFC2141", + "RFC4122", + "RFC4291", + "RFC5952", + "RFC6068", + "RFC6874" + ], + "license": "BSD-2-Clause", + "main": "dist/es5/uri.all.js", + "name": "uri-js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/garycourt/uri-js.git" + }, + "scripts": { + "build": "npm run build:esnext && npm run build:es5 && npm run build:es5:min", + "build:es5": "rollup -c && cp dist/esnext/uri.d.ts dist/es5/uri.all.d.ts && npm run build:es5:fix-sourcemap", + "build:es5:fix-sourcemap": "sorcery -i dist/es5/uri.all.js", + "build:es5:min": "uglifyjs dist/es5/uri.all.js --support-ie8 --output dist/es5/uri.all.min.js --in-source-map dist/es5/uri.all.js.map --source-map uri.all.min.js.map --comments --compress --mangle --pure-funcs merge subexp && mv uri.all.min.js.map dist/es5/ && cp dist/es5/uri.all.d.ts dist/es5/uri.all.min.d.ts", + "build:esnext": "tsc", + "test": "mocha -u mocha-qunit-ui dist/es5/uri.all.js tests/tests.js" + }, + "types": "dist/es5/uri.all.d.ts", + "version": "4.2.2" +} diff --git a/node_modules/uri-js/rollup.config.js b/node_modules/uri-js/rollup.config.js new file mode 100644 index 0000000..5bb8b05 --- /dev/null +++ b/node_modules/uri-js/rollup.config.js @@ -0,0 +1,32 @@ +import resolve from 'rollup-plugin-node-resolve'; +import babel from 'rollup-plugin-babel'; +const packageJson = require('./package.json'); + +export default { + entry : "dist/esnext/index.js", + format : "umd", + moduleName : "URI", + plugins: [ + resolve({ + module: true, + jsnext: true, + preferBuiltins: false + }), + + babel({ + "presets": [ + ["latest", { + "es2015": { + "modules": false + } + }] + ], + "plugins": ["external-helpers"], + "externalHelpers": false + } +) + ], + dest : "dist/es5/uri.all.js", + sourceMap: true, + banner: "/** @license URI.js v" + packageJson.version + " (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */" +} diff --git a/node_modules/uri-js/src/index.ts b/node_modules/uri-js/src/index.ts new file mode 100644 index 0000000..6532a1b --- /dev/null +++ b/node_modules/uri-js/src/index.ts @@ -0,0 +1,18 @@ +import { SCHEMES } from "./uri"; + +import http from "./schemes/http"; +SCHEMES[http.scheme] = http; + +import https from "./schemes/https"; +SCHEMES[https.scheme] = https; + +import mailto from "./schemes/mailto"; +SCHEMES[mailto.scheme] = mailto; + +import urn from "./schemes/urn"; +SCHEMES[urn.scheme] = urn; + +import uuid from "./schemes/urn-uuid"; +SCHEMES[uuid.scheme] = uuid; + +export * from "./uri"; diff --git a/node_modules/uri-js/src/punycode.d.ts b/node_modules/uri-js/src/punycode.d.ts new file mode 100644 index 0000000..4ecbd34 --- /dev/null +++ b/node_modules/uri-js/src/punycode.d.ts @@ -0,0 +1,24 @@ +declare module 'punycode' { + function ucs2decode(string:string):Array; + function ucs2encode(array:Array):string; + function decode(string:string):string; + function encode(string:string):string; + function toASCII(string:string):string; + function toUnicode(string:string):string; + + interface Punycode { + 'version': '2.2.0'; + 'ucs2': { + 'decode': typeof ucs2decode; + 'encode': typeof ucs2encode; + }, + 'decode': typeof decode; + 'encode': typeof encode; + 'toASCII': typeof toASCII; + 'toUnicode': typeof toUnicode; + } + + const punycode:Punycode; + + export default punycode; +} diff --git a/node_modules/uri-js/src/regexps-iri.ts b/node_modules/uri-js/src/regexps-iri.ts new file mode 100644 index 0000000..8bd605b --- /dev/null +++ b/node_modules/uri-js/src/regexps-iri.ts @@ -0,0 +1,4 @@ +import { URIRegExps } from "./uri"; +import { buildExps } from "./regexps-uri"; + +export default buildExps(true); diff --git a/node_modules/uri-js/src/regexps-uri.ts b/node_modules/uri-js/src/regexps-uri.ts new file mode 100644 index 0000000..8d6b547 --- /dev/null +++ b/node_modules/uri-js/src/regexps-uri.ts @@ -0,0 +1,89 @@ +import { URIRegExps } from "./uri"; +import { merge, subexp } from "./util"; + +export function buildExps(isIRI:boolean):URIRegExps { + const + ALPHA$$ = "[A-Za-z]", + CR$ = "[\\x0D]", + DIGIT$$ = "[0-9]", + DQUOTE$$ = "[\\x22]", + HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive + LF$$ = "[\\x0A]", + SP$$ = "[\\x20]", + PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", + SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", + RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), + UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), + SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), + USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), + DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), + DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), + H16$ = subexp(HEXDIG$$ + "{1,4}"), + LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), + IPV6ADDRESS1$ = subexp( subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp( "\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp( H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$ ), //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:" ), //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), + ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), + IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), + HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), + PORT$ = subexp(DIGIT$$ + "*"), + AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), + PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), + SEGMENT$ = subexp(PCHAR$ + "*"), + SEGMENT_NZ$ = subexp(PCHAR$ + "+"), + SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), + PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), + PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", + PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), + FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), + HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), + RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), + ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), + + GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", + SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$" + ; + + return { + NOT_SCHEME : new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO : new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST : new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH : new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME : new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY : new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT : new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE : new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED : new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS : new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED : new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS : new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS : new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} + +export default buildExps(false); diff --git a/node_modules/uri-js/src/schemes/http.ts b/node_modules/uri-js/src/schemes/http.ts new file mode 100644 index 0000000..3e53145 --- /dev/null +++ b/node_modules/uri-js/src/schemes/http.ts @@ -0,0 +1,36 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; + +const handler:URISchemeHandler = { + scheme : "http", + + domainHost : true, + + parse : function (components:URIComponents, options:URIOptions):URIComponents { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + + return components; + }, + + serialize : function (components:URIComponents, options:URIOptions):URIComponents { + //normalize the default port + if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { + components.port = undefined; + } + + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + + return components; + } +}; + +export default handler; \ No newline at end of file diff --git a/node_modules/uri-js/src/schemes/https.ts b/node_modules/uri-js/src/schemes/https.ts new file mode 100644 index 0000000..a19a494 --- /dev/null +++ b/node_modules/uri-js/src/schemes/https.ts @@ -0,0 +1,11 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +import http from "./http"; + +const handler:URISchemeHandler = { + scheme : "https", + domainHost : http.domainHost, + parse : http.parse, + serialize : http.serialize +} + +export default handler; \ No newline at end of file diff --git a/node_modules/uri-js/src/schemes/mailto.ts b/node_modules/uri-js/src/schemes/mailto.ts new file mode 100644 index 0000000..3faf320 --- /dev/null +++ b/node_modules/uri-js/src/schemes/mailto.ts @@ -0,0 +1,182 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +import { pctEncChar, pctDecChars, unescapeComponent } from "../uri"; +import punycode from "punycode"; +import { merge, subexp, toUpperCase, toArray } from "../util"; + +export interface MailtoHeaders { + [hfname:string]:string +} + +export interface MailtoComponents extends URIComponents { + to:Array, + headers?:MailtoHeaders, + subject?:string, + body?:string +} + +const O:MailtoHeaders = {}; +const isIRI = true; + +//RFC 3986 +const UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +const HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +const PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded + +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +const ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +const QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +const VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +const DOT_ATOM_TEXT$ = subexp(ATEXT$$ + "+" + subexp("\\." + ATEXT$$ + "+") + "*"); +const QUOTED_PAIR$ = subexp("\\\\" + VCHAR$$); +const QCONTENT$ = subexp(QTEXT$$ + "|" + QUOTED_PAIR$); +const QUOTED_STRING$ = subexp('\\"' + QCONTENT$ + "*" + '\\"'); + +//RFC 6068 +const DTEXT_NO_OBS$$ = "[\\x21-\\x5A\\x5E-\\x7E]"; //%d33-90 / %d94-126 +const SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +const QCHAR$ = subexp(UNRESERVED$$ + "|" + PCT_ENCODED$ + "|" + SOME_DELIMS$$); +const DOMAIN$ = subexp(DOT_ATOM_TEXT$ + "|" + "\\[" + DTEXT_NO_OBS$$ + "*" + "\\]"); +const LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + "|" + QUOTED_STRING$); +const ADDR_SPEC$ = subexp(LOCAL_PART$ + "\\@" + DOMAIN$); +const TO$ = subexp(ADDR_SPEC$ + subexp("\\," + ADDR_SPEC$) + "*"); +const HFNAME$ = subexp(QCHAR$ + "*"); +const HFVALUE$ = HFNAME$; +const HFIELD$ = subexp(HFNAME$ + "\\=" + HFVALUE$); +const HFIELDS2$ = subexp(HFIELD$ + subexp("\\&" + HFIELD$) + "*"); +const HFIELDS$ = subexp("\\?" + HFIELDS2$); +const MAILTO_URI = new RegExp("^mailto\\:" + TO$ + "?" + HFIELDS$ + "?$"); + +const UNRESERVED = new RegExp(UNRESERVED$$, "g"); +const PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +const NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +const NOT_DOMAIN = new RegExp(merge("[^]", ATEXT$$, "[\\.]", "[\\[]", DTEXT_NO_OBS$$, "[\\]]"), "g"); +const NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +const NOT_HFVALUE = NOT_HFNAME; +const TO = new RegExp("^" + TO$ + "$"); +const HFIELDS = new RegExp("^" + HFIELDS2$ + "$"); + +function decodeUnreserved(str:string):string { + const decStr = pctDecChars(str); + return (!decStr.match(UNRESERVED) ? str : decStr); +} + +const handler:URISchemeHandler = { + scheme : "mailto", + + parse : function (components:URIComponents, options:URIOptions):MailtoComponents { + const mailtoComponents = components as MailtoComponents; + const to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(",") : []); + mailtoComponents.path = undefined; + + if (mailtoComponents.query) { + let unknownHeaders = false + const headers:MailtoHeaders = {}; + const hfields = mailtoComponents.query.split("&"); + + for (let x = 0, xl = hfields.length; x < xl; ++x) { + const hfield = hfields[x].split("="); + + switch (hfield[0]) { + case "to": + const toAddrs = hfield[1].split(","); + for (let x = 0, xl = toAddrs.length; x < xl; ++x) { + to.push(toAddrs[x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + + if (unknownHeaders) mailtoComponents.headers = headers; + } + + mailtoComponents.query = undefined; + + for (let x = 0, xl = to.length; x < xl; ++x) { + const addr = to[x].split("@"); + + addr[0] = unescapeComponent(addr[0]); + + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + + to[x] = addr.join("@"); + } + + return mailtoComponents; + }, + + serialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents { + const components = mailtoComponents as URIComponents; + const to = toArray(mailtoComponents.to); + if (to) { + for (let x = 0, xl = to.length; x < xl; ++x) { + const toAddr = String(to[x]); + const atIdx = toAddr.lastIndexOf("@"); + const localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + let domain = toAddr.slice(atIdx + 1); + + //convert IDN via punycode + try { + domain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain)); + } catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + + to[x] = localPart + "@" + domain; + } + + components.path = to.join(","); + } + + const headers = mailtoComponents.headers = mailtoComponents.headers || {}; + + if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) headers["body"] = mailtoComponents.body; + + const fields = []; + for (const name in headers) { + if (headers[name] !== O[name]) { + fields.push( + name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + + "=" + + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar) + ); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + + return components; + } +} + +export default handler; \ No newline at end of file diff --git a/node_modules/uri-js/src/schemes/urn-uuid.ts b/node_modules/uri-js/src/schemes/urn-uuid.ts new file mode 100644 index 0000000..5665329 --- /dev/null +++ b/node_modules/uri-js/src/schemes/urn-uuid.ts @@ -0,0 +1,36 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +import { URNComponents } from "./urn"; +import { SCHEMES } from "../uri"; + +export interface UUIDComponents extends URNComponents { + uuid?: string; +} + +const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; + +//RFC 4122 +const handler:URISchemeHandler = { + scheme : "urn:uuid", + + parse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents { + const uuidComponents = urnComponents as UUIDComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + + return uuidComponents; + }, + + serialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents { + const urnComponents = uuidComponents as URNComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + }, +}; + +export default handler; \ No newline at end of file diff --git a/node_modules/uri-js/src/schemes/urn.ts b/node_modules/uri-js/src/schemes/urn.ts new file mode 100644 index 0000000..590f9cc --- /dev/null +++ b/node_modules/uri-js/src/schemes/urn.ts @@ -0,0 +1,69 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +import { pctEncChar, SCHEMES } from "../uri"; + +export interface URNComponents extends URIComponents { + nid?:string; + nss?:string; +} + +export interface URNOptions extends URIOptions { + nid?:string; +} + +const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; +const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; +const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; +const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; +const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); +const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); +const URN_PARSE = /^([^\:]+)\:(.*)/; +const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; + +//RFC 2141 +const handler:URISchemeHandler = { + scheme : "urn", + + parse : function (components:URIComponents, options:URNOptions):URNComponents { + const matches = components.path && components.path.match(URN_PARSE); + let urnComponents = components as URNComponents; + + if (matches) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = matches[1].toLowerCase(); + const nss = matches[2]; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options) as URNComponents; + } + } else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + + return urnComponents; + }, + + serialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = urnComponents.nid; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents; + } + + const uriComponents = urnComponents as URIComponents; + const nss = urnComponents.nss; + uriComponents.path = `${nid || options.nid}:${nss}`; + + return uriComponents; + }, +}; + +export default handler; \ No newline at end of file diff --git a/node_modules/uri-js/src/uri.ts b/node_modules/uri-js/src/uri.ts new file mode 100644 index 0000000..c282c37 --- /dev/null +++ b/node_modules/uri-js/src/uri.ts @@ -0,0 +1,556 @@ +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ + +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ + +import URI_PROTOCOL from "./regexps-uri"; +import IRI_PROTOCOL from "./regexps-iri"; +import punycode from "punycode"; +import { toUpperCase, typeOf, assign } from "./util"; + +export interface URIComponents { + scheme?:string; + userinfo?:string; + host?:string; + port?:number|string; + path?:string; + query?:string; + fragment?:string; + reference?:string; + error?:string; +} + +export interface URIOptions { + scheme?:string; + reference?:string; + tolerant?:boolean; + absolutePath?:boolean; + iri?:boolean; + unicodeSupport?:boolean; + domainHost?:boolean; +} + +export interface URISchemeHandler { + scheme:string; + parse(components:ParentComponents, options:Options):Components; + serialize(components:Components, options:Options):ParentComponents; + unicodeSupport?:boolean; + domainHost?:boolean; + absolutePath?:boolean; +} + +export interface URIRegExps { + NOT_SCHEME : RegExp, + NOT_USERINFO : RegExp, + NOT_HOST : RegExp, + NOT_PATH : RegExp, + NOT_PATH_NOSCHEME : RegExp, + NOT_QUERY : RegExp, + NOT_FRAGMENT : RegExp, + ESCAPE : RegExp, + UNRESERVED : RegExp, + OTHER_CHARS : RegExp, + PCT_ENCODED : RegExp, + IPV4ADDRESS : RegExp, + IPV6ADDRESS : RegExp, +} + +export const SCHEMES:{[scheme:string]:URISchemeHandler} = {}; + +export function pctEncChar(chr:string):string { + const c = chr.charCodeAt(0); + let e:string; + + if (c < 16) e = "%0" + c.toString(16).toUpperCase(); + else if (c < 128) e = "%" + c.toString(16).toUpperCase(); + else if (c < 2048) e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + else e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + + return e; +} + +export function pctDecChars(str:string):string { + let newStr = ""; + let i = 0; + const il = str.length; + + while (i < il) { + const c = parseInt(str.substr(i + 1, 2), 16); + + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } + else if (c >= 194 && c < 224) { + if ((il - i) >= 6) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + } else { + newStr += str.substr(i, 6); + } + i += 6; + } + else if (c >= 224) { + if ((il - i) >= 9) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + const c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + } else { + newStr += str.substr(i, 9); + } + i += 9; + } + else { + newStr += str.substr(i, 3); + i += 3; + } + } + + return newStr; +} + +function _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) { + function decodeUnreserved(str:string):string { + const decStr = pctDecChars(str); + return (!decStr.match(protocol.UNRESERVED) ? str : decStr); + } + + if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + + return components; +}; + +function _stripLeadingZeros(str:string):string { + return str.replace(/^0*(.*)/, "$1") || "0"; +} + +function _normalizeIPv4(host:string, protocol:URIRegExps):string { + const matches = host.match(protocol.IPV4ADDRESS) || []; + const [, address] = matches; + + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } else { + return host; + } +} + +function _normalizeIPv6(host:string, protocol:URIRegExps):string { + const matches = host.match(protocol.IPV6ADDRESS) || []; + const [, address, zone] = matches; + + if (address) { + const [last, first] = address.toLowerCase().split('::').reverse(); + const firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + const lastFields = last.split(":").map(_stripLeadingZeros); + const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + const fieldCount = isLastFieldIPv4Address ? 7 : 8; + const lastFieldsStart = lastFields.length - fieldCount; + const fields = Array(fieldCount); + + for (let x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + + const allZeroFields = fields.reduce>((acc, field, index) => { + if (!field || field === "0") { + const lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } else { + acc.push({ index, length : 1 }); + } + } + return acc; + }, []); + + const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0]; + + let newHost:string; + if (longestZeroFields && longestZeroFields.length > 1) { + const newFirst = fields.slice(0, longestZeroFields.index) ; + const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } else { + newHost = fields.join(":"); + } + + if (zone) { + newHost += "%" + zone; + } + + return newHost; + } else { + return host; + } +} + +const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +const NO_MATCH_IS_UNDEFINED = (("").match(/(){0}/))[1] === undefined; + +export function parse(uriString:string, options:URIOptions = {}):URIComponents { + const components:URIComponents = {}; + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + + if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + + const matches = uriString.match(URI_PARSE); + + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } else { //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined); + components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined); + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined); + components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined); + + //fix port number + if (isNaN(components.port)) { + components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined); + } + } + + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } else if (components.scheme === undefined) { + components.reference = "relative"; + } else if (components.fragment === undefined) { + components.reference = "absolute"; + } else { + components.reference = "uri"; + } + + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } else { + components.error = components.error || "URI can not be parsed."; + } + + return components; +}; + +function _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined { + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens:Array = []; + + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]")); + } + + if (typeof components.port === "number") { + uriTokens.push(":"); + uriTokens.push(components.port.toString(10)); + } + + return uriTokens.length ? uriTokens.join("") : undefined; +}; + +const RDS1 = /^\.\.?\//; +const RDS2 = /^\/\.(\/|$)/; +const RDS3 = /^\/\.\.(\/|$)/; +const RDS4 = /^\.\.?$/; +const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; + +export function removeDotSegments(input:string):string { + const output:Array = []; + + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } else if (input === "." || input === "..") { + input = ""; + } else { + const im = input.match(RDS5); + if (im) { + const s = im[0]; + input = input.slice(s.length); + output.push(s); + } else { + throw new Error("Unexpected dot segment condition"); + } + } + } + + return output.join(""); +}; + +export function serialize(components:URIComponents, options:URIOptions = {}):string { + const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens:Array = []; + + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); + + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) { + //TODO: normalize IPv6 address as per RFC 5952 + } + + //if host component is a domain name + else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) { + //convert IDN via punycode + try { + components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host)); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + + //normalize encoding + _normalizeComponentEncoding(components, protocol); + + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + + const authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + + uriTokens.push(authority); + + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + + if (components.path !== undefined) { + let s = components.path; + + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + + uriTokens.push(s); + } + + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + + return uriTokens.join(""); //merge tokens into a string +}; + +export function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents { + const target:URIComponents = {}; + + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } else { + target.query = base.query; + } + } else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } else if (!base.path) { + target.path = relative.path; + } else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + + target.fragment = relative.fragment; + + return target; +}; + +export function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string { + const schemelessOptions = assign({ scheme : 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +}; + +export function normalize(uri:string, options?:URIOptions):string; +export function normalize(uri:URIComponents, options?:URIOptions):URIComponents; +export function normalize(uri:any, options?:URIOptions):any { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + + return uri; +}; + +export function equal(uriA:string, uriB:string, options?: URIOptions):boolean; +export function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean; +export function equal(uriA:any, uriB:any, options?:URIOptions):boolean { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + + return uriA === uriB; +}; + +export function escapeComponent(str:string, options?:URIOptions):string { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar); +}; + +export function unescapeComponent(str:string, options?:URIOptions):string { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars); +}; diff --git a/node_modules/uri-js/src/util.ts b/node_modules/uri-js/src/util.ts new file mode 100644 index 0000000..29c6d5d --- /dev/null +++ b/node_modules/uri-js/src/util.ts @@ -0,0 +1,40 @@ +export function merge(...sets:Array):string { + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + const xl = sets.length - 1; + for (let x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } else { + return sets[0]; + } +} + +export function subexp(str:string):string { + return "(?:" + str + ")"; +} + +export function typeOf(o:any):string { + return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); +} + +export function toUpperCase(str:string):string { + return str.toUpperCase(); +} + +export function toArray(obj:any):Array { + return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; +} + + +export function assign(target: object, source: any): any { + const obj = target as any; + if (source) { + for (const key in source) { + obj[key] = source[key]; + } + } + return obj; +} \ No newline at end of file diff --git a/node_modules/uri-js/tests/qunit.css b/node_modules/uri-js/tests/qunit.css new file mode 100644 index 0000000..861c40d --- /dev/null +++ b/node_modules/uri-js/tests/qunit.css @@ -0,0 +1,118 @@ +ol#qunit-tests { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + margin:0; + padding:0; + list-style-position:inside; + + font-size: smaller; +} +ol#qunit-tests li{ + padding:0.4em 0.5em 0.4em 2.5em; + border-bottom:1px solid #fff; + font-size:small; + list-style-position:inside; +} +ol#qunit-tests li ol{ + box-shadow: inset 0px 2px 13px #999; + -moz-box-shadow: inset 0px 2px 13px #999; + -webkit-box-shadow: inset 0px 2px 13px #999; + margin-top:0.5em; + margin-left:0; + padding:0.5em; + background-color:#fff; + border-radius:15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; +} +ol#qunit-tests li li{ + border-bottom:none; + margin:0.5em; + background-color:#fff; + list-style-position: inside; + padding:0.4em 0.5em 0.4em 0.5em; +} + +ol#qunit-tests li li.pass{ + border-left:26px solid #C6E746; + background-color:#fff; + color:#5E740B; + } +ol#qunit-tests li li.fail{ + border-left:26px solid #EE5757; + background-color:#fff; + color:#710909; +} +ol#qunit-tests li.pass{ + background-color:#D2E0E6; + color:#528CE0; +} +ol#qunit-tests li.fail{ + background-color:#EE5757; + color:#000; +} +ol#qunit-tests li strong { + cursor:pointer; +} +h1#qunit-header{ + background-color:#0d3349; + margin:0; + padding:0.5em 0 0.5em 1em; + color:#fff; + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + border-top-right-radius:15px; + border-top-left-radius:15px; + -moz-border-radius-topright:15px; + -moz-border-radius-topleft:15px; + -webkit-border-top-right-radius:15px; + -webkit-border-top-left-radius:15px; + text-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px; +} +h2#qunit-banner{ + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + height:5px; + margin:0; + padding:0; +} +h2#qunit-banner.qunit-pass{ + background-color:#C6E746; +} +h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar { + background-color:#EE5757; +} +#qunit-testrunner-toolbar { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + padding:0; + /*width:80%;*/ + padding:0em 0 0.5em 2em; + font-size: small; +} +h2#qunit-userAgent { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + background-color:#2b81af; + margin:0; + padding:0; + color:#fff; + font-size: small; + padding:0.5em 0 0.5em 2.5em; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} +p#qunit-testresult{ + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + margin:0; + font-size: small; + color:#2b81af; + border-bottom-right-radius:15px; + border-bottom-left-radius:15px; + -moz-border-radius-bottomright:15px; + -moz-border-radius-bottomleft:15px; + -webkit-border-bottom-right-radius:15px; + -webkit-border-bottom-left-radius:15px; + background-color:#D2E0E6; + padding:0.5em 0.5em 0.5em 2.5em; +} +strong b.fail{ + color:#710909; + } +strong b.pass{ + color:#5E740B; + } \ No newline at end of file diff --git a/node_modules/uri-js/tests/qunit.js b/node_modules/uri-js/tests/qunit.js new file mode 100644 index 0000000..8bef026 --- /dev/null +++ b/node_modules/uri-js/tests/qunit.js @@ -0,0 +1,1042 @@ +/* + * QUnit - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2009 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + */ + +(function(window) { + +var QUnit = { + + // Initialize the configuration options + init: function() { + config = { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date, + blocking: false, + autorun: false, + assertions: [], + filters: [], + queue: [] + }; + + var tests = id("qunit-tests"), + banner = id("qunit-banner"), + result = id("qunit-testresult"); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + }, + + // call on start of module test to prepend name to all tests + module: function(name, testEnvironment) { + config.currentModule = name; + + synchronize(function() { + if ( config.currentModule ) { + QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); + } + + config.currentModule = name; + config.moduleTestEnvironment = testEnvironment; + config.moduleStats = { all: 0, bad: 0 }; + + QUnit.moduleStart( name, testEnvironment ); + }); + }, + + asyncTest: function(testName, expected, callback) { + if ( arguments.length === 2 ) { + callback = expected; + expected = 0; + } + + QUnit.test(testName, expected, callback, true); + }, + + test: function(testName, expected, callback, async) { + var name = testName, testEnvironment, testEnvironmentArg; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + // is 2nd argument a testEnvironment? + if ( expected && typeof expected === 'object') { + testEnvironmentArg = expected; + expected = null; + } + + if ( config.currentModule ) { + name = config.currentModule + " module: " + name; + } + + if ( !validTest(name) ) { + return; + } + + synchronize(function() { + QUnit.testStart( testName ); + + testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, config.moduleTestEnvironment); + if (testEnvironmentArg) { + extend(testEnvironment,testEnvironmentArg); + } + + // allow utility functions to access the current test environment + QUnit.current_testEnvironment = testEnvironment; + + config.assertions = []; + config.expected = expected; + + try { + if ( !config.pollution ) { + saveGlobal(); + } + + testEnvironment.setup.call(testEnvironment); + } catch(e) { + QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); + } + + if ( async ) { + QUnit.stop(); + } + + try { + callback.call(testEnvironment); + } catch(e) { + fail("Test " + name + " died, exception and test follows", e, callback); + QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + start(); + } + } + }); + + synchronize(function() { + try { + checkPollution(); + testEnvironment.teardown.call(testEnvironment); + } catch(e) { + QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); + } + + try { + QUnit.reset(); + } catch(e) { + fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); + } + + if ( config.expected && config.expected != config.assertions.length ) { + QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); + } + + var good = 0, bad = 0, + tests = id("qunit-tests"); + + config.stats.all += config.assertions.length; + config.moduleStats.all += config.assertions.length; + + if ( tests ) { + var ol = document.createElement("ol"); + ol.style.display = "none"; + + for ( var i = 0; i < config.assertions.length; i++ ) { + var assertion = config.assertions[i]; + + var li = document.createElement("li"); + li.className = assertion.result ? "pass" : "fail"; + li.appendChild(document.createTextNode(assertion.message || "(no message)")); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + var b = document.createElement("strong"); + b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; + + addEvent(b, "click", function() { + var next = b.nextSibling, display = next.style.display; + next.style.display = display === "none" ? "block" : "none"; + }); + + addEvent(b, "dblclick", function(e) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() === "strong" ) { + var text = "", node = target.firstChild; + + while ( node.nodeType === 3 ) { + text += node.nodeValue; + node = node.nextSibling; + } + + text = text.replace(/(^\s*|\s*$)/g, ""); + + if ( window.location ) { + window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); + } + } + }); + + var li = document.createElement("li"); + li.className = bad ? "fail" : "pass"; + li.appendChild( b ); + li.appendChild( ol ); + tests.appendChild( li ); + + if ( bad ) { + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + toolbar.style.display = "block"; + id("qunit-filter-pass").disabled = null; + id("qunit-filter-missing").disabled = null; + } + } + + } else { + for ( var i = 0; i < config.assertions.length; i++ ) { + if ( !config.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + QUnit.testDone( testName, bad, config.assertions.length ); + + if ( !window.setTimeout && !config.queue.length ) { + done(); + } + }); + + if ( window.setTimeout && !config.doneTimer ) { + config.doneTimer = window.setTimeout(function(){ + if ( !config.queue.length ) { + done(); + } else { + synchronize( done ); + } + }, 13); + } + }, + + /** + * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + */ + expect: function(asserts) { + config.expected = asserts; + }, + + /** + * Asserts true. + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function(a, msg) { + QUnit.log(a, msg); + + config.assertions.push({ + result: !!a, + message: msg + }); + }, + + /** + * Checks that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * + * Prefered to ok( actual == expected, message ) + * + * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); + * + * @param Object actual + * @param Object expected + * @param String message (optional) + */ + equal: function(actual, expected, message) { + push(expected == actual, actual, expected, message); + }, + + notEqual: function(actual, expected, message) { + push(expected != actual, actual, expected, message); + }, + + deepEqual: function(a, b, message) { + push(QUnit.equiv(a, b), a, b, message); + }, + + notDeepEqual: function(a, b, message) { + push(!QUnit.equiv(a, b), a, b, message); + }, + + strictEqual: function(actual, expected, message) { + push(expected === actual, actual, expected, message); + }, + + notStrictEqual: function(actual, expected, message) { + push(expected !== actual, actual, expected, message); + }, + + start: function() { + // A slight delay, to avoid any current callbacks + if ( window.setTimeout ) { + window.setTimeout(function() { + if ( config.timeout ) { + clearTimeout(config.timeout); + } + + config.blocking = false; + process(); + }, 13); + } else { + config.blocking = false; + process(); + } + }, + + stop: function(timeout) { + config.blocking = true; + + if ( timeout && window.setTimeout ) { + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + QUnit.start(); + }, timeout); + } + }, + + /** + * Resets the test setup. Useful for tests that modify the DOM. + */ + reset: function() { + if ( window.jQuery ) { + jQuery("#main").html( config.fixture ); + jQuery.event.global = {}; + jQuery.ajaxSettings = extend({}, config.ajaxSettings); + } + }, + + /** + * Trigger an event on an element. + * + * @example triggerEvent( document.body, "click" ); + * + * @param DOMElement elem + * @param String type + */ + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent("MouseEvents"); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + elem.dispatchEvent( event ); + + } else if ( elem.fireEvent ) { + elem.fireEvent("on"+type); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return Object.prototype.toString.call( obj ) === "[object "+ type +"]"; + }, + + // Logging callbacks + done: function(failures, total) {}, + log: function(result, message) {}, + testStart: function(name) {}, + testDone: function(name, failures, total) {}, + moduleStart: function(name, testEnvironment) {}, + moduleDone: function(name, failures, total) {} +}; + +// Backwards compatibility, deprecated +QUnit.equals = QUnit.equal; +QUnit.same = QUnit.deepEqual; + +// Maintain internal state +var config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true +}; + +// Load paramaters +(function() { + var location = window.location || { search: "", protocol: "file:" }, + GETParams = location.search.slice(1).split('&'); + + for ( var i = 0; i < GETParams.length; i++ ) { + GETParams[i] = decodeURIComponent( GETParams[i] ); + if ( GETParams[i] === "noglobals" ) { + GETParams.splice( i, 1 ); + i--; + config.noglobals = true; + } else if ( GETParams[i].search('=') > -1 ) { + GETParams.splice( i, 1 ); + i--; + } + } + + // restrict modules/tests by get parameters + config.filters = GETParams; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = !!(location.protocol === 'file:'); +})(); + +// Expose the API as global variables, unless an 'exports' +// object exists, in that case we assume we're in CommonJS +if ( typeof exports === "undefined" || typeof require === "undefined" ) { + extend(window, QUnit); + window.QUnit = QUnit; +} else { + extend(exports, QUnit); + exports.QUnit = QUnit; +} + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +addEvent(window, "load", function() { + // Initialize the config, saving the execution queue + var oldconfig = extend({}, config); + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + var userAgent = id("qunit-userAgent"); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + toolbar.style.display = "none"; + + var filter = document.createElement("input"); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + filter.disabled = true; + addEvent( filter, "click", function() { + var li = document.getElementsByTagName("li"); + for ( var i = 0; i < li.length; i++ ) { + if ( li[i].className.indexOf("pass") > -1 ) { + li[i].style.display = filter.checked ? "none" : ""; + } + } + }); + toolbar.appendChild( filter ); + + var label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-pass"); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + + var missing = document.createElement("input"); + missing.type = "checkbox"; + missing.id = "qunit-filter-missing"; + missing.disabled = true; + addEvent( missing, "click", function() { + var li = document.getElementsByTagName("li"); + for ( var i = 0; i < li.length; i++ ) { + if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { + li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; + } + } + }); + toolbar.appendChild( missing ); + + label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-missing"); + label.innerHTML = "Hide missing tests (untested code is broken code)"; + toolbar.appendChild( label ); + } + + var main = id('main'); + if ( main ) { + config.fixture = main.innerHTML; + } + + if ( window.jQuery ) { + config.ajaxSettings = window.jQuery.ajaxSettings; + } + + QUnit.start(); +}); + +function done() { + if ( config.doneTimer && window.clearTimeout ) { + window.clearTimeout( config.doneTimer ); + config.doneTimer = null; + } + + if ( config.queue.length ) { + config.doneTimer = window.setTimeout(function(){ + if ( !config.queue.length ) { + done(); + } else { + synchronize( done ); + } + }, 13); + + return; + } + + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); + } + + var banner = id("qunit-banner"), + tests = id("qunit-tests"), + html = ['Tests completed in ', + +new Date - config.started, ' milliseconds.
      ', + '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); + + if ( banner ) { + banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); + } + + if ( tests ) { + var result = id("qunit-testresult"); + + if ( !result ) { + result = document.createElement("p"); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests.nextSibling ); + } + + result.innerHTML = html; + } + + QUnit.done( config.stats.bad, config.stats.all ); +} + +function validTest( name ) { + var i = config.filters.length, + run = false; + + if ( !i ) { + return true; + } + + while ( i-- ) { + var filter = config.filters[i], + not = filter.charAt(0) == '!'; + + if ( not ) { + filter = filter.slice(1); + } + + if ( name.indexOf(filter) !== -1 ) { + return !not; + } + + if ( not ) { + run = true; + } + } + + return run; +} + +function push(result, actual, expected, message) { + message = message || (result ? "okay" : "failed"); + QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); +} + +function synchronize( callback ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process(); + } +} + +function process() { + while ( config.queue.length && !config.blocking ) { + config.queue.shift()(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + config.pollution.push( key ); + } + } +} + +function checkPollution( name ) { + var old = config.pollution; + saveGlobal(); + + var newGlobals = diff( old, config.pollution ); + if ( newGlobals.length > 0 ) { + ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); + config.expected++; + } + + var deletedGlobals = diff( config.pollution, old ); + if ( deletedGlobals.length > 0 ) { + ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); + config.expected++; + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var result = a.slice(); + for ( var i = 0; i < result.length; i++ ) { + for ( var j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice(i, 1); + i--; + break; + } + } + } + return result; +} + +function fail(message, exception, callback) { + if ( typeof console !== "undefined" && console.error && console.warn ) { + console.error(message); + console.error(exception); + console.warn(callback.toString()); + + } else if ( window.opera && opera.postError ) { + opera.postError(message, exception, callback.toString); + } +} + +function extend(a, b) { + for ( var prop in b ) { + a[prop] = b[prop]; + } + + return a; +} + +function addEvent(elem, type, fn) { + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, fn ); + } else { + fn(); + } +} + +function id(name) { + return !!(typeof document !== "undefined" && document && document.getElementById) && + document.getElementById( name ); +} + +// Test for equality any JavaScript type. +// Discussions and reference: http://philrathe.com/articles/equiv +// Test suites: http://philrathe.com/tests/equiv +// Author: Philippe Rathé +QUnit.equiv = function () { + + var innerEquiv; // the real equiv function + var callers = []; // stack to decide between skip/abort functions + + + // Determine what is o. + function hoozit(o) { + if (QUnit.is("String", o)) { + return "string"; + + } else if (QUnit.is("Boolean", o)) { + return "boolean"; + + } else if (QUnit.is("Number", o)) { + + if (isNaN(o)) { + return "nan"; + } else { + return "number"; + } + + } else if (typeof o === "undefined") { + return "undefined"; + + // consider: typeof null === object + } else if (o === null) { + return "null"; + + // consider: typeof [] === object + } else if (QUnit.is( "Array", o)) { + return "array"; + + // consider: typeof new Date() === object + } else if (QUnit.is( "Date", o)) { + return "date"; + + // consider: /./ instanceof Object; + // /./ instanceof RegExp; + // typeof /./ === "function"; // => false in IE and Opera, + // true in FF and Safari + } else if (QUnit.is( "RegExp", o)) { + return "regexp"; + + } else if (typeof o === "object") { + return "object"; + + } else if (QUnit.is( "Function", o)) { + return "function"; + } else { + return undefined; + } + } + + // Call the o related callback with the given arguments. + function bindCallbacks(o, callbacks, args) { + var prop = hoozit(o); + if (prop) { + if (hoozit(callbacks[prop]) === "function") { + return callbacks[prop].apply(callbacks, args); + } else { + return callbacks[prop]; // or undefined + } + } + } + + var callbacks = function () { + + // for string, boolean, number and null + function useStrictEquality(b, a) { + if (b instanceof a.constructor || a instanceof b.constructor) { + // to catch short annotaion VS 'new' annotation of a declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string": useStrictEquality, + "boolean": useStrictEquality, + "number": useStrictEquality, + "null": useStrictEquality, + "undefined": useStrictEquality, + + "nan": function (b) { + return isNaN(b); + }, + + "date": function (b, a) { + return hoozit(b) === "date" && a.valueOf() === b.valueOf(); + }, + + "regexp": function (b, a) { + return hoozit(b) === "regexp" && + a.source === b.source && // the regex itself + a.global === b.global && // and its modifers (gmi) ... + a.ignoreCase === b.ignoreCase && + a.multiline === b.multiline; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function": function () { + var caller = callers[callers.length - 1]; + return caller !== Object && + typeof caller !== "undefined"; + }, + + "array": function (b, a) { + var i; + var len; + + // b could be an object literal here + if ( ! (hoozit(b) === "array")) { + return false; + } + + len = a.length; + if (len !== b.length) { // safe and faster + return false; + } + for (i = 0; i < len; i++) { + if ( ! innerEquiv(a[i], b[i])) { + return false; + } + } + return true; + }, + + "object": function (b, a) { + var i; + var eq = true; // unless we can proove it + var aProperties = [], bProperties = []; // collection of strings + + // comparing constructors is more strict than using instanceof + if ( a.constructor !== b.constructor) { + return false; + } + + // stack constructor before traversing properties + callers.push(a.constructor); + + for (i in a) { // be strict: don't ensures hasOwnProperty and go deep + + aProperties.push(i); // collect a's properties + + if ( ! innerEquiv(a[i], b[i])) { + eq = false; + } + } + + callers.pop(); // unstack, we are done + + for (i in b) { + bProperties.push(i); // collect b's properties + } + + // Ensures identical properties name + return eq && innerEquiv(aProperties.sort(), bProperties.sort()); + } + }; + }(); + + innerEquiv = function () { // can take multiple arguments + var args = Array.prototype.slice.apply(arguments); + if (args.length < 2) { + return true; // end transition + } + + return (function (a, b) { + if (a === b) { + return true; // catch the most you can + } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [b, a]); + } + + // apply transition with (1..n) arguments + })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); + }; + + return innerEquiv; + +}(); + +/** + * jsDump + * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) + * Date: 5/15/2008 + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace(/"/g, '\\"') + '"'; + }; + function literal( o ) { + return o + ''; + }; + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) + arr = arr.join( ',' + s + inner ); + if ( !arr ) + return pre + post; + return [ pre, inner + arr, base + post ].join(s); + }; + function array( arr ) { + var i = arr.length, ret = Array(i); + this.up(); + while ( i-- ) + ret[i] = this.parse( arr[i] ); + this.down(); + return join( '[', ret, ']' ); + }; + + var reName = /^function (\w+)/; + + var jsDump = { + parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance + var parser = this.parsers[ type || this.typeOf(obj) ]; + type = typeof parser; + + return type == 'function' ? parser.call( this, obj ) : + type == 'string' ? parser : + this.parsers.error; + }, + typeOf:function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if (typeof obj === "undefined") { + type = "undefined"; + } else if (QUnit.is("RegExp", obj)) { + type = "regexp"; + } else if (QUnit.is("Date", obj)) { + type = "date"; + } else if (QUnit.is("Function", obj)) { + type = "function"; + } else if (QUnit.is("Array", obj)) { + type = "array"; + } else if (QUnit.is("Window", obj) || QUnit.is("global", obj)) { + type = "window"; + } else if (QUnit.is("HTMLDocument", obj)) { + type = "document"; + } else if (QUnit.is("HTMLCollection", obj) || QUnit.is("NodeList", obj)) { + type = "nodelist"; + } else if (/^\[object HTML/.test(Object.prototype.toString.call( obj ))) { + type = "node"; + } else { + type = typeof obj; + } + return type; + }, + separator:function() { + return this.multiline ? this.HTML ? '
      ' : '\n' : this.HTML ? ' ' : ' '; + }, + indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing + if ( !this.multiline ) + return ''; + var chr = this.indentChar; + if ( this.HTML ) + chr = chr.replace(/\t/g,' ').replace(/ /g,' '); + return Array( this._depth_ + (extra||0) ).join(chr); + }, + up:function( a ) { + this._depth_ += a || 1; + }, + down:function( a ) { + this._depth_ -= a || 1; + }, + setParser:function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote:quote, + literal:literal, + join:join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers:{ + window: '[Window]', + document: '[Document]', + error:'[ERROR]', //when no parser is found, shouldn't happen + unknown: '[Unknown]', + 'null':'null', + undefined:'undefined', + 'function':function( fn ) { + var ret = 'function', + name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE + if ( name ) + ret += ' ' + name; + ret += '('; + + ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); + return join( ret, this.parse(fn,'functionCode'), '}' ); + }, + array: array, + nodelist: array, + arguments: array, + object:function( map ) { + var ret = [ ]; + this.up(); + for ( var key in map ) + ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); + this.down(); + return join( '{', ret, '}' ); + }, + node:function( node ) { + var open = this.HTML ? '<' : '<', + close = this.HTML ? '>' : '>'; + + var tag = node.nodeName.toLowerCase(), + ret = open + tag; + + for ( var a in this.DOMAttrs ) { + var val = node[this.DOMAttrs[a]]; + if ( val ) + ret += ' ' + a + '=' + this.parse( val, 'attribute' ); + } + return ret + close + open + '/' + tag + close; + }, + functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function + var l = fn.length; + if ( !l ) return ''; + + var args = Array(l); + while ( l-- ) + args[l] = String.fromCharCode(97+l);//97 is 'a' + return ' ' + args.join(', ') + ' '; + }, + key:quote, //object calls it internally, the key part of an item in a map + functionCode:'[code]', //function calls it internally, it's the content of the function + attribute:quote, //node calls it internally, it's an html attribute value + string:quote, + date:quote, + regexp:literal, //regex + number:literal, + 'boolean':literal + }, + DOMAttrs:{//attributes to dump from nodes, name=>realName + id:'id', + name:'name', + 'class':'className' + }, + HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) + indentChar:' ',//indentation unit + multiline:true //if true, items in a collection, are separated by a \n, else just a space. + }; + + return jsDump; +})(); + +})(this); diff --git a/node_modules/uri-js/tests/test-es5-min.html b/node_modules/uri-js/tests/test-es5-min.html new file mode 100644 index 0000000..b841c75 --- /dev/null +++ b/node_modules/uri-js/tests/test-es5-min.html @@ -0,0 +1,17 @@ + + + + + + + + + +

      URI.js Test Suite

      +

      +
      +

      +
        + + diff --git a/node_modules/uri-js/tests/test-es5.html b/node_modules/uri-js/tests/test-es5.html new file mode 100644 index 0000000..2d89c66 --- /dev/null +++ b/node_modules/uri-js/tests/test-es5.html @@ -0,0 +1,17 @@ + + + + + + + + + +

        URI.js Test Suite

        +

        +
        +

        +
          + + diff --git a/node_modules/uri-js/tests/tests.js b/node_modules/uri-js/tests/tests.js new file mode 100644 index 0000000..624191c --- /dev/null +++ b/node_modules/uri-js/tests/tests.js @@ -0,0 +1,774 @@ +// +// +// Tests +// +// + +if (typeof URI === "undefined") { + var URI = require("../dist/es5/uri.all"); +} + +test("Acquire URI", function () { + //URI = require("./uri").URI; + ok(URI); +}); + +test("URI Parsing", function () { + var components; + + //scheme + components = URI.parse("uri:"); + strictEqual(components.error, undefined, "scheme errors"); + strictEqual(components.scheme, "uri", "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //userinfo + components = URI.parse("//@"); + strictEqual(components.error, undefined, "userinfo errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, "@", "authority"); + strictEqual(components.userinfo, "", "userinfo"); + strictEqual(components.host, "", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //host + components = URI.parse("//"); + strictEqual(components.error, undefined, "host errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, "", "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //port + components = URI.parse("//:"); + strictEqual(components.error, undefined, "port errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, ":", "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "", "host"); + strictEqual(components.port, "", "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //path + components = URI.parse(""); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //query + components = URI.parse("?"); + strictEqual(components.error, undefined, "query errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, "", "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //fragment + components = URI.parse("#"); + strictEqual(components.error, undefined, "fragment errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "", "fragment"); + + //fragment with character tabulation + components = URI.parse("#\t"); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "%09", "fragment"); + + //fragment with line feed + components = URI.parse("#\n"); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "%0A", "fragment"); + + //fragment with line tabulation + components = URI.parse("#\v"); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "%0B", "fragment"); + + //fragment with form feed + components = URI.parse("#\f"); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "%0C", "fragment"); + + //fragment with carriage return + components = URI.parse("#\r"); + strictEqual(components.error, undefined, "path errors"); + strictEqual(components.scheme, undefined, "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, "%0D", "fragment"); + + //all + components = URI.parse("uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body"); + strictEqual(components.error, undefined, "all errors"); + strictEqual(components.scheme, "uri", "scheme"); + //strictEqual(components.authority, "user:pass@example.com:123", "authority"); + strictEqual(components.userinfo, "user:pass", "userinfo"); + strictEqual(components.host, "example.com", "host"); + strictEqual(components.port, 123, "port"); + strictEqual(components.path, "/one/two.three", "path"); + strictEqual(components.query, "q1=a1&q2=a2", "query"); + strictEqual(components.fragment, "body", "fragment"); + + //IPv4address + components = URI.parse("//10.10.10.10"); + strictEqual(components.error, undefined, "IPv4address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "10.10.10.10", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //IPv6address + components = URI.parse("//[2001:db8::7]"); + strictEqual(components.error, undefined, "IPv4address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "2001:db8::7", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //mixed IPv4address & IPv6address + components = URI.parse("//[::ffff:129.144.52.38]"); + strictEqual(components.error, undefined, "IPv4address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "::ffff:129.144.52.38", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4) + components = URI.parse("uri://10.10.10.10.example.com/en/process"); + strictEqual(components.error, undefined, "mixed errors"); + strictEqual(components.scheme, "uri", "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "10.10.10.10.example.com", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "/en/process", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //IPv6address, example from bkw (https://github.com/garycourt/uri-js/pull/16) + components = URI.parse("//[2606:2800:220:1:248:1893:25c8:1946]/test"); + strictEqual(components.error, undefined, "IPv6address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "2606:2800:220:1:248:1893:25c8:1946", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "/test", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //IPv6address, example from RFC 5952 + components = URI.parse("//[2001:db8::1]:80"); + strictEqual(components.error, undefined, "IPv6address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "2001:db8::1", "host"); + strictEqual(components.port, 80, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //IPv6address with zone identifier, RFC 6874 + components = URI.parse("//[fe80::a%25en1]"); + strictEqual(components.error, undefined, "IPv4address errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "fe80::a%en1", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + + //IPv6address with an unescaped interface specifier, example from pekkanikander (https://github.com/garycourt/uri-js/pull/22) + components = URI.parse("//[2001:db8::7%en0]"); + strictEqual(components.error, undefined, "IPv6address interface errors"); + strictEqual(components.scheme, undefined, "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, "2001:db8::7%en0", "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, "", "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); +}); + +test("URI Serialization", function () { + var components = { + scheme : undefined, + userinfo : undefined, + host : undefined, + port : undefined, + path : undefined, + query : undefined, + fragment : undefined + }; + strictEqual(URI.serialize(components), "", "Undefined Components"); + + components = { + scheme : "", + userinfo : "", + host : "", + port : 0, + path : "", + query : "", + fragment : "" + }; + strictEqual(URI.serialize(components), "//@:0?#", "Empty Components"); + + components = { + scheme : "uri", + userinfo : "foo:bar", + host : "example.com", + port : 1, + path : "path", + query : "query", + fragment : "fragment" + }; + strictEqual(URI.serialize(components), "uri://foo:bar@example.com:1/path?query#fragment", "All Components"); + + strictEqual(URI.serialize({path:"//path"}), "/%2Fpath", "Double slash path"); + strictEqual(URI.serialize({path:"foo:bar"}), "foo%3Abar", "Colon path"); + strictEqual(URI.serialize({path:"?query"}), "%3Fquery", "Query path"); + + //mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4) + strictEqual(URI.serialize({host:"10.10.10.10.example.com"}), "//10.10.10.10.example.com", "Mixed IPv4address & reg-name"); + + //IPv6address + strictEqual(URI.serialize({host:"2001:db8::7"}), "//[2001:db8::7]", "IPv6 Host"); + strictEqual(URI.serialize({host:"::ffff:129.144.52.38"}), "//[::ffff:129.144.52.38]", "IPv6 Mixed Host"); + strictEqual(URI.serialize({host:"2606:2800:220:1:248:1893:25c8:1946"}), "//[2606:2800:220:1:248:1893:25c8:1946]", "IPv6 Full Host"); + + //IPv6address with zone identifier, RFC 6874 + strictEqual(URI.serialize({host:"fe80::a%en1"}), "//[fe80::a%25en1]", "IPv6 Zone Unescaped Host"); + strictEqual(URI.serialize({host:"fe80::a%25en1"}), "//[fe80::a%25en1]", "IPv6 Zone Escaped Host"); +}); + +test("URI Resolving", function () { + //normal examples from RFC 3986 + var base = "uri://a/b/c/d;p?q"; + strictEqual(URI.resolve(base, "g:h"), "g:h", "g:h"); + strictEqual(URI.resolve(base, "g:h"), "g:h", "g:h"); + strictEqual(URI.resolve(base, "g"), "uri://a/b/c/g", "g"); + strictEqual(URI.resolve(base, "./g"), "uri://a/b/c/g", "./g"); + strictEqual(URI.resolve(base, "g/"), "uri://a/b/c/g/", "g/"); + strictEqual(URI.resolve(base, "/g"), "uri://a/g", "/g"); + strictEqual(URI.resolve(base, "//g"), "uri://g", "//g"); + strictEqual(URI.resolve(base, "?y"), "uri://a/b/c/d;p?y", "?y"); + strictEqual(URI.resolve(base, "g?y"), "uri://a/b/c/g?y", "g?y"); + strictEqual(URI.resolve(base, "#s"), "uri://a/b/c/d;p?q#s", "#s"); + strictEqual(URI.resolve(base, "g#s"), "uri://a/b/c/g#s", "g#s"); + strictEqual(URI.resolve(base, "g?y#s"), "uri://a/b/c/g?y#s", "g?y#s"); + strictEqual(URI.resolve(base, ";x"), "uri://a/b/c/;x", ";x"); + strictEqual(URI.resolve(base, "g;x"), "uri://a/b/c/g;x", "g;x"); + strictEqual(URI.resolve(base, "g;x?y#s"), "uri://a/b/c/g;x?y#s", "g;x?y#s"); + strictEqual(URI.resolve(base, ""), "uri://a/b/c/d;p?q", ""); + strictEqual(URI.resolve(base, "."), "uri://a/b/c/", "."); + strictEqual(URI.resolve(base, "./"), "uri://a/b/c/", "./"); + strictEqual(URI.resolve(base, ".."), "uri://a/b/", ".."); + strictEqual(URI.resolve(base, "../"), "uri://a/b/", "../"); + strictEqual(URI.resolve(base, "../g"), "uri://a/b/g", "../g"); + strictEqual(URI.resolve(base, "../.."), "uri://a/", "../.."); + strictEqual(URI.resolve(base, "../../"), "uri://a/", "../../"); + strictEqual(URI.resolve(base, "../../g"), "uri://a/g", "../../g"); + + //abnormal examples from RFC 3986 + strictEqual(URI.resolve(base, "../../../g"), "uri://a/g", "../../../g"); + strictEqual(URI.resolve(base, "../../../../g"), "uri://a/g", "../../../../g"); + + strictEqual(URI.resolve(base, "/./g"), "uri://a/g", "/./g"); + strictEqual(URI.resolve(base, "/../g"), "uri://a/g", "/../g"); + strictEqual(URI.resolve(base, "g."), "uri://a/b/c/g.", "g."); + strictEqual(URI.resolve(base, ".g"), "uri://a/b/c/.g", ".g"); + strictEqual(URI.resolve(base, "g.."), "uri://a/b/c/g..", "g.."); + strictEqual(URI.resolve(base, "..g"), "uri://a/b/c/..g", "..g"); + + strictEqual(URI.resolve(base, "./../g"), "uri://a/b/g", "./../g"); + strictEqual(URI.resolve(base, "./g/."), "uri://a/b/c/g/", "./g/."); + strictEqual(URI.resolve(base, "g/./h"), "uri://a/b/c/g/h", "g/./h"); + strictEqual(URI.resolve(base, "g/../h"), "uri://a/b/c/h", "g/../h"); + strictEqual(URI.resolve(base, "g;x=1/./y"), "uri://a/b/c/g;x=1/y", "g;x=1/./y"); + strictEqual(URI.resolve(base, "g;x=1/../y"), "uri://a/b/c/y", "g;x=1/../y"); + + strictEqual(URI.resolve(base, "g?y/./x"), "uri://a/b/c/g?y/./x", "g?y/./x"); + strictEqual(URI.resolve(base, "g?y/../x"), "uri://a/b/c/g?y/../x", "g?y/../x"); + strictEqual(URI.resolve(base, "g#s/./x"), "uri://a/b/c/g#s/./x", "g#s/./x"); + strictEqual(URI.resolve(base, "g#s/../x"), "uri://a/b/c/g#s/../x", "g#s/../x"); + + strictEqual(URI.resolve(base, "uri:g"), "uri:g", "uri:g"); + strictEqual(URI.resolve(base, "uri:g", {tolerant:true}), "uri://a/b/c/g", "uri:g"); + + //examples by PAEz + strictEqual(URI.resolve("//www.g.com/","/adf\ngf"), "//www.g.com/adf%0Agf", "/adf\\ngf"); + strictEqual(URI.resolve("//www.g.com/error\n/bleh/bleh",".."), "//www.g.com/error%0A/", "//www.g.com/error\\n/bleh/bleh"); +}); + +test("URI Normalizing", function () { + //test from RFC 3987 + strictEqual(URI.normalize("uri://www.example.org/red%09ros\xE9#red"), "uri://www.example.org/red%09ros%C3%A9#red"); + + //IPv4address + strictEqual(URI.normalize("//192.068.001.000"), "//192.68.1.0"); + + //IPv6address, example from RFC 3513 + strictEqual(URI.normalize("http://[1080::8:800:200C:417A]/"), "http://[1080::8:800:200c:417a]/"); + + //IPv6address, examples from RFC 5952 + strictEqual(URI.normalize("//[2001:0db8::0001]/"), "//[2001:db8::1]/"); + strictEqual(URI.normalize("//[2001:db8::1:0000:1]/"), "//[2001:db8::1:0:1]/"); + strictEqual(URI.normalize("//[2001:db8:0:0:0:0:2:1]/"), "//[2001:db8::2:1]/"); + strictEqual(URI.normalize("//[2001:db8:0:1:1:1:1:1]/"), "//[2001:db8:0:1:1:1:1:1]/"); + strictEqual(URI.normalize("//[2001:0:0:1:0:0:0:1]/"), "//[2001:0:0:1::1]/"); + strictEqual(URI.normalize("//[2001:db8:0:0:1:0:0:1]/"), "//[2001:db8::1:0:0:1]/"); + strictEqual(URI.normalize("//[2001:DB8::1]/"), "//[2001:db8::1]/"); + strictEqual(URI.normalize("//[0:0:0:0:0:ffff:192.0.2.1]/"), "//[::ffff:192.0.2.1]/"); + + //Mixed IPv4 and IPv6 address + strictEqual(URI.normalize("//[1:2:3:4:5:6:192.0.2.1]/"), "//[1:2:3:4:5:6:192.0.2.1]/"); + strictEqual(URI.normalize("//[1:2:3:4:5:6:192.068.001.000]/"), "//[1:2:3:4:5:6:192.68.1.0]/"); +}); + +test("URI Equals", function () { + //test from RFC 3986 + strictEqual(URI.equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d"), true); + + //test from RFC 3987 + strictEqual(URI.equal("http://example.org/~user", "http://example.org/%7euser"), true); +}); + +test("Escape Component", function () { + var chr; + for (var d = 0; d <= 129; ++d) { + chr = String.fromCharCode(d); + if (!chr.match(/[\$\&\+\,\;\=]/)) { + strictEqual(URI.escapeComponent(chr), encodeURIComponent(chr)); + } else { + strictEqual(URI.escapeComponent(chr), chr); + } + } + strictEqual(URI.escapeComponent("\u00c0"), encodeURIComponent("\u00c0")); + strictEqual(URI.escapeComponent("\u07ff"), encodeURIComponent("\u07ff")); + strictEqual(URI.escapeComponent("\u0800"), encodeURIComponent("\u0800")); + strictEqual(URI.escapeComponent("\u30a2"), encodeURIComponent("\u30a2")); +}); + +test("Unescape Component", function () { + var chr; + for (var d = 0; d <= 129; ++d) { + chr = String.fromCharCode(d); + strictEqual(URI.unescapeComponent(encodeURIComponent(chr)), chr); + } + strictEqual(URI.unescapeComponent(encodeURIComponent("\u00c0")), "\u00c0"); + strictEqual(URI.unescapeComponent(encodeURIComponent("\u07ff")), "\u07ff"); + strictEqual(URI.unescapeComponent(encodeURIComponent("\u0800")), "\u0800"); + strictEqual(URI.unescapeComponent(encodeURIComponent("\u30a2")), "\u30a2"); +}); + +// +// IRI +// + + + +var IRI_OPTION = { iri : true, unicodeSupport : true }; + +test("IRI Parsing", function () { + var components = URI.parse("uri://us\xA0er:pa\uD7FFss@example.com:123/o\uF900ne/t\uFDCFwo.t\uFDF0hree?q1=a1\uF8FF\uE000&q2=a2#bo\uFFEFdy", IRI_OPTION); + strictEqual(components.error, undefined, "all errors"); + strictEqual(components.scheme, "uri", "scheme"); + //strictEqual(components.authority, "us\xA0er:pa\uD7FFss@example.com:123", "authority"); + strictEqual(components.userinfo, "us\xA0er:pa\uD7FFss", "userinfo"); + strictEqual(components.host, "example.com", "host"); + strictEqual(components.port, 123, "port"); + strictEqual(components.path, "/o\uF900ne/t\uFDCFwo.t\uFDF0hree", "path"); + strictEqual(components.query, "q1=a1\uF8FF\uE000&q2=a2", "query"); + strictEqual(components.fragment, "bo\uFFEFdy", "fragment"); +}); + +test("IRI Serialization", function () { + var components = { + scheme : "uri", + userinfo : "us\xA0er:pa\uD7FFss", + host : "example.com", + port : 123, + path : "/o\uF900ne/t\uFDCFwo.t\uFDF0hree", + query : "q1=a1\uF8FF\uE000&q2=a2", + fragment : "bo\uFFEFdy\uE001" + }; + strictEqual(URI.serialize(components, IRI_OPTION), "uri://us\xA0er:pa\uD7FFss@example.com:123/o\uF900ne/t\uFDCFwo.t\uFDF0hree?q1=a1\uF8FF\uE000&q2=a2#bo\uFFEFdy%EE%80%81"); +}); + +test("IRI Normalizing", function () { + strictEqual(URI.normalize("uri://www.example.org/red%09ros\xE9#red", IRI_OPTION), "uri://www.example.org/red%09ros\xE9#red"); +}); + +test("IRI Equals", function () { + //example from RFC 3987 + strictEqual(URI.equal("example://a/b/c/%7Bfoo%7D/ros\xE9", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d/ros%C3%A9", IRI_OPTION), true); +}); + +test("Convert IRI to URI", function () { + //example from RFC 3987 + strictEqual(URI.serialize(URI.parse("uri://www.example.org/red%09ros\xE9#red", IRI_OPTION)), "uri://www.example.org/red%09ros%C3%A9#red"); + + //Internationalized Domain Name conversion via punycode example from RFC 3987 + strictEqual(URI.serialize(URI.parse("uri://r\xE9sum\xE9.example.org", {iri:true, domainHost:true}), {domainHost:true}), "uri://xn--rsum-bpad.example.org"); +}); + +test("Convert URI to IRI", function () { + //examples from RFC 3987 + strictEqual(URI.serialize(URI.parse("uri://www.example.org/D%C3%BCrst"), IRI_OPTION), "uri://www.example.org/D\xFCrst"); + strictEqual(URI.serialize(URI.parse("uri://www.example.org/D%FCrst"), IRI_OPTION), "uri://www.example.org/D%FCrst"); + strictEqual(URI.serialize(URI.parse("uri://xn--99zt52a.example.org/%e2%80%ae"), IRI_OPTION), "uri://xn--99zt52a.example.org/%E2%80%AE"); //or uri://\u7D0D\u8C46.example.org/%E2%80%AE + + //Internationalized Domain Name conversion via punycode example from RFC 3987 + strictEqual(URI.serialize(URI.parse("uri://xn--rsum-bpad.example.org", {domainHost:true}), {iri:true, domainHost:true}), "uri://r\xE9sum\xE9.example.org"); +}); + +// +// HTTP +// + +if (URI.SCHEMES["http"]) { + + //module("HTTP"); + + test("HTTP Equals", function () { + //test from RFC 2616 + strictEqual(URI.equal("http://abc.com:80/~smith/home.html", "http://abc.com/~smith/home.html"), true); + strictEqual(URI.equal("http://ABC.com/%7Esmith/home.html", "http://abc.com/~smith/home.html"), true); + strictEqual(URI.equal("http://ABC.com:/%7esmith/home.html", "http://abc.com/~smith/home.html"), true); + strictEqual(URI.equal("HTTP://ABC.COM", "http://abc.com/"), true); + //test from RFC 3986 + strictEqual(URI.equal("http://example.com:/", "http://example.com:80/"), true); + }); + +} + +if (URI.SCHEMES["https"]) { + + //module("HTTPS"); + + test("HTTPS Equals", function () { + strictEqual(URI.equal("https://example.com", "https://example.com:443/"), true); + strictEqual(URI.equal("https://example.com:/", "https://example.com:443/"), true); + }); + +} + +// +// URN +// + +if (URI.SCHEMES["urn"]) { + + //module("URN"); + + test("URN Parsing", function () { + //example from RFC 2141 + var components = URI.parse("urn:foo:a123,456"); + strictEqual(components.error, undefined, "errors"); + strictEqual(components.scheme, "urn", "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, undefined, "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + strictEqual(components.nid, "foo", "nid"); + strictEqual(components.nss, "a123,456", "nss"); + }); + + test("URN Serialization", function () { + //example from RFC 2141 + var components = { + scheme : "urn", + nid : "foo", + nss : "a123,456" + }; + strictEqual(URI.serialize(components), "urn:foo:a123,456"); + }); + + test("URN Equals", function () { + //test from RFC 2141 + strictEqual(URI.equal("urn:foo:a123,456", "urn:foo:a123,456"), true); + strictEqual(URI.equal("urn:foo:a123,456", "URN:foo:a123,456"), true); + strictEqual(URI.equal("urn:foo:a123,456", "urn:FOO:a123,456"), true); + strictEqual(URI.equal("urn:foo:a123,456", "urn:foo:A123,456"), false); + strictEqual(URI.equal("urn:foo:a123%2C456", "URN:FOO:a123%2c456"), true); + }); + + test("URN Resolving", function () { + //example from epoberezkin + strictEqual(URI.resolve('', 'urn:some:ip:prop'), 'urn:some:ip:prop'); + strictEqual(URI.resolve('#', 'urn:some:ip:prop'), 'urn:some:ip:prop'); + strictEqual(URI.resolve('urn:some:ip:prop', 'urn:some:ip:prop'), 'urn:some:ip:prop'); + strictEqual(URI.resolve('urn:some:other:prop', 'urn:some:ip:prop'), 'urn:some:ip:prop'); + }); + + // + // URN UUID + // + + test("UUID Parsing", function () { + //example from RFC 4122 + var components = URI.parse("urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); + strictEqual(components.error, undefined, "errors"); + strictEqual(components.scheme, "urn", "scheme"); + //strictEqual(components.authority, undefined, "authority"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, undefined, "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + strictEqual(components.nid, "uuid", "nid"); + strictEqual(components.nss, undefined, "nss"); + strictEqual(components.uuid, "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", "uuid"); + + components = URI.parse("urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6"); + notStrictEqual(components.error, undefined, "errors"); + }); + + test("UUID Serialization", function () { + //example from RFC 4122 + var components = { + scheme : "urn", + nid : "uuid", + uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6" + }; + strictEqual(URI.serialize(components), "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); + + components = { + scheme : "urn", + nid : "uuid", + uuid : "notauuid-7dec-11d0-a765-00a0c91e6bf6" + }; + strictEqual(URI.serialize(components), "urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6"); + }); + + test("UUID Equals", function () { + strictEqual(URI.equal("URN:UUID:F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6", "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"), true); + }); + + test("URN NID Override", function () { + var components = URI.parse("urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6", {nid:"uuid"}); + strictEqual(components.error, undefined, "errors"); + strictEqual(components.scheme, "urn", "scheme"); + strictEqual(components.path, undefined, "path"); + strictEqual(components.nid, "foo", "nid"); + strictEqual(components.nss, undefined, "nss"); + strictEqual(components.uuid, "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", "uuid"); + + var components = { + scheme : "urn", + nid : "foo", + uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6" + }; + strictEqual(URI.serialize(components, {nid:"uuid"}), "urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); + }); +} + +// +// Mailto +// + +if (URI.SCHEMES["mailto"]) { + + //module("Mailto"); + + test("Mailto Parse", function () { + var components; + + //tests from RFC 6068 + + components = URI.parse("mailto:chris@example.com"); + strictEqual(components.error, undefined, "error"); + strictEqual(components.scheme, "mailto", "scheme"); + strictEqual(components.userinfo, undefined, "userinfo"); + strictEqual(components.host, undefined, "host"); + strictEqual(components.port, undefined, "port"); + strictEqual(components.path, undefined, "path"); + strictEqual(components.query, undefined, "query"); + strictEqual(components.fragment, undefined, "fragment"); + deepEqual(components.to, ["chris@example.com"], "to"); + strictEqual(components.subject, undefined, "subject"); + strictEqual(components.body, undefined, "body"); + strictEqual(components.headers, undefined, "headers"); + + components = URI.parse("mailto:infobot@example.com?subject=current-issue"); + deepEqual(components.to, ["infobot@example.com"], "to"); + strictEqual(components.subject, "current-issue", "subject"); + + components = URI.parse("mailto:infobot@example.com?body=send%20current-issue"); + deepEqual(components.to, ["infobot@example.com"], "to"); + strictEqual(components.body, "send current-issue", "body"); + + components = URI.parse("mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index"); + deepEqual(components.to, ["infobot@example.com"], "to"); + strictEqual(components.body, "send current-issue\x0D\x0Asend index", "body"); + + components = URI.parse("mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E"); + deepEqual(components.to, ["list@example.org"], "to"); + deepEqual(components.headers, {"In-Reply-To":"<3469A91.D10AF4C@example.com>"}, "headers"); + + components = URI.parse("mailto:majordomo@example.com?body=subscribe%20bamboo-l"); + deepEqual(components.to, ["majordomo@example.com"], "to"); + strictEqual(components.body, "subscribe bamboo-l", "body"); + + components = URI.parse("mailto:joe@example.com?cc=bob@example.com&body=hello"); + deepEqual(components.to, ["joe@example.com"], "to"); + strictEqual(components.body, "hello", "body"); + deepEqual(components.headers, {"cc":"bob@example.com"}, "headers"); + + components = URI.parse("mailto:joe@example.com?cc=bob@example.com?body=hello"); + if (URI.VALIDATE_SUPPORT) ok(components.error, "invalid header fields"); + + components = URI.parse("mailto:gorby%25kremvax@example.com"); + deepEqual(components.to, ["gorby%kremvax@example.com"], "to gorby%kremvax@example.com"); + + components = URI.parse("mailto:unlikely%3Faddress@example.com?blat=foop"); + deepEqual(components.to, ["unlikely?address@example.com"], "to unlikely?address@example.com"); + deepEqual(components.headers, {"blat":"foop"}, "headers"); + + components = URI.parse("mailto:Mike%26family@example.org"); + deepEqual(components.to, ["Mike&family@example.org"], "to Mike&family@example.org"); + + components = URI.parse("mailto:%22not%40me%22@example.org"); + deepEqual(components.to, ['"not@me"@example.org'], "to " + '"not@me"@example.org'); + + components = URI.parse("mailto:%22oh%5C%5Cno%22@example.org"); + deepEqual(components.to, ['"oh\\\\no"@example.org'], "to " + '"oh\\\\no"@example.org'); + + components = URI.parse("mailto:%22%5C%5C%5C%22it's%5C%20ugly%5C%5C%5C%22%22@example.org"); + deepEqual(components.to, ['"\\\\\\"it\'s\\ ugly\\\\\\""@example.org'], "to " + '"\\\\\\"it\'s\\ ugly\\\\\\""@example.org'); + + components = URI.parse("mailto:user@example.org?subject=caf%C3%A9"); + deepEqual(components.to, ["user@example.org"], "to"); + strictEqual(components.subject, "caf\xE9", "subject"); + + components = URI.parse("mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D"); + deepEqual(components.to, ["user@example.org"], "to"); + strictEqual(components.subject, "=?utf-8?Q?caf=C3=A9?=", "subject"); //TODO: Verify this + + components = URI.parse("mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D"); + deepEqual(components.to, ["user@example.org"], "to"); + strictEqual(components.subject, "=?iso-8859-1?Q?caf=E9?=", "subject"); //TODO: Verify this + + components = URI.parse("mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9"); + deepEqual(components.to, ["user@example.org"], "to"); + strictEqual(components.subject, "caf\xE9", "subject"); + strictEqual(components.body, "caf\xE9", "body"); + + if (URI.IRI_SUPPORT) { + components = URI.parse("mailto:user@%E7%B4%8D%E8%B1%86.example.org?subject=Test&body=NATTO"); + deepEqual(components.to, ["user@xn--99zt52a.example.org"], "to"); + strictEqual(components.subject, "Test", "subject"); + strictEqual(components.body, "NATTO", "body"); + } + + }); + + test("Mailto Serialize", function () { + var components; + + //tests from RFC 6068 + strictEqual(URI.serialize({scheme : "mailto", to : ["chris@example.com"]}), "mailto:chris@example.com"); + strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "current-issue"}), "mailto:infobot@example.com?body=current-issue"); + strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "send current-issue"}), "mailto:infobot@example.com?body=send%20current-issue"); + strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "send current-issue\x0D\x0Asend index"}), "mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index"); + strictEqual(URI.serialize({scheme : "mailto", to : ["list@example.org"], headers : {"In-Reply-To" : "<3469A91.D10AF4C@example.com>"}}), "mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E"); + strictEqual(URI.serialize({scheme : "mailto", to : ["majordomo@example.com"], body : "subscribe bamboo-l"}), "mailto:majordomo@example.com?body=subscribe%20bamboo-l"); + strictEqual(URI.serialize({scheme : "mailto", to : ["joe@example.com"], headers : {"cc" : "bob@example.com", "body" : "hello"}}), "mailto:joe@example.com?cc=bob@example.com&body=hello"); + strictEqual(URI.serialize({scheme : "mailto", to : ["gorby%25kremvax@example.com"]}), "mailto:gorby%25kremvax@example.com"); + strictEqual(URI.serialize({scheme : "mailto", to : ["unlikely%3Faddress@example.com"], headers : {"blat" : "foop"}}), "mailto:unlikely%3Faddress@example.com?blat=foop"); + strictEqual(URI.serialize({scheme : "mailto", to : ["Mike&family@example.org"]}), "mailto:Mike%26family@example.org"); + strictEqual(URI.serialize({scheme : "mailto", to : ['"not@me"@example.org']}), "mailto:%22not%40me%22@example.org"); + strictEqual(URI.serialize({scheme : "mailto", to : ['"oh\\\\no"@example.org']}), "mailto:%22oh%5C%5Cno%22@example.org"); + strictEqual(URI.serialize({scheme : "mailto", to : ['"\\\\\\"it\'s\\ ugly\\\\\\""@example.org']}), "mailto:%22%5C%5C%5C%22it's%5C%20ugly%5C%5C%5C%22%22@example.org"); + strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "caf\xE9"}), "mailto:user@example.org?subject=caf%C3%A9"); + strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "=?utf-8?Q?caf=C3=A9?="}), "mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D"); + strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "=?iso-8859-1?Q?caf=E9?="}), "mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D"); + strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "caf\xE9", body : "caf\xE9"}), "mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9"); + if (URI.IRI_SUPPORT) { + strictEqual(URI.serialize({scheme : "mailto", to : ["us\xE9r@\u7d0d\u8c46.example.org"], subject : "Test", body : "NATTO"}), "mailto:us%C3%A9r@xn--99zt52a.example.org?subject=Test&body=NATTO"); + } + + }); + + test("Mailto Equals", function () { + //tests from RFC 6068 + strictEqual(URI.equal("mailto:addr1@an.example,addr2@an.example", "mailto:?to=addr1@an.example,addr2@an.example"), true); + strictEqual(URI.equal("mailto:?to=addr1@an.example,addr2@an.example", "mailto:addr1@an.example?to=addr2@an.example"), true); + }); + +} diff --git a/node_modules/uri-js/tsconfig.json b/node_modules/uri-js/tsconfig.json new file mode 100644 index 0000000..e289985 --- /dev/null +++ b/node_modules/uri-js/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "es2015", + "target": "esnext", + "noImplicitAny": true, + "sourceMap": true, + "alwaysStrict": true, + "declaration": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "outDir": "dist/esnext", + "strictNullChecks": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/node_modules/uri-js/yarn.lock b/node_modules/uri-js/yarn.lock new file mode 100644 index 0000000..569687d --- /dev/null +++ b/node_modules/uri-js/yarn.lock @@ -0,0 +1,1902 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-cli@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + dependencies: + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" + fs-readdir-recursive "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" + slash "^1.0.0" + source-map "^0.5.6" + v8flags "^2.1.1" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@6, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-es2016@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b" + dependencies: + babel-plugin-transform-exponentiation-operator "^6.24.1" + +babel-preset-es2017@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz#597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.24.1" + +babel-preset-latest@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz#677de069154a7485c2d25c577c02f624b85b85e8" + dependencies: + babel-preset-es2015 "^6.24.1" + babel-preset-es2016 "^6.24.1" + babel-preset-es2017 "^6.24.1" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +buffer-crc32@^0.2.5: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + +builtin-modules@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^2.11.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +es6-promise@^3.1.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs-readdir-recursive@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash@^4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha-qunit-ui@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mocha-qunit-ui/-/mocha-qunit-ui-0.1.3.tgz#e3e1ff1dac33222b10cef681efd7f82664141ea9" + +mocha@^3.2.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.3.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6, private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +rc@^1.1.7: + version "1.2.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rollup-plugin-babel@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" + dependencies: + babel-core "6" + babel-plugin-transform-es2015-classes "^6.9.0" + object-assign "^4.1.0" + rollup-pluginutils "^1.5.0" + +rollup-plugin-node-resolve@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz#cbb783b0d15b02794d58915350b2f0d902b8ddc8" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + resolve "^1.1.6" + +rollup-pluginutils@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup@^0.41.6: + version "0.41.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.6.tgz#e0d05497877a398c104d816d2733a718a7a94e2a" + dependencies: + source-map-support "^0.4.0" + +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sander@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" + dependencies: + es6-promise "^3.1.2" + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" + +semver@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sorcery@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.10.0.tgz#8ae90ad7d7cb05fc59f1ab0c637845d5c15a52b7" + dependencies: + buffer-crc32 "^0.2.5" + minimist "^1.2.0" + sander "^0.5.0" + sourcemap-codec "^1.3.0" + +source-map-support@^0.4.0, source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +sourcemap-codec@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz#c8fd92d91889e902a07aee392bdd2c5863958ba2" + +sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +typescript@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" + +uglify-js@^2.8.14: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/node_modules/url-parse-lax/index.js b/node_modules/url-parse-lax/index.js new file mode 100644 index 0000000..5c62a58 --- /dev/null +++ b/node_modules/url-parse-lax/index.js @@ -0,0 +1,12 @@ +'use strict'; +const url = require('url'); +const prependHttp = require('prepend-http'); + +module.exports = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError(`Expected \`url\` to be of type \`string\`, got \`${typeof input}\` instead.`); + } + + const finalUrl = prependHttp(input, Object.assign({https: true}, options)); + return url.parse(finalUrl); +}; diff --git a/node_modules/url-parse-lax/license b/node_modules/url-parse-lax/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/url-parse-lax/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/url-parse-lax/package.json b/node_modules/url-parse-lax/package.json new file mode 100644 index 0000000..2c1b2c0 --- /dev/null +++ b/node_modules/url-parse-lax/package.json @@ -0,0 +1,74 @@ +{ + "_from": "url-parse-lax@^3.0.0", + "_id": "url-parse-lax@3.0.0", + "_inBundle": false, + "_integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "_location": "/url-parse-lax", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "url-parse-lax@^3.0.0", + "name": "url-parse-lax", + "escapedName": "url-parse-lax", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/got" + ], + "_resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "_shasum": "16b5cafc07dbe3676c1b1999177823d6503acb0c", + "_spec": "url-parse-lax@^3.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\got", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/url-parse-lax/issues" + }, + "bundleDependencies": false, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "deprecated": false, + "description": "Lax url.parse() with support for protocol-less URLs & IPs", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/url-parse-lax#readme", + "keywords": [ + "url", + "uri", + "parse", + "parser", + "loose", + "lax", + "protocol", + "less", + "protocol-less", + "ip", + "ipv4", + "ipv6" + ], + "license": "MIT", + "name": "url-parse-lax", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/url-parse-lax.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0" +} diff --git a/node_modules/url-parse-lax/readme.md b/node_modules/url-parse-lax/readme.md new file mode 100644 index 0000000..be0d437 --- /dev/null +++ b/node_modules/url-parse-lax/readme.md @@ -0,0 +1,127 @@ +# url-parse-lax [![Build Status](https://travis-ci.org/sindresorhus/url-parse-lax.svg?branch=master)](https://travis-ci.org/sindresorhus/url-parse-lax) + +> Lax [`url.parse()`](https://nodejs.org/docs/latest/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost) with support for protocol-less URLs & IPs + + +## Install + +``` +$ npm install url-parse-lax +``` + + +## Usage + +```js +const urlParseLax = require('url-parse-lax'); + +urlParseLax('sindresorhus.com'); +/* +{ + protocol: 'https:', + slashes: true, + auth: null, + host: 'sindresorhus.com', + port: null, + hostname: 'sindresorhus.com', + hash: null, + search: null, + query: null, + pathname: '/', + path: '/', + href: 'https://sindresorhus.com/' +} +*/ + +urlParseLax('[2001:db8::]:8000'); +/* +{ + protocol: null, + slashes: true, + auth: null, + host: '[2001:db8::]:8000', + port: '8000', + hostname: '2001:db8::', + hash: null, + search: null, + query: null, + pathname: '/', + path: '/', + href: 'http://[2001:db8::]:8000/' +} +*/ +``` + +And with the built-in `url.parse()`: + +```js +const url = require('url'); + +url.parse('sindresorhus.com'); +/* +{ + protocol: null, + slashes: null, + auth: null, + host: null, + port: null, + hostname: null, + hash: null, + search: null, + query: null, + pathname: 'sindresorhus', + path: 'sindresorhus', + href: 'sindresorhus' +} +*/ + +url.parse('[2001:db8::]:8000'); +/* +{ + protocol: null, + slashes: null, + auth: null, + host: null, + port: null, + hostname: null, + hash: null, + search: null, + query: null, + pathname: '[2001:db8::]:8000', + path: '[2001:db8::]:8000', + href: '[2001:db8::]:8000' +} +*/ +``` + + +## API + +### urlParseLax(url, [options]) + +#### url + +Type: `string` + +URL to parse. + +#### options + +Type: `Object` + +##### https + +Type: `boolean`
          +Default: `true` + +Prepend `https://` instead of `http://` to protocol-less URLs. + + +## Related + +- [url-format-lax](https://github.com/sindresorhus/url-format-lax) - Lax `url.format()` that formats a hostname and port into IPv6-compatible socket form of `hostname:port` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/util-deprecate/History.md b/node_modules/util-deprecate/History.md new file mode 100644 index 0000000..acc8675 --- /dev/null +++ b/node_modules/util-deprecate/History.md @@ -0,0 +1,16 @@ + +1.0.2 / 2015-10-07 +================== + + * use try/catch when checking `localStorage` (#3, @kumavis) + +1.0.1 / 2014-11-25 +================== + + * browser: use `console.warn()` for deprecation calls + * browser: more jsdocs + +1.0.0 / 2014-04-30 +================== + + * initial commit diff --git a/node_modules/util-deprecate/LICENSE b/node_modules/util-deprecate/LICENSE new file mode 100644 index 0000000..6a60e8c --- /dev/null +++ b/node_modules/util-deprecate/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/README.md b/node_modules/util-deprecate/README.md new file mode 100644 index 0000000..75622fa --- /dev/null +++ b/node_modules/util-deprecate/README.md @@ -0,0 +1,53 @@ +util-deprecate +============== +### The Node.js `util.deprecate()` function with browser support + +In Node.js, this module simply re-exports the `util.deprecate()` function. + +In the web browser (i.e. via browserify), a browser-specific implementation +of the `util.deprecate()` function is used. + + +## API + +A `deprecate()` function is the only thing exposed by this module. + +``` javascript +// setup: +exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); + + +// users see: +foo(); +// foo() is deprecated, use bar() instead +foo(); +foo(); +``` + + +## License + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/browser.js b/node_modules/util-deprecate/browser.js new file mode 100644 index 0000000..549ae2f --- /dev/null +++ b/node_modules/util-deprecate/browser.js @@ -0,0 +1,67 @@ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} diff --git a/node_modules/util-deprecate/node.js b/node_modules/util-deprecate/node.js new file mode 100644 index 0000000..5e6fcff --- /dev/null +++ b/node_modules/util-deprecate/node.js @@ -0,0 +1,6 @@ + +/** + * For Node.js, simply re-export the core `util.deprecate` function. + */ + +module.exports = require('util').deprecate; diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json new file mode 100644 index 0000000..3a90c4c --- /dev/null +++ b/node_modules/util-deprecate/package.json @@ -0,0 +1,56 @@ +{ + "_from": "util-deprecate@~1.0.1", + "_id": "util-deprecate@1.0.2", + "_inBundle": false, + "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "_location": "/util-deprecate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "util-deprecate@~1.0.1", + "name": "util-deprecate", + "escapedName": "util-deprecate", + "rawSpec": "~1.0.1", + "saveSpec": null, + "fetchSpec": "~1.0.1" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "_spec": "util-deprecate@~1.0.1", + "_where": "D:\\Cricbuzzz\\node_modules\\readable-stream", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/TooTallNate/util-deprecate/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The Node.js `util.deprecate()` function with browser support", + "homepage": "https://github.com/TooTallNate/util-deprecate", + "keywords": [ + "util", + "deprecate", + "browserify", + "browser", + "node" + ], + "license": "MIT", + "main": "node.js", + "name": "util-deprecate", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/util-deprecate.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.0.2" +} diff --git a/node_modules/utils-merge/.npmignore b/node_modules/utils-merge/.npmignore new file mode 100644 index 0000000..3e53844 --- /dev/null +++ b/node_modules/utils-merge/.npmignore @@ -0,0 +1,9 @@ +CONTRIBUTING.md +Makefile +docs/ +examples/ +reports/ +test/ + +.jshintrc +.travis.yml diff --git a/node_modules/utils-merge/LICENSE b/node_modules/utils-merge/LICENSE new file mode 100644 index 0000000..76f6d08 --- /dev/null +++ b/node_modules/utils-merge/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2017 Jared Hanson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/utils-merge/README.md b/node_modules/utils-merge/README.md new file mode 100644 index 0000000..0cb7117 --- /dev/null +++ b/node_modules/utils-merge/README.md @@ -0,0 +1,34 @@ +# utils-merge + +[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) +[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) +[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) +[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) +[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) + + +Merges the properties from a source object into a destination object. + +## Install + +```bash +$ npm install utils-merge +``` + +## Usage + +```javascript +var a = { foo: 'bar' } + , b = { bar: 'baz' }; + +merge(a, b); +// => { foo: 'bar', bar: 'baz' } +``` + +## License + +[The MIT License](http://opensource.org/licenses/MIT) + +Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> + + Sponsor diff --git a/node_modules/utils-merge/index.js b/node_modules/utils-merge/index.js new file mode 100644 index 0000000..4265c69 --- /dev/null +++ b/node_modules/utils-merge/index.js @@ -0,0 +1,23 @@ +/** + * Merge object b with object a. + * + * var a = { foo: 'bar' } + * , b = { bar: 'baz' }; + * + * merge(a, b); + * // => { foo: 'bar', bar: 'baz' } + * + * @param {Object} a + * @param {Object} b + * @return {Object} + * @api public + */ + +exports = module.exports = function(a, b){ + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; +}; diff --git a/node_modules/utils-merge/package.json b/node_modules/utils-merge/package.json new file mode 100644 index 0000000..e2de171 --- /dev/null +++ b/node_modules/utils-merge/package.json @@ -0,0 +1,69 @@ +{ + "_args": [ + [ + "utils-merge@1.0.1", + "D:\\Cricbuzzz" + ] + ], + "_from": "utils-merge@1.0.1", + "_id": "utils-merge@1.0.1", + "_inBundle": false, + "_integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "_location": "/utils-merge", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "utils-merge@1.0.1", + "name": "utils-merge", + "escapedName": "utils-merge", + "rawSpec": "1.0.1", + "saveSpec": null, + "fetchSpec": "1.0.1" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "_spec": "1.0.1", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Jared Hanson", + "email": "jaredhanson@gmail.com", + "url": "http://www.jaredhanson.net/" + }, + "bugs": { + "url": "http://github.com/jaredhanson/utils-merge/issues" + }, + "dependencies": {}, + "description": "merge() utility function", + "devDependencies": { + "chai": "1.x.x", + "make-node": "0.3.x", + "mocha": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "homepage": "https://github.com/jaredhanson/utils-merge#readme", + "keywords": [ + "util" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + ], + "main": "./index", + "name": "utils-merge", + "repository": { + "type": "git", + "url": "git://github.com/jaredhanson/utils-merge.git" + }, + "scripts": { + "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/uuid/AUTHORS b/node_modules/uuid/AUTHORS new file mode 100644 index 0000000..5a10523 --- /dev/null +++ b/node_modules/uuid/AUTHORS @@ -0,0 +1,5 @@ +Robert Kieffer +Christoph Tavan +AJ ONeal +Vincent Voyer +Roman Shtylman diff --git a/node_modules/uuid/CHANGELOG.md b/node_modules/uuid/CHANGELOG.md new file mode 100644 index 0000000..f811b8a --- /dev/null +++ b/node_modules/uuid/CHANGELOG.md @@ -0,0 +1,119 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) + + +### Features + +* rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) + +### [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) + + +## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) + + +### Bug Fixes + +* typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) + + + + +## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) + + +### Bug Fixes + +* fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) + + + + +# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) + + +### Bug Fixes + +* assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) +* fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) +* Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) +* mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) + +### Features + +* enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) + + + +## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) + + +### Bug Fixes + +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + + + +# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + + +### Bug Fixes + +* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + +### Features + +* Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) + + +# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) + +### Bug Fixes + +* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) +* Fix typo (#178) +* Simple typo fix (#165) + +### Features +* v5 support in CLI (#197) +* V5 support (#188) + + +# 3.0.1 (2016-11-28) + +* split uuid versions into separate files + + +# 3.0.0 (2016-11-17) + +* remove .parse and .unparse + + +# 2.0.0 + +* Removed uuid.BufferClass + + +# 1.4.0 + +* Improved module context detection +* Removed public RNG functions + + +# 1.3.2 + +* Improve tests and handling of v1() options (Issue #24) +* Expose RNG option to allow for perf testing with different generators + + +# 1.3.0 + +* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +* Support for node.js crypto API +* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md new file mode 100644 index 0000000..8c84e39 --- /dev/null +++ b/node_modules/uuid/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010-2016 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/uuid/README.md b/node_modules/uuid/README.md new file mode 100644 index 0000000..1752e47 --- /dev/null +++ b/node_modules/uuid/README.md @@ -0,0 +1,276 @@ + + +# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript +const uuidv1 = require('uuid/v1'); +uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' + +``` + +Version 3 (namespace): + +```javascript +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' + +``` + +Version 4 (random): + +```javascript +const uuidv4 = require('uuid/v4'); +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' + +``` + +Version 5 (namespace): + +```javascript +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' + +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. + +Example: Generate string UUID with fully-specified options + +```javascript +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + +``` + +Example: In-place generation of two binary IDs + +```javascript +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, + // 17, 233, 146, 52, 155, 29, + // 235, 77, 59, 125 + // ] +uuidv1(null, arr, 16); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125, + // 44, 94, 164, 193, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125 + // ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + +``` + +Example: Generate two IDs in a single buffer + +```javascript +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ + // [ + // 155, 29, 235, 77, 59, + // 125, 75, 173, 155, 221, + // 43, 13, 123, 61, 203, + // 109 + // ] +uuidv4(null, buffer, 16); // ⇨ + // [ + // 155, 29, 235, 77, 59, 125, 75, 173, + // 155, 221, 43, 13, 123, 61, 203, 109, + // 27, 157, 107, 205, 187, 253, 75, 45, + // 155, 93, 171, 141, 251, 189, 75, 237 + // ] + +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' + +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` + +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid new file mode 100644 index 0000000..502626e --- /dev/null +++ b/node_modules/uuid/bin/uuid @@ -0,0 +1,65 @@ +#!/usr/bin/env node +var assert = require('assert'); + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 '); + console.log(' uuid v4'); + console.log(' uuid v5 '); + console.log(' uuid --help'); + console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +var args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} +var version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + var uuidV1 = require('../v1'); + console.log(uuidV1()); + break; + + case 'v3': + var uuidV3 = require('../v3'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v3 name not specified'); + assert(namespace != null, 'v3 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV3.URL; + if (namespace == 'DNS') namespace = uuidV3.DNS; + + console.log(uuidV3(name, namespace)); + break; + + case 'v4': + var uuidV4 = require('../v4'); + console.log(uuidV4()); + break; + + case 'v5': + var uuidV5 = require('../v5'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v5 name not specified'); + assert(namespace != null, 'v5 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV5.URL; + if (namespace == 'DNS') namespace = uuidV5.DNS; + + console.log(uuidV5(name, namespace)); + break; + + default: + usage(); + process.exit(1); +} diff --git a/node_modules/uuid/index.js b/node_modules/uuid/index.js new file mode 100644 index 0000000..e96791a --- /dev/null +++ b/node_modules/uuid/index.js @@ -0,0 +1,8 @@ +var v1 = require('./v1'); +var v4 = require('./v4'); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; diff --git a/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js new file mode 100644 index 0000000..24b6041 --- /dev/null +++ b/node_modules/uuid/lib/bytesToUuid.js @@ -0,0 +1,26 @@ +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); +} + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([ + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]] + ]).join(''); +} + +module.exports = bytesToUuid; diff --git a/node_modules/uuid/lib/md5-browser.js b/node_modules/uuid/lib/md5-browser.js new file mode 100644 index 0000000..9b3b6c7 --- /dev/null +++ b/node_modules/uuid/lib/md5-browser.js @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/md5.js b/node_modules/uuid/lib/md5.js new file mode 100644 index 0000000..7044b87 --- /dev/null +++ b/node_modules/uuid/lib/md5.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js new file mode 100644 index 0000000..6361fb8 --- /dev/null +++ b/node_modules/uuid/lib/rng-browser.js @@ -0,0 +1,34 @@ +// Unique ID creation requires a high quality random # generator. In the +// browser this is a little complicated due to unknown quality of Math.random() +// and inconsistent support for the `crypto` API. We do the best we can via +// feature-detection + +// getRandomValues needs to be invoked in a context where "this" is a Crypto +// implementation. Also, find the complete implementation of crypto on IE11. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); + +if (getRandomValues) { + // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto + var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }; +} else { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var rnds = new Array(16); + + module.exports = function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return rnds; + }; +} diff --git a/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js new file mode 100644 index 0000000..58f0dc9 --- /dev/null +++ b/node_modules/uuid/lib/rng.js @@ -0,0 +1,8 @@ +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. + +var crypto = require('crypto'); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; diff --git a/node_modules/uuid/lib/sha1-browser.js b/node_modules/uuid/lib/sha1-browser.js new file mode 100644 index 0000000..5758ed7 --- /dev/null +++ b/node_modules/uuid/lib/sha1-browser.js @@ -0,0 +1,89 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +'use strict'; + +function f(s, x, y, z) { + switch (s) { + case 0: return (x & y) ^ (~x & z); + case 1: return x ^ y ^ z; + case 2: return (x & y) ^ (x & z) ^ (y & z); + case 3: return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return (x << n) | (x>>> (32 - n)); +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + bytes.push(0x80); + + var l = bytes.length/4 + 2; + var N = Math.ceil(l/16); + var M = new Array(N); + + for (var i=0; i>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + } + + return [ + H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, + H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, + H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, + H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, + H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff + ]; +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/sha1.js b/node_modules/uuid/lib/sha1.js new file mode 100644 index 0000000..0b54b25 --- /dev/null +++ b/node_modules/uuid/lib/sha1.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function sha1(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/v35.js b/node_modules/uuid/lib/v35.js new file mode 100644 index 0000000..8b066cc --- /dev/null +++ b/node_modules/uuid/lib/v35.js @@ -0,0 +1,57 @@ +var bytesToUuid = require('./bytesToUuid'); + +function uuidToBytes(uuid) { + // Note: We assume we're being passed a valid uuid string + var bytes = []; + uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { + bytes.push(parseInt(hex, 16)); + }); + + return bytes; +} + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + var bytes = new Array(str.length); + for (var i = 0; i < str.length; i++) { + bytes[i] = str.charCodeAt(i); + } + return bytes; +} + +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { + var off = buf && offset || 0; + + if (typeof(value) == 'string') value = stringToBytes(value); + if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); + + if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + + // Per 4.3 + var bytes = hashfunc(namespace.concat(value)); + bytes[6] = (bytes[6] & 0x0f) | version; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + if (buf) { + for (var idx = 0; idx < 16; ++idx) { + buf[off+idx] = bytes[idx]; + } + } + + return buf || bytesToUuid(bytes); + }; + + // Function#name is not settable on some platforms (#270) + try { + generateUUID.name = name; + } catch (err) { + } + + // Pre-defined namespaces, per Appendix C + generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + return generateUUID; +}; diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json new file mode 100644 index 0000000..7a36b27 --- /dev/null +++ b/node_modules/uuid/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + "uuid@3.4.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "uuid@3.4.0", + "_id": "uuid@3.4.0", + "_inBundle": false, + "_integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "_location": "/uuid", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "uuid@3.4.0", + "name": "uuid", + "escapedName": "uuid", + "rawSpec": "3.4.0", + "saveSpec": null, + "fetchSpec": "3.4.0" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "_spec": "3.4.0", + "_where": "D:\\Cricbuzzz", + "bin": { + "uuid": "bin/uuid" + }, + "browser": { + "./lib/rng.js": "./lib/rng-browser.js", + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" + }, + "bugs": { + "url": "https://github.com/uuidjs/uuid/issues" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "contributors": [ + { + "name": "Robert Kieffer", + "email": "robert@broofa.com" + }, + { + "name": "Christoph Tavan", + "email": "dev@tavan.de" + }, + { + "name": "AJ ONeal", + "email": "coolaj86@gmail.com" + }, + { + "name": "Vincent Voyer", + "email": "vincent@zeroload.net" + }, + { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + } + ], + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "devDependencies": { + "@commitlint/cli": "~8.2.0", + "@commitlint/config-conventional": "~8.2.0", + "eslint": "~6.4.0", + "husky": "~3.0.5", + "mocha": "6.2.0", + "runmd": "1.2.1", + "standard-version": "7.0.0" + }, + "homepage": "https://github.com/uuidjs/uuid#readme", + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "name": "uuid", + "repository": { + "type": "git", + "url": "git+https://github.com/uuidjs/uuid.git" + }, + "scripts": { + "lint": "eslint .", + "md": "runmd --watch --output=README.md README_js.md", + "prepare": "runmd --output=README.md README_js.md", + "release": "standard-version", + "test": "npm run lint && mocha test/test.js" + }, + "version": "3.4.0" +} diff --git a/node_modules/uuid/v1.js b/node_modules/uuid/v1.js new file mode 100644 index 0000000..8c245de --- /dev/null +++ b/node_modules/uuid/v1.js @@ -0,0 +1,109 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/uuidjs/uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; diff --git a/node_modules/uuid/v3.js b/node_modules/uuid/v3.js new file mode 100644 index 0000000..ee7e14c --- /dev/null +++ b/node_modules/uuid/v3.js @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/node_modules/uuid/v4.js b/node_modules/uuid/v4.js new file mode 100644 index 0000000..1f07be1 --- /dev/null +++ b/node_modules/uuid/v4.js @@ -0,0 +1,29 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || bytesToUuid(rnds); +} + +module.exports = v4; diff --git a/node_modules/uuid/v5.js b/node_modules/uuid/v5.js new file mode 100644 index 0000000..4945baf --- /dev/null +++ b/node_modules/uuid/v5.js @@ -0,0 +1,3 @@ +var v35 = require('./lib/v35.js'); +var sha1 = require('./lib/sha1'); +module.exports = v35('v5', 0x50, sha1); diff --git a/node_modules/vary/HISTORY.md b/node_modules/vary/HISTORY.md new file mode 100644 index 0000000..f6cbcf7 --- /dev/null +++ b/node_modules/vary/HISTORY.md @@ -0,0 +1,39 @@ +1.1.2 / 2017-09-23 +================== + + * perf: improve header token parsing speed + +1.1.1 / 2017-03-20 +================== + + * perf: hoist regular expression + +1.1.0 / 2015-09-29 +================== + + * Only accept valid field names in the `field` argument + - Ensures the resulting string is a valid HTTP header value + +1.0.1 / 2015-07-08 +================== + + * Fix setting empty header from empty `field` + * perf: enable strict mode + * perf: remove argument reassignments + +1.0.0 / 2014-08-10 +================== + + * Accept valid `Vary` header string as `field` + * Add `vary.append` for low-level string manipulation + * Move to `jshttp` orgainzation + +0.1.0 / 2014-06-05 +================== + + * Support array of fields to set + +0.0.0 / 2014-06-04 +================== + + * Initial release diff --git a/node_modules/vary/LICENSE b/node_modules/vary/LICENSE new file mode 100644 index 0000000..84441fb --- /dev/null +++ b/node_modules/vary/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/vary/README.md b/node_modules/vary/README.md new file mode 100644 index 0000000..cc000b3 --- /dev/null +++ b/node_modules/vary/README.md @@ -0,0 +1,101 @@ +# vary + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Manipulate the HTTP Vary header + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install vary +``` + +## API + + + +```js +var vary = require('vary') +``` + +### vary(res, field) + +Adds the given header `field` to the `Vary` response header of `res`. +This can be a string of a single field, a string of a valid `Vary` +header, or an array of multiple fields. + +This will append the header if not already listed, otherwise leaves +it listed in the current location. + + + +```js +// Append "Origin" to the Vary header of the response +vary(res, 'Origin') +``` + +### vary.append(header, field) + +Adds the given header `field` to the `Vary` response header string `header`. +This can be a string of a single field, a string of a valid `Vary` header, +or an array of multiple fields. + +This will append the header if not already listed, otherwise leaves +it listed in the current location. The new header string is returned. + + + +```js +// Get header string appending "Origin" to "Accept, User-Agent" +vary.append('Accept, User-Agent', 'Origin') +``` + +## Examples + +### Updating the Vary header when content is based on it + +```js +var http = require('http') +var vary = require('vary') + +http.createServer(function onRequest (req, res) { + // about to user-agent sniff + vary(res, 'User-Agent') + + var ua = req.headers['user-agent'] || '' + var isMobile = /mobi|android|touch|mini/i.test(ua) + + // serve site, depending on isMobile + res.setHeader('Content-Type', 'text/html') + res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user') +}) +``` + +## Testing + +```sh +$ npm test +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/vary.svg +[npm-url]: https://npmjs.org/package/vary +[node-version-image]: https://img.shields.io/node/v/vary.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg +[travis-url]: https://travis-ci.org/jshttp/vary +[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/vary +[downloads-image]: https://img.shields.io/npm/dm/vary.svg +[downloads-url]: https://npmjs.org/package/vary diff --git a/node_modules/vary/index.js b/node_modules/vary/index.js new file mode 100644 index 0000000..5b5e741 --- /dev/null +++ b/node_modules/vary/index.js @@ -0,0 +1,149 @@ +/*! + * vary + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + */ + +module.exports = vary +module.exports.append = append + +/** + * RegExp to match field-name in RFC 7230 sec 3.2 + * + * field-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + */ + +var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ + +/** + * Append a field to a vary header. + * + * @param {String} header + * @param {String|Array} field + * @return {String} + * @public + */ + +function append (header, field) { + if (typeof header !== 'string') { + throw new TypeError('header argument is required') + } + + if (!field) { + throw new TypeError('field argument is required') + } + + // get fields array + var fields = !Array.isArray(field) + ? parse(String(field)) + : field + + // assert on invalid field names + for (var j = 0; j < fields.length; j++) { + if (!FIELD_NAME_REGEXP.test(fields[j])) { + throw new TypeError('field argument contains an invalid header name') + } + } + + // existing, unspecified vary + if (header === '*') { + return header + } + + // enumerate current values + var val = header + var vals = parse(header.toLowerCase()) + + // unspecified vary + if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { + return '*' + } + + for (var i = 0; i < fields.length; i++) { + var fld = fields[i].toLowerCase() + + // append value (case-preserving) + if (vals.indexOf(fld) === -1) { + vals.push(fld) + val = val + ? val + ', ' + fields[i] + : fields[i] + } + } + + return val +} + +/** + * Parse a vary header into an array. + * + * @param {String} header + * @return {Array} + * @private + */ + +function parse (header) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = header.length; i < len; i++) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(header.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(header.substring(start, end)) + + return list +} + +/** + * Mark that a request is varied on a header field. + * + * @param {Object} res + * @param {String|Array} field + * @public + */ + +function vary (res, field) { + if (!res || !res.getHeader || !res.setHeader) { + // quack quack + throw new TypeError('res argument is required') + } + + // get existing header + var val = res.getHeader('Vary') || '' + var header = Array.isArray(val) + ? val.join(', ') + : String(val) + + // set new header + if ((val = append(header, field))) { + res.setHeader('Vary', val) + } +} diff --git a/node_modules/vary/package.json b/node_modules/vary/package.json new file mode 100644 index 0000000..33c020b --- /dev/null +++ b/node_modules/vary/package.json @@ -0,0 +1,81 @@ +{ + "_args": [ + [ + "vary@1.1.2", + "D:\\Cricbuzzz" + ] + ], + "_from": "vary@1.1.2", + "_id": "vary@1.1.2", + "_inBundle": false, + "_integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "_location": "/vary", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "vary@1.1.2", + "name": "vary", + "escapedName": "vary", + "rawSpec": "1.1.2", + "saveSpec": null, + "fetchSpec": "1.1.2" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "_spec": "1.1.2", + "_where": "D:\\Cricbuzzz", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/vary/issues" + }, + "description": "Manipulate the HTTP Vary header", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "mocha": "2.5.3", + "supertest": "1.1.0" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "homepage": "https://github.com/jshttp/vary#readme", + "keywords": [ + "http", + "res", + "vary" + ], + "license": "MIT", + "name": "vary", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/vary.git" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.1.2" +} diff --git a/node_modules/verror/.npmignore b/node_modules/verror/.npmignore new file mode 100644 index 0000000..f14aec8 --- /dev/null +++ b/node_modules/verror/.npmignore @@ -0,0 +1,9 @@ +.gitignore +.gitmodules +deps +examples +experiments +jsl.node.conf +Makefile +Makefile.targ +test diff --git a/node_modules/verror/CHANGES.md b/node_modules/verror/CHANGES.md new file mode 100644 index 0000000..bbb745a --- /dev/null +++ b/node_modules/verror/CHANGES.md @@ -0,0 +1,28 @@ +# Changelog + +## Not yet released + +None yet. + +## v1.10.0 + +* #49 want convenience functions for MultiErrors + +## v1.9.0 + +* #47 could use VError.hasCauseWithName() + +## v1.8.1 + +* #39 captureStackTrace lost when inheriting from WError + +## v1.8.0 + +* #23 Preserve original stack trace(s) + +## v1.7.0 + +* #10 better support for extra properties on Errors +* #11 make it easy to find causes of a particular kind +* #29 No documentation on how to Install this package +* #36 elide development-only files from npm package diff --git a/node_modules/verror/CONTRIBUTING.md b/node_modules/verror/CONTRIBUTING.md new file mode 100644 index 0000000..750cef8 --- /dev/null +++ b/node_modules/verror/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# Contributing + +This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new +changes. Anyone can submit changes. To get started, see the [cr.joyent.us user +guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). +This repo does not use GitHub pull requests. + +See the [Joyent Engineering +Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general +best practices expected in this repository. + +Contributions should be "make prepush" clean. The "prepush" target runs the +"check" target, which requires these separate tools: + +* https://github.com/davepacheco/jsstyle +* https://github.com/davepacheco/javascriptlint + +If you're changing something non-trivial or user-facing, you may want to submit +an issue first. diff --git a/node_modules/verror/LICENSE b/node_modules/verror/LICENSE new file mode 100644 index 0000000..82a5cb8 --- /dev/null +++ b/node_modules/verror/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2016, Joyent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE diff --git a/node_modules/verror/README.md b/node_modules/verror/README.md new file mode 100644 index 0000000..c1f0635 --- /dev/null +++ b/node_modules/verror/README.md @@ -0,0 +1,528 @@ +# verror: rich JavaScript errors + +This module provides several classes in support of Joyent's [Best Practices for +Error Handling in Node.js](http://www.joyent.com/developers/node/design/errors). +If you find any of the behavior here confusing or surprising, check out that +document first. + +The error classes here support: + +* printf-style arguments for the message +* chains of causes +* properties to provide extra information about the error +* creating your own subclasses that support all of these + +The classes here are: + +* **VError**, for chaining errors while preserving each one's error message. + This is useful in servers and command-line utilities when you want to + propagate an error up a call stack, but allow various levels to add their own + context. See examples below. +* **WError**, for wrapping errors while hiding the lower-level messages from the + top-level error. This is useful for API endpoints where you don't want to + expose internal error messages, but you still want to preserve the error chain + for logging and debugging. +* **SError**, which is just like VError but interprets printf-style arguments + more strictly. +* **MultiError**, which is just an Error that encapsulates one or more other + errors. (This is used for parallel operations that return several errors.) + + +# Quick start + +First, install the package: + + npm install verror + +If nothing else, you can use VError as a drop-in replacement for the built-in +JavaScript Error class, with the addition of printf-style messages: + +```javascript +var err = new VError('missing file: "%s"', '/etc/passwd'); +console.log(err.message); +``` + +This prints: + + missing file: "/etc/passwd" + +You can also pass a `cause` argument, which is any other Error object: + +```javascript +var fs = require('fs'); +var filename = '/nonexistent'; +fs.stat(filename, function (err1) { + var err2 = new VError(err1, 'stat "%s"', filename); + console.error(err2.message); +}); +``` + +This prints out: + + stat "/nonexistent": ENOENT, stat '/nonexistent' + +which resembles how Unix programs typically report errors: + + $ sort /nonexistent + sort: open failed: /nonexistent: No such file or directory + +To match the Unixy feel, when you print out the error, just prepend the +program's name to the VError's `message`. Or just call +[node-cmdutil.fail(your_verror)](https://github.com/joyent/node-cmdutil), which +does this for you. + +You can get the next-level Error using `err.cause()`: + +```javascript +console.error(err2.cause().message); +``` + +prints: + + ENOENT, stat '/nonexistent' + +Of course, you can chain these as many times as you want, and it works with any +kind of Error: + +```javascript +var err1 = new Error('No such file or directory'); +var err2 = new VError(err1, 'failed to stat "%s"', '/junk'); +var err3 = new VError(err2, 'request failed'); +console.error(err3.message); +``` + +This prints: + + request failed: failed to stat "/junk": No such file or directory + +The idea is that each layer in the stack annotates the error with a description +of what it was doing. The end result is a message that explains what happened +at each level. + +You can also decorate Error objects with additional information so that callers +can not only handle each kind of error differently, but also construct their own +error messages (e.g., to localize them, format them, group them by type, and so +on). See the example below. + + +# Deeper dive + +The two main goals for VError are: + +* **Make it easy to construct clear, complete error messages intended for + people.** Clear error messages greatly improve both user experience and + debuggability, so we wanted to make it easy to build them. That's why the + constructor takes printf-style arguments. +* **Make it easy to construct objects with programmatically-accessible + metadata** (which we call _informational properties_). Instead of just saying + "connection refused while connecting to 192.168.1.2:80", you can add + properties like `"ip": "192.168.1.2"` and `"tcpPort": 80`. This can be used + for feeding into monitoring systems, analyzing large numbers of Errors (as + from a log file), or localizing error messages. + +To really make this useful, it also needs to be easy to compose Errors: +higher-level code should be able to augment the Errors reported by lower-level +code to provide a more complete description of what happened. Instead of saying +"connection refused", you can say "operation X failed: connection refused". +That's why VError supports `causes`. + +In order for all this to work, programmers need to know that it's generally safe +to wrap lower-level Errors with higher-level ones. If you have existing code +that handles Errors produced by a library, you should be able to wrap those +Errors with a VError to add information without breaking the error handling +code. There are two obvious ways that this could break such consumers: + +* The error's name might change. People typically use `name` to determine what + kind of Error they've got. To ensure compatibility, you can create VErrors + with custom names, but this approach isn't great because it prevents you from + representing complex failures. For this reason, VError provides + `findCauseByName`, which essentially asks: does this Error _or any of its + causes_ have this specific type? If error handling code uses + `findCauseByName`, then subsystems can construct very specific causal chains + for debuggability and still let people handle simple cases easily. There's an + example below. +* The error's properties might change. People often hang additional properties + off of Error objects. If we wrap an existing Error in a new Error, those + properties would be lost unless we copied them. But there are a variety of + both standard and non-standard Error properties that should _not_ be copied in + this way: most obviously `name`, `message`, and `stack`, but also `fileName`, + `lineNumber`, and a few others. Plus, it's useful for some Error subclasses + to have their own private properties -- and there'd be no way to know whether + these should be copied. For these reasons, VError first-classes these + information properties. You have to provide them in the constructor, you can + only fetch them with the `info()` function, and VError takes care of making + sure properties from causes wind up in the `info()` output. + +Let's put this all together with an example from the node-fast RPC library. +node-fast implements a simple RPC protocol for Node programs. There's a server +and client interface, and clients make RPC requests to servers. Let's say the +server fails with an UnauthorizedError with message "user 'bob' is not +authorized". The client wraps all server errors with a FastServerError. The +client also wraps all request errors with a FastRequestError that includes the +name of the RPC call being made. The result of this failed RPC might look like +this: + + name: FastRequestError + message: "request failed: server error: user 'bob' is not authorized" + rpcMsgid: + rpcMethod: GetObject + cause: + name: FastServerError + message: "server error: user 'bob' is not authorized" + cause: + name: UnauthorizedError + message: "user 'bob' is not authorized" + rpcUser: "bob" + +When the caller uses `VError.info()`, the information properties are collapsed +so that it looks like this: + + message: "request failed: server error: user 'bob' is not authorized" + rpcMsgid: + rpcMethod: GetObject + rpcUser: "bob" + +Taking this apart: + +* The error's message is a complete description of the problem. The caller can + report this directly to its caller, which can potentially make its way back to + an end user (if appropriate). It can also be logged. +* The caller can tell that the request failed on the server, rather than as a + result of a client problem (e.g., failure to serialize the request), a + transport problem (e.g., failure to connect to the server), or something else + (e.g., a timeout). They do this using `findCauseByName('FastServerError')` + rather than checking the `name` field directly. +* If the caller logs this error, the logs can be analyzed to aggregate + errors by cause, by RPC method name, by user, or whatever. Or the + error can be correlated with other events for the same rpcMsgid. +* It wasn't very hard for any part of the code to contribute to this Error. + Each part of the stack has just a few lines to provide exactly what it knows, + with very little boilerplate. + +It's not expected that you'd use these complex forms all the time. Despite +supporting the complex case above, you can still just do: + + new VError("my service isn't working"); + +for the simple cases. + + +# Reference: VError, WError, SError + +VError, WError, and SError are convenient drop-in replacements for `Error` that +support printf-style arguments, first-class causes, informational properties, +and other useful features. + + +## Constructors + +The VError constructor has several forms: + +```javascript +/* + * This is the most general form. You can specify any supported options + * (including "cause" and "info") this way. + */ +new VError(options, sprintf_args...) + +/* + * This is a useful shorthand when the only option you need is "cause". + */ +new VError(cause, sprintf_args...) + +/* + * This is a useful shorthand when you don't need any options at all. + */ +new VError(sprintf_args...) +``` + +All of these forms construct a new VError that behaves just like the built-in +JavaScript `Error` class, with some additional methods described below. + +In the first form, `options` is a plain object with any of the following +optional properties: + +Option name | Type | Meaning +---------------- | ---------------- | ------- +`name` | string | Describes what kind of error this is. This is intended for programmatic use to distinguish between different kinds of errors. Note that in modern versions of Node.js, this name is ignored in the `stack` property value, but callers can still use the `name` property to get at it. +`cause` | any Error object | Indicates that the new error was caused by `cause`. See `cause()` below. If unspecified, the cause will be `null`. +`strict` | boolean | If true, then `null` and `undefined` values in `sprintf_args` are passed through to `sprintf()`. Otherwise, these are replaced with the strings `'null'`, and '`undefined`', respectively. +`constructorOpt` | function | If specified, then the stack trace for this error ends at function `constructorOpt`. Functions called by `constructorOpt` will not show up in the stack. This is useful when this class is subclassed. +`info` | object | Specifies arbitrary informational properties that are available through the `VError.info(err)` static class method. See that method for details. + +The second form is equivalent to using the first form with the specified `cause` +as the error's cause. This form is distinguished from the first form because +the first argument is an Error. + +The third form is equivalent to using the first form with all default option +values. This form is distinguished from the other forms because the first +argument is not an object or an Error. + +The `WError` constructor is used exactly the same way as the `VError` +constructor. The `SError` constructor is also used the same way as the +`VError` constructor except that in all cases, the `strict` property is +overriden to `true. + + +## Public properties + +`VError`, `WError`, and `SError` all provide the same public properties as +JavaScript's built-in Error objects. + +Property name | Type | Meaning +------------- | ------ | ------- +`name` | string | Programmatically-usable name of the error. +`message` | string | Human-readable summary of the failure. Programmatically-accessible details are provided through `VError.info(err)` class method. +`stack` | string | Human-readable stack trace where the Error was constructed. + +For all of these classes, the printf-style arguments passed to the constructor +are processed with `sprintf()` to form a message. For `WError`, this becomes +the complete `message` property. For `SError` and `VError`, this message is +prepended to the message of the cause, if any (with a suitable separator), and +the result becomes the `message` property. + +The `stack` property is managed entirely by the underlying JavaScript +implementation. It's generally implemented using a getter function because +constructing the human-readable stack trace is somewhat expensive. + +## Class methods + +The following methods are defined on the `VError` class and as exported +functions on the `verror` module. They're defined this way rather than using +methods on VError instances so that they can be used on Errors not created with +`VError`. + +### `VError.cause(err)` + +The `cause()` function returns the next Error in the cause chain for `err`, or +`null` if there is no next error. See the `cause` argument to the constructor. +Errors can have arbitrarily long cause chains. You can walk the `cause` chain +by invoking `VError.cause(err)` on each subsequent return value. If `err` is +not a `VError`, the cause is `null`. + +### `VError.info(err)` + +Returns an object with all of the extra error information that's been associated +with this Error and all of its causes. These are the properties passed in using +the `info` option to the constructor. Properties not specified in the +constructor for this Error are implicitly inherited from this error's cause. + +These properties are intended to provide programmatically-accessible metadata +about the error. For an error that indicates a failure to resolve a DNS name, +informational properties might include the DNS name to be resolved, or even the +list of resolvers used to resolve it. The values of these properties should +generally be plain objects (i.e., consisting only of null, undefined, numbers, +booleans, strings, and objects and arrays containing only other plain objects). + +### `VError.fullStack(err)` + +Returns a string containing the full stack trace, with all nested errors recursively +reported as `'caused by:' + err.stack`. + +### `VError.findCauseByName(err, name)` + +The `findCauseByName()` function traverses the cause chain for `err`, looking +for an error whose `name` property matches the passed in `name` value. If no +match is found, `null` is returned. + +If all you want is to know _whether_ there's a cause (and you don't care what it +is), you can use `VError.hasCauseWithName(err, name)`. + +If a vanilla error or a non-VError error is passed in, then there is no cause +chain to traverse. In this scenario, the function will check the `name` +property of only `err`. + +### `VError.hasCauseWithName(err, name)` + +Returns true if and only if `VError.findCauseByName(err, name)` would return +a non-null value. This essentially determines whether `err` has any cause in +its cause chain that has name `name`. + +### `VError.errorFromList(errors)` + +Given an array of Error objects (possibly empty), return a single error +representing the whole collection of errors. If the list has: + +* 0 elements, returns `null` +* 1 element, returns the sole error +* more than 1 element, returns a MultiError referencing the whole list + +This is useful for cases where an operation may produce any number of errors, +and you ultimately want to implement the usual `callback(err)` pattern. You can +accumulate the errors in an array and then invoke +`callback(VError.errorFromList(errors))` when the operation is complete. + + +### `VError.errorForEach(err, func)` + +Convenience function for iterating an error that may itself be a MultiError. + +In all cases, `err` must be an Error. If `err` is a MultiError, then `func` is +invoked as `func(errorN)` for each of the underlying errors of the MultiError. +If `err` is any other kind of error, `func` is invoked once as `func(err)`. In +all cases, `func` is invoked synchronously. + +This is useful for cases where an operation may produce any number of warnings +that may be encapsulated with a MultiError -- but may not be. + +This function does not iterate an error's cause chain. + + +## Examples + +The "Demo" section above covers several basic cases. Here's a more advanced +case: + +```javascript +var err1 = new VError('something bad happened'); +/* ... */ +var err2 = new VError({ + 'name': 'ConnectionError', + 'cause': err1, + 'info': { + 'errno': 'ECONNREFUSED', + 'remote_ip': '127.0.0.1', + 'port': 215 + } +}, 'failed to connect to "%s:%d"', '127.0.0.1', 215); + +console.log(err2.message); +console.log(err2.name); +console.log(VError.info(err2)); +console.log(err2.stack); +``` + +This outputs: + + failed to connect to "127.0.0.1:215": something bad happened + ConnectionError + { errno: 'ECONNREFUSED', remote_ip: '127.0.0.1', port: 215 } + ConnectionError: failed to connect to "127.0.0.1:215": something bad happened + at Object. (/home/dap/node-verror/examples/info.js:5:12) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:935:3 + +Information properties are inherited up the cause chain, with values at the top +of the chain overriding same-named values lower in the chain. To continue that +example: + +```javascript +var err3 = new VError({ + 'name': 'RequestError', + 'cause': err2, + 'info': { + 'errno': 'EBADREQUEST' + } +}, 'request failed'); + +console.log(err3.message); +console.log(err3.name); +console.log(VError.info(err3)); +console.log(err3.stack); +``` + +This outputs: + + request failed: failed to connect to "127.0.0.1:215": something bad happened + RequestError + { errno: 'EBADREQUEST', remote_ip: '127.0.0.1', port: 215 } + RequestError: request failed: failed to connect to "127.0.0.1:215": something bad happened + at Object. (/home/dap/node-verror/examples/info.js:20:12) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:935:3 + +You can also print the complete stack trace of combined `Error`s by using +`VError.fullStack(err).` + +```javascript +var err1 = new VError('something bad happened'); +/* ... */ +var err2 = new VError(err1, 'something really bad happened here'); + +console.log(VError.fullStack(err2)); +``` + +This outputs: + + VError: something really bad happened here: something bad happened + at Object. (/home/dap/node-verror/examples/fullStack.js:5:12) + at Module._compile (module.js:409:26) + at Object.Module._extensions..js (module.js:416:10) + at Module.load (module.js:343:32) + at Function.Module._load (module.js:300:12) + at Function.Module.runMain (module.js:441:10) + at startup (node.js:139:18) + at node.js:968:3 + caused by: VError: something bad happened + at Object. (/home/dap/node-verror/examples/fullStack.js:3:12) + at Module._compile (module.js:409:26) + at Object.Module._extensions..js (module.js:416:10) + at Module.load (module.js:343:32) + at Function.Module._load (module.js:300:12) + at Function.Module.runMain (module.js:441:10) + at startup (node.js:139:18) + at node.js:968:3 + +`VError.fullStack` is also safe to use on regular `Error`s, so feel free to use +it whenever you need to extract the stack trace from an `Error`, regardless if +it's a `VError` or not. + +# Reference: MultiError + +MultiError is an Error class that represents a group of Errors. This is used +when you logically need to provide a single Error, but you want to preserve +information about multiple underying Errors. A common case is when you execute +several operations in parallel and some of them fail. + +MultiErrors are constructed as: + +```javascript +new MultiError(error_list) +``` + +`error_list` is an array of at least one `Error` object. + +The cause of the MultiError is the first error provided. None of the other +`VError` options are supported. The `message` for a MultiError consists the +`message` from the first error, prepended with a message indicating that there +were other errors. + +For example: + +```javascript +err = new MultiError([ + new Error('failed to resolve DNS name "abc.example.com"'), + new Error('failed to resolve DNS name "def.example.com"'), +]); + +console.error(err.message); +``` + +outputs: + + first of 2 errors: failed to resolve DNS name "abc.example.com" + +See the convenience function `VError.errorFromList`, which is sometimes simpler +to use than this constructor. + +## Public methods + + +### `errors()` + +Returns an array of the errors used to construct this MultiError. + + +# Contributing + +See separate [contribution guidelines](CONTRIBUTING.md). diff --git a/node_modules/verror/lib/verror.js b/node_modules/verror/lib/verror.js new file mode 100644 index 0000000..8663dde --- /dev/null +++ b/node_modules/verror/lib/verror.js @@ -0,0 +1,451 @@ +/* + * verror.js: richer JavaScript errors + */ + +var mod_assertplus = require('assert-plus'); +var mod_util = require('util'); + +var mod_extsprintf = require('extsprintf'); +var mod_isError = require('core-util-is').isError; +var sprintf = mod_extsprintf.sprintf; + +/* + * Public interface + */ + +/* So you can 'var VError = require('verror')' */ +module.exports = VError; +/* For compatibility */ +VError.VError = VError; +/* Other exported classes */ +VError.SError = SError; +VError.WError = WError; +VError.MultiError = MultiError; + +/* + * Common function used to parse constructor arguments for VError, WError, and + * SError. Named arguments to this function: + * + * strict force strict interpretation of sprintf arguments, even + * if the options in "argv" don't say so + * + * argv error's constructor arguments, which are to be + * interpreted as described in README.md. For quick + * reference, "argv" has one of the following forms: + * + * [ sprintf_args... ] (argv[0] is a string) + * [ cause, sprintf_args... ] (argv[0] is an Error) + * [ options, sprintf_args... ] (argv[0] is an object) + * + * This function normalizes these forms, producing an object with the following + * properties: + * + * options equivalent to "options" in third form. This will never + * be a direct reference to what the caller passed in + * (i.e., it may be a shallow copy), so it can be freely + * modified. + * + * shortmessage result of sprintf(sprintf_args), taking options.strict + * into account as described in README.md. + */ +function parseConstructorArguments(args) +{ + var argv, options, sprintf_args, shortmessage, k; + + mod_assertplus.object(args, 'args'); + mod_assertplus.bool(args.strict, 'args.strict'); + mod_assertplus.array(args.argv, 'args.argv'); + argv = args.argv; + + /* + * First, figure out which form of invocation we've been given. + */ + if (argv.length === 0) { + options = {}; + sprintf_args = []; + } else if (mod_isError(argv[0])) { + options = { 'cause': argv[0] }; + sprintf_args = argv.slice(1); + } else if (typeof (argv[0]) === 'object') { + options = {}; + for (k in argv[0]) { + options[k] = argv[0][k]; + } + sprintf_args = argv.slice(1); + } else { + mod_assertplus.string(argv[0], + 'first argument to VError, SError, or WError ' + + 'constructor must be a string, object, or Error'); + options = {}; + sprintf_args = argv; + } + + /* + * Now construct the error's message. + * + * extsprintf (which we invoke here with our caller's arguments in order + * to construct this Error's message) is strict in its interpretation of + * values to be processed by the "%s" specifier. The value passed to + * extsprintf must actually be a string or something convertible to a + * String using .toString(). Passing other values (notably "null" and + * "undefined") is considered a programmer error. The assumption is + * that if you actually want to print the string "null" or "undefined", + * then that's easy to do that when you're calling extsprintf; on the + * other hand, if you did NOT want that (i.e., there's actually a bug + * where the program assumes some variable is non-null and tries to + * print it, which might happen when constructing a packet or file in + * some specific format), then it's better to stop immediately than + * produce bogus output. + * + * However, sometimes the bug is only in the code calling VError, and a + * programmer might prefer to have the error message contain "null" or + * "undefined" rather than have the bug in the error path crash the + * program (making the first bug harder to identify). For that reason, + * by default VError converts "null" or "undefined" arguments to their + * string representations and passes those to extsprintf. Programmers + * desiring the strict behavior can use the SError class or pass the + * "strict" option to the VError constructor. + */ + mod_assertplus.object(options); + if (!options.strict && !args.strict) { + sprintf_args = sprintf_args.map(function (a) { + return (a === null ? 'null' : + a === undefined ? 'undefined' : a); + }); + } + + if (sprintf_args.length === 0) { + shortmessage = ''; + } else { + shortmessage = sprintf.apply(null, sprintf_args); + } + + return ({ + 'options': options, + 'shortmessage': shortmessage + }); +} + +/* + * See README.md for reference documentation. + */ +function VError() +{ + var args, obj, parsed, cause, ctor, message, k; + + args = Array.prototype.slice.call(arguments, 0); + + /* + * This is a regrettable pattern, but JavaScript's built-in Error class + * is defined to work this way, so we allow the constructor to be called + * without "new". + */ + if (!(this instanceof VError)) { + obj = Object.create(VError.prototype); + VError.apply(obj, arguments); + return (obj); + } + + /* + * For convenience and backwards compatibility, we support several + * different calling forms. Normalize them here. + */ + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': false + }); + + /* + * If we've been given a name, apply it now. + */ + if (parsed.options.name) { + mod_assertplus.string(parsed.options.name, + 'error\'s "name" must be a string'); + this.name = parsed.options.name; + } + + /* + * For debugging, we keep track of the original short message (attached + * this Error particularly) separately from the complete message (which + * includes the messages of our cause chain). + */ + this.jse_shortmsg = parsed.shortmessage; + message = parsed.shortmessage; + + /* + * If we've been given a cause, record a reference to it and update our + * message appropriately. + */ + cause = parsed.options.cause; + if (cause) { + mod_assertplus.ok(mod_isError(cause), 'cause is not an Error'); + this.jse_cause = cause; + + if (!parsed.options.skipCauseMessage) { + message += ': ' + cause.message; + } + } + + /* + * If we've been given an object with properties, shallow-copy that + * here. We don't want to use a deep copy in case there are non-plain + * objects here, but we don't want to use the original object in case + * the caller modifies it later. + */ + this.jse_info = {}; + if (parsed.options.info) { + for (k in parsed.options.info) { + this.jse_info[k] = parsed.options.info[k]; + } + } + + this.message = message; + Error.call(this, message); + + if (Error.captureStackTrace) { + ctor = parsed.options.constructorOpt || this.constructor; + Error.captureStackTrace(this, ctor); + } + + return (this); +} + +mod_util.inherits(VError, Error); +VError.prototype.name = 'VError'; + +VError.prototype.toString = function ve_toString() +{ + var str = (this.hasOwnProperty('name') && this.name || + this.constructor.name || this.constructor.prototype.name); + if (this.message) + str += ': ' + this.message; + + return (str); +}; + +/* + * This method is provided for compatibility. New callers should use + * VError.cause() instead. That method also uses the saner `null` return value + * when there is no cause. + */ +VError.prototype.cause = function ve_cause() +{ + var cause = VError.cause(this); + return (cause === null ? undefined : cause); +}; + +/* + * Static methods + * + * These class-level methods are provided so that callers can use them on + * instances of Errors that are not VErrors. New interfaces should be provided + * only using static methods to eliminate the class of programming mistake where + * people fail to check whether the Error object has the corresponding methods. + */ + +VError.cause = function (err) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + return (mod_isError(err.jse_cause) ? err.jse_cause : null); +}; + +VError.info = function (err) +{ + var rv, cause, k; + + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + cause = VError.cause(err); + if (cause !== null) { + rv = VError.info(cause); + } else { + rv = {}; + } + + if (typeof (err.jse_info) == 'object' && err.jse_info !== null) { + for (k in err.jse_info) { + rv[k] = err.jse_info[k]; + } + } + + return (rv); +}; + +VError.findCauseByName = function (err, name) +{ + var cause; + + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + mod_assertplus.string(name, 'name'); + mod_assertplus.ok(name.length > 0, 'name cannot be empty'); + + for (cause = err; cause !== null; cause = VError.cause(cause)) { + mod_assertplus.ok(mod_isError(cause)); + if (cause.name == name) { + return (cause); + } + } + + return (null); +}; + +VError.hasCauseWithName = function (err, name) +{ + return (VError.findCauseByName(err, name) !== null); +}; + +VError.fullStack = function (err) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + + var cause = VError.cause(err); + + if (cause) { + return (err.stack + '\ncaused by: ' + VError.fullStack(cause)); + } + + return (err.stack); +}; + +VError.errorFromList = function (errors) +{ + mod_assertplus.arrayOfObject(errors, 'errors'); + + if (errors.length === 0) { + return (null); + } + + errors.forEach(function (e) { + mod_assertplus.ok(mod_isError(e)); + }); + + if (errors.length == 1) { + return (errors[0]); + } + + return (new MultiError(errors)); +}; + +VError.errorForEach = function (err, func) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + mod_assertplus.func(func, 'func'); + + if (err instanceof MultiError) { + err.errors().forEach(function iterError(e) { func(e); }); + } else { + func(err); + } +}; + + +/* + * SError is like VError, but stricter about types. You cannot pass "null" or + * "undefined" as string arguments to the formatter. + */ +function SError() +{ + var args, obj, parsed, options; + + args = Array.prototype.slice.call(arguments, 0); + if (!(this instanceof SError)) { + obj = Object.create(SError.prototype); + SError.apply(obj, arguments); + return (obj); + } + + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': true + }); + + options = parsed.options; + VError.call(this, options, '%s', parsed.shortmessage); + + return (this); +} + +/* + * We don't bother setting SError.prototype.name because once constructed, + * SErrors are just like VErrors. + */ +mod_util.inherits(SError, VError); + + +/* + * Represents a collection of errors for the purpose of consumers that generally + * only deal with one error. Callers can extract the individual errors + * contained in this object, but may also just treat it as a normal single + * error, in which case a summary message will be printed. + */ +function MultiError(errors) +{ + mod_assertplus.array(errors, 'list of errors'); + mod_assertplus.ok(errors.length > 0, 'must be at least one error'); + this.ase_errors = errors; + + VError.call(this, { + 'cause': errors[0] + }, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's'); +} + +mod_util.inherits(MultiError, VError); +MultiError.prototype.name = 'MultiError'; + +MultiError.prototype.errors = function me_errors() +{ + return (this.ase_errors.slice(0)); +}; + + +/* + * See README.md for reference details. + */ +function WError() +{ + var args, obj, parsed, options; + + args = Array.prototype.slice.call(arguments, 0); + if (!(this instanceof WError)) { + obj = Object.create(WError.prototype); + WError.apply(obj, args); + return (obj); + } + + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': false + }); + + options = parsed.options; + options['skipCauseMessage'] = true; + VError.call(this, options, '%s', parsed.shortmessage); + + return (this); +} + +mod_util.inherits(WError, VError); +WError.prototype.name = 'WError'; + +WError.prototype.toString = function we_toString() +{ + var str = (this.hasOwnProperty('name') && this.name || + this.constructor.name || this.constructor.prototype.name); + if (this.message) + str += ': ' + this.message; + if (this.jse_cause && this.jse_cause.message) + str += '; caused by ' + this.jse_cause.toString(); + + return (str); +}; + +/* + * For purely historical reasons, WError's cause() function allows you to set + * the cause. + */ +WError.prototype.cause = function we_cause(c) +{ + if (mod_isError(c)) + this.jse_cause = c; + + return (this.jse_cause); +}; diff --git a/node_modules/verror/package.json b/node_modules/verror/package.json new file mode 100644 index 0000000..160995f --- /dev/null +++ b/node_modules/verror/package.json @@ -0,0 +1,54 @@ +{ + "_args": [ + [ + "verror@1.10.0", + "D:\\Cricbuzzz" + ] + ], + "_from": "verror@1.10.0", + "_id": "verror@1.10.0", + "_inBundle": false, + "_integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "_location": "/verror", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "verror@1.10.0", + "name": "verror", + "escapedName": "verror", + "rawSpec": "1.10.0", + "saveSpec": null, + "fetchSpec": "1.10.0" + }, + "_requiredBy": [ + "/jsprim" + ], + "_resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "_spec": "1.10.0", + "_where": "D:\\Cricbuzzz", + "bugs": { + "url": "https://github.com/davepacheco/node-verror/issues" + }, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "description": "richer JavaScript errors", + "engines": [ + "node >=0.6.0" + ], + "homepage": "https://github.com/davepacheco/node-verror#readme", + "license": "MIT", + "main": "./lib/verror.js", + "name": "verror", + "repository": { + "type": "git", + "url": "git://github.com/davepacheco/node-verror.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.10.0" +} diff --git a/node_modules/widest-line/index.d.ts b/node_modules/widest-line/index.d.ts new file mode 100644 index 0000000..845ceaa --- /dev/null +++ b/node_modules/widest-line/index.d.ts @@ -0,0 +1,21 @@ +declare const widestLine: { + /** + Get the visual width of the widest line in a string - the number of columns required to display it. + + @example + ``` + import widestLine = require('widest-line'); + + widestLine('古\n\u001B[1m@\u001B[22m'); + //=> 2 + ``` + */ + (input: string): number; + + // TODO: remove this in the next major version, refactor definition to: + // declare function widestLine(input: string): number; + // export = widestLine; + default: typeof widestLine; +}; + +export = widestLine; diff --git a/node_modules/widest-line/index.js b/node_modules/widest-line/index.js new file mode 100644 index 0000000..98f8ce4 --- /dev/null +++ b/node_modules/widest-line/index.js @@ -0,0 +1,16 @@ +'use strict'; +const stringWidth = require('string-width'); + +const widestLine = input => { + let max = 0; + + for (const line of input.split('\n')) { + max = Math.max(max, stringWidth(line)); + } + + return max; +}; + +module.exports = widestLine; +// TODO: remove this in the next major version +module.exports.default = widestLine; diff --git a/node_modules/widest-line/license b/node_modules/widest-line/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/widest-line/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/widest-line/package.json b/node_modules/widest-line/package.json new file mode 100644 index 0000000..867340b --- /dev/null +++ b/node_modules/widest-line/package.json @@ -0,0 +1,86 @@ +{ + "_from": "widest-line@^3.1.0", + "_id": "widest-line@3.1.0", + "_inBundle": false, + "_integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "_location": "/widest-line", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "widest-line@^3.1.0", + "name": "widest-line", + "escapedName": "widest-line", + "rawSpec": "^3.1.0", + "saveSpec": null, + "fetchSpec": "^3.1.0" + }, + "_requiredBy": [ + "/boxen" + ], + "_resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "_shasum": "8292333bbf66cb45ff0de1603b136b7ae1496eca", + "_spec": "widest-line@^3.1.0", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/widest-line/issues" + }, + "bundleDependencies": false, + "dependencies": { + "string-width": "^4.0.0" + }, + "deprecated": false, + "description": "Get the visual width of the widest line in a string - the number of columns required to display it", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/widest-line#readme", + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "license": "MIT", + "name": "widest-line", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/widest-line.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "3.1.0" +} diff --git a/node_modules/widest-line/readme.md b/node_modules/widest-line/readme.md new file mode 100644 index 0000000..20e02d5 --- /dev/null +++ b/node_modules/widest-line/readme.md @@ -0,0 +1,34 @@ +# widest-line [![Build Status](https://travis-ci.org/sindresorhus/widest-line.svg?branch=master)](https://travis-ci.org/sindresorhus/widest-line) + +> Get the visual width of the widest line in a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to know the maximum width a string will take up in the terminal. + + +## Install + +``` +$ npm install widest-line +``` + + +## Usage + +```js +const widestLine = require('widest-line'); + +widestLine('古\n\u001B[1m@\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width](https://github.com/sindresorhus/string-width) - Get the visual width of a string + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js new file mode 100644 index 0000000..d502255 --- /dev/null +++ b/node_modules/wrap-ansi/index.js @@ -0,0 +1,216 @@ +'use strict'; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsi(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsi(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license new file mode 100644 index 0000000..fa7ceba --- /dev/null +++ b/node_modules/wrap-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json new file mode 100644 index 0000000..1584198 --- /dev/null +++ b/node_modules/wrap-ansi/package.json @@ -0,0 +1,94 @@ +{ + "_from": "wrap-ansi@^7.0.0", + "_id": "wrap-ansi@7.0.0", + "_inBundle": false, + "_integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "_location": "/wrap-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "wrap-ansi@^7.0.0", + "name": "wrap-ansi", + "escapedName": "wrap-ansi", + "rawSpec": "^7.0.0", + "saveSpec": null, + "fetchSpec": "^7.0.0" + }, + "_requiredBy": [ + "/boxen" + ], + "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "_shasum": "67e145cff510a6a6984bdf1152911d69d2eb9e43", + "_spec": "wrap-ansi@^7.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\boxen", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/wrap-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "deprecated": false, + "description": "Wordwrap a string with ANSI escape codes", + "devDependencies": { + "ava": "^2.1.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.3", + "has-ansi": "^4.0.0", + "nyc": "^15.0.1", + "xo": "^0.29.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js" + ], + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "homepage": "https://github.com/chalk/wrap-ansi#readme", + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "wrap-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/wrap-ansi.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "7.0.0" +} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md new file mode 100644 index 0000000..68779ba --- /dev/null +++ b/node_modules/wrap-ansi/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +const chalk = require('chalk'); +const wrapAnsi = require('wrap-ansi'); + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
          + + Get professional support for this package with a Tidelift subscription + +
          + + Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. +
          +
          diff --git a/node_modules/wrappy/LICENSE b/node_modules/wrappy/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/wrappy/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/wrappy/README.md b/node_modules/wrappy/README.md new file mode 100644 index 0000000..98eab25 --- /dev/null +++ b/node_modules/wrappy/README.md @@ -0,0 +1,36 @@ +# wrappy + +Callback wrapping utility + +## USAGE + +```javascript +var wrappy = require("wrappy") + +// var wrapper = wrappy(wrapperFunction) + +// make sure a cb is called only once +// See also: http://npm.im/once for this specific use case +var once = wrappy(function (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } +}) + +function printBoo () { + console.log('boo') +} +// has some rando property +printBoo.iAmBooPrinter = true + +var onlyPrintOnce = once(printBoo) + +onlyPrintOnce() // prints 'boo' +onlyPrintOnce() // does nothing + +// random property is retained! +assert.equal(onlyPrintOnce.iAmBooPrinter, true) +``` diff --git a/node_modules/wrappy/package.json b/node_modules/wrappy/package.json new file mode 100644 index 0000000..7609c6a --- /dev/null +++ b/node_modules/wrappy/package.json @@ -0,0 +1,58 @@ +{ + "_from": "wrappy@1", + "_id": "wrappy@1.0.2", + "_inBundle": false, + "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "_location": "/wrappy", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "wrappy@1", + "name": "wrappy", + "escapedName": "wrappy", + "rawSpec": "1", + "saveSpec": null, + "fetchSpec": "1" + }, + "_requiredBy": [ + "/once" + ], + "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "_spec": "wrappy@1", + "_where": "D:\\Cricbuzzz\\node_modules\\once", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/npm/wrappy/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Callback wrapping utility", + "devDependencies": { + "tap": "^2.3.1" + }, + "directories": { + "test": "test" + }, + "files": [ + "wrappy.js" + ], + "homepage": "https://github.com/npm/wrappy", + "license": "ISC", + "main": "wrappy.js", + "name": "wrappy", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/wrappy.git" + }, + "scripts": { + "test": "tap --coverage test/*.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/wrappy/wrappy.js b/node_modules/wrappy/wrappy.js new file mode 100644 index 0000000..bb7e7d6 --- /dev/null +++ b/node_modules/wrappy/wrappy.js @@ -0,0 +1,33 @@ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} diff --git a/node_modules/write-file-atomic/CHANGELOG.md b/node_modules/write-file-atomic/CHANGELOG.md new file mode 100644 index 0000000..d1a6c1b --- /dev/null +++ b/node_modules/write-file-atomic/CHANGELOG.md @@ -0,0 +1,32 @@ +# 3.0.0 + +* Implement options.tmpfileCreated callback. +* Drop Node.js 6, modernize code, return Promise from async function. +* Support write TypedArray's like in node fs.writeFile. +* Remove graceful-fs dependency. + +# 2.4.3 + +* Ignore errors raised by `fs.closeSync` when cleaning up after a write + error. + +# 2.4.2 + +* A pair of patches to fix some fd leaks. We would leak fds with sync use + when errors occured and with async use any time fsync was not in use. (#34) + +# 2.4.1 + +* Fix a bug where `signal-exit` instances would be leaked. This was fixed when addressing #35. + +# 2.4.0 + +## Features + +* Allow chown and mode options to be set to false to disable the defaulting behavior. (#20) +* Support passing encoding strings in options slot for compat with Node.js API. (#31) +* Add support for running inside of worker threads (#37) + +## Fixes + +* Remove unneeded call when returning success (#36) diff --git a/node_modules/write-file-atomic/LICENSE b/node_modules/write-file-atomic/LICENSE new file mode 100644 index 0000000..95e65a7 --- /dev/null +++ b/node_modules/write-file-atomic/LICENSE @@ -0,0 +1,6 @@ +Copyright (c) 2015, Rebecca Turner + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/node_modules/write-file-atomic/README.md b/node_modules/write-file-atomic/README.md new file mode 100644 index 0000000..caea799 --- /dev/null +++ b/node_modules/write-file-atomic/README.md @@ -0,0 +1,72 @@ +write-file-atomic +----------------- + +This is an extension for node's `fs.writeFile` that makes its operation +atomic and allows you set ownership (uid/gid of the file). + +### var writeFileAtomic = require('write-file-atomic')
          writeFileAtomic(filename, data, [options], [callback]) + +* filename **String** +* data **String** | **Buffer** +* options **Object** | **String** + * chown **Object** default, uid & gid of existing file, if any + * uid **Number** + * gid **Number** + * encoding **String** | **Null** default = 'utf8' + * fsync **Boolean** default = true + * mode **Number** default, from existing file, if any + * tmpfileCreated **Function** called when the tmpfile is created +* callback **Function** + +Atomically and asynchronously writes data to a file, replacing the file if it already +exists. data can be a string or a buffer. + +The file is initially named `filename + "." + murmurhex(__filename, process.pid, ++invocations)`. +Note that `require('worker_threads').threadId` is used in addition to `process.pid` if running inside of a worker thread. +If writeFile completes successfully then, if passed the **chown** option it will change +the ownership of the file. Finally it renames the file back to the filename you specified. If +it encounters errors at any of these steps it will attempt to unlink the temporary file and then +pass the error back to the caller. +If multiple writes are concurrently issued to the same file, the write operations are put into a queue and serialized in the order they were called, using Promises. Writes to different files are still executed in parallel. + +If provided, the **chown** option requires both **uid** and **gid** properties or else +you'll get an error. If **chown** is not specified it will default to using +the owner of the previous file. To prevent chown from being ran you can +also pass `false`, in which case the file will be created with the current user's credentials. + +If **mode** is not specified, it will default to using the permissions from +an existing file, if any. Expicitly setting this to `false` remove this default, resulting +in a file created with the system default permissions. + +If options is a String, it's assumed to be the **encoding** option. The **encoding** option is ignored if **data** is a buffer. It defaults to 'utf8'. + +If the **fsync** option is **false**, writeFile will skip the final fsync call. + +If the **tmpfileCreated** option is specified it will be called with the name of the tmpfile when created. + +Example: + +```javascript +writeFileAtomic('message.txt', 'Hello Node', {chown:{uid:100,gid:50}}, function (err) { + if (err) throw err; + console.log('It\'s saved!'); +}); +``` + +This function also supports async/await: + +```javascript +(async () => { + try { + await writeFileAtomic('message.txt', 'Hello Node', {chown:{uid:100,gid:50}}); + console.log('It\'s saved!'); + } catch (err) { + console.error(err); + process.exit(1); + } +})(); +``` + +### var writeFileAtomicSync = require('write-file-atomic').sync
          writeFileAtomicSync(filename, data, [options]) + +The synchronous version of **writeFileAtomic**. diff --git a/node_modules/write-file-atomic/index.js b/node_modules/write-file-atomic/index.js new file mode 100644 index 0000000..df5b72a --- /dev/null +++ b/node_modules/write-file-atomic/index.js @@ -0,0 +1,259 @@ +'use strict' +module.exports = writeFile +module.exports.sync = writeFileSync +module.exports._getTmpname = getTmpname // for testing +module.exports._cleanupOnExit = cleanupOnExit + +const fs = require('fs') +const MurmurHash3 = require('imurmurhash') +const onExit = require('signal-exit') +const path = require('path') +const isTypedArray = require('is-typedarray') +const typedArrayToBuffer = require('typedarray-to-buffer') +const { promisify } = require('util') +const activeFiles = {} + +// if we run inside of a worker_thread, `process.pid` is not unique +/* istanbul ignore next */ +const threadId = (function getId () { + try { + const workerThreads = require('worker_threads') + + /// if we are in main thread, this is set to `0` + return workerThreads.threadId + } catch (e) { + // worker_threads are not available, fallback to 0 + return 0 + } +})() + +let invocations = 0 +function getTmpname (filename) { + return filename + '.' + + MurmurHash3(__filename) + .hash(String(process.pid)) + .hash(String(threadId)) + .hash(String(++invocations)) + .result() +} + +function cleanupOnExit (tmpfile) { + return () => { + try { + fs.unlinkSync(typeof tmpfile === 'function' ? tmpfile() : tmpfile) + } catch (_) {} + } +} + +function serializeActiveFile (absoluteName) { + return new Promise(resolve => { + // make a queue if it doesn't already exist + if (!activeFiles[absoluteName]) activeFiles[absoluteName] = [] + + activeFiles[absoluteName].push(resolve) // add this job to the queue + if (activeFiles[absoluteName].length === 1) resolve() // kick off the first one + }) +} + +// https://github.com/isaacs/node-graceful-fs/blob/master/polyfills.js#L315-L342 +function isChownErrOk (err) { + if (err.code === 'ENOSYS') { + return true + } + + const nonroot = !process.getuid || process.getuid() !== 0 + if (nonroot) { + if (err.code === 'EINVAL' || err.code === 'EPERM') { + return true + } + } + + return false +} + +async function writeFileAsync (filename, data, options = {}) { + if (typeof options === 'string') { + options = { encoding: options } + } + + let fd + let tmpfile + /* istanbul ignore next -- The closure only gets called when onExit triggers */ + const removeOnExitHandler = onExit(cleanupOnExit(() => tmpfile)) + const absoluteName = path.resolve(filename) + + try { + await serializeActiveFile(absoluteName) + const truename = await promisify(fs.realpath)(filename).catch(() => filename) + tmpfile = getTmpname(truename) + + if (!options.mode || !options.chown) { + // Either mode or chown is not explicitly set + // Default behavior is to copy it from original file + const stats = await promisify(fs.stat)(truename).catch(() => {}) + if (stats) { + if (options.mode == null) { + options.mode = stats.mode + } + + if (options.chown == null && process.getuid) { + options.chown = { uid: stats.uid, gid: stats.gid } + } + } + } + + fd = await promisify(fs.open)(tmpfile, 'w', options.mode) + if (options.tmpfileCreated) { + await options.tmpfileCreated(tmpfile) + } + if (isTypedArray(data)) { + data = typedArrayToBuffer(data) + } + if (Buffer.isBuffer(data)) { + await promisify(fs.write)(fd, data, 0, data.length, 0) + } else if (data != null) { + await promisify(fs.write)(fd, String(data), 0, String(options.encoding || 'utf8')) + } + + if (options.fsync !== false) { + await promisify(fs.fsync)(fd) + } + + await promisify(fs.close)(fd) + fd = null + + if (options.chown) { + await promisify(fs.chown)(tmpfile, options.chown.uid, options.chown.gid).catch(err => { + if (!isChownErrOk(err)) { + throw err + } + }) + } + + if (options.mode) { + await promisify(fs.chmod)(tmpfile, options.mode).catch(err => { + if (!isChownErrOk(err)) { + throw err + } + }) + } + + await promisify(fs.rename)(tmpfile, truename) + } finally { + if (fd) { + await promisify(fs.close)(fd).catch( + /* istanbul ignore next */ + () => {} + ) + } + removeOnExitHandler() + await promisify(fs.unlink)(tmpfile).catch(() => {}) + activeFiles[absoluteName].shift() // remove the element added by serializeSameFile + if (activeFiles[absoluteName].length > 0) { + activeFiles[absoluteName][0]() // start next job if one is pending + } else delete activeFiles[absoluteName] + } +} + +function writeFile (filename, data, options, callback) { + if (options instanceof Function) { + callback = options + options = {} + } + + const promise = writeFileAsync(filename, data, options) + if (callback) { + promise.then(callback, callback) + } + + return promise +} + +function writeFileSync (filename, data, options) { + if (typeof options === 'string') options = { encoding: options } + else if (!options) options = {} + try { + filename = fs.realpathSync(filename) + } catch (ex) { + // it's ok, it'll happen on a not yet existing file + } + const tmpfile = getTmpname(filename) + + if (!options.mode || !options.chown) { + // Either mode or chown is not explicitly set + // Default behavior is to copy it from original file + try { + const stats = fs.statSync(filename) + options = Object.assign({}, options) + if (!options.mode) { + options.mode = stats.mode + } + if (!options.chown && process.getuid) { + options.chown = { uid: stats.uid, gid: stats.gid } + } + } catch (ex) { + // ignore stat errors + } + } + + let fd + const cleanup = cleanupOnExit(tmpfile) + const removeOnExitHandler = onExit(cleanup) + + let threw = true + try { + fd = fs.openSync(tmpfile, 'w', options.mode || 0o666) + if (options.tmpfileCreated) { + options.tmpfileCreated(tmpfile) + } + if (isTypedArray(data)) { + data = typedArrayToBuffer(data) + } + if (Buffer.isBuffer(data)) { + fs.writeSync(fd, data, 0, data.length, 0) + } else if (data != null) { + fs.writeSync(fd, String(data), 0, String(options.encoding || 'utf8')) + } + if (options.fsync !== false) { + fs.fsyncSync(fd) + } + + fs.closeSync(fd) + fd = null + + if (options.chown) { + try { + fs.chownSync(tmpfile, options.chown.uid, options.chown.gid) + } catch (err) { + if (!isChownErrOk(err)) { + throw err + } + } + } + + if (options.mode) { + try { + fs.chmodSync(tmpfile, options.mode) + } catch (err) { + if (!isChownErrOk(err)) { + throw err + } + } + } + + fs.renameSync(tmpfile, filename) + threw = false + } finally { + if (fd) { + try { + fs.closeSync(fd) + } catch (ex) { + // ignore close errors at this stage, error may have closed fd already. + } + } + removeOnExitHandler() + if (threw) { + cleanup() + } + } +} diff --git a/node_modules/write-file-atomic/package.json b/node_modules/write-file-atomic/package.json new file mode 100644 index 0000000..e46714a --- /dev/null +++ b/node_modules/write-file-atomic/package.json @@ -0,0 +1,77 @@ +{ + "_from": "write-file-atomic@^3.0.0", + "_id": "write-file-atomic@3.0.3", + "_inBundle": false, + "_integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "_location": "/write-file-atomic", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "write-file-atomic@^3.0.0", + "name": "write-file-atomic", + "escapedName": "write-file-atomic", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/configstore" + ], + "_resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "_shasum": "56bd5c5a5c70481cd19c571bd39ab965a5de56e8", + "_spec": "write-file-atomic@^3.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\configstore", + "author": { + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": "http://re-becca.org" + }, + "bugs": { + "url": "https://github.com/npm/write-file-atomic/issues" + }, + "bundleDependencies": false, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + }, + "deprecated": false, + "description": "Write files in an atomic fashion w/configurable ownership", + "devDependencies": { + "mkdirp": "^0.5.1", + "require-inject": "^1.4.4", + "rimraf": "^2.6.3", + "standard": "^14.3.1", + "tap": "^14.10.6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/npm/write-file-atomic", + "keywords": [ + "writeFile", + "atomic" + ], + "license": "ISC", + "main": "index.js", + "name": "write-file-atomic", + "repository": { + "type": "git", + "url": "git://github.com/npm/write-file-atomic.git" + }, + "scripts": { + "lint": "standard", + "postlint": "rimraf chowncopy good nochmod nochown nofsync nofsyncopt noopen norename \"norename nounlink\" nowrite", + "posttest": "npm run lint", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "100": true + }, + "version": "3.0.3" +} diff --git a/node_modules/xdg-basedir/index.d.ts b/node_modules/xdg-basedir/index.d.ts new file mode 100644 index 0000000..c70b7d4 --- /dev/null +++ b/node_modules/xdg-basedir/index.d.ts @@ -0,0 +1,81 @@ +declare const xdgBasedir: { + /** + Directory for user-specific data files. + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.data; + //=> '/home/sindresorhus/.local/share' + ``` + */ + readonly data?: string; + + /** + Directory for user-specific configuration files. + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.config; + //=> '/home/sindresorhus/.config' + ``` + */ + readonly config?: string; + + /** + Directory for user-specific non-essential data files. + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.cache; + //=> '/home/sindresorhus/.cache' + ``` + */ + readonly cache?: string; + + /** + Directory for user-specific non-essential runtime files and other file objects (such as sockets, named pipes, etc). + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.runtime; + //=> '/run/user/sindresorhus' + ``` + */ + readonly runtime?: string; + + /** + Preference-ordered array of base directories to search for data files in addition to `.data`. + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.dataDirs + //=> ['/home/sindresorhus/.local/share', '/usr/local/share/', '/usr/share/'] + ``` + */ + readonly dataDirs: readonly string[]; + + /** + Preference-ordered array of base directories to search for configuration files in addition to `.config`. + + @example + ```js + import xdgBasedir = require('xdg-basedir'); + + xdgBasedir.configDirs; + //=> ['/home/sindresorhus/.config', '/etc/xdg'] + ``` + */ + readonly configDirs: readonly string[]; +}; + +export = xdgBasedir; diff --git a/node_modules/xdg-basedir/index.js b/node_modules/xdg-basedir/index.js new file mode 100644 index 0000000..0da1f2f --- /dev/null +++ b/node_modules/xdg-basedir/index.js @@ -0,0 +1,28 @@ +'use strict'; +const os = require('os'); +const path = require('path'); + +const homeDirectory = os.homedir(); +const {env} = process; + +exports.data = env.XDG_DATA_HOME || + (homeDirectory ? path.join(homeDirectory, '.local', 'share') : undefined); + +exports.config = env.XDG_CONFIG_HOME || + (homeDirectory ? path.join(homeDirectory, '.config') : undefined); + +exports.cache = env.XDG_CACHE_HOME || (homeDirectory ? path.join(homeDirectory, '.cache') : undefined); + +exports.runtime = env.XDG_RUNTIME_DIR || undefined; + +exports.dataDirs = (env.XDG_DATA_DIRS || '/usr/local/share/:/usr/share/').split(':'); + +if (exports.data) { + exports.dataDirs.unshift(exports.data); +} + +exports.configDirs = (env.XDG_CONFIG_DIRS || '/etc/xdg').split(':'); + +if (exports.config) { + exports.configDirs.unshift(exports.config); +} diff --git a/node_modules/xdg-basedir/license b/node_modules/xdg-basedir/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/xdg-basedir/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/xdg-basedir/package.json b/node_modules/xdg-basedir/package.json new file mode 100644 index 0000000..15b9a75 --- /dev/null +++ b/node_modules/xdg-basedir/package.json @@ -0,0 +1,74 @@ +{ + "_from": "xdg-basedir@^4.0.0", + "_id": "xdg-basedir@4.0.0", + "_inBundle": false, + "_integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "_location": "/xdg-basedir", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "xdg-basedir@^4.0.0", + "name": "xdg-basedir", + "escapedName": "xdg-basedir", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/configstore", + "/update-notifier" + ], + "_resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "_shasum": "4bc8d9984403696225ef83a1573cbbcb4e79db13", + "_spec": "xdg-basedir@^4.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\update-notifier", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/xdg-basedir/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Get XDG Base Directory paths", + "devDependencies": { + "ava": "^1.4.1", + "import-fresh": "^3.0.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/xdg-basedir#readme", + "keywords": [ + "xdg", + "base", + "directory", + "basedir", + "path", + "data", + "config", + "cache", + "linux", + "unix", + "spec" + ], + "license": "MIT", + "name": "xdg-basedir", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/xdg-basedir.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.0.0" +} diff --git a/node_modules/xdg-basedir/readme.md b/node_modules/xdg-basedir/readme.md new file mode 100644 index 0000000..f7aca05 --- /dev/null +++ b/node_modules/xdg-basedir/readme.md @@ -0,0 +1,60 @@ +# xdg-basedir [![Build Status](https://travis-ci.org/sindresorhus/xdg-basedir.svg?branch=master)](https://travis-ci.org/sindresorhus/xdg-basedir) + +> Get [XDG Base Directory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) paths + + +## Install + +``` +$ npm install xdg-basedir +``` + + +## Usage + +```js +const xdgBasedir = require('xdg-basedir'); + +xdgBasedir.data; +//=> '/home/sindresorhus/.local/share' + +xdgBasedir.config; +//=> '/home/sindresorhus/.config' + +xdgBasedir.dataDirs +//=> ['/home/sindresorhus/.local/share', '/usr/local/share/', '/usr/share/'] +``` + + +## API + +The properties `.data`, `.config`, `.cache`, `.runtime` will return `null` in the uncommon case that both the XDG environment variable is not set and the users home directory can't be found. You need to handle this case. A common solution is to [fall back to a temp directory](https://github.com/yeoman/configstore/blob/b82690fc401318ad18dcd7d151a0003a4898a314/index.js#L15). + +### .data + +Directory for user-specific data files. + +### .config + +Directory for user-specific configuration files. + +### .cache + +Directory for user-specific non-essential data files. + +### .runtime + +Directory for user-specific non-essential runtime files and other file objects (such as sockets, named pipes, etc). + +### .dataDirs + +Preference-ordered array of base directories to search for data files in addition to `.data`. + +### .configDirs + +Preference-ordered array of base directories to search for configuration files in addition to `.config`. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/xtend/.jshintrc b/node_modules/xtend/.jshintrc new file mode 100644 index 0000000..77887b5 --- /dev/null +++ b/node_modules/xtend/.jshintrc @@ -0,0 +1,30 @@ +{ + "maxdepth": 4, + "maxstatements": 200, + "maxcomplexity": 12, + "maxlen": 80, + "maxparams": 5, + + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": false, + "noarg": true, + "noempty": true, + "nonew": true, + "undef": true, + "unused": "vars", + "trailing": true, + + "quotmark": true, + "expr": true, + "asi": true, + + "browser": false, + "esnext": true, + "devel": false, + "node": false, + "nonstandard": false, + + "predef": ["require", "module", "__dirname", "__filename"] +} diff --git a/node_modules/xtend/LICENSE b/node_modules/xtend/LICENSE new file mode 100644 index 0000000..0099f4f --- /dev/null +++ b/node_modules/xtend/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2012-2014 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/xtend/README.md b/node_modules/xtend/README.md new file mode 100644 index 0000000..4a2703c --- /dev/null +++ b/node_modules/xtend/README.md @@ -0,0 +1,32 @@ +# xtend + +[![browser support][3]][4] + +[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) + +Extend like a boss + +xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. + +## Examples + +```js +var extend = require("xtend") + +// extend returns a new object. Does not mutate arguments +var combination = extend({ + a: "a", + b: "c" +}, { + b: "b" +}) +// { a: "a", b: "b" } +``` + +## Stability status: Locked + +## MIT Licensed + + + [3]: http://ci.testling.com/Raynos/xtend.png + [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/xtend/immutable.js b/node_modules/xtend/immutable.js new file mode 100644 index 0000000..94889c9 --- /dev/null +++ b/node_modules/xtend/immutable.js @@ -0,0 +1,19 @@ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend() { + var target = {} + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} diff --git a/node_modules/xtend/mutable.js b/node_modules/xtend/mutable.js new file mode 100644 index 0000000..72debed --- /dev/null +++ b/node_modules/xtend/mutable.js @@ -0,0 +1,17 @@ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} diff --git a/node_modules/xtend/package.json b/node_modules/xtend/package.json new file mode 100644 index 0000000..c8c5441 --- /dev/null +++ b/node_modules/xtend/package.json @@ -0,0 +1,86 @@ +{ + "_from": "xtend@~4.0.0", + "_id": "xtend@4.0.2", + "_inBundle": false, + "_integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "_location": "/xtend", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "xtend@~4.0.0", + "name": "xtend", + "escapedName": "xtend", + "rawSpec": "~4.0.0", + "saveSpec": null, + "fetchSpec": "~4.0.0" + }, + "_requiredBy": [ + "/stream-spigot" + ], + "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "_shasum": "bb72779f5fa465186b1f438f674fa347fdb5db54", + "_spec": "xtend@~4.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\stream-spigot", + "author": { + "name": "Raynos", + "email": "raynos2@gmail.com" + }, + "bugs": { + "url": "https://github.com/Raynos/xtend/issues", + "email": "raynos2@gmail.com" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jake Verbaten" + }, + { + "name": "Matt Esch" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "extend like a boss", + "devDependencies": { + "tape": "~1.1.0" + }, + "engines": { + "node": ">=0.4" + }, + "homepage": "https://github.com/Raynos/xtend", + "keywords": [ + "extend", + "merge", + "options", + "opts", + "object", + "array" + ], + "license": "MIT", + "main": "immutable", + "name": "xtend", + "repository": { + "type": "git", + "url": "git://github.com/Raynos/xtend.git" + }, + "scripts": { + "test": "node test" + }, + "testling": { + "files": "test.js", + "browsers": [ + "ie/7..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest" + ] + }, + "version": "4.0.2" +} diff --git a/node_modules/xtend/test.js b/node_modules/xtend/test.js new file mode 100644 index 0000000..b895b42 --- /dev/null +++ b/node_modules/xtend/test.js @@ -0,0 +1,103 @@ +var test = require("tape") +var extend = require("./") +var mutableExtend = require("./mutable") + +test("merge", function(assert) { + var a = { a: "foo" } + var b = { b: "bar" } + + assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) + assert.end() +}) + +test("replace", function(assert) { + var a = { a: "foo" } + var b = { a: "bar" } + + assert.deepEqual(extend(a, b), { a: "bar" }) + assert.end() +}) + +test("undefined", function(assert) { + var a = { a: undefined } + var b = { b: "foo" } + + assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) + assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) + assert.end() +}) + +test("handle 0", function(assert) { + var a = { a: "default" } + var b = { a: 0 } + + assert.deepEqual(extend(a, b), { a: 0 }) + assert.deepEqual(extend(b, a), { a: "default" }) + assert.end() +}) + +test("is immutable", function (assert) { + var record = {} + + extend(record, { foo: "bar" }) + assert.equal(record.foo, undefined) + assert.end() +}) + +test("null as argument", function (assert) { + var a = { foo: "bar" } + var b = null + var c = void 0 + + assert.deepEqual(extend(b, a, c), { foo: "bar" }) + assert.end() +}) + +test("mutable", function (assert) { + var a = { foo: "bar" } + + mutableExtend(a, { bar: "baz" }) + + assert.equal(a.bar, "baz") + assert.end() +}) + +test("null prototype", function(assert) { + var a = { a: "foo" } + var b = Object.create(null) + b.b = "bar"; + + assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) + assert.end() +}) + +test("null prototype mutable", function (assert) { + var a = { foo: "bar" } + var b = Object.create(null) + b.bar = "baz"; + + mutableExtend(a, b) + + assert.equal(a.bar, "baz") + assert.end() +}) + +test("prototype pollution", function (assert) { + var a = {} + var maliciousPayload = '{"__proto__":{"oops":"It works!"}}' + + assert.strictEqual(a.oops, undefined) + extend({}, maliciousPayload) + assert.strictEqual(a.oops, undefined) + assert.end() +}) + +test("prototype pollution mutable", function (assert) { + var a = {} + var maliciousPayload = '{"__proto__":{"oops":"It works!"}}' + + assert.strictEqual(a.oops, undefined) + mutableExtend({}, maliciousPayload) + assert.strictEqual(a.oops, undefined) + assert.end() +}) diff --git a/node_modules/yallist/LICENSE b/node_modules/yallist/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/yallist/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/yallist/README.md b/node_modules/yallist/README.md new file mode 100644 index 0000000..f586101 --- /dev/null +++ b/node_modules/yallist/README.md @@ -0,0 +1,204 @@ +# yallist + +Yet Another Linked List + +There are many doubly-linked list implementations like it, but this +one is mine. + +For when an array would be too big, and a Map can't be iterated in +reverse order. + + +[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist) + +## basic usage + +```javascript +var yallist = require('yallist') +var myList = yallist.create([1, 2, 3]) +myList.push('foo') +myList.unshift('bar') +// of course pop() and shift() are there, too +console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] +myList.forEach(function (k) { + // walk the list head to tail +}) +myList.forEachReverse(function (k, index, list) { + // walk the list tail to head +}) +var myDoubledList = myList.map(function (k) { + return k + k +}) +// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] +// mapReverse is also a thing +var myDoubledListReverse = myList.mapReverse(function (k) { + return k + k +}) // ['foofoo', 6, 4, 2, 'barbar'] + +var reduced = myList.reduce(function (set, entry) { + set += entry + return set +}, 'start') +console.log(reduced) // 'startfoo123bar' +``` + +## api + +The whole API is considered "public". + +Functions with the same name as an Array method work more or less the +same way. + +There's reverse versions of most things because that's the point. + +### Yallist + +Default export, the class that holds and manages a list. + +Call it with either a forEach-able (like an array) or a set of +arguments, to initialize the list. + +The Array-ish methods all act like you'd expect. No magic length, +though, so if you change that it won't automatically prune or add +empty spots. + +### Yallist.create(..) + +Alias for Yallist function. Some people like factories. + +#### yallist.head + +The first node in the list + +#### yallist.tail + +The last node in the list + +#### yallist.length + +The number of nodes in the list. (Change this at your peril. It is +not magic like Array length.) + +#### yallist.toArray() + +Convert the list to an array. + +#### yallist.forEach(fn, [thisp]) + +Call a function on each item in the list. + +#### yallist.forEachReverse(fn, [thisp]) + +Call a function on each item in the list, in reverse order. + +#### yallist.get(n) + +Get the data at position `n` in the list. If you use this a lot, +probably better off just using an Array. + +#### yallist.getReverse(n) + +Get the data at position `n`, counting from the tail. + +#### yallist.map(fn, thisp) + +Create a new Yallist with the result of calling the function on each +item. + +#### yallist.mapReverse(fn, thisp) + +Same as `map`, but in reverse. + +#### yallist.pop() + +Get the data from the list tail, and remove the tail from the list. + +#### yallist.push(item, ...) + +Insert one or more items to the tail of the list. + +#### yallist.reduce(fn, initialValue) + +Like Array.reduce. + +#### yallist.reduceReverse + +Like Array.reduce, but in reverse. + +#### yallist.reverse + +Reverse the list in place. + +#### yallist.shift() + +Get the data from the list head, and remove the head from the list. + +#### yallist.slice([from], [to]) + +Just like Array.slice, but returns a new Yallist. + +#### yallist.sliceReverse([from], [to]) + +Just like yallist.slice, but the result is returned in reverse. + +#### yallist.toArray() + +Create an array representation of the list. + +#### yallist.toArrayReverse() + +Create a reversed array representation of the list. + +#### yallist.unshift(item, ...) + +Insert one or more items to the head of the list. + +#### yallist.unshiftNode(node) + +Move a Node object to the front of the list. (That is, pull it out of +wherever it lives, and make it the new head.) + +If the node belongs to a different list, then that list will remove it +first. + +#### yallist.pushNode(node) + +Move a Node object to the end of the list. (That is, pull it out of +wherever it lives, and make it the new tail.) + +If the node belongs to a list already, then that list will remove it +first. + +#### yallist.removeNode(node) + +Remove a node from the list, preserving referential integrity of head +and tail and other nodes. + +Will throw an error if you try to have a list remove a node that +doesn't belong to it. + +### Yallist.Node + +The class that holds the data and is actually the list. + +Call with `var n = new Node(value, previousNode, nextNode)` + +Note that if you do direct operations on Nodes themselves, it's very +easy to get into weird states where the list is broken. Be careful :) + +#### node.next + +The next node in the list. + +#### node.prev + +The previous node in the list. + +#### node.value + +The data the node contains. + +#### node.list + +The list to which this node belongs. (Null if it does not belong to +any list.) diff --git a/node_modules/yallist/iterator.js b/node_modules/yallist/iterator.js new file mode 100644 index 0000000..d41c97a --- /dev/null +++ b/node_modules/yallist/iterator.js @@ -0,0 +1,8 @@ +'use strict' +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} diff --git a/node_modules/yallist/package.json b/node_modules/yallist/package.json new file mode 100644 index 0000000..f231e8c --- /dev/null +++ b/node_modules/yallist/package.json @@ -0,0 +1,62 @@ +{ + "_from": "yallist@^4.0.0", + "_id": "yallist@4.0.0", + "_inBundle": false, + "_integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "_location": "/yallist", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yallist@^4.0.0", + "name": "yallist", + "escapedName": "yallist", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/lru-cache" + ], + "_resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "_shasum": "9bb92790d9c0effec63be73519e11a35019a3a72", + "_spec": "yallist@^4.0.0", + "_where": "D:\\Cricbuzzz\\node_modules\\lru-cache", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/yallist/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Yet Another Linked List", + "devDependencies": { + "tap": "^12.1.0" + }, + "directories": { + "test": "test" + }, + "files": [ + "yallist.js", + "iterator.js" + ], + "homepage": "https://github.com/isaacs/yallist#readme", + "license": "ISC", + "main": "yallist.js", + "name": "yallist", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/yallist.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "4.0.0" +} diff --git a/node_modules/yallist/yallist.js b/node_modules/yallist/yallist.js new file mode 100644 index 0000000..4e83ab1 --- /dev/null +++ b/node_modules/yallist/yallist.js @@ -0,0 +1,426 @@ +'use strict' +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } + + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + require('./iterator.js')(Yallist) +} catch (er) {} diff --git a/public/animation.css b/public/animation.css new file mode 100644 index 0000000..d446a07 --- /dev/null +++ b/public/animation.css @@ -0,0 +1,44 @@ +.slideshow { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 0; + list-style: none; + margin: 0; + padding: 0; + } + .slideshow li { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; + opacity: 0; + z-index: 0; + animation: imageAnimation 50s linear infinite; + } + .slideshow li:nth-child(1) { + background-image: url(https://images.unsplash.com/photo-1540747913346-19e32dc3e97e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60) + } + .slideshow li:nth-child(2) { + background-image: url(http://i.imgur.com/SBEmFpv.jpg); + animation-delay: 10s; + } + .slideshow li:nth-child(3) { + background-image: url(http://i.imgur.com/emvhOnb.jpg); + animation-delay: 20s; + } + .slideshow li:nth-child(4) { + background-image: url(http://i.imgur.com/2LSMCmJ.jpg); + animation-delay: 30s; + } + .slideshow li:nth-child(5) { + background-image: url(http://i.imgur.com/TVGe0Ef.jpg); + animation-delay: 40s; + } + /* Older browser support - .no-cssanimations class added by modernizr */ diff --git a/public/app.js b/public/app.js new file mode 100644 index 0000000..1b22147 --- /dev/null +++ b/public/app.js @@ -0,0 +1,4 @@ + +if( 'serviceWorker' in navigator ) { + navigator.serviceWorker.register('/sw.js') +} \ No newline at end of file diff --git a/public/backgroundSlider.js b/public/backgroundSlider.js new file mode 100644 index 0000000..348526c --- /dev/null +++ b/public/backgroundSlider.js @@ -0,0 +1,18 @@ +var i = 0 ; +function changeBackground(){ + console.log("in function") + if(i%4 == 0){ + url = "https://images.unsplash.com/photo-1540747913346-19e32dc3e97e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" + }else if( i%4 == 1 ){ + url = "https://images.unsplash.com/photo-1531415074968-036ba1b575da?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" + }else if(i%4 == 2){ + url = "https://images.unsplash.com/photo-1568290747765-1b4a44724fe9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" + }else{ + url = "https://images.unsplash.com/photo-1559579313-021b6ec9f6d6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" + } + $("body").css("background-image", "url(" + url + ")"); + i++; +} +$(document).ready(function(){ + myVar = setInterval("changeBackground()", 4000); +}) \ No newline at end of file diff --git a/public/css/.DS_Store b/public/css/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ebc61bc6022ffaee31a83244b58b4fd2f6a24b44 GIT binary patch literal 8196 zcmeHM&2G~`5S~p6O&TQJ(uyL4#0ArSiS1 zw`Es78mz&EuC{ueyFPKmSuCl4GY%kEhZT8U7fP6Hkg2uT>1J zpy?N^#$)--EjhLtuUbLnX#CLgs@<_=uenZZ)0n>P)dI_{IgJQ(W8JNlyjH<$)=K_H zG4!|YmV(NrF|*omUIDsl)toigcWt-o279SAe>RQt`}>Pm7v{{R>+Lyn|K{@IoOxqu zx!pECr&1TMT)TDuQN8{8&D(eHKYaZ3<*S@K3AIVmx$t|p|Ax`*AeV@HNky-YNN&*! z#F6746UoF=_=v`TGR9vH+2A58Vm-(VI*4RYGVVIW8FK&;Dx%6tN0B&+XQ+&KZM@<* zUfwXSNEAPV{pBS!WmfG0%Xhtl zZ-2}-&J~f0X}NRm0Xb}k zW~O%|Oe1M@JJAdz!`aPp{eNfp`~MTofu5XZVAL59V=Kj#0$4cu+1O7A*V-oJ8H5|# ybwVv6=wvw#Ez5D}?jMF2n=oZeUg=J#aRlujya>?G|CrzP@|Tu={>z*kh3+?w_3Y>X literal 0 HcmV?d00001 diff --git a/public/css/ajax-loader.gif b/public/css/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3962f969930b0a5cb13fa079f273167082abf68 GIT binary patch literal 3208 zcmc(idr(tX9>*`aH#d)ab@kq01A!Wph)@ebf$~%#K!AWe1Ox$*7!^bXc?bl7@CXUW zGlXYANgy#q6cHbw)$)*nC=6B+wW|xX6~%WMySCd|7u?yIomu|anVspLKhK;wXFlKG z_xqhWTyIZ%hZrWn1m*$YGo|>APn3!m9Z|~{pdHwqJ{QUgP%#2E< zs;#XB{@=>=iK6;!*Y*$Hl1UMrZjvv1yYhs^1bsaFqw2-#}7t+&*K$wzaal zc}SILBCP7W%{Cyca55cabMzW53Embazk6}kyKY^Xpak7>>vytKut)9p=N z#&zsV7gJc3Udctrlfs?7ax8Q4!J^AGlifw@TjK&++1OPA#R?{iM9z?gPGZUr^>h+2N3;46vTw6huczv}pXz08=cw>qDfNw$Oz+Go19x-k^21vVi$xlDAc0uY;bRyaRwCcOlo9NPWrdB6jf0wHNsY1rtD0+?pT|y^-_z9)nn9f zm3GauBd)}{U(S{mi6oj^Ux!~%;0*)zH`0s0k(E${CvR>o!ipxHAD;$hfQF&ICqFy` zI<7Nb+P|9(ckU>e!)~g{_Vbcck&*y?(~DQtCbGU|E0=V@qWjzEs=3kq1|A_RnrfI6 z%|VhFd9d4xhpo%;>FbG`%`R29?j^rBmDaD3g0x7X9d2xyIH|>+vq1paiikK3vH5zM(mk5if-X z(noP}urxYrczrn_p4>Gvlfi2$OTLJ`Y<#{sE?Ubfn|OWrH|?p%z3{SKxHbKtK@1l`MBOIrBGRk}R*Pk)KwzjAbWU!);wJFpXFv zk$v##{JhsQ_Dlr~#$b#YCJuQdO@(_|2+~4V~^_RfQjjqK?Lu7Y%!QkaB@i z$|AtMD4e6RVI`X*y;mz!^Pzl?O|)*b1qcrj85{>v9@RX3TKTPevFTHvIKNlUQ{hui z#ShNmqB?PylOuSj?uH3Yt>m5x7%VaTfay zd*dsR760|i@Ut4~``Emi_-BF2W1<4gb~+Wij@pEO@TTSK>7Q;UK--q_cOa5dQEH{c zRzZE;mz4JlrJa?*XMDDK7mJW!m2}kjpo5vOtO|!~YDrG33ndPKZjtL8 zKoP6dh=?HI@i>RBF1QKPGC5>Y4?3E%t?{9GY@0a#jYpCv4kmCCb=6|ArV9svX$jPo5;+FW*4D~m$Z zg2Y8~2zDcPwjQMKK|w-6>5u5k+3%hYrW=jH>xUHqQw__*^wACE;pg}Bj#;f)vI^h+pEM9Vl1T-w zRtwn&IazcDglIH{sgXF`fx=x30vMacS8EWWd%qzBf&)>jU5FYjPC^hZyx@UhFgMiv zE@E&W#;A{q;k)BAIC0p41K#}sd*S|+_YA23-ea%6=4r&L)Kbc2Y{oV4Nd|(($|^agAFFX^LCJu?zIEcTN60Mdn9}=cnj~zx6dEo zg6|n`Xg^1N=yUr@*$d<~+mY$xr`?wf!n6O$1Z4DEk^ZM5SivT5T1C`#$zvzF@q9&0 zZ|wnQ2u4IQIo|O`hxoj;l0Cdi878u)6lBK8s_p9!E2`;r^;K#~UTB4*)QSkhM;!ff z8B|h72PajO4P5Rf6&ZTOcEz9VAlU&F@EWkFLUc!GJ_y9 z&#s)>sXztCy;q2a_016j>I&ZnUgvfwxu_k5F!C8MjIP1*Up9BjEbUZ+b6Q3=0Tx!p zKJ2HFQd3DuR(8xVTR7j_DZ0=o1tI#c^`K<>D-=?PP!g div { + display: none; +} +.datepicker.days div.datepicker-days { + display: block; +} +.datepicker.months div.datepicker-months { + display: block; +} +.datepicker.years div.datepicker-years { + display: block; +} +.datepicker table { + margin: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.datepicker td, +.datepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + border: none; +} +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} +.datepicker table tr td.day:hover, +.datepicker table tr td.day.focused { + background: #eeeeee; + cursor: pointer; +} +.datepicker table tr td.old, +.datepicker table tr td.new { + color: #999999; +} +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: #999999; + cursor: default; +} +.datepicker table tr td.today, +.datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); + background-image: linear-gradient(top, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #000; +} +.datepicker table tr td.today:hover, +.datepicker table tr td.today:hover:hover, +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today.disabled:hover:hover, +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today:hover.disabled, +.datepicker table tr td.today.disabled.disabled, +.datepicker table tr td.today.disabled:hover.disabled, +.datepicker table tr td.today[disabled], +.datepicker table tr td.today:hover[disabled], +.datepicker table tr td.today.disabled[disabled], +.datepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active { + background-color: #fbf069 \9; +} +.datepicker table tr td.today:hover:hover { + color: #000; +} +.datepicker table tr td.today.active:hover { + color: #fff; +} +.datepicker table tr td.range, +.datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:hover { + background: #eeeeee; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today, +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:hover { + background-color: #f3d17a; + background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); + background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -o-linear-gradient(top, #f3c17a, #f3e97a); + background-image: linear-gradient(top, #f3c17a, #f3e97a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); + border-color: #f3e97a #f3e97a #edde34; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:hover:hover, +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today.disabled:hover:hover, +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today:hover.disabled, +.datepicker table tr td.range.today.disabled.disabled, +.datepicker table tr td.range.today.disabled:hover.disabled, +.datepicker table tr td.range.today[disabled], +.datepicker table tr td.range.today:hover[disabled], +.datepicker table tr td.range.today.disabled[disabled], +.datepicker table tr td.range.today.disabled:hover[disabled] { + background-color: #f3e97a; +} +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active { + background-color: #efe24b \9; +} +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + background-color: #9e9e9e; + background-image: -moz-linear-gradient(top, #b3b3b3, #808080); + background-image: -ms-linear-gradient(top, #b3b3b3, #808080); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); + background-image: -webkit-linear-gradient(top, #b3b3b3, #808080); + background-image: -o-linear-gradient(top, #b3b3b3, #808080); + background-image: linear-gradient(top, #b3b3b3, #808080); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); + border-color: #808080 #808080 #595959; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected:hover:hover, +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.disabled:hover:hover, +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected:hover.disabled, +.datepicker table tr td.selected.disabled.disabled, +.datepicker table tr td.selected.disabled:hover.disabled, +.datepicker table tr td.selected[disabled], +.datepicker table tr td.selected:hover[disabled], +.datepicker table tr td.selected.disabled[disabled], +.datepicker table tr td.selected.disabled:hover[disabled] { + background-color: #808080; +} +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active { + background-color: #666666 \9; +} +.datepicker table tr td.active, +.datepicker table tr td.active:hover, +.datepicker table tr td.active.disabled, +.datepicker table tr td.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.active:hover, +.datepicker table tr td.active:hover:hover, +.datepicker table tr td.active.disabled:hover, +.datepicker table tr td.active.disabled:hover:hover, +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active, +.datepicker table tr td.active.disabled, +.datepicker table tr td.active:hover.disabled, +.datepicker table tr td.active.disabled.disabled, +.datepicker table tr td.active.disabled:hover.disabled, +.datepicker table tr td.active[disabled], +.datepicker table tr td.active:hover[disabled], +.datepicker table tr td.active.disabled[disabled], +.datepicker table tr td.active.disabled:hover[disabled] { + background-color: #0044cc; +} +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span { + display: block; + width: 23%; + height: 54px; + line-height: 54px; + float: left; + margin: 1%; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker table tr td span:hover { + background: #eeeeee; +} +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: #999999; + cursor: default; +} +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active:hover.disabled, +.datepicker table tr td span.active.disabled.disabled, +.datepicker table tr td span.active.disabled:hover.disabled, +.datepicker table tr td span.active[disabled], +.datepicker table tr td span.active:hover[disabled], +.datepicker table tr td span.active.disabled[disabled], +.datepicker table tr td span.active.disabled:hover[disabled] { + background-color: #0044cc; +} +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: #999999; +} +.datepicker th.datepicker-switch { + width: 145px; +} +.datepicker thead tr:first-child th, +.datepicker tfoot tr th { + cursor: pointer; +} +.datepicker thead tr:first-child th:hover, +.datepicker tfoot tr th:hover { + background: #eeeeee; +} +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} +.datepicker thead tr:first-child th.cw { + cursor: default; + background-color: transparent; +} +.input-append.date .add-on i, +.input-prepend.date .add-on i { + cursor: pointer; + width: 16px; + height: 16px; +} +.input-daterange input { + text-align: center; +} +.input-daterange input:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-daterange input:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-daterange .add-on { + display: inline-block; + width: auto; + min-width: 16px; + height: 20px; + padding: 4px 5px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + vertical-align: middle; + background-color: #eeeeee; + border: 1px solid #ccc; + margin-left: -5px; + margin-right: -5px; +} +.datepicker.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + float: left; + display: none; + min-width: 160px; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + *border-right-width: 2px; + *border-bottom-width: 2px; + color: #333333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 20px; +} +.datepicker.dropdown-menu th, +.datepicker.dropdown-menu td { + padding: 4px 5px; +} \ No newline at end of file diff --git a/public/css/bootstrap.min.css b/public/css/bootstrap.min.css new file mode 100644 index 0000000..e490fd0 --- /dev/null +++ b/public/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.0 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::after{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.custom-range::-webkit-slider-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.custom-range::-moz-range-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;appearance:none}.custom-range::-ms-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}@media screen and (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/public/css/bootstrap/.DS_Store b/public/css/bootstrap/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d6660e73830ef76dd390ef85a0ed6ae62a270593 GIT binary patch literal 6148 zcmeHK%SuBr5Iv(^6xRRKc}Bptltf3Rl{?&j3sff;})o6ux5MDFI$K@ApKsjC@885P~+0NdI&;m}HH8yzI``dM1ztkzkLInfCKrj#t1Oq?F z0MBg6^vE%EFc1s`1A7LvKO{C`S1~)5t%FL}XN^yU656^R3sc3eVs_*R#XObhsaBsD z=IQjO8rN0Kj-C!HGqX;e`Q!0oWp?^g35Ru#p@V^7V9dawcV{~PulSc~KJv#Y(F+EG zfq%w;O%}I{ITuyW)^E$xS)17I*d&U}GAOi1mjHIOkDQi4A5XFw*Hz4psv>_$C&opf M5E3dF_yq>u0s3Sw$N&HU literal 0 HcmV?d00001 diff --git a/public/css/bootstrap/bootstrap-grid.css b/public/css/bootstrap/bootstrap-grid.css new file mode 100644 index 0000000..5458751 --- /dev/null +++ b/public/css/bootstrap/bootstrap-grid.css @@ -0,0 +1,1708 @@ +/*! + * Bootstrap Grid v4.1.0 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +@-ms-viewport { + width: device-width; } + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-overflow-style: scrollbar; } + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; } + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + @media (min-width: 576px) { + .container { + max-width: 540px; } } + @media (min-width: 768px) { + .container { + max-width: 720px; } } + @media (min-width: 992px) { + .container { + max-width: 960px; } } + @media (min-width: 1200px) { + .container { + max-width: 1140px; } } + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + +.row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; } + +.no-gutters { + margin-right: 0; + margin-left: 0; } + .no-gutters > .col, + .no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; } + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; } + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + +.col-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + +.col-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + +.col-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + +.col-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + +.col-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + +.col-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + +.col-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + +.col-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + +.col-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + +.col-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + +.col-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + +.col-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + +.col-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + +.order-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + +.order-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + +.order-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + +.order-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + +.order-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + +.order-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + +.order-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + +.order-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + +.order-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + +.order-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + +.order-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + +.order-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + +.order-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + +.order-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + +.order-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + +.offset-1 { + margin-left: 8.33333%; } + +.offset-2 { + margin-left: 16.66667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333%; } + +.offset-5 { + margin-left: 41.66667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333%; } + +.offset-8 { + margin-left: 66.66667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333%; } + +.offset-11 { + margin-left: 91.66667%; } + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-sm-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-sm-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-sm-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-sm-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-sm-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-sm-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-sm-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-sm-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-sm-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-sm-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-sm-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-sm-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-sm-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-sm-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-sm-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-sm-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-sm-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-sm-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-sm-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-sm-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-sm-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-sm-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-sm-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-sm-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-sm-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-sm-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-sm-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-sm-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333%; } + .offset-sm-2 { + margin-left: 16.66667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333%; } + .offset-sm-5 { + margin-left: 41.66667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333%; } + .offset-sm-8 { + margin-left: 66.66667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333%; } + .offset-sm-11 { + margin-left: 91.66667%; } } + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-md-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-md-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-md-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-md-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-md-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-md-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-md-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-md-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-md-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-md-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-md-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-md-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-md-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-md-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-md-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-md-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-md-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-md-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-md-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-md-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-md-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-md-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-md-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-md-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-md-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-md-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-md-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-md-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333%; } + .offset-md-2 { + margin-left: 16.66667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333%; } + .offset-md-5 { + margin-left: 41.66667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333%; } + .offset-md-8 { + margin-left: 66.66667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333%; } + .offset-md-11 { + margin-left: 91.66667%; } } + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-lg-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-lg-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-lg-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-lg-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-lg-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-lg-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-lg-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-lg-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-lg-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-lg-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-lg-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-lg-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-lg-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-lg-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-lg-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-lg-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-lg-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-lg-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-lg-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-lg-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-lg-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-lg-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-lg-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-lg-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-lg-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-lg-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-lg-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-lg-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333%; } + .offset-lg-2 { + margin-left: 16.66667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333%; } + .offset-lg-5 { + margin-left: 41.66667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333%; } + .offset-lg-8 { + margin-left: 66.66667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333%; } + .offset-lg-11 { + margin-left: 91.66667%; } } + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-xl-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-xl-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-xl-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-xl-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-xl-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-xl-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-xl-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-xl-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-xl-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-xl-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-xl-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-xl-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-xl-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-xl-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-xl-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-xl-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-xl-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-xl-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-xl-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-xl-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-xl-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-xl-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-xl-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-xl-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-xl-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-xl-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-xl-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-xl-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333%; } + .offset-xl-2 { + margin-left: 16.66667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333%; } + .offset-xl-5 { + margin-left: 41.66667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333%; } + .offset-xl-8 { + margin-left: 66.66667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333%; } + .offset-xl-11 { + margin-left: 91.66667%; } } + +.d-none { + display: none !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + +.d-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 768px) { + .d-md-none { + display: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block { + display: block !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media print { + .d-print-none { + display: none !important; } + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-print-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +.flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + +.flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + +.flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + +.flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + +.flex-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + +.flex-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + +.flex-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + +.justify-content-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + +.justify-content-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + +.justify-content-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + +.justify-content-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + +.align-items-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + +.align-items-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + +.align-items-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + +.align-items-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + +.align-items-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } + +@media (min-width: 576px) { + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-sm-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-sm-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-sm-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-sm-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-sm-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-sm-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 768px) { + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-md-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-md-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-md-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-md-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-md-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-md-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-md-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-md-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-md-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 992px) { + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-lg-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-lg-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-lg-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-lg-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-lg-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-lg-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 1200px) { + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-xl-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-xl-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-xl-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-xl-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-xl-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-xl-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } diff --git a/public/css/bootstrap/bootstrap-reboot.css b/public/css/bootstrap/bootstrap-reboot.css new file mode 100644 index 0000000..9a8576c --- /dev/null +++ b/public/css/bootstrap/bootstrap-reboot.css @@ -0,0 +1,263 @@ +/*! + * Bootstrap Reboot v4.2.1 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; } + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; } + +[tabindex="-1"]:focus { + outline: 0 !important; } + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; } + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small { + font-size: 80%; } + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; } + a:hover { + color: #0056b3; + text-decoration: underline; } + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):focus { + outline: 0; } + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; } + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; } + +figure { + margin: 0 0 1rem; } + +img { + vertical-align: middle; + border-style: none; } + +svg { + overflow: hidden; + vertical-align: middle; } + +table { + border-collapse: collapse; } + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; } + +th { + text-align: inherit; } + +label { + display: inline-block; + margin-bottom: 0.5rem; } + +button { + border-radius: 0; } + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +input { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; } + +input[type="radio"], +input[type="checkbox"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; } + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; } + +textarea { + overflow: auto; + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; } + +progress { + vertical-align: baseline; } + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; } + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +summary { + display: list-item; + cursor: pointer; } + +template { + display: none; } + +[hidden] { + display: none !important; } diff --git a/public/css/css/.DS_Store b/public/css/css/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..624030ca97952bd397d1612d11f97f49e82fcc73 GIT binary patch literal 6148 zcmeHKyG{c^3>-s*BGIIvpxlxMB>rF(1te;I04`7ew%}sIM1t8PsyK`UyU`$uUtA?TJy86KOBBLnwj5Rh`;TBIg9aMjxQ0@^LwES(b z%U|Jsn?J*xYwN2;J8u?kLyrF8OZv&X8AreYmUzGm{c%wH_NCSc8B&2%AQeajQh|S{ z0DHFD_|P$9Dv%1K0$T<2`%vhLHL!EEPX~h@-*tVYsK&9~C5R>FHL!E!3Qe3!bgIM^ zL!8chiMkrtIXWF;JM%fQv&0QWYasX!|5 zrxcLU?0PokD@AV|yqxyhLcgJZ8f&ebp?3)2L|gIkPF>M4>uO-XMcU H{DuM_;_WM` literal 0 HcmV?d00001 diff --git a/public/css/css/bootstrap-reboot.css b/public/css/css/bootstrap-reboot.css new file mode 100644 index 0000000..d8c8681 --- /dev/null +++ b/public/css/css/bootstrap-reboot.css @@ -0,0 +1,272 @@ +/*! + * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; } + +@-ms-viewport { + width: device-width; } + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; } + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; } + +[tabindex="-1"]:focus { + outline: 0 !important; } + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; } + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +dfn { + font-style: italic; } + +b, +strong { + font-weight: bolder; } + +small { + font-size: 80%; } + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; } + a:hover { + color: #0056b3; + text-decoration: underline; } + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):focus { + outline: 0; } + +pre, +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; } + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; } + +figure { + margin: 0 0 1rem; } + +img { + vertical-align: middle; + border-style: none; } + +svg:not(:root) { + overflow: hidden; } + +table { + border-collapse: collapse; } + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; } + +th { + text-align: inherit; } + +label { + display: inline-block; + margin-bottom: 0.5rem; } + +button { + border-radius: 0; } + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +input { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; } + +input[type="radio"], +input[type="checkbox"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; } + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; } + +textarea { + overflow: auto; + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; } + +progress { + vertical-align: baseline; } + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; } + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +summary { + display: list-item; + cursor: pointer; } + +template { + display: none; } + +[hidden] { + display: none !important; } diff --git a/public/css/css/mixins/_text-hide.css b/public/css/css/mixins/_text-hide.css new file mode 100644 index 0000000..e69de29 diff --git a/public/css/flaticon.css b/public/css/flaticon.css new file mode 100644 index 0000000..0ffee09 --- /dev/null +++ b/public/css/flaticon.css @@ -0,0 +1,42 @@ + /* + Flaticon icon font: Flaticon + Creation date: 04/01/2019 13:45 + */ + + +@font-face { + font-family: "Flaticon"; + src: url("../fonts/flaticon/font/Flaticon.eot"); + src: url("../fonts/flaticon/font/Flaticon.eot?#iefix") format("embedded-opentype"), + url("../fonts/flaticon/font/Flaticon.woff") format("woff"), + url("../fonts/flaticon/font/Flaticon.ttf") format("truetype"), + url("../fonts/flaticon/font/Flaticon.svg#Flaticon") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Flaticon"; + src: url("../fonts/flaticon/font/Flaticon.svg#Flaticon") format("svg"); + } +} + +[class^="flaticon-"]:before, [class*=" flaticon-"]:before, +[class^="flaticon-"]:after, [class*=" flaticon-"]:after { + font-family: Flaticon; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.flaticon-baseball-ball:before { content: "\f100"; } +.flaticon-helmet:before { content: "\f101"; } +.flaticon-helmet-1:before { content: "\f102"; } +.flaticon-baseball-bat:before { content: "\f103"; } \ No newline at end of file diff --git a/public/css/icomoon.css b/public/css/icomoon.css new file mode 100644 index 0000000..128ae57 --- /dev/null +++ b/public/css/icomoon.css @@ -0,0 +1,4919 @@ +@font-face { + font-family: 'icomoon'; + src: url('../fonts/icomoon/icomoon.eot?6tt51o'); + src: url('../fonts/icomoon/icomoon.eot?6tt51o#iefix') format('embedded-opentype'), + url('../fonts/icomoon/icomoon.ttf?6tt51o') format('truetype'), + url('../fonts/icomoon/icomoon.woff?6tt51o') format('woff'), + url('../fonts/icomoon/icomoon.svg?6tt51o#icomoon') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-asterisk:before { + content: "\f069"; +} +.icon-plus:before { + content: "\f067"; +} +.icon-question:before { + content: "\f128"; +} +.icon-minus:before { + content: "\f068"; +} +.icon-glass:before { + content: "\f000"; +} +.icon-music:before { + content: "\f001"; +} +.icon-search:before { + content: "\f002"; +} +.icon-envelope-o:before { + content: "\f003"; +} +.icon-heart:before { + content: "\f004"; +} +.icon-star:before { + content: "\f005"; +} +.icon-star-o:before { + content: "\f006"; +} +.icon-user:before { + content: "\f007"; +} +.icon-film:before { + content: "\f008"; +} +.icon-th-large:before { + content: "\f009"; +} +.icon-th:before { + content: "\f00a"; +} +.icon-th-list:before { + content: "\f00b"; +} +.icon-check:before { + content: "\f00c"; +} +.icon-close:before { + content: "\f00d"; +} +.icon-remove:before { + content: "\f00d"; +} +.icon-times:before { + content: "\f00d"; +} +.icon-search-plus:before { + content: "\f00e"; +} +.icon-search-minus:before { + content: "\f010"; +} +.icon-power-off:before { + content: "\f011"; +} +.icon-signal:before { + content: "\f012"; +} +.icon-cog:before { + content: "\f013"; +} +.icon-gear:before { + content: "\f013"; +} +.icon-trash-o:before { + content: "\f014"; +} +.icon-home:before { + content: "\f015"; +} +.icon-file-o:before { + content: "\f016"; +} +.icon-clock-o:before { + content: "\f017"; +} +.icon-road:before { + content: "\f018"; +} +.icon-download:before { + content: "\f019"; +} +.icon-arrow-circle-o-down:before { + content: "\f01a"; +} +.icon-arrow-circle-o-up:before { + content: "\f01b"; +} +.icon-inbox:before { + content: "\f01c"; +} +.icon-play-circle-o:before { + content: "\f01d"; +} +.icon-repeat:before { + content: "\f01e"; +} +.icon-rotate-right:before { + content: "\f01e"; +} +.icon-refresh:before { + content: "\f021"; +} +.icon-list-alt:before { + content: "\f022"; +} +.icon-lock:before { + content: "\f023"; +} +.icon-flag:before { + content: "\f024"; +} +.icon-headphones:before { + content: "\f025"; +} +.icon-volume-off:before { + content: "\f026"; +} +.icon-volume-down:before { + content: "\f027"; +} +.icon-volume-up:before { + content: "\f028"; +} +.icon-qrcode:before { + content: "\f029"; +} +.icon-barcode:before { + content: "\f02a"; +} +.icon-tag:before { + content: "\f02b"; +} +.icon-tags:before { + content: "\f02c"; +} +.icon-book:before { + content: "\f02d"; +} +.icon-bookmark:before { + content: "\f02e"; +} +.icon-print:before { + content: "\f02f"; +} +.icon-camera:before { + content: "\f030"; +} +.icon-font:before { + content: "\f031"; +} +.icon-bold:before { + content: "\f032"; +} +.icon-italic:before { + content: "\f033"; +} +.icon-text-height:before { + content: "\f034"; +} +.icon-text-width:before { + content: "\f035"; +} +.icon-align-left:before { + content: "\f036"; +} +.icon-align-center:before { + content: "\f037"; +} +.icon-align-right:before { + content: "\f038"; +} +.icon-align-justify:before { + content: "\f039"; +} +.icon-list:before { + content: "\f03a"; +} +.icon-dedent:before { + content: "\f03b"; +} +.icon-outdent:before { + content: "\f03b"; +} +.icon-indent:before { + content: "\f03c"; +} +.icon-video-camera:before { + content: "\f03d"; +} +.icon-image:before { + content: "\f03e"; +} +.icon-photo:before { + content: "\f03e"; +} +.icon-picture-o:before { + content: "\f03e"; +} +.icon-pencil:before { + content: "\f040"; +} +.icon-map-marker:before { + content: "\f041"; +} +.icon-adjust:before { + content: "\f042"; +} +.icon-tint:before { + content: "\f043"; +} +.icon-edit:before { + content: "\f044"; +} +.icon-pencil-square-o:before { + content: "\f044"; +} +.icon-share-square-o:before { + content: "\f045"; +} +.icon-check-square-o:before { + content: "\f046"; +} +.icon-arrows:before { + content: "\f047"; +} +.icon-step-backward:before { + content: "\f048"; +} +.icon-fast-backward:before { + content: "\f049"; +} +.icon-backward:before { + content: "\f04a"; +} +.icon-play:before { + content: "\f04b"; +} +.icon-pause:before { + content: "\f04c"; +} +.icon-stop:before { + content: "\f04d"; +} +.icon-forward:before { + content: "\f04e"; +} +.icon-fast-forward:before { + content: "\f050"; +} +.icon-step-forward:before { + content: "\f051"; +} +.icon-eject:before { + content: "\f052"; +} +.icon-chevron-left:before { + content: "\f053"; +} +.icon-chevron-right:before { + content: "\f054"; +} +.icon-plus-circle:before { + content: "\f055"; +} +.icon-minus-circle:before { + content: "\f056"; +} +.icon-times-circle:before { + content: "\f057"; +} +.icon-check-circle:before { + content: "\f058"; +} +.icon-question-circle:before { + content: "\f059"; +} +.icon-info-circle:before { + content: "\f05a"; +} +.icon-crosshairs:before { + content: "\f05b"; +} +.icon-times-circle-o:before { + content: "\f05c"; +} +.icon-check-circle-o:before { + content: "\f05d"; +} +.icon-ban:before { + content: "\f05e"; +} +.icon-arrow-left:before { + content: "\f060"; +} +.icon-arrow-right:before { + content: "\f061"; +} +.icon-arrow-up:before { + content: "\f062"; +} +.icon-arrow-down:before { + content: "\f063"; +} +.icon-mail-forward:before { + content: "\f064"; +} +.icon-share:before { + content: "\f064"; +} +.icon-expand:before { + content: "\f065"; +} +.icon-compress:before { + content: "\f066"; +} +.icon-exclamation-circle:before { + content: "\f06a"; +} +.icon-gift:before { + content: "\f06b"; +} +.icon-leaf:before { + content: "\f06c"; +} +.icon-fire:before { + content: "\f06d"; +} +.icon-eye:before { + content: "\f06e"; +} +.icon-eye-slash:before { + content: "\f070"; +} +.icon-exclamation-triangle:before { + content: "\f071"; +} +.icon-warning:before { + content: "\f071"; +} +.icon-plane:before { + content: "\f072"; +} +.icon-calendar:before { + content: "\f073"; +} +.icon-random:before { + content: "\f074"; +} +.icon-comment:before { + content: "\f075"; +} +.icon-magnet:before { + content: "\f076"; +} +.icon-chevron-up:before { + content: "\f077"; +} +.icon-chevron-down:before { + content: "\f078"; +} +.icon-retweet:before { + content: "\f079"; +} +.icon-shopping-cart:before { + content: "\f07a"; +} +.icon-folder:before { + content: "\f07b"; +} +.icon-folder-open:before { + content: "\f07c"; +} +.icon-arrows-v:before { + content: "\f07d"; +} +.icon-arrows-h:before { + content: "\f07e"; +} +.icon-bar-chart:before { + content: "\f080"; +} +.icon-bar-chart-o:before { + content: "\f080"; +} +.icon-twitter-square:before { + content: "\f081"; +} +.icon-facebook-square:before { + content: "\f082"; +} +.icon-camera-retro:before { + content: "\f083"; +} +.icon-key:before { + content: "\f084"; +} +.icon-cogs:before { + content: "\f085"; +} +.icon-gears:before { + content: "\f085"; +} +.icon-comments:before { + content: "\f086"; +} +.icon-thumbs-o-up:before { + content: "\f087"; +} +.icon-thumbs-o-down:before { + content: "\f088"; +} +.icon-star-half:before { + content: "\f089"; +} +.icon-heart-o:before { + content: "\f08a"; +} +.icon-sign-out:before { + content: "\f08b"; +} +.icon-linkedin-square:before { + content: "\f08c"; +} +.icon-thumb-tack:before { + content: "\f08d"; +} +.icon-external-link:before { + content: "\f08e"; +} +.icon-sign-in:before { + content: "\f090"; +} +.icon-trophy:before { + content: "\f091"; +} +.icon-github-square:before { + content: "\f092"; +} +.icon-upload:before { + content: "\f093"; +} +.icon-lemon-o:before { + content: "\f094"; +} +.icon-phone:before { + content: "\f095"; +} +.icon-square-o:before { + content: "\f096"; +} +.icon-bookmark-o:before { + content: "\f097"; +} +.icon-phone-square:before { + content: "\f098"; +} +.icon-twitter:before { + content: "\f099"; +} +.icon-facebook:before { + content: "\f09a"; +} +.icon-facebook-f:before { + content: "\f09a"; +} +.icon-github:before { + content: "\f09b"; +} +.icon-unlock:before { + content: "\f09c"; +} +.icon-credit-card:before { + content: "\f09d"; +} +.icon-feed:before { + content: "\f09e"; +} +.icon-rss:before { + content: "\f09e"; +} +.icon-hdd-o:before { + content: "\f0a0"; +} +.icon-bullhorn:before { + content: "\f0a1"; +} +.icon-bell-o:before { + content: "\f0a2"; +} +.icon-certificate:before { + content: "\f0a3"; +} +.icon-hand-o-right:before { + content: "\f0a4"; +} +.icon-hand-o-left:before { + content: "\f0a5"; +} +.icon-hand-o-up:before { + content: "\f0a6"; +} +.icon-hand-o-down:before { + content: "\f0a7"; +} +.icon-arrow-circle-left:before { + content: "\f0a8"; +} +.icon-arrow-circle-right:before { + content: "\f0a9"; +} +.icon-arrow-circle-up:before { + content: "\f0aa"; +} +.icon-arrow-circle-down:before { + content: "\f0ab"; +} +.icon-globe:before { + content: "\f0ac"; +} +.icon-wrench:before { + content: "\f0ad"; +} +.icon-tasks:before { + content: "\f0ae"; +} +.icon-filter:before { + content: "\f0b0"; +} +.icon-briefcase:before { + content: "\f0b1"; +} +.icon-arrows-alt:before { + content: "\f0b2"; +} +.icon-group:before { + content: "\f0c0"; +} +.icon-users:before { + content: "\f0c0"; +} +.icon-chain:before { + content: "\f0c1"; +} +.icon-link:before { + content: "\f0c1"; +} +.icon-cloud:before { + content: "\f0c2"; +} +.icon-flask:before { + content: "\f0c3"; +} +.icon-cut:before { + content: "\f0c4"; +} +.icon-scissors:before { + content: "\f0c4"; +} +.icon-copy:before { + content: "\f0c5"; +} +.icon-files-o:before { + content: "\f0c5"; +} +.icon-paperclip:before { + content: "\f0c6"; +} +.icon-floppy-o:before { + content: "\f0c7"; +} +.icon-save:before { + content: "\f0c7"; +} +.icon-square:before { + content: "\f0c8"; +} +.icon-bars:before { + content: "\f0c9"; +} +.icon-navicon:before { + content: "\f0c9"; +} +.icon-reorder:before { + content: "\f0c9"; +} +.icon-list-ul:before { + content: "\f0ca"; +} +.icon-list-ol:before { + content: "\f0cb"; +} +.icon-strikethrough:before { + content: "\f0cc"; +} +.icon-underline:before { + content: "\f0cd"; +} +.icon-table:before { + content: "\f0ce"; +} +.icon-magic:before { + content: "\f0d0"; +} +.icon-truck:before { + content: "\f0d1"; +} +.icon-pinterest:before { + content: "\f0d2"; +} +.icon-pinterest-square:before { + content: "\f0d3"; +} +.icon-google-plus-square:before { + content: "\f0d4"; +} +.icon-google-plus:before { + content: "\f0d5"; +} +.icon-money:before { + content: "\f0d6"; +} +.icon-caret-down:before { + content: "\f0d7"; +} +.icon-caret-up:before { + content: "\f0d8"; +} +.icon-caret-left:before { + content: "\f0d9"; +} +.icon-caret-right:before { + content: "\f0da"; +} +.icon-columns:before { + content: "\f0db"; +} +.icon-sort:before { + content: "\f0dc"; +} +.icon-unsorted:before { + content: "\f0dc"; +} +.icon-sort-desc:before { + content: "\f0dd"; +} +.icon-sort-down:before { + content: "\f0dd"; +} +.icon-sort-asc:before { + content: "\f0de"; +} +.icon-sort-up:before { + content: "\f0de"; +} +.icon-envelope:before { + content: "\f0e0"; +} +.icon-linkedin:before { + content: "\f0e1"; +} +.icon-rotate-left:before { + content: "\f0e2"; +} +.icon-undo:before { + content: "\f0e2"; +} +.icon-gavel:before { + content: "\f0e3"; +} +.icon-legal:before { + content: "\f0e3"; +} +.icon-dashboard:before { + content: "\f0e4"; +} +.icon-tachometer:before { + content: "\f0e4"; +} +.icon-comment-o:before { + content: "\f0e5"; +} +.icon-comments-o:before { + content: "\f0e6"; +} +.icon-bolt:before { + content: "\f0e7"; +} +.icon-flash:before { + content: "\f0e7"; +} +.icon-sitemap:before { + content: "\f0e8"; +} +.icon-umbrella:before { + content: "\f0e9"; +} +.icon-clipboard:before { + content: "\f0ea"; +} +.icon-paste:before { + content: "\f0ea"; +} +.icon-lightbulb-o:before { + content: "\f0eb"; +} +.icon-exchange:before { + content: "\f0ec"; +} +.icon-cloud-download:before { + content: "\f0ed"; +} +.icon-cloud-upload:before { + content: "\f0ee"; +} +.icon-user-md:before { + content: "\f0f0"; +} +.icon-stethoscope:before { + content: "\f0f1"; +} +.icon-suitcase:before { + content: "\f0f2"; +} +.icon-bell:before { + content: "\f0f3"; +} +.icon-coffee:before { + content: "\f0f4"; +} +.icon-cutlery:before { + content: "\f0f5"; +} +.icon-file-text-o:before { + content: "\f0f6"; +} +.icon-building-o:before { + content: "\f0f7"; +} +.icon-hospital-o:before { + content: "\f0f8"; +} +.icon-ambulance:before { + content: "\f0f9"; +} +.icon-medkit:before { + content: "\f0fa"; +} +.icon-fighter-jet:before { + content: "\f0fb"; +} +.icon-beer:before { + content: "\f0fc"; +} +.icon-h-square:before { + content: "\f0fd"; +} +.icon-plus-square:before { + content: "\f0fe"; +} +.icon-angle-double-left:before { + content: "\f100"; +} +.icon-angle-double-right:before { + content: "\f101"; +} +.icon-angle-double-up:before { + content: "\f102"; +} +.icon-angle-double-down:before { + content: "\f103"; +} +.icon-angle-left:before { + content: "\f104"; +} +.icon-angle-right:before { + content: "\f105"; +} +.icon-angle-up:before { + content: "\f106"; +} +.icon-angle-down:before { + content: "\f107"; +} +.icon-desktop:before { + content: "\f108"; +} +.icon-laptop:before { + content: "\f109"; +} +.icon-tablet:before { + content: "\f10a"; +} +.icon-mobile:before { + content: "\f10b"; +} +.icon-mobile-phone:before { + content: "\f10b"; +} +.icon-circle-o:before { + content: "\f10c"; +} +.icon-quote-left:before { + content: "\f10d"; +} +.icon-quote-right:before { + content: "\f10e"; +} +.icon-spinner:before { + content: "\f110"; +} +.icon-circle:before { + content: "\f111"; +} +.icon-mail-reply:before { + content: "\f112"; +} +.icon-reply:before { + content: "\f112"; +} +.icon-github-alt:before { + content: "\f113"; +} +.icon-folder-o:before { + content: "\f114"; +} +.icon-folder-open-o:before { + content: "\f115"; +} +.icon-smile-o:before { + content: "\f118"; +} +.icon-frown-o:before { + content: "\f119"; +} +.icon-meh-o:before { + content: "\f11a"; +} +.icon-gamepad:before { + content: "\f11b"; +} +.icon-keyboard-o:before { + content: "\f11c"; +} +.icon-flag-o:before { + content: "\f11d"; +} +.icon-flag-checkered:before { + content: "\f11e"; +} +.icon-terminal:before { + content: "\f120"; +} +.icon-code:before { + content: "\f121"; +} +.icon-mail-reply-all:before { + content: "\f122"; +} +.icon-reply-all:before { + content: "\f122"; +} +.icon-star-half-empty:before { + content: "\f123"; +} +.icon-star-half-full:before { + content: "\f123"; +} +.icon-star-half-o:before { + content: "\f123"; +} +.icon-location-arrow:before { + content: "\f124"; +} +.icon-crop:before { + content: "\f125"; +} +.icon-code-fork:before { + content: "\f126"; +} +.icon-chain-broken:before { + content: "\f127"; +} +.icon-unlink:before { + content: "\f127"; +} +.icon-info:before { + content: "\f129"; +} +.icon-exclamation:before { + content: "\f12a"; +} +.icon-superscript:before { + content: "\f12b"; +} +.icon-subscript:before { + content: "\f12c"; +} +.icon-eraser:before { + content: "\f12d"; +} +.icon-puzzle-piece:before { + content: "\f12e"; +} +.icon-microphone:before { + content: "\f130"; +} +.icon-microphone-slash:before { + content: "\f131"; +} +.icon-shield:before { + content: "\f132"; +} +.icon-calendar-o:before { + content: "\f133"; +} +.icon-fire-extinguisher:before { + content: "\f134"; +} +.icon-rocket:before { + content: "\f135"; +} +.icon-maxcdn:before { + content: "\f136"; +} +.icon-chevron-circle-left:before { + content: "\f137"; +} +.icon-chevron-circle-right:before { + content: "\f138"; +} +.icon-chevron-circle-up:before { + content: "\f139"; +} +.icon-chevron-circle-down:before { + content: "\f13a"; +} +.icon-html5:before { + content: "\f13b"; +} +.icon-css3:before { + content: "\f13c"; +} +.icon-anchor:before { + content: "\f13d"; +} +.icon-unlock-alt:before { + content: "\f13e"; +} +.icon-bullseye:before { + content: "\f140"; +} +.icon-ellipsis-h:before { + content: "\f141"; +} +.icon-ellipsis-v:before { + content: "\f142"; +} +.icon-rss-square:before { + content: "\f143"; +} +.icon-play-circle:before { + content: "\f144"; +} +.icon-ticket:before { + content: "\f145"; +} +.icon-minus-square:before { + content: "\f146"; +} +.icon-minus-square-o:before { + content: "\f147"; +} +.icon-level-up:before { + content: "\f148"; +} +.icon-level-down:before { + content: "\f149"; +} +.icon-check-square:before { + content: "\f14a"; +} +.icon-pencil-square:before { + content: "\f14b"; +} +.icon-external-link-square:before { + content: "\f14c"; +} +.icon-share-square:before { + content: "\f14d"; +} +.icon-compass:before { + content: "\f14e"; +} +.icon-caret-square-o-down:before { + content: "\f150"; +} +.icon-toggle-down:before { + content: "\f150"; +} +.icon-caret-square-o-up:before { + content: "\f151"; +} +.icon-toggle-up:before { + content: "\f151"; +} +.icon-caret-square-o-right:before { + content: "\f152"; +} +.icon-toggle-right:before { + content: "\f152"; +} +.icon-eur:before { + content: "\f153"; +} +.icon-euro:before { + content: "\f153"; +} +.icon-gbp:before { + content: "\f154"; +} +.icon-dollar:before { + content: "\f155"; +} +.icon-usd:before { + content: "\f155"; +} +.icon-inr:before { + content: "\f156"; +} +.icon-rupee:before { + content: "\f156"; +} +.icon-cny:before { + content: "\f157"; +} +.icon-jpy:before { + content: "\f157"; +} +.icon-rmb:before { + content: "\f157"; +} +.icon-yen:before { + content: "\f157"; +} +.icon-rouble:before { + content: "\f158"; +} +.icon-rub:before { + content: "\f158"; +} +.icon-ruble:before { + content: "\f158"; +} +.icon-krw:before { + content: "\f159"; +} +.icon-won:before { + content: "\f159"; +} +.icon-bitcoin:before { + content: "\f15a"; +} +.icon-btc:before { + content: "\f15a"; +} +.icon-file:before { + content: "\f15b"; +} +.icon-file-text:before { + content: "\f15c"; +} +.icon-sort-alpha-asc:before { + content: "\f15d"; +} +.icon-sort-alpha-desc:before { + content: "\f15e"; +} +.icon-sort-amount-asc:before { + content: "\f160"; +} +.icon-sort-amount-desc:before { + content: "\f161"; +} +.icon-sort-numeric-asc:before { + content: "\f162"; +} +.icon-sort-numeric-desc:before { + content: "\f163"; +} +.icon-thumbs-up:before { + content: "\f164"; +} +.icon-thumbs-down:before { + content: "\f165"; +} +.icon-youtube-square:before { + content: "\f166"; +} +.icon-youtube:before { + content: "\f167"; +} +.icon-xing:before { + content: "\f168"; +} +.icon-xing-square:before { + content: "\f169"; +} +.icon-youtube-play:before { + content: "\f16a"; +} +.icon-dropbox:before { + content: "\f16b"; +} +.icon-stack-overflow:before { + content: "\f16c"; +} +.icon-instagram:before { + content: "\f16d"; +} +.icon-flickr:before { + content: "\f16e"; +} +.icon-adn:before { + content: "\f170"; +} +.icon-bitbucket:before { + content: "\f171"; +} +.icon-bitbucket-square:before { + content: "\f172"; +} +.icon-tumblr:before { + content: "\f173"; +} +.icon-tumblr-square:before { + content: "\f174"; +} +.icon-long-arrow-down:before { + content: "\f175"; +} +.icon-long-arrow-up:before { + content: "\f176"; +} +.icon-long-arrow-left:before { + content: "\f177"; +} +.icon-long-arrow-right:before { + content: "\f178"; +} +.icon-apple:before { + content: "\f179"; +} +.icon-windows:before { + content: "\f17a"; +} +.icon-android:before { + content: "\f17b"; +} +.icon-linux:before { + content: "\f17c"; +} +.icon-dribbble:before { + content: "\f17d"; +} +.icon-skype:before { + content: "\f17e"; +} +.icon-foursquare:before { + content: "\f180"; +} +.icon-trello:before { + content: "\f181"; +} +.icon-female:before { + content: "\f182"; +} +.icon-male:before { + content: "\f183"; +} +.icon-gittip:before { + content: "\f184"; +} +.icon-gratipay:before { + content: "\f184"; +} +.icon-sun-o:before { + content: "\f185"; +} +.icon-moon-o:before { + content: "\f186"; +} +.icon-archive:before { + content: "\f187"; +} +.icon-bug:before { + content: "\f188"; +} +.icon-vk:before { + content: "\f189"; +} +.icon-weibo:before { + content: "\f18a"; +} +.icon-renren:before { + content: "\f18b"; +} +.icon-pagelines:before { + content: "\f18c"; +} +.icon-stack-exchange:before { + content: "\f18d"; +} +.icon-arrow-circle-o-right:before { + content: "\f18e"; +} +.icon-arrow-circle-o-left:before { + content: "\f190"; +} +.icon-caret-square-o-left:before { + content: "\f191"; +} +.icon-toggle-left:before { + content: "\f191"; +} +.icon-dot-circle-o:before { + content: "\f192"; +} +.icon-wheelchair:before { + content: "\f193"; +} +.icon-vimeo-square:before { + content: "\f194"; +} +.icon-try:before { + content: "\f195"; +} +.icon-turkish-lira:before { + content: "\f195"; +} +.icon-plus-square-o:before { + content: "\f196"; +} +.icon-space-shuttle:before { + content: "\f197"; +} +.icon-slack:before { + content: "\f198"; +} +.icon-envelope-square:before { + content: "\f199"; +} +.icon-wordpress:before { + content: "\f19a"; +} +.icon-openid:before { + content: "\f19b"; +} +.icon-bank:before { + content: "\f19c"; +} +.icon-institution:before { + content: "\f19c"; +} +.icon-university:before { + content: "\f19c"; +} +.icon-graduation-cap:before { + content: "\f19d"; +} +.icon-mortar-board:before { + content: "\f19d"; +} +.icon-yahoo:before { + content: "\f19e"; +} +.icon-google:before { + content: "\f1a0"; +} +.icon-reddit:before { + content: "\f1a1"; +} +.icon-reddit-square:before { + content: "\f1a2"; +} +.icon-stumbleupon-circle:before { + content: "\f1a3"; +} +.icon-stumbleupon:before { + content: "\f1a4"; +} +.icon-delicious:before { + content: "\f1a5"; +} +.icon-digg:before { + content: "\f1a6"; +} +.icon-pied-piper-pp:before { + content: "\f1a7"; +} +.icon-pied-piper-alt:before { + content: "\f1a8"; +} +.icon-drupal:before { + content: "\f1a9"; +} +.icon-joomla:before { + content: "\f1aa"; +} +.icon-language:before { + content: "\f1ab"; +} +.icon-fax:before { + content: "\f1ac"; +} +.icon-building:before { + content: "\f1ad"; +} +.icon-child:before { + content: "\f1ae"; +} +.icon-paw:before { + content: "\f1b0"; +} +.icon-spoon:before { + content: "\f1b1"; +} +.icon-cube:before { + content: "\f1b2"; +} +.icon-cubes:before { + content: "\f1b3"; +} +.icon-behance:before { + content: "\f1b4"; +} +.icon-behance-square:before { + content: "\f1b5"; +} +.icon-steam:before { + content: "\f1b6"; +} +.icon-steam-square:before { + content: "\f1b7"; +} +.icon-recycle:before { + content: "\f1b8"; +} +.icon-automobile:before { + content: "\f1b9"; +} +.icon-car:before { + content: "\f1b9"; +} +.icon-cab:before { + content: "\f1ba"; +} +.icon-taxi:before { + content: "\f1ba"; +} +.icon-tree:before { + content: "\f1bb"; +} +.icon-spotify:before { + content: "\f1bc"; +} +.icon-deviantart:before { + content: "\f1bd"; +} +.icon-soundcloud:before { + content: "\f1be"; +} +.icon-database:before { + content: "\f1c0"; +} +.icon-file-pdf-o:before { + content: "\f1c1"; +} +.icon-file-word-o:before { + content: "\f1c2"; +} +.icon-file-excel-o:before { + content: "\f1c3"; +} +.icon-file-powerpoint-o:before { + content: "\f1c4"; +} +.icon-file-image-o:before { + content: "\f1c5"; +} +.icon-file-photo-o:before { + content: "\f1c5"; +} +.icon-file-picture-o:before { + content: "\f1c5"; +} +.icon-file-archive-o:before { + content: "\f1c6"; +} +.icon-file-zip-o:before { + content: "\f1c6"; +} +.icon-file-audio-o:before { + content: "\f1c7"; +} +.icon-file-sound-o:before { + content: "\f1c7"; +} +.icon-file-movie-o:before { + content: "\f1c8"; +} +.icon-file-video-o:before { + content: "\f1c8"; +} +.icon-file-code-o:before { + content: "\f1c9"; +} +.icon-vine:before { + content: "\f1ca"; +} +.icon-codepen:before { + content: "\f1cb"; +} +.icon-jsfiddle:before { + content: "\f1cc"; +} +.icon-life-bouy:before { + content: "\f1cd"; +} +.icon-life-buoy:before { + content: "\f1cd"; +} +.icon-life-ring:before { + content: "\f1cd"; +} +.icon-life-saver:before { + content: "\f1cd"; +} +.icon-support:before { + content: "\f1cd"; +} +.icon-circle-o-notch:before { + content: "\f1ce"; +} +.icon-ra:before { + content: "\f1d0"; +} +.icon-rebel:before { + content: "\f1d0"; +} +.icon-resistance:before { + content: "\f1d0"; +} +.icon-empire:before { + content: "\f1d1"; +} +.icon-ge:before { + content: "\f1d1"; +} +.icon-git-square:before { + content: "\f1d2"; +} +.icon-git:before { + content: "\f1d3"; +} +.icon-hacker-news:before { + content: "\f1d4"; +} +.icon-y-combinator-square:before { + content: "\f1d4"; +} +.icon-yc-square:before { + content: "\f1d4"; +} +.icon-tencent-weibo:before { + content: "\f1d5"; +} +.icon-qq:before { + content: "\f1d6"; +} +.icon-wechat:before { + content: "\f1d7"; +} +.icon-weixin:before { + content: "\f1d7"; +} +.icon-paper-plane:before { + content: "\f1d8"; +} +.icon-send:before { + content: "\f1d8"; +} +.icon-paper-plane-o:before { + content: "\f1d9"; +} +.icon-send-o:before { + content: "\f1d9"; +} +.icon-history:before { + content: "\f1da"; +} +.icon-circle-thin:before { + content: "\f1db"; +} +.icon-header:before { + content: "\f1dc"; +} +.icon-paragraph:before { + content: "\f1dd"; +} +.icon-sliders:before { + content: "\f1de"; +} +.icon-share-alt:before { + content: "\f1e0"; +} +.icon-share-alt-square:before { + content: "\f1e1"; +} +.icon-bomb:before { + content: "\f1e2"; +} +.icon-futbol-o:before { + content: "\f1e3"; +} +.icon-soccer-ball-o:before { + content: "\f1e3"; +} +.icon-tty:before { + content: "\f1e4"; +} +.icon-binoculars:before { + content: "\f1e5"; +} +.icon-plug:before { + content: "\f1e6"; +} +.icon-slideshare:before { + content: "\f1e7"; +} +.icon-twitch:before { + content: "\f1e8"; +} +.icon-yelp:before { + content: "\f1e9"; +} +.icon-newspaper-o:before { + content: "\f1ea"; +} +.icon-wifi:before { + content: "\f1eb"; +} +.icon-calculator:before { + content: "\f1ec"; +} +.icon-paypal:before { + content: "\f1ed"; +} +.icon-google-wallet:before { + content: "\f1ee"; +} +.icon-cc-visa:before { + content: "\f1f0"; +} +.icon-cc-mastercard:before { + content: "\f1f1"; +} +.icon-cc-discover:before { + content: "\f1f2"; +} +.icon-cc-amex:before { + content: "\f1f3"; +} +.icon-cc-paypal:before { + content: "\f1f4"; +} +.icon-cc-stripe:before { + content: "\f1f5"; +} +.icon-bell-slash:before { + content: "\f1f6"; +} +.icon-bell-slash-o:before { + content: "\f1f7"; +} +.icon-trash:before { + content: "\f1f8"; +} +.icon-copyright:before { + content: "\f1f9"; +} +.icon-at:before { + content: "\f1fa"; +} +.icon-eyedropper:before { + content: "\f1fb"; +} +.icon-paint-brush:before { + content: "\f1fc"; +} +.icon-birthday-cake:before { + content: "\f1fd"; +} +.icon-area-chart:before { + content: "\f1fe"; +} +.icon-pie-chart:before { + content: "\f200"; +} +.icon-line-chart:before { + content: "\f201"; +} +.icon-lastfm:before { + content: "\f202"; +} +.icon-lastfm-square:before { + content: "\f203"; +} +.icon-toggle-off:before { + content: "\f204"; +} +.icon-toggle-on:before { + content: "\f205"; +} +.icon-bicycle:before { + content: "\f206"; +} +.icon-bus:before { + content: "\f207"; +} +.icon-ioxhost:before { + content: "\f208"; +} +.icon-angellist:before { + content: "\f209"; +} +.icon-cc:before { + content: "\f20a"; +} +.icon-ils:before { + content: "\f20b"; +} +.icon-shekel:before { + content: "\f20b"; +} +.icon-sheqel:before { + content: "\f20b"; +} +.icon-meanpath:before { + content: "\f20c"; +} +.icon-buysellads:before { + content: "\f20d"; +} +.icon-connectdevelop:before { + content: "\f20e"; +} +.icon-dashcube:before { + content: "\f210"; +} +.icon-forumbee:before { + content: "\f211"; +} +.icon-leanpub:before { + content: "\f212"; +} +.icon-sellsy:before { + content: "\f213"; +} +.icon-shirtsinbulk:before { + content: "\f214"; +} +.icon-simplybuilt:before { + content: "\f215"; +} +.icon-skyatlas:before { + content: "\f216"; +} +.icon-cart-plus:before { + content: "\f217"; +} +.icon-cart-arrow-down:before { + content: "\f218"; +} +.icon-diamond:before { + content: "\f219"; +} +.icon-ship:before { + content: "\f21a"; +} +.icon-user-secret:before { + content: "\f21b"; +} +.icon-motorcycle:before { + content: "\f21c"; +} +.icon-street-view:before { + content: "\f21d"; +} +.icon-heartbeat:before { + content: "\f21e"; +} +.icon-venus:before { + content: "\f221"; +} +.icon-mars:before { + content: "\f222"; +} +.icon-mercury:before { + content: "\f223"; +} +.icon-intersex:before { + content: "\f224"; +} +.icon-transgender:before { + content: "\f224"; +} +.icon-transgender-alt:before { + content: "\f225"; +} +.icon-venus-double:before { + content: "\f226"; +} +.icon-mars-double:before { + content: "\f227"; +} +.icon-venus-mars:before { + content: "\f228"; +} +.icon-mars-stroke:before { + content: "\f229"; +} +.icon-mars-stroke-v:before { + content: "\f22a"; +} +.icon-mars-stroke-h:before { + content: "\f22b"; +} +.icon-neuter:before { + content: "\f22c"; +} +.icon-genderless:before { + content: "\f22d"; +} +.icon-facebook-official:before { + content: "\f230"; +} +.icon-pinterest-p:before { + content: "\f231"; +} +.icon-whatsapp:before { + content: "\f232"; +} +.icon-server:before { + content: "\f233"; +} +.icon-user-plus:before { + content: "\f234"; +} +.icon-user-times:before { + content: "\f235"; +} +.icon-bed:before { + content: "\f236"; +} +.icon-hotel:before { + content: "\f236"; +} +.icon-viacoin:before { + content: "\f237"; +} +.icon-train:before { + content: "\f238"; +} +.icon-subway:before { + content: "\f239"; +} +.icon-medium:before { + content: "\f23a"; +} +.icon-y-combinator:before { + content: "\f23b"; +} +.icon-yc:before { + content: "\f23b"; +} +.icon-optin-monster:before { + content: "\f23c"; +} +.icon-opencart:before { + content: "\f23d"; +} +.icon-expeditedssl:before { + content: "\f23e"; +} +.icon-battery:before { + content: "\f240"; +} +.icon-battery-4:before { + content: "\f240"; +} +.icon-battery-full:before { + content: "\f240"; +} +.icon-battery-3:before { + content: "\f241"; +} +.icon-battery-three-quarters:before { + content: "\f241"; +} +.icon-battery-2:before { + content: "\f242"; +} +.icon-battery-half:before { + content: "\f242"; +} +.icon-battery-1:before { + content: "\f243"; +} +.icon-battery-quarter:before { + content: "\f243"; +} +.icon-battery-0:before { + content: "\f244"; +} +.icon-battery-empty:before { + content: "\f244"; +} +.icon-mouse-pointer:before { + content: "\f245"; +} +.icon-i-cursor:before { + content: "\f246"; +} +.icon-object-group:before { + content: "\f247"; +} +.icon-object-ungroup:before { + content: "\f248"; +} +.icon-sticky-note:before { + content: "\f249"; +} +.icon-sticky-note-o:before { + content: "\f24a"; +} +.icon-cc-jcb:before { + content: "\f24b"; +} +.icon-cc-diners-club:before { + content: "\f24c"; +} +.icon-clone:before { + content: "\f24d"; +} +.icon-balance-scale:before { + content: "\f24e"; +} +.icon-hourglass-o:before { + content: "\f250"; +} +.icon-hourglass-1:before { + content: "\f251"; +} +.icon-hourglass-start:before { + content: "\f251"; +} +.icon-hourglass-2:before { + content: "\f252"; +} +.icon-hourglass-half:before { + content: "\f252"; +} +.icon-hourglass-3:before { + content: "\f253"; +} +.icon-hourglass-end:before { + content: "\f253"; +} +.icon-hourglass:before { + content: "\f254"; +} +.icon-hand-grab-o:before { + content: "\f255"; +} +.icon-hand-rock-o:before { + content: "\f255"; +} +.icon-hand-paper-o:before { + content: "\f256"; +} +.icon-hand-stop-o:before { + content: "\f256"; +} +.icon-hand-scissors-o:before { + content: "\f257"; +} +.icon-hand-lizard-o:before { + content: "\f258"; +} +.icon-hand-spock-o:before { + content: "\f259"; +} +.icon-hand-pointer-o:before { + content: "\f25a"; +} +.icon-hand-peace-o:before { + content: "\f25b"; +} +.icon-trademark:before { + content: "\f25c"; +} +.icon-registered:before { + content: "\f25d"; +} +.icon-creative-commons:before { + content: "\f25e"; +} +.icon-gg:before { + content: "\f260"; +} +.icon-gg-circle:before { + content: "\f261"; +} +.icon-tripadvisor:before { + content: "\f262"; +} +.icon-odnoklassniki:before { + content: "\f263"; +} +.icon-odnoklassniki-square:before { + content: "\f264"; +} +.icon-get-pocket:before { + content: "\f265"; +} +.icon-wikipedia-w:before { + content: "\f266"; +} +.icon-safari:before { + content: "\f267"; +} +.icon-chrome:before { + content: "\f268"; +} +.icon-firefox:before { + content: "\f269"; +} +.icon-opera:before { + content: "\f26a"; +} +.icon-internet-explorer:before { + content: "\f26b"; +} +.icon-television:before { + content: "\f26c"; +} +.icon-tv:before { + content: "\f26c"; +} +.icon-contao:before { + content: "\f26d"; +} +.icon-500px:before { + content: "\f26e"; +} +.icon-amazon:before { + content: "\f270"; +} +.icon-calendar-plus-o:before { + content: "\f271"; +} +.icon-calendar-minus-o:before { + content: "\f272"; +} +.icon-calendar-times-o:before { + content: "\f273"; +} +.icon-calendar-check-o:before { + content: "\f274"; +} +.icon-industry:before { + content: "\f275"; +} +.icon-map-pin:before { + content: "\f276"; +} +.icon-map-signs:before { + content: "\f277"; +} +.icon-map-o:before { + content: "\f278"; +} +.icon-map:before { + content: "\f279"; +} +.icon-commenting:before { + content: "\f27a"; +} +.icon-commenting-o:before { + content: "\f27b"; +} +.icon-houzz:before { + content: "\f27c"; +} +.icon-vimeo:before { + content: "\f27d"; +} +.icon-black-tie:before { + content: "\f27e"; +} +.icon-fonticons:before { + content: "\f280"; +} +.icon-reddit-alien:before { + content: "\f281"; +} +.icon-edge:before { + content: "\f282"; +} +.icon-credit-card-alt:before { + content: "\f283"; +} +.icon-codiepie:before { + content: "\f284"; +} +.icon-modx:before { + content: "\f285"; +} +.icon-fort-awesome:before { + content: "\f286"; +} +.icon-usb:before { + content: "\f287"; +} +.icon-product-hunt:before { + content: "\f288"; +} +.icon-mixcloud:before { + content: "\f289"; +} +.icon-scribd:before { + content: "\f28a"; +} +.icon-pause-circle:before { + content: "\f28b"; +} +.icon-pause-circle-o:before { + content: "\f28c"; +} +.icon-stop-circle:before { + content: "\f28d"; +} +.icon-stop-circle-o:before { + content: "\f28e"; +} +.icon-shopping-bag:before { + content: "\f290"; +} +.icon-shopping-basket:before { + content: "\f291"; +} +.icon-hashtag:before { + content: "\f292"; +} +.icon-bluetooth:before { + content: "\f293"; +} +.icon-bluetooth-b:before { + content: "\f294"; +} +.icon-percent:before { + content: "\f295"; +} +.icon-gitlab:before { + content: "\f296"; +} +.icon-wpbeginner:before { + content: "\f297"; +} +.icon-wpforms:before { + content: "\f298"; +} +.icon-envira:before { + content: "\f299"; +} +.icon-universal-access:before { + content: "\f29a"; +} +.icon-wheelchair-alt:before { + content: "\f29b"; +} +.icon-question-circle-o:before { + content: "\f29c"; +} +.icon-blind:before { + content: "\f29d"; +} +.icon-audio-description:before { + content: "\f29e"; +} +.icon-volume-control-phone:before { + content: "\f2a0"; +} +.icon-braille:before { + content: "\f2a1"; +} +.icon-assistive-listening-systems:before { + content: "\f2a2"; +} +.icon-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.icon-asl-interpreting:before { + content: "\f2a3"; +} +.icon-deaf:before { + content: "\f2a4"; +} +.icon-deafness:before { + content: "\f2a4"; +} +.icon-hard-of-hearing:before { + content: "\f2a4"; +} +.icon-glide:before { + content: "\f2a5"; +} +.icon-glide-g:before { + content: "\f2a6"; +} +.icon-sign-language:before { + content: "\f2a7"; +} +.icon-signing:before { + content: "\f2a7"; +} +.icon-low-vision:before { + content: "\f2a8"; +} +.icon-viadeo:before { + content: "\f2a9"; +} +.icon-viadeo-square:before { + content: "\f2aa"; +} +.icon-snapchat:before { + content: "\f2ab"; +} +.icon-snapchat-ghost:before { + content: "\f2ac"; +} +.icon-snapchat-square:before { + content: "\f2ad"; +} +.icon-pied-piper:before { + content: "\f2ae"; +} +.icon-first-order:before { + content: "\f2b0"; +} +.icon-yoast:before { + content: "\f2b1"; +} +.icon-themeisle:before { + content: "\f2b2"; +} +.icon-google-plus-circle:before { + content: "\f2b3"; +} +.icon-google-plus-official:before { + content: "\f2b3"; +} +.icon-fa:before { + content: "\f2b4"; +} +.icon-font-awesome:before { + content: "\f2b4"; +} +.icon-handshake-o:before { + content: "\f2b5"; +} +.icon-envelope-open:before { + content: "\f2b6"; +} +.icon-envelope-open-o:before { + content: "\f2b7"; +} +.icon-linode:before { + content: "\f2b8"; +} +.icon-address-book:before { + content: "\f2b9"; +} +.icon-address-book-o:before { + content: "\f2ba"; +} +.icon-address-card:before { + content: "\f2bb"; +} +.icon-vcard:before { + content: "\f2bb"; +} +.icon-address-card-o:before { + content: "\f2bc"; +} +.icon-vcard-o:before { + content: "\f2bc"; +} +.icon-user-circle:before { + content: "\f2bd"; +} +.icon-user-circle-o:before { + content: "\f2be"; +} +.icon-user-o:before { + content: "\f2c0"; +} +.icon-id-badge:before { + content: "\f2c1"; +} +.icon-drivers-license:before { + content: "\f2c2"; +} +.icon-id-card:before { + content: "\f2c2"; +} +.icon-drivers-license-o:before { + content: "\f2c3"; +} +.icon-id-card-o:before { + content: "\f2c3"; +} +.icon-quora:before { + content: "\f2c4"; +} +.icon-free-code-camp:before { + content: "\f2c5"; +} +.icon-telegram:before { + content: "\f2c6"; +} +.icon-thermometer:before { + content: "\f2c7"; +} +.icon-thermometer-4:before { + content: "\f2c7"; +} +.icon-thermometer-full:before { + content: "\f2c7"; +} +.icon-thermometer-3:before { + content: "\f2c8"; +} +.icon-thermometer-three-quarters:before { + content: "\f2c8"; +} +.icon-thermometer-2:before { + content: "\f2c9"; +} +.icon-thermometer-half:before { + content: "\f2c9"; +} +.icon-thermometer-1:before { + content: "\f2ca"; +} +.icon-thermometer-quarter:before { + content: "\f2ca"; +} +.icon-thermometer-0:before { + content: "\f2cb"; +} +.icon-thermometer-empty:before { + content: "\f2cb"; +} +.icon-shower:before { + content: "\f2cc"; +} +.icon-bath:before { + content: "\f2cd"; +} +.icon-bathtub:before { + content: "\f2cd"; +} +.icon-s15:before { + content: "\f2cd"; +} +.icon-podcast:before { + content: "\f2ce"; +} +.icon-window-maximize:before { + content: "\f2d0"; +} +.icon-window-minimize:before { + content: "\f2d1"; +} +.icon-window-restore:before { + content: "\f2d2"; +} +.icon-times-rectangle:before { + content: "\f2d3"; +} +.icon-window-close:before { + content: "\f2d3"; +} +.icon-times-rectangle-o:before { + content: "\f2d4"; +} +.icon-window-close-o:before { + content: "\f2d4"; +} +.icon-bandcamp:before { + content: "\f2d5"; +} +.icon-grav:before { + content: "\f2d6"; +} +.icon-etsy:before { + content: "\f2d7"; +} +.icon-imdb:before { + content: "\f2d8"; +} +.icon-ravelry:before { + content: "\f2d9"; +} +.icon-eercast:before { + content: "\f2da"; +} +.icon-microchip:before { + content: "\f2db"; +} +.icon-snowflake-o:before { + content: "\f2dc"; +} +.icon-superpowers:before { + content: "\f2dd"; +} +.icon-wpexplorer:before { + content: "\f2de"; +} +.icon-meetup:before { + content: "\f2e0"; +} +.icon-3d_rotation:before { + content: "\e84d"; +} +.icon-ac_unit:before { + content: "\eb3b"; +} +.icon-alarm:before { + content: "\e855"; +} +.icon-access_alarms:before { + content: "\e191"; +} +.icon-schedule:before { + content: "\e8b5"; +} +.icon-accessibility:before { + content: "\e84e"; +} +.icon-accessible:before { + content: "\e914"; +} +.icon-account_balance:before { + content: "\e84f"; +} +.icon-account_balance_wallet:before { + content: "\e850"; +} +.icon-account_box:before { + content: "\e851"; +} +.icon-account_circle:before { + content: "\e853"; +} +.icon-adb:before { + content: "\e60e"; +} +.icon-add:before { + content: "\e145"; +} +.icon-add_a_photo:before { + content: "\e439"; +} +.icon-alarm_add:before { + content: "\e856"; +} +.icon-add_alert:before { + content: "\e003"; +} +.icon-add_box:before { + content: "\e146"; +} +.icon-add_circle:before { + content: "\e147"; +} +.icon-control_point:before { + content: "\e3ba"; +} +.icon-add_location:before { + content: "\e567"; +} +.icon-add_shopping_cart:before { + content: "\e854"; +} +.icon-queue:before { + content: "\e03c"; +} +.icon-add_to_queue:before { + content: "\e05c"; +} +.icon-adjust2:before { + content: "\e39e"; +} +.icon-airline_seat_flat:before { + content: "\e630"; +} +.icon-airline_seat_flat_angled:before { + content: "\e631"; +} +.icon-airline_seat_individual_suite:before { + content: "\e632"; +} +.icon-airline_seat_legroom_extra:before { + content: "\e633"; +} +.icon-airline_seat_legroom_normal:before { + content: "\e634"; +} +.icon-airline_seat_legroom_reduced:before { + content: "\e635"; +} +.icon-airline_seat_recline_extra:before { + content: "\e636"; +} +.icon-airline_seat_recline_normal:before { + content: "\e637"; +} +.icon-flight:before { + content: "\e539"; +} +.icon-airplanemode_inactive:before { + content: "\e194"; +} +.icon-airplay:before { + content: "\e055"; +} +.icon-airport_shuttle:before { + content: "\eb3c"; +} +.icon-alarm_off:before { + content: "\e857"; +} +.icon-alarm_on:before { + content: "\e858"; +} +.icon-album:before { + content: "\e019"; +} +.icon-all_inclusive:before { + content: "\eb3d"; +} +.icon-all_out:before { + content: "\e90b"; +} +.icon-android2:before { + content: "\e859"; +} +.icon-announcement:before { + content: "\e85a"; +} +.icon-apps:before { + content: "\e5c3"; +} +.icon-archive2:before { + content: "\e149"; +} +.icon-arrow_back:before { + content: "\e5c4"; +} +.icon-arrow_downward:before { + content: "\e5db"; +} +.icon-arrow_drop_down:before { + content: "\e5c5"; +} +.icon-arrow_drop_down_circle:before { + content: "\e5c6"; +} +.icon-arrow_drop_up:before { + content: "\e5c7"; +} +.icon-arrow_forward:before { + content: "\e5c8"; +} +.icon-arrow_upward:before { + content: "\e5d8"; +} +.icon-art_track:before { + content: "\e060"; +} +.icon-aspect_ratio:before { + content: "\e85b"; +} +.icon-poll:before { + content: "\e801"; +} +.icon-assignment:before { + content: "\e85d"; +} +.icon-assignment_ind:before { + content: "\e85e"; +} +.icon-assignment_late:before { + content: "\e85f"; +} +.icon-assignment_return:before { + content: "\e860"; +} +.icon-assignment_returned:before { + content: "\e861"; +} +.icon-assignment_turned_in:before { + content: "\e862"; +} +.icon-assistant:before { + content: "\e39f"; +} +.icon-flag2:before { + content: "\e153"; +} +.icon-attach_file:before { + content: "\e226"; +} +.icon-attach_money:before { + content: "\e227"; +} +.icon-attachment:before { + content: "\e2bc"; +} +.icon-audiotrack:before { + content: "\e3a1"; +} +.icon-autorenew:before { + content: "\e863"; +} +.icon-av_timer:before { + content: "\e01b"; +} +.icon-backspace:before { + content: "\e14a"; +} +.icon-cloud_upload:before { + content: "\e2c3"; +} +.icon-battery_alert:before { + content: "\e19c"; +} +.icon-battery_charging_full:before { + content: "\e1a3"; +} +.icon-battery_std:before { + content: "\e1a5"; +} +.icon-battery_unknown:before { + content: "\e1a6"; +} +.icon-beach_access:before { + content: "\eb3e"; +} +.icon-beenhere:before { + content: "\e52d"; +} +.icon-block:before { + content: "\e14b"; +} +.icon-bluetooth2:before { + content: "\e1a7"; +} +.icon-bluetooth_searching:before { + content: "\e1aa"; +} +.icon-bluetooth_connected:before { + content: "\e1a8"; +} +.icon-bluetooth_disabled:before { + content: "\e1a9"; +} +.icon-blur_circular:before { + content: "\e3a2"; +} +.icon-blur_linear:before { + content: "\e3a3"; +} +.icon-blur_off:before { + content: "\e3a4"; +} +.icon-blur_on:before { + content: "\e3a5"; +} +.icon-class:before { + content: "\e86e"; +} +.icon-turned_in:before { + content: "\e8e6"; +} +.icon-turned_in_not:before { + content: "\e8e7"; +} +.icon-border_all:before { + content: "\e228"; +} +.icon-border_bottom:before { + content: "\e229"; +} +.icon-border_clear:before { + content: "\e22a"; +} +.icon-border_color:before { + content: "\e22b"; +} +.icon-border_horizontal:before { + content: "\e22c"; +} +.icon-border_inner:before { + content: "\e22d"; +} +.icon-border_left:before { + content: "\e22e"; +} +.icon-border_outer:before { + content: "\e22f"; +} +.icon-border_right:before { + content: "\e230"; +} +.icon-border_style:before { + content: "\e231"; +} +.icon-border_top:before { + content: "\e232"; +} +.icon-border_vertical:before { + content: "\e233"; +} +.icon-branding_watermark:before { + content: "\e06b"; +} +.icon-brightness_1:before { + content: "\e3a6"; +} +.icon-brightness_2:before { + content: "\e3a7"; +} +.icon-brightness_3:before { + content: "\e3a8"; +} +.icon-brightness_4:before { + content: "\e3a9"; +} +.icon-brightness_low:before { + content: "\e1ad"; +} +.icon-brightness_medium:before { + content: "\e1ae"; +} +.icon-brightness_high:before { + content: "\e1ac"; +} +.icon-brightness_auto:before { + content: "\e1ab"; +} +.icon-broken_image:before { + content: "\e3ad"; +} +.icon-brush:before { + content: "\e3ae"; +} +.icon-bubble_chart:before { + content: "\e6dd"; +} +.icon-bug_report:before { + content: "\e868"; +} +.icon-build:before { + content: "\e869"; +} +.icon-burst_mode:before { + content: "\e43c"; +} +.icon-domain:before { + content: "\e7ee"; +} +.icon-business_center:before { + content: "\eb3f"; +} +.icon-cached:before { + content: "\e86a"; +} +.icon-cake:before { + content: "\e7e9"; +} +.icon-phone2:before { + content: "\e0cd"; +} +.icon-call_end:before { + content: "\e0b1"; +} +.icon-call_made:before { + content: "\e0b2"; +} +.icon-merge_type:before { + content: "\e252"; +} +.icon-call_missed:before { + content: "\e0b4"; +} +.icon-call_missed_outgoing:before { + content: "\e0e4"; +} +.icon-call_received:before { + content: "\e0b5"; +} +.icon-call_split:before { + content: "\e0b6"; +} +.icon-call_to_action:before { + content: "\e06c"; +} +.icon-camera2:before { + content: "\e3af"; +} +.icon-photo_camera:before { + content: "\e412"; +} +.icon-camera_enhance:before { + content: "\e8fc"; +} +.icon-camera_front:before { + content: "\e3b1"; +} +.icon-camera_rear:before { + content: "\e3b2"; +} +.icon-camera_roll:before { + content: "\e3b3"; +} +.icon-cancel:before { + content: "\e5c9"; +} +.icon-redeem:before { + content: "\e8b1"; +} +.icon-card_membership:before { + content: "\e8f7"; +} +.icon-card_travel:before { + content: "\e8f8"; +} +.icon-casino:before { + content: "\eb40"; +} +.icon-cast:before { + content: "\e307"; +} +.icon-cast_connected:before { + content: "\e308"; +} +.icon-center_focus_strong:before { + content: "\e3b4"; +} +.icon-center_focus_weak:before { + content: "\e3b5"; +} +.icon-change_history:before { + content: "\e86b"; +} +.icon-chat:before { + content: "\e0b7"; +} +.icon-chat_bubble:before { + content: "\e0ca"; +} +.icon-chat_bubble_outline:before { + content: "\e0cb"; +} +.icon-check2:before { + content: "\e5ca"; +} +.icon-check_box:before { + content: "\e834"; +} +.icon-check_box_outline_blank:before { + content: "\e835"; +} +.icon-check_circle:before { + content: "\e86c"; +} +.icon-navigate_before:before { + content: "\e408"; +} +.icon-navigate_next:before { + content: "\e409"; +} +.icon-child_care:before { + content: "\eb41"; +} +.icon-child_friendly:before { + content: "\eb42"; +} +.icon-chrome_reader_mode:before { + content: "\e86d"; +} +.icon-close2:before { + content: "\e5cd"; +} +.icon-clear_all:before { + content: "\e0b8"; +} +.icon-closed_caption:before { + content: "\e01c"; +} +.icon-wb_cloudy:before { + content: "\e42d"; +} +.icon-cloud_circle:before { + content: "\e2be"; +} +.icon-cloud_done:before { + content: "\e2bf"; +} +.icon-cloud_download:before { + content: "\e2c0"; +} +.icon-cloud_off:before { + content: "\e2c1"; +} +.icon-cloud_queue:before { + content: "\e2c2"; +} +.icon-code2:before { + content: "\e86f"; +} +.icon-photo_library:before { + content: "\e413"; +} +.icon-collections_bookmark:before { + content: "\e431"; +} +.icon-palette:before { + content: "\e40a"; +} +.icon-colorize:before { + content: "\e3b8"; +} +.icon-comment2:before { + content: "\e0b9"; +} +.icon-compare:before { + content: "\e3b9"; +} +.icon-compare_arrows:before { + content: "\e915"; +} +.icon-laptop2:before { + content: "\e31e"; +} +.icon-confirmation_number:before { + content: "\e638"; +} +.icon-contact_mail:before { + content: "\e0d0"; +} +.icon-contact_phone:before { + content: "\e0cf"; +} +.icon-contacts:before { + content: "\e0ba"; +} +.icon-content_copy:before { + content: "\e14d"; +} +.icon-content_cut:before { + content: "\e14e"; +} +.icon-content_paste:before { + content: "\e14f"; +} +.icon-control_point_duplicate:before { + content: "\e3bb"; +} +.icon-copyright2:before { + content: "\e90c"; +} +.icon-mode_edit:before { + content: "\e254"; +} +.icon-create_new_folder:before { + content: "\e2cc"; +} +.icon-payment:before { + content: "\e8a1"; +} +.icon-crop2:before { + content: "\e3be"; +} +.icon-crop_16_9:before { + content: "\e3bc"; +} +.icon-crop_3_2:before { + content: "\e3bd"; +} +.icon-crop_landscape:before { + content: "\e3c3"; +} +.icon-crop_7_5:before { + content: "\e3c0"; +} +.icon-crop_din:before { + content: "\e3c1"; +} +.icon-crop_free:before { + content: "\e3c2"; +} +.icon-crop_original:before { + content: "\e3c4"; +} +.icon-crop_portrait:before { + content: "\e3c5"; +} +.icon-crop_rotate:before { + content: "\e437"; +} +.icon-crop_square:before { + content: "\e3c6"; +} +.icon-dashboard2:before { + content: "\e871"; +} +.icon-data_usage:before { + content: "\e1af"; +} +.icon-date_range:before { + content: "\e916"; +} +.icon-dehaze:before { + content: "\e3c7"; +} +.icon-delete:before { + content: "\e872"; +} +.icon-delete_forever:before { + content: "\e92b"; +} +.icon-delete_sweep:before { + content: "\e16c"; +} +.icon-description:before { + content: "\e873"; +} +.icon-desktop_mac:before { + content: "\e30b"; +} +.icon-desktop_windows:before { + content: "\e30c"; +} +.icon-details:before { + content: "\e3c8"; +} +.icon-developer_board:before { + content: "\e30d"; +} +.icon-developer_mode:before { + content: "\e1b0"; +} +.icon-device_hub:before { + content: "\e335"; +} +.icon-phonelink:before { + content: "\e326"; +} +.icon-devices_other:before { + content: "\e337"; +} +.icon-dialer_sip:before { + content: "\e0bb"; +} +.icon-dialpad:before { + content: "\e0bc"; +} +.icon-directions:before { + content: "\e52e"; +} +.icon-directions_bike:before { + content: "\e52f"; +} +.icon-directions_boat:before { + content: "\e532"; +} +.icon-directions_bus:before { + content: "\e530"; +} +.icon-directions_car:before { + content: "\e531"; +} +.icon-directions_railway:before { + content: "\e534"; +} +.icon-directions_run:before { + content: "\e566"; +} +.icon-directions_transit:before { + content: "\e535"; +} +.icon-directions_walk:before { + content: "\e536"; +} +.icon-disc_full:before { + content: "\e610"; +} +.icon-dns:before { + content: "\e875"; +} +.icon-not_interested:before { + content: "\e033"; +} +.icon-do_not_disturb_alt:before { + content: "\e611"; +} +.icon-do_not_disturb_off:before { + content: "\e643"; +} +.icon-remove_circle:before { + content: "\e15c"; +} +.icon-dock:before { + content: "\e30e"; +} +.icon-done:before { + content: "\e876"; +} +.icon-done_all:before { + content: "\e877"; +} +.icon-donut_large:before { + content: "\e917"; +} +.icon-donut_small:before { + content: "\e918"; +} +.icon-drafts:before { + content: "\e151"; +} +.icon-drag_handle:before { + content: "\e25d"; +} +.icon-time_to_leave:before { + content: "\e62c"; +} +.icon-dvr:before { + content: "\e1b2"; +} +.icon-edit_location:before { + content: "\e568"; +} +.icon-eject2:before { + content: "\e8fb"; +} +.icon-markunread:before { + content: "\e159"; +} +.icon-enhanced_encryption:before { + content: "\e63f"; +} +.icon-equalizer:before { + content: "\e01d"; +} +.icon-error:before { + content: "\e000"; +} +.icon-error_outline:before { + content: "\e001"; +} +.icon-euro_symbol:before { + content: "\e926"; +} +.icon-ev_station:before { + content: "\e56d"; +} +.icon-insert_invitation:before { + content: "\e24f"; +} +.icon-event_available:before { + content: "\e614"; +} +.icon-event_busy:before { + content: "\e615"; +} +.icon-event_note:before { + content: "\e616"; +} +.icon-event_seat:before { + content: "\e903"; +} +.icon-exit_to_app:before { + content: "\e879"; +} +.icon-expand_less:before { + content: "\e5ce"; +} +.icon-expand_more:before { + content: "\e5cf"; +} +.icon-explicit:before { + content: "\e01e"; +} +.icon-explore:before { + content: "\e87a"; +} +.icon-exposure:before { + content: "\e3ca"; +} +.icon-exposure_neg_1:before { + content: "\e3cb"; +} +.icon-exposure_neg_2:before { + content: "\e3cc"; +} +.icon-exposure_plus_1:before { + content: "\e3cd"; +} +.icon-exposure_plus_2:before { + content: "\e3ce"; +} +.icon-exposure_zero:before { + content: "\e3cf"; +} +.icon-extension:before { + content: "\e87b"; +} +.icon-face:before { + content: "\e87c"; +} +.icon-fast_forward:before { + content: "\e01f"; +} +.icon-fast_rewind:before { + content: "\e020"; +} +.icon-favorite:before { + content: "\e87d"; +} +.icon-favorite_border:before { + content: "\e87e"; +} +.icon-featured_play_list:before { + content: "\e06d"; +} +.icon-featured_video:before { + content: "\e06e"; +} +.icon-sms_failed:before { + content: "\e626"; +} +.icon-fiber_dvr:before { + content: "\e05d"; +} +.icon-fiber_manual_record:before { + content: "\e061"; +} +.icon-fiber_new:before { + content: "\e05e"; +} +.icon-fiber_pin:before { + content: "\e06a"; +} +.icon-fiber_smart_record:before { + content: "\e062"; +} +.icon-get_app:before { + content: "\e884"; +} +.icon-file_upload:before { + content: "\e2c6"; +} +.icon-filter2:before { + content: "\e3d3"; +} +.icon-filter_1:before { + content: "\e3d0"; +} +.icon-filter_2:before { + content: "\e3d1"; +} +.icon-filter_3:before { + content: "\e3d2"; +} +.icon-filter_4:before { + content: "\e3d4"; +} +.icon-filter_5:before { + content: "\e3d5"; +} +.icon-filter_6:before { + content: "\e3d6"; +} +.icon-filter_7:before { + content: "\e3d7"; +} +.icon-filter_8:before { + content: "\e3d8"; +} +.icon-filter_9:before { + content: "\e3d9"; +} +.icon-filter_9_plus:before { + content: "\e3da"; +} +.icon-filter_b_and_w:before { + content: "\e3db"; +} +.icon-filter_center_focus:before { + content: "\e3dc"; +} +.icon-filter_drama:before { + content: "\e3dd"; +} +.icon-filter_frames:before { + content: "\e3de"; +} +.icon-terrain:before { + content: "\e564"; +} +.icon-filter_list:before { + content: "\e152"; +} +.icon-filter_none:before { + content: "\e3e0"; +} +.icon-filter_tilt_shift:before { + content: "\e3e2"; +} +.icon-filter_vintage:before { + content: "\e3e3"; +} +.icon-find_in_page:before { + content: "\e880"; +} +.icon-find_replace:before { + content: "\e881"; +} +.icon-fingerprint:before { + content: "\e90d"; +} +.icon-first_page:before { + content: "\e5dc"; +} +.icon-fitness_center:before { + content: "\eb43"; +} +.icon-flare:before { + content: "\e3e4"; +} +.icon-flash_auto:before { + content: "\e3e5"; +} +.icon-flash_off:before { + content: "\e3e6"; +} +.icon-flash_on:before { + content: "\e3e7"; +} +.icon-flight_land:before { + content: "\e904"; +} +.icon-flight_takeoff:before { + content: "\e905"; +} +.icon-flip:before { + content: "\e3e8"; +} +.icon-flip_to_back:before { + content: "\e882"; +} +.icon-flip_to_front:before { + content: "\e883"; +} +.icon-folder2:before { + content: "\e2c7"; +} +.icon-folder_open:before { + content: "\e2c8"; +} +.icon-folder_shared:before { + content: "\e2c9"; +} +.icon-folder_special:before { + content: "\e617"; +} +.icon-font_download:before { + content: "\e167"; +} +.icon-format_align_center:before { + content: "\e234"; +} +.icon-format_align_justify:before { + content: "\e235"; +} +.icon-format_align_left:before { + content: "\e236"; +} +.icon-format_align_right:before { + content: "\e237"; +} +.icon-format_bold:before { + content: "\e238"; +} +.icon-format_clear:before { + content: "\e239"; +} +.icon-format_color_fill:before { + content: "\e23a"; +} +.icon-format_color_reset:before { + content: "\e23b"; +} +.icon-format_color_text:before { + content: "\e23c"; +} +.icon-format_indent_decrease:before { + content: "\e23d"; +} +.icon-format_indent_increase:before { + content: "\e23e"; +} +.icon-format_italic:before { + content: "\e23f"; +} +.icon-format_line_spacing:before { + content: "\e240"; +} +.icon-format_list_bulleted:before { + content: "\e241"; +} +.icon-format_list_numbered:before { + content: "\e242"; +} +.icon-format_paint:before { + content: "\e243"; +} +.icon-format_quote:before { + content: "\e244"; +} +.icon-format_shapes:before { + content: "\e25e"; +} +.icon-format_size:before { + content: "\e245"; +} +.icon-format_strikethrough:before { + content: "\e246"; +} +.icon-format_textdirection_l_to_r:before { + content: "\e247"; +} +.icon-format_textdirection_r_to_l:before { + content: "\e248"; +} +.icon-format_underlined:before { + content: "\e249"; +} +.icon-question_answer:before { + content: "\e8af"; +} +.icon-forward2:before { + content: "\e154"; +} +.icon-forward_10:before { + content: "\e056"; +} +.icon-forward_30:before { + content: "\e057"; +} +.icon-forward_5:before { + content: "\e058"; +} +.icon-free_breakfast:before { + content: "\eb44"; +} +.icon-fullscreen:before { + content: "\e5d0"; +} +.icon-fullscreen_exit:before { + content: "\e5d1"; +} +.icon-functions:before { + content: "\e24a"; +} +.icon-g_translate:before { + content: "\e927"; +} +.icon-games:before { + content: "\e021"; +} +.icon-gavel2:before { + content: "\e90e"; +} +.icon-gesture:before { + content: "\e155"; +} +.icon-gif:before { + content: "\e908"; +} +.icon-goat:before { + content: "\e900"; +} +.icon-golf_course:before { + content: "\eb45"; +} +.icon-my_location:before { + content: "\e55c"; +} +.icon-location_searching:before { + content: "\e1b7"; +} +.icon-location_disabled:before { + content: "\e1b6"; +} +.icon-star2:before { + content: "\e838"; +} +.icon-gradient:before { + content: "\e3e9"; +} +.icon-grain:before { + content: "\e3ea"; +} +.icon-graphic_eq:before { + content: "\e1b8"; +} +.icon-grid_off:before { + content: "\e3eb"; +} +.icon-grid_on:before { + content: "\e3ec"; +} +.icon-people:before { + content: "\e7fb"; +} +.icon-group_add:before { + content: "\e7f0"; +} +.icon-group_work:before { + content: "\e886"; +} +.icon-hd:before { + content: "\e052"; +} +.icon-hdr_off:before { + content: "\e3ed"; +} +.icon-hdr_on:before { + content: "\e3ee"; +} +.icon-hdr_strong:before { + content: "\e3f1"; +} +.icon-hdr_weak:before { + content: "\e3f2"; +} +.icon-headset:before { + content: "\e310"; +} +.icon-headset_mic:before { + content: "\e311"; +} +.icon-healing:before { + content: "\e3f3"; +} +.icon-hearing:before { + content: "\e023"; +} +.icon-help:before { + content: "\e887"; +} +.icon-help_outline:before { + content: "\e8fd"; +} +.icon-high_quality:before { + content: "\e024"; +} +.icon-highlight:before { + content: "\e25f"; +} +.icon-highlight_off:before { + content: "\e888"; +} +.icon-restore:before { + content: "\e8b3"; +} +.icon-home2:before { + content: "\e88a"; +} +.icon-hot_tub:before { + content: "\eb46"; +} +.icon-local_hotel:before { + content: "\e549"; +} +.icon-hourglass_empty:before { + content: "\e88b"; +} +.icon-hourglass_full:before { + content: "\e88c"; +} +.icon-http:before { + content: "\e902"; +} +.icon-lock2:before { + content: "\e897"; +} +.icon-photo2:before { + content: "\e410"; +} +.icon-image_aspect_ratio:before { + content: "\e3f5"; +} +.icon-import_contacts:before { + content: "\e0e0"; +} +.icon-import_export:before { + content: "\e0c3"; +} +.icon-important_devices:before { + content: "\e912"; +} +.icon-inbox2:before { + content: "\e156"; +} +.icon-indeterminate_check_box:before { + content: "\e909"; +} +.icon-info2:before { + content: "\e88e"; +} +.icon-info_outline:before { + content: "\e88f"; +} +.icon-input:before { + content: "\e890"; +} +.icon-insert_comment:before { + content: "\e24c"; +} +.icon-insert_drive_file:before { + content: "\e24d"; +} +.icon-tag_faces:before { + content: "\e420"; +} +.icon-link2:before { + content: "\e157"; +} +.icon-invert_colors:before { + content: "\e891"; +} +.icon-invert_colors_off:before { + content: "\e0c4"; +} +.icon-iso:before { + content: "\e3f6"; +} +.icon-keyboard:before { + content: "\e312"; +} +.icon-keyboard_arrow_down:before { + content: "\e313"; +} +.icon-keyboard_arrow_left:before { + content: "\e314"; +} +.icon-keyboard_arrow_right:before { + content: "\e315"; +} +.icon-keyboard_arrow_up:before { + content: "\e316"; +} +.icon-keyboard_backspace:before { + content: "\e317"; +} +.icon-keyboard_capslock:before { + content: "\e318"; +} +.icon-keyboard_hide:before { + content: "\e31a"; +} +.icon-keyboard_return:before { + content: "\e31b"; +} +.icon-keyboard_tab:before { + content: "\e31c"; +} +.icon-keyboard_voice:before { + content: "\e31d"; +} +.icon-kitchen:before { + content: "\eb47"; +} +.icon-label:before { + content: "\e892"; +} +.icon-label_outline:before { + content: "\e893"; +} +.icon-language2:before { + content: "\e894"; +} +.icon-laptop_chromebook:before { + content: "\e31f"; +} +.icon-laptop_mac:before { + content: "\e320"; +} +.icon-laptop_windows:before { + content: "\e321"; +} +.icon-last_page:before { + content: "\e5dd"; +} +.icon-open_in_new:before { + content: "\e89e"; +} +.icon-layers:before { + content: "\e53b"; +} +.icon-layers_clear:before { + content: "\e53c"; +} +.icon-leak_add:before { + content: "\e3f8"; +} +.icon-leak_remove:before { + content: "\e3f9"; +} +.icon-lens:before { + content: "\e3fa"; +} +.icon-library_books:before { + content: "\e02f"; +} +.icon-library_music:before { + content: "\e030"; +} +.icon-lightbulb_outline:before { + content: "\e90f"; +} +.icon-line_style:before { + content: "\e919"; +} +.icon-line_weight:before { + content: "\e91a"; +} +.icon-linear_scale:before { + content: "\e260"; +} +.icon-linked_camera:before { + content: "\e438"; +} +.icon-list2:before { + content: "\e896"; +} +.icon-live_help:before { + content: "\e0c6"; +} +.icon-live_tv:before { + content: "\e639"; +} +.icon-local_play:before { + content: "\e553"; +} +.icon-local_airport:before { + content: "\e53d"; +} +.icon-local_atm:before { + content: "\e53e"; +} +.icon-local_bar:before { + content: "\e540"; +} +.icon-local_cafe:before { + content: "\e541"; +} +.icon-local_car_wash:before { + content: "\e542"; +} +.icon-local_convenience_store:before { + content: "\e543"; +} +.icon-restaurant_menu:before { + content: "\e561"; +} +.icon-local_drink:before { + content: "\e544"; +} +.icon-local_florist:before { + content: "\e545"; +} +.icon-local_gas_station:before { + content: "\e546"; +} +.icon-shopping_cart:before { + content: "\e8cc"; +} +.icon-local_hospital:before { + content: "\e548"; +} +.icon-local_laundry_service:before { + content: "\e54a"; +} +.icon-local_library:before { + content: "\e54b"; +} +.icon-local_mall:before { + content: "\e54c"; +} +.icon-theaters:before { + content: "\e8da"; +} +.icon-local_offer:before { + content: "\e54e"; +} +.icon-local_parking:before { + content: "\e54f"; +} +.icon-local_pharmacy:before { + content: "\e550"; +} +.icon-local_pizza:before { + content: "\e552"; +} +.icon-print2:before { + content: "\e8ad"; +} +.icon-local_shipping:before { + content: "\e558"; +} +.icon-local_taxi:before { + content: "\e559"; +} +.icon-location_city:before { + content: "\e7f1"; +} +.icon-location_off:before { + content: "\e0c7"; +} +.icon-room:before { + content: "\e8b4"; +} +.icon-lock_open:before { + content: "\e898"; +} +.icon-lock_outline:before { + content: "\e899"; +} +.icon-looks:before { + content: "\e3fc"; +} +.icon-looks_3:before { + content: "\e3fb"; +} +.icon-looks_4:before { + content: "\e3fd"; +} +.icon-looks_5:before { + content: "\e3fe"; +} +.icon-looks_6:before { + content: "\e3ff"; +} +.icon-looks_one:before { + content: "\e400"; +} +.icon-looks_two:before { + content: "\e401"; +} +.icon-sync:before { + content: "\e627"; +} +.icon-loupe:before { + content: "\e402"; +} +.icon-low_priority:before { + content: "\e16d"; +} +.icon-loyalty:before { + content: "\e89a"; +} +.icon-mail_outline:before { + content: "\e0e1"; +} +.icon-map2:before { + content: "\e55b"; +} +.icon-markunread_mailbox:before { + content: "\e89b"; +} +.icon-memory:before { + content: "\e322"; +} +.icon-menu:before { + content: "\e5d2"; +} +.icon-message:before { + content: "\e0c9"; +} +.icon-mic:before { + content: "\e029"; +} +.icon-mic_none:before { + content: "\e02a"; +} +.icon-mic_off:before { + content: "\e02b"; +} +.icon-mms:before { + content: "\e618"; +} +.icon-mode_comment:before { + content: "\e253"; +} +.icon-monetization_on:before { + content: "\e263"; +} +.icon-money_off:before { + content: "\e25c"; +} +.icon-monochrome_photos:before { + content: "\e403"; +} +.icon-mood_bad:before { + content: "\e7f3"; +} +.icon-more:before { + content: "\e619"; +} +.icon-more_horiz:before { + content: "\e5d3"; +} +.icon-more_vert:before { + content: "\e5d4"; +} +.icon-motorcycle2:before { + content: "\e91b"; +} +.icon-mouse:before { + content: "\e323"; +} +.icon-move_to_inbox:before { + content: "\e168"; +} +.icon-movie_creation:before { + content: "\e404"; +} +.icon-movie_filter:before { + content: "\e43a"; +} +.icon-multiline_chart:before { + content: "\e6df"; +} +.icon-music_note:before { + content: "\e405"; +} +.icon-music_video:before { + content: "\e063"; +} +.icon-nature:before { + content: "\e406"; +} +.icon-nature_people:before { + content: "\e407"; +} +.icon-navigation:before { + content: "\e55d"; +} +.icon-near_me:before { + content: "\e569"; +} +.icon-network_cell:before { + content: "\e1b9"; +} +.icon-network_check:before { + content: "\e640"; +} +.icon-network_locked:before { + content: "\e61a"; +} +.icon-network_wifi:before { + content: "\e1ba"; +} +.icon-new_releases:before { + content: "\e031"; +} +.icon-next_week:before { + content: "\e16a"; +} +.icon-nfc:before { + content: "\e1bb"; +} +.icon-no_encryption:before { + content: "\e641"; +} +.icon-signal_cellular_no_sim:before { + content: "\e1ce"; +} +.icon-note:before { + content: "\e06f"; +} +.icon-note_add:before { + content: "\e89c"; +} +.icon-notifications:before { + content: "\e7f4"; +} +.icon-notifications_active:before { + content: "\e7f7"; +} +.icon-notifications_none:before { + content: "\e7f5"; +} +.icon-notifications_off:before { + content: "\e7f6"; +} +.icon-notifications_paused:before { + content: "\e7f8"; +} +.icon-offline_pin:before { + content: "\e90a"; +} +.icon-ondemand_video:before { + content: "\e63a"; +} +.icon-opacity:before { + content: "\e91c"; +} +.icon-open_in_browser:before { + content: "\e89d"; +} +.icon-open_with:before { + content: "\e89f"; +} +.icon-pages:before { + content: "\e7f9"; +} +.icon-pageview:before { + content: "\e8a0"; +} +.icon-pan_tool:before { + content: "\e925"; +} +.icon-panorama:before { + content: "\e40b"; +} +.icon-radio_button_unchecked:before { + content: "\e836"; +} +.icon-panorama_horizontal:before { + content: "\e40d"; +} +.icon-panorama_vertical:before { + content: "\e40e"; +} +.icon-panorama_wide_angle:before { + content: "\e40f"; +} +.icon-party_mode:before { + content: "\e7fa"; +} +.icon-pause2:before { + content: "\e034"; +} +.icon-pause_circle_filled:before { + content: "\e035"; +} +.icon-pause_circle_outline:before { + content: "\e036"; +} +.icon-people_outline:before { + content: "\e7fc"; +} +.icon-perm_camera_mic:before { + content: "\e8a2"; +} +.icon-perm_contact_calendar:before { + content: "\e8a3"; +} +.icon-perm_data_setting:before { + content: "\e8a4"; +} +.icon-perm_device_information:before { + content: "\e8a5"; +} +.icon-person_outline:before { + content: "\e7ff"; +} +.icon-perm_media:before { + content: "\e8a7"; +} +.icon-perm_phone_msg:before { + content: "\e8a8"; +} +.icon-perm_scan_wifi:before { + content: "\e8a9"; +} +.icon-person:before { + content: "\e7fd"; +} +.icon-person_add:before { + content: "\e7fe"; +} +.icon-person_pin:before { + content: "\e55a"; +} +.icon-person_pin_circle:before { + content: "\e56a"; +} +.icon-personal_video:before { + content: "\e63b"; +} +.icon-pets:before { + content: "\e91d"; +} +.icon-phone_android:before { + content: "\e324"; +} +.icon-phone_bluetooth_speaker:before { + content: "\e61b"; +} +.icon-phone_forwarded:before { + content: "\e61c"; +} +.icon-phone_in_talk:before { + content: "\e61d"; +} +.icon-phone_iphone:before { + content: "\e325"; +} +.icon-phone_locked:before { + content: "\e61e"; +} +.icon-phone_missed:before { + content: "\e61f"; +} +.icon-phone_paused:before { + content: "\e620"; +} +.icon-phonelink_erase:before { + content: "\e0db"; +} +.icon-phonelink_lock:before { + content: "\e0dc"; +} +.icon-phonelink_off:before { + content: "\e327"; +} +.icon-phonelink_ring:before { + content: "\e0dd"; +} +.icon-phonelink_setup:before { + content: "\e0de"; +} +.icon-photo_album:before { + content: "\e411"; +} +.icon-photo_filter:before { + content: "\e43b"; +} +.icon-photo_size_select_actual:before { + content: "\e432"; +} +.icon-photo_size_select_large:before { + content: "\e433"; +} +.icon-photo_size_select_small:before { + content: "\e434"; +} +.icon-picture_as_pdf:before { + content: "\e415"; +} +.icon-picture_in_picture:before { + content: "\e8aa"; +} +.icon-picture_in_picture_alt:before { + content: "\e911"; +} +.icon-pie_chart:before { + content: "\e6c4"; +} +.icon-pie_chart_outlined:before { + content: "\e6c5"; +} +.icon-pin_drop:before { + content: "\e55e"; +} +.icon-play_arrow:before { + content: "\e037"; +} +.icon-play_circle_filled:before { + content: "\e038"; +} +.icon-play_circle_outline:before { + content: "\e039"; +} +.icon-play_for_work:before { + content: "\e906"; +} +.icon-playlist_add:before { + content: "\e03b"; +} +.icon-playlist_add_check:before { + content: "\e065"; +} +.icon-playlist_play:before { + content: "\e05f"; +} +.icon-plus_one:before { + content: "\e800"; +} +.icon-polymer:before { + content: "\e8ab"; +} +.icon-pool:before { + content: "\eb48"; +} +.icon-portable_wifi_off:before { + content: "\e0ce"; +} +.icon-portrait:before { + content: "\e416"; +} +.icon-power:before { + content: "\e63c"; +} +.icon-power_input:before { + content: "\e336"; +} +.icon-power_settings_new:before { + content: "\e8ac"; +} +.icon-pregnant_woman:before { + content: "\e91e"; +} +.icon-present_to_all:before { + content: "\e0df"; +} +.icon-priority_high:before { + content: "\e645"; +} +.icon-public:before { + content: "\e80b"; +} +.icon-publish:before { + content: "\e255"; +} +.icon-queue_music:before { + content: "\e03d"; +} +.icon-queue_play_next:before { + content: "\e066"; +} +.icon-radio:before { + content: "\e03e"; +} +.icon-radio_button_checked:before { + content: "\e837"; +} +.icon-rate_review:before { + content: "\e560"; +} +.icon-receipt:before { + content: "\e8b0"; +} +.icon-recent_actors:before { + content: "\e03f"; +} +.icon-record_voice_over:before { + content: "\e91f"; +} +.icon-redo:before { + content: "\e15a"; +} +.icon-refresh2:before { + content: "\e5d5"; +} +.icon-remove2:before { + content: "\e15b"; +} +.icon-remove_circle_outline:before { + content: "\e15d"; +} +.icon-remove_from_queue:before { + content: "\e067"; +} +.icon-visibility:before { + content: "\e8f4"; +} +.icon-remove_shopping_cart:before { + content: "\e928"; +} +.icon-reorder2:before { + content: "\e8fe"; +} +.icon-repeat2:before { + content: "\e040"; +} +.icon-repeat_one:before { + content: "\e041"; +} +.icon-replay:before { + content: "\e042"; +} +.icon-replay_10:before { + content: "\e059"; +} +.icon-replay_30:before { + content: "\e05a"; +} +.icon-replay_5:before { + content: "\e05b"; +} +.icon-reply2:before { + content: "\e15e"; +} +.icon-reply_all:before { + content: "\e15f"; +} +.icon-report:before { + content: "\e160"; +} +.icon-warning2:before { + content: "\e002"; +} +.icon-restaurant:before { + content: "\e56c"; +} +.icon-restore_page:before { + content: "\e929"; +} +.icon-ring_volume:before { + content: "\e0d1"; +} +.icon-room_service:before { + content: "\eb49"; +} +.icon-rotate_90_degrees_ccw:before { + content: "\e418"; +} +.icon-rotate_left:before { + content: "\e419"; +} +.icon-rotate_right:before { + content: "\e41a"; +} +.icon-rounded_corner:before { + content: "\e920"; +} +.icon-router:before { + content: "\e328"; +} +.icon-rowing:before { + content: "\e921"; +} +.icon-rss_feed:before { + content: "\e0e5"; +} +.icon-rv_hookup:before { + content: "\e642"; +} +.icon-satellite:before { + content: "\e562"; +} +.icon-save2:before { + content: "\e161"; +} +.icon-scanner:before { + content: "\e329"; +} +.icon-school:before { + content: "\e80c"; +} +.icon-screen_lock_landscape:before { + content: "\e1be"; +} +.icon-screen_lock_portrait:before { + content: "\e1bf"; +} +.icon-screen_lock_rotation:before { + content: "\e1c0"; +} +.icon-screen_rotation:before { + content: "\e1c1"; +} +.icon-screen_share:before { + content: "\e0e2"; +} +.icon-sd_storage:before { + content: "\e1c2"; +} +.icon-search2:before { + content: "\e8b6"; +} +.icon-security:before { + content: "\e32a"; +} +.icon-select_all:before { + content: "\e162"; +} +.icon-send2:before { + content: "\e163"; +} +.icon-sentiment_dissatisfied:before { + content: "\e811"; +} +.icon-sentiment_neutral:before { + content: "\e812"; +} +.icon-sentiment_satisfied:before { + content: "\e813"; +} +.icon-sentiment_very_dissatisfied:before { + content: "\e814"; +} +.icon-sentiment_very_satisfied:before { + content: "\e815"; +} +.icon-settings:before { + content: "\e8b8"; +} +.icon-settings_applications:before { + content: "\e8b9"; +} +.icon-settings_backup_restore:before { + content: "\e8ba"; +} +.icon-settings_bluetooth:before { + content: "\e8bb"; +} +.icon-settings_brightness:before { + content: "\e8bd"; +} +.icon-settings_cell:before { + content: "\e8bc"; +} +.icon-settings_ethernet:before { + content: "\e8be"; +} +.icon-settings_input_antenna:before { + content: "\e8bf"; +} +.icon-settings_input_composite:before { + content: "\e8c1"; +} +.icon-settings_input_hdmi:before { + content: "\e8c2"; +} +.icon-settings_input_svideo:before { + content: "\e8c3"; +} +.icon-settings_overscan:before { + content: "\e8c4"; +} +.icon-settings_phone:before { + content: "\e8c5"; +} +.icon-settings_power:before { + content: "\e8c6"; +} +.icon-settings_remote:before { + content: "\e8c7"; +} +.icon-settings_system_daydream:before { + content: "\e1c3"; +} +.icon-settings_voice:before { + content: "\e8c8"; +} +.icon-share2:before { + content: "\e80d"; +} +.icon-shop:before { + content: "\e8c9"; +} +.icon-shop_two:before { + content: "\e8ca"; +} +.icon-shopping_basket:before { + content: "\e8cb"; +} +.icon-short_text:before { + content: "\e261"; +} +.icon-show_chart:before { + content: "\e6e1"; +} +.icon-shuffle:before { + content: "\e043"; +} +.icon-signal_cellular_4_bar:before { + content: "\e1c8"; +} +.icon-signal_cellular_connected_no_internet_4_bar:before { + content: "\e1cd"; +} +.icon-signal_cellular_null:before { + content: "\e1cf"; +} +.icon-signal_cellular_off:before { + content: "\e1d0"; +} +.icon-signal_wifi_4_bar:before { + content: "\e1d8"; +} +.icon-signal_wifi_4_bar_lock:before { + content: "\e1d9"; +} +.icon-signal_wifi_off:before { + content: "\e1da"; +} +.icon-sim_card:before { + content: "\e32b"; +} +.icon-sim_card_alert:before { + content: "\e624"; +} +.icon-skip_next:before { + content: "\e044"; +} +.icon-skip_previous:before { + content: "\e045"; +} +.icon-slideshow:before { + content: "\e41b"; +} +.icon-slow_motion_video:before { + content: "\e068"; +} +.icon-stay_primary_portrait:before { + content: "\e0d6"; +} +.icon-smoke_free:before { + content: "\eb4a"; +} +.icon-smoking_rooms:before { + content: "\eb4b"; +} +.icon-textsms:before { + content: "\e0d8"; +} +.icon-snooze:before { + content: "\e046"; +} +.icon-sort2:before { + content: "\e164"; +} +.icon-sort_by_alpha:before { + content: "\e053"; +} +.icon-spa:before { + content: "\eb4c"; +} +.icon-space_bar:before { + content: "\e256"; +} +.icon-speaker:before { + content: "\e32d"; +} +.icon-speaker_group:before { + content: "\e32e"; +} +.icon-speaker_notes:before { + content: "\e8cd"; +} +.icon-speaker_notes_off:before { + content: "\e92a"; +} +.icon-speaker_phone:before { + content: "\e0d2"; +} +.icon-spellcheck:before { + content: "\e8ce"; +} +.icon-star_border:before { + content: "\e83a"; +} +.icon-star_half:before { + content: "\e839"; +} +.icon-stars:before { + content: "\e8d0"; +} +.icon-stay_primary_landscape:before { + content: "\e0d5"; +} +.icon-stop2:before { + content: "\e047"; +} +.icon-stop_screen_share:before { + content: "\e0e3"; +} +.icon-storage:before { + content: "\e1db"; +} +.icon-store_mall_directory:before { + content: "\e563"; +} +.icon-straighten:before { + content: "\e41c"; +} +.icon-streetview:before { + content: "\e56e"; +} +.icon-strikethrough_s:before { + content: "\e257"; +} +.icon-style:before { + content: "\e41d"; +} +.icon-subdirectory_arrow_left:before { + content: "\e5d9"; +} +.icon-subdirectory_arrow_right:before { + content: "\e5da"; +} +.icon-subject:before { + content: "\e8d2"; +} +.icon-subscriptions:before { + content: "\e064"; +} +.icon-subtitles:before { + content: "\e048"; +} +.icon-subway2:before { + content: "\e56f"; +} +.icon-supervisor_account:before { + content: "\e8d3"; +} +.icon-surround_sound:before { + content: "\e049"; +} +.icon-swap_calls:before { + content: "\e0d7"; +} +.icon-swap_horiz:before { + content: "\e8d4"; +} +.icon-swap_vert:before { + content: "\e8d5"; +} +.icon-swap_vertical_circle:before { + content: "\e8d6"; +} +.icon-switch_camera:before { + content: "\e41e"; +} +.icon-switch_video:before { + content: "\e41f"; +} +.icon-sync_disabled:before { + content: "\e628"; +} +.icon-sync_problem:before { + content: "\e629"; +} +.icon-system_update:before { + content: "\e62a"; +} +.icon-system_update_alt:before { + content: "\e8d7"; +} +.icon-tab:before { + content: "\e8d8"; +} +.icon-tab_unselected:before { + content: "\e8d9"; +} +.icon-tablet2:before { + content: "\e32f"; +} +.icon-tablet_android:before { + content: "\e330"; +} +.icon-tablet_mac:before { + content: "\e331"; +} +.icon-tap_and_play:before { + content: "\e62b"; +} +.icon-text_fields:before { + content: "\e262"; +} +.icon-text_format:before { + content: "\e165"; +} +.icon-texture:before { + content: "\e421"; +} +.icon-thumb_down:before { + content: "\e8db"; +} +.icon-thumb_up:before { + content: "\e8dc"; +} +.icon-thumbs_up_down:before { + content: "\e8dd"; +} +.icon-timelapse:before { + content: "\e422"; +} +.icon-timeline:before { + content: "\e922"; +} +.icon-timer:before { + content: "\e425"; +} +.icon-timer_10:before { + content: "\e423"; +} +.icon-timer_3:before { + content: "\e424"; +} +.icon-timer_off:before { + content: "\e426"; +} +.icon-title:before { + content: "\e264"; +} +.icon-toc:before { + content: "\e8de"; +} +.icon-today:before { + content: "\e8df"; +} +.icon-toll:before { + content: "\e8e0"; +} +.icon-tonality:before { + content: "\e427"; +} +.icon-touch_app:before { + content: "\e913"; +} +.icon-toys:before { + content: "\e332"; +} +.icon-track_changes:before { + content: "\e8e1"; +} +.icon-traffic:before { + content: "\e565"; +} +.icon-train2:before { + content: "\e570"; +} +.icon-tram:before { + content: "\e571"; +} +.icon-transfer_within_a_station:before { + content: "\e572"; +} +.icon-transform:before { + content: "\e428"; +} +.icon-translate:before { + content: "\e8e2"; +} +.icon-trending_down:before { + content: "\e8e3"; +} +.icon-trending_flat:before { + content: "\e8e4"; +} +.icon-trending_up:before { + content: "\e8e5"; +} +.icon-tune:before { + content: "\e429"; +} +.icon-tv2:before { + content: "\e333"; +} +.icon-unarchive:before { + content: "\e169"; +} +.icon-undo2:before { + content: "\e166"; +} +.icon-unfold_less:before { + content: "\e5d6"; +} +.icon-unfold_more:before { + content: "\e5d7"; +} +.icon-update:before { + content: "\e923"; +} +.icon-usb2:before { + content: "\e1e0"; +} +.icon-verified_user:before { + content: "\e8e8"; +} +.icon-vertical_align_bottom:before { + content: "\e258"; +} +.icon-vertical_align_center:before { + content: "\e259"; +} +.icon-vertical_align_top:before { + content: "\e25a"; +} +.icon-vibration:before { + content: "\e62d"; +} +.icon-video_call:before { + content: "\e070"; +} +.icon-video_label:before { + content: "\e071"; +} +.icon-video_library:before { + content: "\e04a"; +} +.icon-videocam:before { + content: "\e04b"; +} +.icon-videocam_off:before { + content: "\e04c"; +} +.icon-videogame_asset:before { + content: "\e338"; +} +.icon-view_agenda:before { + content: "\e8e9"; +} +.icon-view_array:before { + content: "\e8ea"; +} +.icon-view_carousel:before { + content: "\e8eb"; +} +.icon-view_column:before { + content: "\e8ec"; +} +.icon-view_comfy:before { + content: "\e42a"; +} +.icon-view_compact:before { + content: "\e42b"; +} +.icon-view_day:before { + content: "\e8ed"; +} +.icon-view_headline:before { + content: "\e8ee"; +} +.icon-view_list:before { + content: "\e8ef"; +} +.icon-view_module:before { + content: "\e8f0"; +} +.icon-view_quilt:before { + content: "\e8f1"; +} +.icon-view_stream:before { + content: "\e8f2"; +} +.icon-view_week:before { + content: "\e8f3"; +} +.icon-vignette:before { + content: "\e435"; +} +.icon-visibility_off:before { + content: "\e8f5"; +} +.icon-voice_chat:before { + content: "\e62e"; +} +.icon-voicemail:before { + content: "\e0d9"; +} +.icon-volume_down:before { + content: "\e04d"; +} +.icon-volume_mute:before { + content: "\e04e"; +} +.icon-volume_off:before { + content: "\e04f"; +} +.icon-volume_up:before { + content: "\e050"; +} +.icon-vpn_key:before { + content: "\e0da"; +} +.icon-vpn_lock:before { + content: "\e62f"; +} +.icon-wallpaper:before { + content: "\e1bc"; +} +.icon-watch:before { + content: "\e334"; +} +.icon-watch_later:before { + content: "\e924"; +} +.icon-wb_auto:before { + content: "\e42c"; +} +.icon-wb_incandescent:before { + content: "\e42e"; +} +.icon-wb_iridescent:before { + content: "\e436"; +} +.icon-wb_sunny:before { + content: "\e430"; +} +.icon-wc:before { + content: "\e63d"; +} +.icon-web:before { + content: "\e051"; +} +.icon-web_asset:before { + content: "\e069"; +} +.icon-weekend:before { + content: "\e16b"; +} +.icon-whatshot:before { + content: "\e80e"; +} +.icon-widgets:before { + content: "\e1bd"; +} +.icon-wifi2:before { + content: "\e63e"; +} +.icon-wifi_lock:before { + content: "\e1e1"; +} +.icon-wifi_tethering:before { + content: "\e1e2"; +} +.icon-work:before { + content: "\e8f9"; +} +.icon-wrap_text:before { + content: "\e25b"; +} +.icon-youtube_searched_for:before { + content: "\e8fa"; +} +.icon-zoom_in:before { + content: "\e8ff"; +} +.icon-zoom_out:before { + content: "\e901"; +} +.icon-zoom_out_map:before { + content: "\e56b"; +} diff --git a/public/css/ionicons.min.css b/public/css/ionicons.min.css new file mode 100644 index 0000000..ef04206 --- /dev/null +++ b/public/css/ionicons.min.css @@ -0,0 +1,11 @@ +/*! + Ionicons, v4.0.0-19 + Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ + https://twitter.com/benjsperry https://twitter.com/ionicframework + MIT License: https://github.com/driftyco/ionicons + + Android-style icons originally built by Google’s + Material Design Icons: https://github.com/google/material-design-icons + used under CC BY http://creativecommons.org/licenses/by/4.0/ + Modified icons to fit ionicon’s grid from original. +*/@font-face{font-family:"Ionicons";src:url("../fonts/ionicons/fonts/ionicons.eot?v=4.0.0-19");src:url("../fonts/ionicons/fonts/ionicons.eot?v=4.0.0-19#iefix") format("embedded-opentype"),url("../fonts/ionicons/fonts/ionicons.woff2?v=4.0.0-19") format("woff2"),url("../fonts/ionicons/fonts/ionicons.woff?v=4.0.0-19") format("woff"),url("../fonts/ionicons/fonts/ionicons.ttf?v=4.0.0-19") format("truetype"),url("../fonts/ionicons/fonts/ionicons.svg?v=4.0.0-19#Ionicons") format("svg");font-weight:normal;font-style:normal}.ion,.ionicons,.ion-ios-add:before,.ion-ios-add-circle:before,.ion-ios-add-circle-outline:before,.ion-ios-airplane:before,.ion-ios-alarm:before,.ion-ios-albums:before,.ion-ios-alert:before,.ion-ios-american-football:before,.ion-ios-analytics:before,.ion-ios-aperture:before,.ion-ios-apps:before,.ion-ios-appstore:before,.ion-ios-archive:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-dropdown:before,.ion-ios-arrow-dropdown-circle:before,.ion-ios-arrow-dropleft:before,.ion-ios-arrow-dropleft-circle:before,.ion-ios-arrow-dropright:before,.ion-ios-arrow-dropright-circle:before,.ion-ios-arrow-dropup:before,.ion-ios-arrow-dropup-circle:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-round-back:before,.ion-ios-arrow-round-down:before,.ion-ios-arrow-round-forward:before,.ion-ios-arrow-round-up:before,.ion-ios-arrow-up:before,.ion-ios-at:before,.ion-ios-attach:before,.ion-ios-backspace:before,.ion-ios-barcode:before,.ion-ios-baseball:before,.ion-ios-basket:before,.ion-ios-basketball:before,.ion-ios-battery-charging:before,.ion-ios-battery-dead:before,.ion-ios-battery-full:before,.ion-ios-beaker:before,.ion-ios-bed:before,.ion-ios-beer:before,.ion-ios-bicycle:before,.ion-ios-bluetooth:before,.ion-ios-boat:before,.ion-ios-body:before,.ion-ios-bonfire:before,.ion-ios-book:before,.ion-ios-bookmark:before,.ion-ios-bookmarks:before,.ion-ios-bowtie:before,.ion-ios-briefcase:before,.ion-ios-browsers:before,.ion-ios-brush:before,.ion-ios-bug:before,.ion-ios-build:before,.ion-ios-bulb:before,.ion-ios-bus:before,.ion-ios-business:before,.ion-ios-cafe:before,.ion-ios-calculator:before,.ion-ios-calendar:before,.ion-ios-call:before,.ion-ios-camera:before,.ion-ios-car:before,.ion-ios-card:before,.ion-ios-cart:before,.ion-ios-cash:before,.ion-ios-cellular:before,.ion-ios-chatboxes:before,.ion-ios-chatbubbles:before,.ion-ios-checkbox:before,.ion-ios-checkbox-outline:before,.ion-ios-checkmark:before,.ion-ios-checkmark-circle:before,.ion-ios-checkmark-circle-outline:before,.ion-ios-clipboard:before,.ion-ios-clock:before,.ion-ios-close:before,.ion-ios-close-circle:before,.ion-ios-close-circle-outline:before,.ion-ios-cloud:before,.ion-ios-cloud-circle:before,.ion-ios-cloud-done:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloudy:before,.ion-ios-cloudy-night:before,.ion-ios-code:before,.ion-ios-code-download:before,.ion-ios-code-working:before,.ion-ios-cog:before,.ion-ios-color-fill:before,.ion-ios-color-filter:before,.ion-ios-color-palette:before,.ion-ios-color-wand:before,.ion-ios-compass:before,.ion-ios-construct:before,.ion-ios-contact:before,.ion-ios-contacts:before,.ion-ios-contract:before,.ion-ios-contrast:before,.ion-ios-copy:before,.ion-ios-create:before,.ion-ios-crop:before,.ion-ios-cube:before,.ion-ios-cut:before,.ion-ios-desktop:before,.ion-ios-disc:before,.ion-ios-document:before,.ion-ios-done-all:before,.ion-ios-download:before,.ion-ios-easel:before,.ion-ios-egg:before,.ion-ios-exit:before,.ion-ios-expand:before,.ion-ios-eye:before,.ion-ios-eye-off:before,.ion-ios-fastforward:before,.ion-ios-female:before,.ion-ios-filing:before,.ion-ios-film:before,.ion-ios-finger-print:before,.ion-ios-fitness:before,.ion-ios-flag:before,.ion-ios-flame:before,.ion-ios-flash:before,.ion-ios-flash-off:before,.ion-ios-flashlight:before,.ion-ios-flask:before,.ion-ios-flower:before,.ion-ios-folder:before,.ion-ios-folder-open:before,.ion-ios-football:before,.ion-ios-funnel:before,.ion-ios-gift:before,.ion-ios-git-branch:before,.ion-ios-git-commit:before,.ion-ios-git-compare:before,.ion-ios-git-merge:before,.ion-ios-git-network:before,.ion-ios-git-pull-request:before,.ion-ios-glasses:before,.ion-ios-globe:before,.ion-ios-grid:before,.ion-ios-hammer:before,.ion-ios-hand:before,.ion-ios-happy:before,.ion-ios-headset:before,.ion-ios-heart:before,.ion-ios-heart-dislike:before,.ion-ios-heart-empty:before,.ion-ios-heart-half:before,.ion-ios-help:before,.ion-ios-help-buoy:before,.ion-ios-help-circle:before,.ion-ios-help-circle-outline:before,.ion-ios-home:before,.ion-ios-hourglass:before,.ion-ios-ice-cream:before,.ion-ios-image:before,.ion-ios-images:before,.ion-ios-infinite:before,.ion-ios-information:before,.ion-ios-information-circle:before,.ion-ios-information-circle-outline:before,.ion-ios-jet:before,.ion-ios-journal:before,.ion-ios-key:before,.ion-ios-keypad:before,.ion-ios-laptop:before,.ion-ios-leaf:before,.ion-ios-link:before,.ion-ios-list:before,.ion-ios-list-box:before,.ion-ios-locate:before,.ion-ios-lock:before,.ion-ios-log-in:before,.ion-ios-log-out:before,.ion-ios-magnet:before,.ion-ios-mail:before,.ion-ios-mail-open:before,.ion-ios-mail-unread:before,.ion-ios-male:before,.ion-ios-man:before,.ion-ios-map:before,.ion-ios-medal:before,.ion-ios-medical:before,.ion-ios-medkit:before,.ion-ios-megaphone:before,.ion-ios-menu:before,.ion-ios-mic:before,.ion-ios-mic-off:before,.ion-ios-microphone:before,.ion-ios-moon:before,.ion-ios-more:before,.ion-ios-move:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate:before,.ion-ios-notifications:before,.ion-ios-notifications-off:before,.ion-ios-notifications-outline:before,.ion-ios-nuclear:before,.ion-ios-nutrition:before,.ion-ios-open:before,.ion-ios-options:before,.ion-ios-outlet:before,.ion-ios-paper:before,.ion-ios-paper-plane:before,.ion-ios-partly-sunny:before,.ion-ios-pause:before,.ion-ios-paw:before,.ion-ios-people:before,.ion-ios-person:before,.ion-ios-person-add:before,.ion-ios-phone-landscape:before,.ion-ios-phone-portrait:before,.ion-ios-photos:before,.ion-ios-pie:before,.ion-ios-pin:before,.ion-ios-pint:before,.ion-ios-pizza:before,.ion-ios-plane:before,.ion-ios-planet:before,.ion-ios-play:before,.ion-ios-play-circle:before,.ion-ios-podium:before,.ion-ios-power:before,.ion-ios-pricetag:before,.ion-ios-pricetags:before,.ion-ios-print:before,.ion-ios-pulse:before,.ion-ios-qr-scanner:before,.ion-ios-quote:before,.ion-ios-radio:before,.ion-ios-radio-button-off:before,.ion-ios-radio-button-on:before,.ion-ios-rainy:before,.ion-ios-recording:before,.ion-ios-redo:before,.ion-ios-refresh:before,.ion-ios-refresh-circle:before,.ion-ios-remove:before,.ion-ios-remove-circle:before,.ion-ios-remove-circle-outline:before,.ion-ios-reorder:before,.ion-ios-repeat:before,.ion-ios-resize:before,.ion-ios-restaurant:before,.ion-ios-return-left:before,.ion-ios-return-right:before,.ion-ios-reverse-camera:before,.ion-ios-rewind:before,.ion-ios-ribbon:before,.ion-ios-rocket:before,.ion-ios-rose:before,.ion-ios-sad:before,.ion-ios-save:before,.ion-ios-school:before,.ion-ios-search:before,.ion-ios-send:before,.ion-ios-settings:before,.ion-ios-share:before,.ion-ios-share-alt:before,.ion-ios-shirt:before,.ion-ios-shuffle:before,.ion-ios-skip-backward:before,.ion-ios-skip-forward:before,.ion-ios-snow:before,.ion-ios-speedometer:before,.ion-ios-square:before,.ion-ios-square-outline:before,.ion-ios-star:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-stats:before,.ion-ios-stopwatch:before,.ion-ios-subway:before,.ion-ios-sunny:before,.ion-ios-swap:before,.ion-ios-switch:before,.ion-ios-sync:before,.ion-ios-tablet-landscape:before,.ion-ios-tablet-portrait:before,.ion-ios-tennisball:before,.ion-ios-text:before,.ion-ios-thermometer:before,.ion-ios-thumbs-down:before,.ion-ios-thumbs-up:before,.ion-ios-thunderstorm:before,.ion-ios-time:before,.ion-ios-timer:before,.ion-ios-today:before,.ion-ios-train:before,.ion-ios-transgender:before,.ion-ios-trash:before,.ion-ios-trending-down:before,.ion-ios-trending-up:before,.ion-ios-trophy:before,.ion-ios-tv:before,.ion-ios-umbrella:before,.ion-ios-undo:before,.ion-ios-unlock:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-volume-mute:before,.ion-ios-volume-off:before,.ion-ios-walk:before,.ion-ios-wallet:before,.ion-ios-warning:before,.ion-ios-watch:before,.ion-ios-water:before,.ion-ios-wifi:before,.ion-ios-wine:before,.ion-ios-woman:before,.ion-logo-android:before,.ion-logo-angular:before,.ion-logo-apple:before,.ion-logo-bitbucket:before,.ion-logo-bitcoin:before,.ion-logo-buffer:before,.ion-logo-chrome:before,.ion-logo-closed-captioning:before,.ion-logo-codepen:before,.ion-logo-css3:before,.ion-logo-designernews:before,.ion-logo-dribbble:before,.ion-logo-dropbox:before,.ion-logo-euro:before,.ion-logo-facebook:before,.ion-logo-flickr:before,.ion-logo-foursquare:before,.ion-logo-freebsd-devil:before,.ion-logo-game-controller-a:before,.ion-logo-game-controller-b:before,.ion-logo-github:before,.ion-logo-google:before,.ion-logo-googleplus:before,.ion-logo-hackernews:before,.ion-logo-html5:before,.ion-logo-instagram:before,.ion-logo-ionic:before,.ion-logo-ionitron:before,.ion-logo-javascript:before,.ion-logo-linkedin:before,.ion-logo-markdown:before,.ion-logo-model-s:before,.ion-logo-no-smoking:before,.ion-logo-nodejs:before,.ion-logo-npm:before,.ion-logo-octocat:before,.ion-logo-pinterest:before,.ion-logo-playstation:before,.ion-logo-polymer:before,.ion-logo-python:before,.ion-logo-reddit:before,.ion-logo-rss:before,.ion-logo-sass:before,.ion-logo-skype:before,.ion-logo-slack:before,.ion-logo-snapchat:before,.ion-logo-steam:before,.ion-logo-tumblr:before,.ion-logo-tux:before,.ion-logo-twitch:before,.ion-logo-twitter:before,.ion-logo-usd:before,.ion-logo-vimeo:before,.ion-logo-vk:before,.ion-logo-whatsapp:before,.ion-logo-windows:before,.ion-logo-wordpress:before,.ion-logo-xbox:before,.ion-logo-xing:before,.ion-logo-yahoo:before,.ion-logo-yen:before,.ion-logo-youtube:before,.ion-md-add:before,.ion-md-add-circle:before,.ion-md-add-circle-outline:before,.ion-md-airplane:before,.ion-md-alarm:before,.ion-md-albums:before,.ion-md-alert:before,.ion-md-american-football:before,.ion-md-analytics:before,.ion-md-aperture:before,.ion-md-apps:before,.ion-md-appstore:before,.ion-md-archive:before,.ion-md-arrow-back:before,.ion-md-arrow-down:before,.ion-md-arrow-dropdown:before,.ion-md-arrow-dropdown-circle:before,.ion-md-arrow-dropleft:before,.ion-md-arrow-dropleft-circle:before,.ion-md-arrow-dropright:before,.ion-md-arrow-dropright-circle:before,.ion-md-arrow-dropup:before,.ion-md-arrow-dropup-circle:before,.ion-md-arrow-forward:before,.ion-md-arrow-round-back:before,.ion-md-arrow-round-down:before,.ion-md-arrow-round-forward:before,.ion-md-arrow-round-up:before,.ion-md-arrow-up:before,.ion-md-at:before,.ion-md-attach:before,.ion-md-backspace:before,.ion-md-barcode:before,.ion-md-baseball:before,.ion-md-basket:before,.ion-md-basketball:before,.ion-md-battery-charging:before,.ion-md-battery-dead:before,.ion-md-battery-full:before,.ion-md-beaker:before,.ion-md-bed:before,.ion-md-beer:before,.ion-md-bicycle:before,.ion-md-bluetooth:before,.ion-md-boat:before,.ion-md-body:before,.ion-md-bonfire:before,.ion-md-book:before,.ion-md-bookmark:before,.ion-md-bookmarks:before,.ion-md-bowtie:before,.ion-md-briefcase:before,.ion-md-browsers:before,.ion-md-brush:before,.ion-md-bug:before,.ion-md-build:before,.ion-md-bulb:before,.ion-md-bus:before,.ion-md-business:before,.ion-md-cafe:before,.ion-md-calculator:before,.ion-md-calendar:before,.ion-md-call:before,.ion-md-camera:before,.ion-md-car:before,.ion-md-card:before,.ion-md-cart:before,.ion-md-cash:before,.ion-md-cellular:before,.ion-md-chatboxes:before,.ion-md-chatbubbles:before,.ion-md-checkbox:before,.ion-md-checkbox-outline:before,.ion-md-checkmark:before,.ion-md-checkmark-circle:before,.ion-md-checkmark-circle-outline:before,.ion-md-clipboard:before,.ion-md-clock:before,.ion-md-close:before,.ion-md-close-circle:before,.ion-md-close-circle-outline:before,.ion-md-cloud:before,.ion-md-cloud-circle:before,.ion-md-cloud-done:before,.ion-md-cloud-download:before,.ion-md-cloud-outline:before,.ion-md-cloud-upload:before,.ion-md-cloudy:before,.ion-md-cloudy-night:before,.ion-md-code:before,.ion-md-code-download:before,.ion-md-code-working:before,.ion-md-cog:before,.ion-md-color-fill:before,.ion-md-color-filter:before,.ion-md-color-palette:before,.ion-md-color-wand:before,.ion-md-compass:before,.ion-md-construct:before,.ion-md-contact:before,.ion-md-contacts:before,.ion-md-contract:before,.ion-md-contrast:before,.ion-md-copy:before,.ion-md-create:before,.ion-md-crop:before,.ion-md-cube:before,.ion-md-cut:before,.ion-md-desktop:before,.ion-md-disc:before,.ion-md-document:before,.ion-md-done-all:before,.ion-md-download:before,.ion-md-easel:before,.ion-md-egg:before,.ion-md-exit:before,.ion-md-expand:before,.ion-md-eye:before,.ion-md-eye-off:before,.ion-md-fastforward:before,.ion-md-female:before,.ion-md-filing:before,.ion-md-film:before,.ion-md-finger-print:before,.ion-md-fitness:before,.ion-md-flag:before,.ion-md-flame:before,.ion-md-flash:before,.ion-md-flash-off:before,.ion-md-flashlight:before,.ion-md-flask:before,.ion-md-flower:before,.ion-md-folder:before,.ion-md-folder-open:before,.ion-md-football:before,.ion-md-funnel:before,.ion-md-gift:before,.ion-md-git-branch:before,.ion-md-git-commit:before,.ion-md-git-compare:before,.ion-md-git-merge:before,.ion-md-git-network:before,.ion-md-git-pull-request:before,.ion-md-glasses:before,.ion-md-globe:before,.ion-md-grid:before,.ion-md-hammer:before,.ion-md-hand:before,.ion-md-happy:before,.ion-md-headset:before,.ion-md-heart:before,.ion-md-heart-dislike:before,.ion-md-heart-empty:before,.ion-md-heart-half:before,.ion-md-help:before,.ion-md-help-buoy:before,.ion-md-help-circle:before,.ion-md-help-circle-outline:before,.ion-md-home:before,.ion-md-hourglass:before,.ion-md-ice-cream:before,.ion-md-image:before,.ion-md-images:before,.ion-md-infinite:before,.ion-md-information:before,.ion-md-information-circle:before,.ion-md-information-circle-outline:before,.ion-md-jet:before,.ion-md-journal:before,.ion-md-key:before,.ion-md-keypad:before,.ion-md-laptop:before,.ion-md-leaf:before,.ion-md-link:before,.ion-md-list:before,.ion-md-list-box:before,.ion-md-locate:before,.ion-md-lock:before,.ion-md-log-in:before,.ion-md-log-out:before,.ion-md-magnet:before,.ion-md-mail:before,.ion-md-mail-open:before,.ion-md-mail-unread:before,.ion-md-male:before,.ion-md-man:before,.ion-md-map:before,.ion-md-medal:before,.ion-md-medical:before,.ion-md-medkit:before,.ion-md-megaphone:before,.ion-md-menu:before,.ion-md-mic:before,.ion-md-mic-off:before,.ion-md-microphone:before,.ion-md-moon:before,.ion-md-more:before,.ion-md-move:before,.ion-md-musical-note:before,.ion-md-musical-notes:before,.ion-md-navigate:before,.ion-md-notifications:before,.ion-md-notifications-off:before,.ion-md-notifications-outline:before,.ion-md-nuclear:before,.ion-md-nutrition:before,.ion-md-open:before,.ion-md-options:before,.ion-md-outlet:before,.ion-md-paper:before,.ion-md-paper-plane:before,.ion-md-partly-sunny:before,.ion-md-pause:before,.ion-md-paw:before,.ion-md-people:before,.ion-md-person:before,.ion-md-person-add:before,.ion-md-phone-landscape:before,.ion-md-phone-portrait:before,.ion-md-photos:before,.ion-md-pie:before,.ion-md-pin:before,.ion-md-pint:before,.ion-md-pizza:before,.ion-md-plane:before,.ion-md-planet:before,.ion-md-play:before,.ion-md-play-circle:before,.ion-md-podium:before,.ion-md-power:before,.ion-md-pricetag:before,.ion-md-pricetags:before,.ion-md-print:before,.ion-md-pulse:before,.ion-md-qr-scanner:before,.ion-md-quote:before,.ion-md-radio:before,.ion-md-radio-button-off:before,.ion-md-radio-button-on:before,.ion-md-rainy:before,.ion-md-recording:before,.ion-md-redo:before,.ion-md-refresh:before,.ion-md-refresh-circle:before,.ion-md-remove:before,.ion-md-remove-circle:before,.ion-md-remove-circle-outline:before,.ion-md-reorder:before,.ion-md-repeat:before,.ion-md-resize:before,.ion-md-restaurant:before,.ion-md-return-left:before,.ion-md-return-right:before,.ion-md-reverse-camera:before,.ion-md-rewind:before,.ion-md-ribbon:before,.ion-md-rocket:before,.ion-md-rose:before,.ion-md-sad:before,.ion-md-save:before,.ion-md-school:before,.ion-md-search:before,.ion-md-send:before,.ion-md-settings:before,.ion-md-share:before,.ion-md-share-alt:before,.ion-md-shirt:before,.ion-md-shuffle:before,.ion-md-skip-backward:before,.ion-md-skip-forward:before,.ion-md-snow:before,.ion-md-speedometer:before,.ion-md-square:before,.ion-md-square-outline:before,.ion-md-star:before,.ion-md-star-half:before,.ion-md-star-outline:before,.ion-md-stats:before,.ion-md-stopwatch:before,.ion-md-subway:before,.ion-md-sunny:before,.ion-md-swap:before,.ion-md-switch:before,.ion-md-sync:before,.ion-md-tablet-landscape:before,.ion-md-tablet-portrait:before,.ion-md-tennisball:before,.ion-md-text:before,.ion-md-thermometer:before,.ion-md-thumbs-down:before,.ion-md-thumbs-up:before,.ion-md-thunderstorm:before,.ion-md-time:before,.ion-md-timer:before,.ion-md-today:before,.ion-md-train:before,.ion-md-transgender:before,.ion-md-trash:before,.ion-md-trending-down:before,.ion-md-trending-up:before,.ion-md-trophy:before,.ion-md-tv:before,.ion-md-umbrella:before,.ion-md-undo:before,.ion-md-unlock:before,.ion-md-videocam:before,.ion-md-volume-high:before,.ion-md-volume-low:before,.ion-md-volume-mute:before,.ion-md-volume-off:before,.ion-md-walk:before,.ion-md-wallet:before,.ion-md-warning:before,.ion-md-watch:before,.ion-md-water:before,.ion-md-wifi:before,.ion-md-wine:before,.ion-md-woman:before{display:inline-block;font-family:"Ionicons";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-ios-add:before{content:"\f102"}.ion-ios-add-circle:before{content:"\f101"}.ion-ios-add-circle-outline:before{content:"\f100"}.ion-ios-airplane:before{content:"\f137"}.ion-ios-alarm:before{content:"\f3c8"}.ion-ios-albums:before{content:"\f3ca"}.ion-ios-alert:before{content:"\f104"}.ion-ios-american-football:before{content:"\f106"}.ion-ios-analytics:before{content:"\f3ce"}.ion-ios-aperture:before{content:"\f108"}.ion-ios-apps:before{content:"\f10a"}.ion-ios-appstore:before{content:"\f10c"}.ion-ios-archive:before{content:"\f10e"}.ion-ios-arrow-back:before{content:"\f3cf"}.ion-ios-arrow-down:before{content:"\f3d0"}.ion-ios-arrow-dropdown:before{content:"\f110"}.ion-ios-arrow-dropdown-circle:before{content:"\f125"}.ion-ios-arrow-dropleft:before{content:"\f112"}.ion-ios-arrow-dropleft-circle:before{content:"\f129"}.ion-ios-arrow-dropright:before{content:"\f114"}.ion-ios-arrow-dropright-circle:before{content:"\f12b"}.ion-ios-arrow-dropup:before{content:"\f116"}.ion-ios-arrow-dropup-circle:before{content:"\f12d"}.ion-ios-arrow-forward:before{content:"\f3d1"}.ion-ios-arrow-round-back:before{content:"\f117"}.ion-ios-arrow-round-down:before{content:"\f118"}.ion-ios-arrow-round-forward:before{content:"\f119"}.ion-ios-arrow-round-up:before{content:"\f11a"}.ion-ios-arrow-up:before{content:"\f3d8"}.ion-ios-at:before{content:"\f3da"}.ion-ios-attach:before{content:"\f11b"}.ion-ios-backspace:before{content:"\f11d"}.ion-ios-barcode:before{content:"\f3dc"}.ion-ios-baseball:before{content:"\f3de"}.ion-ios-basket:before{content:"\f11f"}.ion-ios-basketball:before{content:"\f3e0"}.ion-ios-battery-charging:before{content:"\f120"}.ion-ios-battery-dead:before{content:"\f121"}.ion-ios-battery-full:before{content:"\f122"}.ion-ios-beaker:before{content:"\f124"}.ion-ios-bed:before{content:"\f139"}.ion-ios-beer:before{content:"\f126"}.ion-ios-bicycle:before{content:"\f127"}.ion-ios-bluetooth:before{content:"\f128"}.ion-ios-boat:before{content:"\f12a"}.ion-ios-body:before{content:"\f3e4"}.ion-ios-bonfire:before{content:"\f12c"}.ion-ios-book:before{content:"\f3e8"}.ion-ios-bookmark:before{content:"\f12e"}.ion-ios-bookmarks:before{content:"\f3ea"}.ion-ios-bowtie:before{content:"\f130"}.ion-ios-briefcase:before{content:"\f3ee"}.ion-ios-browsers:before{content:"\f3f0"}.ion-ios-brush:before{content:"\f132"}.ion-ios-bug:before{content:"\f134"}.ion-ios-build:before{content:"\f136"}.ion-ios-bulb:before{content:"\f138"}.ion-ios-bus:before{content:"\f13a"}.ion-ios-business:before{content:"\f1a3"}.ion-ios-cafe:before{content:"\f13c"}.ion-ios-calculator:before{content:"\f3f2"}.ion-ios-calendar:before{content:"\f3f4"}.ion-ios-call:before{content:"\f13e"}.ion-ios-camera:before{content:"\f3f6"}.ion-ios-car:before{content:"\f140"}.ion-ios-card:before{content:"\f142"}.ion-ios-cart:before{content:"\f3f8"}.ion-ios-cash:before{content:"\f144"}.ion-ios-cellular:before{content:"\f13d"}.ion-ios-chatboxes:before{content:"\f3fa"}.ion-ios-chatbubbles:before{content:"\f146"}.ion-ios-checkbox:before{content:"\f148"}.ion-ios-checkbox-outline:before{content:"\f147"}.ion-ios-checkmark:before{content:"\f3ff"}.ion-ios-checkmark-circle:before{content:"\f14a"}.ion-ios-checkmark-circle-outline:before{content:"\f149"}.ion-ios-clipboard:before{content:"\f14c"}.ion-ios-clock:before{content:"\f403"}.ion-ios-close:before{content:"\f406"}.ion-ios-close-circle:before{content:"\f14e"}.ion-ios-close-circle-outline:before{content:"\f14d"}.ion-ios-cloud:before{content:"\f40c"}.ion-ios-cloud-circle:before{content:"\f152"}.ion-ios-cloud-done:before{content:"\f154"}.ion-ios-cloud-download:before{content:"\f408"}.ion-ios-cloud-outline:before{content:"\f409"}.ion-ios-cloud-upload:before{content:"\f40b"}.ion-ios-cloudy:before{content:"\f410"}.ion-ios-cloudy-night:before{content:"\f40e"}.ion-ios-code:before{content:"\f157"}.ion-ios-code-download:before{content:"\f155"}.ion-ios-code-working:before{content:"\f156"}.ion-ios-cog:before{content:"\f412"}.ion-ios-color-fill:before{content:"\f159"}.ion-ios-color-filter:before{content:"\f414"}.ion-ios-color-palette:before{content:"\f15b"}.ion-ios-color-wand:before{content:"\f416"}.ion-ios-compass:before{content:"\f15d"}.ion-ios-construct:before{content:"\f15f"}.ion-ios-contact:before{content:"\f41a"}.ion-ios-contacts:before{content:"\f161"}.ion-ios-contract:before{content:"\f162"}.ion-ios-contrast:before{content:"\f163"}.ion-ios-copy:before{content:"\f41c"}.ion-ios-create:before{content:"\f165"}.ion-ios-crop:before{content:"\f41e"}.ion-ios-cube:before{content:"\f168"}.ion-ios-cut:before{content:"\f16a"}.ion-ios-desktop:before{content:"\f16c"}.ion-ios-disc:before{content:"\f16e"}.ion-ios-document:before{content:"\f170"}.ion-ios-done-all:before{content:"\f171"}.ion-ios-download:before{content:"\f420"}.ion-ios-easel:before{content:"\f173"}.ion-ios-egg:before{content:"\f175"}.ion-ios-exit:before{content:"\f177"}.ion-ios-expand:before{content:"\f178"}.ion-ios-eye:before{content:"\f425"}.ion-ios-eye-off:before{content:"\f17a"}.ion-ios-fastforward:before{content:"\f427"}.ion-ios-female:before{content:"\f17b"}.ion-ios-filing:before{content:"\f429"}.ion-ios-film:before{content:"\f42b"}.ion-ios-finger-print:before{content:"\f17c"}.ion-ios-fitness:before{content:"\f1ab"}.ion-ios-flag:before{content:"\f42d"}.ion-ios-flame:before{content:"\f42f"}.ion-ios-flash:before{content:"\f17e"}.ion-ios-flash-off:before{content:"\f12f"}.ion-ios-flashlight:before{content:"\f141"}.ion-ios-flask:before{content:"\f431"}.ion-ios-flower:before{content:"\f433"}.ion-ios-folder:before{content:"\f435"}.ion-ios-folder-open:before{content:"\f180"}.ion-ios-football:before{content:"\f437"}.ion-ios-funnel:before{content:"\f182"}.ion-ios-gift:before{content:"\f191"}.ion-ios-git-branch:before{content:"\f183"}.ion-ios-git-commit:before{content:"\f184"}.ion-ios-git-compare:before{content:"\f185"}.ion-ios-git-merge:before{content:"\f186"}.ion-ios-git-network:before{content:"\f187"}.ion-ios-git-pull-request:before{content:"\f188"}.ion-ios-glasses:before{content:"\f43f"}.ion-ios-globe:before{content:"\f18a"}.ion-ios-grid:before{content:"\f18c"}.ion-ios-hammer:before{content:"\f18e"}.ion-ios-hand:before{content:"\f190"}.ion-ios-happy:before{content:"\f192"}.ion-ios-headset:before{content:"\f194"}.ion-ios-heart:before{content:"\f443"}.ion-ios-heart-dislike:before{content:"\f13f"}.ion-ios-heart-empty:before{content:"\f19b"}.ion-ios-heart-half:before{content:"\f19d"}.ion-ios-help:before{content:"\f446"}.ion-ios-help-buoy:before{content:"\f196"}.ion-ios-help-circle:before{content:"\f198"}.ion-ios-help-circle-outline:before{content:"\f197"}.ion-ios-home:before{content:"\f448"}.ion-ios-hourglass:before{content:"\f103"}.ion-ios-ice-cream:before{content:"\f19a"}.ion-ios-image:before{content:"\f19c"}.ion-ios-images:before{content:"\f19e"}.ion-ios-infinite:before{content:"\f44a"}.ion-ios-information:before{content:"\f44d"}.ion-ios-information-circle:before{content:"\f1a0"}.ion-ios-information-circle-outline:before{content:"\f19f"}.ion-ios-jet:before{content:"\f1a5"}.ion-ios-journal:before{content:"\f189"}.ion-ios-key:before{content:"\f1a7"}.ion-ios-keypad:before{content:"\f450"}.ion-ios-laptop:before{content:"\f1a8"}.ion-ios-leaf:before{content:"\f1aa"}.ion-ios-link:before{content:"\f22a"}.ion-ios-list:before{content:"\f454"}.ion-ios-list-box:before{content:"\f143"}.ion-ios-locate:before{content:"\f1ae"}.ion-ios-lock:before{content:"\f1b0"}.ion-ios-log-in:before{content:"\f1b1"}.ion-ios-log-out:before{content:"\f1b2"}.ion-ios-magnet:before{content:"\f1b4"}.ion-ios-mail:before{content:"\f1b8"}.ion-ios-mail-open:before{content:"\f1b6"}.ion-ios-mail-unread:before{content:"\f145"}.ion-ios-male:before{content:"\f1b9"}.ion-ios-man:before{content:"\f1bb"}.ion-ios-map:before{content:"\f1bd"}.ion-ios-medal:before{content:"\f1bf"}.ion-ios-medical:before{content:"\f45c"}.ion-ios-medkit:before{content:"\f45e"}.ion-ios-megaphone:before{content:"\f1c1"}.ion-ios-menu:before{content:"\f1c3"}.ion-ios-mic:before{content:"\f461"}.ion-ios-mic-off:before{content:"\f45f"}.ion-ios-microphone:before{content:"\f1c6"}.ion-ios-moon:before{content:"\f468"}.ion-ios-more:before{content:"\f1c8"}.ion-ios-move:before{content:"\f1cb"}.ion-ios-musical-note:before{content:"\f46b"}.ion-ios-musical-notes:before{content:"\f46c"}.ion-ios-navigate:before{content:"\f46e"}.ion-ios-notifications:before{content:"\f1d3"}.ion-ios-notifications-off:before{content:"\f1d1"}.ion-ios-notifications-outline:before{content:"\f133"}.ion-ios-nuclear:before{content:"\f1d5"}.ion-ios-nutrition:before{content:"\f470"}.ion-ios-open:before{content:"\f1d7"}.ion-ios-options:before{content:"\f1d9"}.ion-ios-outlet:before{content:"\f1db"}.ion-ios-paper:before{content:"\f472"}.ion-ios-paper-plane:before{content:"\f1dd"}.ion-ios-partly-sunny:before{content:"\f1df"}.ion-ios-pause:before{content:"\f478"}.ion-ios-paw:before{content:"\f47a"}.ion-ios-people:before{content:"\f47c"}.ion-ios-person:before{content:"\f47e"}.ion-ios-person-add:before{content:"\f1e1"}.ion-ios-phone-landscape:before{content:"\f1e2"}.ion-ios-phone-portrait:before{content:"\f1e3"}.ion-ios-photos:before{content:"\f482"}.ion-ios-pie:before{content:"\f484"}.ion-ios-pin:before{content:"\f1e5"}.ion-ios-pint:before{content:"\f486"}.ion-ios-pizza:before{content:"\f1e7"}.ion-ios-plane:before{content:"\f1e9"}.ion-ios-planet:before{content:"\f1eb"}.ion-ios-play:before{content:"\f488"}.ion-ios-play-circle:before{content:"\f113"}.ion-ios-podium:before{content:"\f1ed"}.ion-ios-power:before{content:"\f1ef"}.ion-ios-pricetag:before{content:"\f48d"}.ion-ios-pricetags:before{content:"\f48f"}.ion-ios-print:before{content:"\f1f1"}.ion-ios-pulse:before{content:"\f493"}.ion-ios-qr-scanner:before{content:"\f1f3"}.ion-ios-quote:before{content:"\f1f5"}.ion-ios-radio:before{content:"\f1f9"}.ion-ios-radio-button-off:before{content:"\f1f6"}.ion-ios-radio-button-on:before{content:"\f1f7"}.ion-ios-rainy:before{content:"\f495"}.ion-ios-recording:before{content:"\f497"}.ion-ios-redo:before{content:"\f499"}.ion-ios-refresh:before{content:"\f49c"}.ion-ios-refresh-circle:before{content:"\f135"}.ion-ios-remove:before{content:"\f1fc"}.ion-ios-remove-circle:before{content:"\f1fb"}.ion-ios-remove-circle-outline:before{content:"\f1fa"}.ion-ios-reorder:before{content:"\f1fd"}.ion-ios-repeat:before{content:"\f1fe"}.ion-ios-resize:before{content:"\f1ff"}.ion-ios-restaurant:before{content:"\f201"}.ion-ios-return-left:before{content:"\f202"}.ion-ios-return-right:before{content:"\f203"}.ion-ios-reverse-camera:before{content:"\f49f"}.ion-ios-rewind:before{content:"\f4a1"}.ion-ios-ribbon:before{content:"\f205"}.ion-ios-rocket:before{content:"\f14b"}.ion-ios-rose:before{content:"\f4a3"}.ion-ios-sad:before{content:"\f207"}.ion-ios-save:before{content:"\f1a6"}.ion-ios-school:before{content:"\f209"}.ion-ios-search:before{content:"\f4a5"}.ion-ios-send:before{content:"\f20c"}.ion-ios-settings:before{content:"\f4a7"}.ion-ios-share:before{content:"\f211"}.ion-ios-share-alt:before{content:"\f20f"}.ion-ios-shirt:before{content:"\f213"}.ion-ios-shuffle:before{content:"\f4a9"}.ion-ios-skip-backward:before{content:"\f215"}.ion-ios-skip-forward:before{content:"\f217"}.ion-ios-snow:before{content:"\f218"}.ion-ios-speedometer:before{content:"\f4b0"}.ion-ios-square:before{content:"\f21a"}.ion-ios-square-outline:before{content:"\f15c"}.ion-ios-star:before{content:"\f4b3"}.ion-ios-star-half:before{content:"\f4b1"}.ion-ios-star-outline:before{content:"\f4b2"}.ion-ios-stats:before{content:"\f21c"}.ion-ios-stopwatch:before{content:"\f4b5"}.ion-ios-subway:before{content:"\f21e"}.ion-ios-sunny:before{content:"\f4b7"}.ion-ios-swap:before{content:"\f21f"}.ion-ios-switch:before{content:"\f221"}.ion-ios-sync:before{content:"\f222"}.ion-ios-tablet-landscape:before{content:"\f223"}.ion-ios-tablet-portrait:before{content:"\f24e"}.ion-ios-tennisball:before{content:"\f4bb"}.ion-ios-text:before{content:"\f250"}.ion-ios-thermometer:before{content:"\f252"}.ion-ios-thumbs-down:before{content:"\f254"}.ion-ios-thumbs-up:before{content:"\f256"}.ion-ios-thunderstorm:before{content:"\f4bd"}.ion-ios-time:before{content:"\f4bf"}.ion-ios-timer:before{content:"\f4c1"}.ion-ios-today:before{content:"\f14f"}.ion-ios-train:before{content:"\f258"}.ion-ios-transgender:before{content:"\f259"}.ion-ios-trash:before{content:"\f4c5"}.ion-ios-trending-down:before{content:"\f25a"}.ion-ios-trending-up:before{content:"\f25b"}.ion-ios-trophy:before{content:"\f25d"}.ion-ios-tv:before{content:"\f115"}.ion-ios-umbrella:before{content:"\f25f"}.ion-ios-undo:before{content:"\f4c7"}.ion-ios-unlock:before{content:"\f261"}.ion-ios-videocam:before{content:"\f4cd"}.ion-ios-volume-high:before{content:"\f11c"}.ion-ios-volume-low:before{content:"\f11e"}.ion-ios-volume-mute:before{content:"\f263"}.ion-ios-volume-off:before{content:"\f264"}.ion-ios-walk:before{content:"\f266"}.ion-ios-wallet:before{content:"\f18b"}.ion-ios-warning:before{content:"\f268"}.ion-ios-watch:before{content:"\f269"}.ion-ios-water:before{content:"\f26b"}.ion-ios-wifi:before{content:"\f26d"}.ion-ios-wine:before{content:"\f26f"}.ion-ios-woman:before{content:"\f271"}.ion-logo-android:before{content:"\f225"}.ion-logo-angular:before{content:"\f227"}.ion-logo-apple:before{content:"\f229"}.ion-logo-bitbucket:before{content:"\f193"}.ion-logo-bitcoin:before{content:"\f22b"}.ion-logo-buffer:before{content:"\f22d"}.ion-logo-chrome:before{content:"\f22f"}.ion-logo-closed-captioning:before{content:"\f105"}.ion-logo-codepen:before{content:"\f230"}.ion-logo-css3:before{content:"\f231"}.ion-logo-designernews:before{content:"\f232"}.ion-logo-dribbble:before{content:"\f233"}.ion-logo-dropbox:before{content:"\f234"}.ion-logo-euro:before{content:"\f235"}.ion-logo-facebook:before{content:"\f236"}.ion-logo-flickr:before{content:"\f107"}.ion-logo-foursquare:before{content:"\f237"}.ion-logo-freebsd-devil:before{content:"\f238"}.ion-logo-game-controller-a:before{content:"\f13b"}.ion-logo-game-controller-b:before{content:"\f181"}.ion-logo-github:before{content:"\f239"}.ion-logo-google:before{content:"\f23a"}.ion-logo-googleplus:before{content:"\f23b"}.ion-logo-hackernews:before{content:"\f23c"}.ion-logo-html5:before{content:"\f23d"}.ion-logo-instagram:before{content:"\f23e"}.ion-logo-ionic:before{content:"\f150"}.ion-logo-ionitron:before{content:"\f151"}.ion-logo-javascript:before{content:"\f23f"}.ion-logo-linkedin:before{content:"\f240"}.ion-logo-markdown:before{content:"\f241"}.ion-logo-model-s:before{content:"\f153"}.ion-logo-no-smoking:before{content:"\f109"}.ion-logo-nodejs:before{content:"\f242"}.ion-logo-npm:before{content:"\f195"}.ion-logo-octocat:before{content:"\f243"}.ion-logo-pinterest:before{content:"\f244"}.ion-logo-playstation:before{content:"\f245"}.ion-logo-polymer:before{content:"\f15e"}.ion-logo-python:before{content:"\f246"}.ion-logo-reddit:before{content:"\f247"}.ion-logo-rss:before{content:"\f248"}.ion-logo-sass:before{content:"\f249"}.ion-logo-skype:before{content:"\f24a"}.ion-logo-slack:before{content:"\f10b"}.ion-logo-snapchat:before{content:"\f24b"}.ion-logo-steam:before{content:"\f24c"}.ion-logo-tumblr:before{content:"\f24d"}.ion-logo-tux:before{content:"\f2ae"}.ion-logo-twitch:before{content:"\f2af"}.ion-logo-twitter:before{content:"\f2b0"}.ion-logo-usd:before{content:"\f2b1"}.ion-logo-vimeo:before{content:"\f2c4"}.ion-logo-vk:before{content:"\f10d"}.ion-logo-whatsapp:before{content:"\f2c5"}.ion-logo-windows:before{content:"\f32f"}.ion-logo-wordpress:before{content:"\f330"}.ion-logo-xbox:before{content:"\f34c"}.ion-logo-xing:before{content:"\f10f"}.ion-logo-yahoo:before{content:"\f34d"}.ion-logo-yen:before{content:"\f34e"}.ion-logo-youtube:before{content:"\f34f"}.ion-md-add:before{content:"\f273"}.ion-md-add-circle:before{content:"\f272"}.ion-md-add-circle-outline:before{content:"\f158"}.ion-md-airplane:before{content:"\f15a"}.ion-md-alarm:before{content:"\f274"}.ion-md-albums:before{content:"\f275"}.ion-md-alert:before{content:"\f276"}.ion-md-american-football:before{content:"\f277"}.ion-md-analytics:before{content:"\f278"}.ion-md-aperture:before{content:"\f279"}.ion-md-apps:before{content:"\f27a"}.ion-md-appstore:before{content:"\f27b"}.ion-md-archive:before{content:"\f27c"}.ion-md-arrow-back:before{content:"\f27d"}.ion-md-arrow-down:before{content:"\f27e"}.ion-md-arrow-dropdown:before{content:"\f280"}.ion-md-arrow-dropdown-circle:before{content:"\f27f"}.ion-md-arrow-dropleft:before{content:"\f282"}.ion-md-arrow-dropleft-circle:before{content:"\f281"}.ion-md-arrow-dropright:before{content:"\f284"}.ion-md-arrow-dropright-circle:before{content:"\f283"}.ion-md-arrow-dropup:before{content:"\f286"}.ion-md-arrow-dropup-circle:before{content:"\f285"}.ion-md-arrow-forward:before{content:"\f287"}.ion-md-arrow-round-back:before{content:"\f288"}.ion-md-arrow-round-down:before{content:"\f289"}.ion-md-arrow-round-forward:before{content:"\f28a"}.ion-md-arrow-round-up:before{content:"\f28b"}.ion-md-arrow-up:before{content:"\f28c"}.ion-md-at:before{content:"\f28d"}.ion-md-attach:before{content:"\f28e"}.ion-md-backspace:before{content:"\f28f"}.ion-md-barcode:before{content:"\f290"}.ion-md-baseball:before{content:"\f291"}.ion-md-basket:before{content:"\f292"}.ion-md-basketball:before{content:"\f293"}.ion-md-battery-charging:before{content:"\f294"}.ion-md-battery-dead:before{content:"\f295"}.ion-md-battery-full:before{content:"\f296"}.ion-md-beaker:before{content:"\f297"}.ion-md-bed:before{content:"\f160"}.ion-md-beer:before{content:"\f298"}.ion-md-bicycle:before{content:"\f299"}.ion-md-bluetooth:before{content:"\f29a"}.ion-md-boat:before{content:"\f29b"}.ion-md-body:before{content:"\f29c"}.ion-md-bonfire:before{content:"\f29d"}.ion-md-book:before{content:"\f29e"}.ion-md-bookmark:before{content:"\f29f"}.ion-md-bookmarks:before{content:"\f2a0"}.ion-md-bowtie:before{content:"\f2a1"}.ion-md-briefcase:before{content:"\f2a2"}.ion-md-browsers:before{content:"\f2a3"}.ion-md-brush:before{content:"\f2a4"}.ion-md-bug:before{content:"\f2a5"}.ion-md-build:before{content:"\f2a6"}.ion-md-bulb:before{content:"\f2a7"}.ion-md-bus:before{content:"\f2a8"}.ion-md-business:before{content:"\f1a4"}.ion-md-cafe:before{content:"\f2a9"}.ion-md-calculator:before{content:"\f2aa"}.ion-md-calendar:before{content:"\f2ab"}.ion-md-call:before{content:"\f2ac"}.ion-md-camera:before{content:"\f2ad"}.ion-md-car:before{content:"\f2b2"}.ion-md-card:before{content:"\f2b3"}.ion-md-cart:before{content:"\f2b4"}.ion-md-cash:before{content:"\f2b5"}.ion-md-cellular:before{content:"\f164"}.ion-md-chatboxes:before{content:"\f2b6"}.ion-md-chatbubbles:before{content:"\f2b7"}.ion-md-checkbox:before{content:"\f2b9"}.ion-md-checkbox-outline:before{content:"\f2b8"}.ion-md-checkmark:before{content:"\f2bc"}.ion-md-checkmark-circle:before{content:"\f2bb"}.ion-md-checkmark-circle-outline:before{content:"\f2ba"}.ion-md-clipboard:before{content:"\f2bd"}.ion-md-clock:before{content:"\f2be"}.ion-md-close:before{content:"\f2c0"}.ion-md-close-circle:before{content:"\f2bf"}.ion-md-close-circle-outline:before{content:"\f166"}.ion-md-cloud:before{content:"\f2c9"}.ion-md-cloud-circle:before{content:"\f2c2"}.ion-md-cloud-done:before{content:"\f2c3"}.ion-md-cloud-download:before{content:"\f2c6"}.ion-md-cloud-outline:before{content:"\f2c7"}.ion-md-cloud-upload:before{content:"\f2c8"}.ion-md-cloudy:before{content:"\f2cb"}.ion-md-cloudy-night:before{content:"\f2ca"}.ion-md-code:before{content:"\f2ce"}.ion-md-code-download:before{content:"\f2cc"}.ion-md-code-working:before{content:"\f2cd"}.ion-md-cog:before{content:"\f2cf"}.ion-md-color-fill:before{content:"\f2d0"}.ion-md-color-filter:before{content:"\f2d1"}.ion-md-color-palette:before{content:"\f2d2"}.ion-md-color-wand:before{content:"\f2d3"}.ion-md-compass:before{content:"\f2d4"}.ion-md-construct:before{content:"\f2d5"}.ion-md-contact:before{content:"\f2d6"}.ion-md-contacts:before{content:"\f2d7"}.ion-md-contract:before{content:"\f2d8"}.ion-md-contrast:before{content:"\f2d9"}.ion-md-copy:before{content:"\f2da"}.ion-md-create:before{content:"\f2db"}.ion-md-crop:before{content:"\f2dc"}.ion-md-cube:before{content:"\f2dd"}.ion-md-cut:before{content:"\f2de"}.ion-md-desktop:before{content:"\f2df"}.ion-md-disc:before{content:"\f2e0"}.ion-md-document:before{content:"\f2e1"}.ion-md-done-all:before{content:"\f2e2"}.ion-md-download:before{content:"\f2e3"}.ion-md-easel:before{content:"\f2e4"}.ion-md-egg:before{content:"\f2e5"}.ion-md-exit:before{content:"\f2e6"}.ion-md-expand:before{content:"\f2e7"}.ion-md-eye:before{content:"\f2e9"}.ion-md-eye-off:before{content:"\f2e8"}.ion-md-fastforward:before{content:"\f2ea"}.ion-md-female:before{content:"\f2eb"}.ion-md-filing:before{content:"\f2ec"}.ion-md-film:before{content:"\f2ed"}.ion-md-finger-print:before{content:"\f2ee"}.ion-md-fitness:before{content:"\f1ac"}.ion-md-flag:before{content:"\f2ef"}.ion-md-flame:before{content:"\f2f0"}.ion-md-flash:before{content:"\f2f1"}.ion-md-flash-off:before{content:"\f169"}.ion-md-flashlight:before{content:"\f16b"}.ion-md-flask:before{content:"\f2f2"}.ion-md-flower:before{content:"\f2f3"}.ion-md-folder:before{content:"\f2f5"}.ion-md-folder-open:before{content:"\f2f4"}.ion-md-football:before{content:"\f2f6"}.ion-md-funnel:before{content:"\f2f7"}.ion-md-gift:before{content:"\f199"}.ion-md-git-branch:before{content:"\f2fa"}.ion-md-git-commit:before{content:"\f2fb"}.ion-md-git-compare:before{content:"\f2fc"}.ion-md-git-merge:before{content:"\f2fd"}.ion-md-git-network:before{content:"\f2fe"}.ion-md-git-pull-request:before{content:"\f2ff"}.ion-md-glasses:before{content:"\f300"}.ion-md-globe:before{content:"\f301"}.ion-md-grid:before{content:"\f302"}.ion-md-hammer:before{content:"\f303"}.ion-md-hand:before{content:"\f304"}.ion-md-happy:before{content:"\f305"}.ion-md-headset:before{content:"\f306"}.ion-md-heart:before{content:"\f308"}.ion-md-heart-dislike:before{content:"\f167"}.ion-md-heart-empty:before{content:"\f1a1"}.ion-md-heart-half:before{content:"\f1a2"}.ion-md-help:before{content:"\f30b"}.ion-md-help-buoy:before{content:"\f309"}.ion-md-help-circle:before{content:"\f30a"}.ion-md-help-circle-outline:before{content:"\f16d"}.ion-md-home:before{content:"\f30c"}.ion-md-hourglass:before{content:"\f111"}.ion-md-ice-cream:before{content:"\f30d"}.ion-md-image:before{content:"\f30e"}.ion-md-images:before{content:"\f30f"}.ion-md-infinite:before{content:"\f310"}.ion-md-information:before{content:"\f312"}.ion-md-information-circle:before{content:"\f311"}.ion-md-information-circle-outline:before{content:"\f16f"}.ion-md-jet:before{content:"\f315"}.ion-md-journal:before{content:"\f18d"}.ion-md-key:before{content:"\f316"}.ion-md-keypad:before{content:"\f317"}.ion-md-laptop:before{content:"\f318"}.ion-md-leaf:before{content:"\f319"}.ion-md-link:before{content:"\f22e"}.ion-md-list:before{content:"\f31b"}.ion-md-list-box:before{content:"\f31a"}.ion-md-locate:before{content:"\f31c"}.ion-md-lock:before{content:"\f31d"}.ion-md-log-in:before{content:"\f31e"}.ion-md-log-out:before{content:"\f31f"}.ion-md-magnet:before{content:"\f320"}.ion-md-mail:before{content:"\f322"}.ion-md-mail-open:before{content:"\f321"}.ion-md-mail-unread:before{content:"\f172"}.ion-md-male:before{content:"\f323"}.ion-md-man:before{content:"\f324"}.ion-md-map:before{content:"\f325"}.ion-md-medal:before{content:"\f326"}.ion-md-medical:before{content:"\f327"}.ion-md-medkit:before{content:"\f328"}.ion-md-megaphone:before{content:"\f329"}.ion-md-menu:before{content:"\f32a"}.ion-md-mic:before{content:"\f32c"}.ion-md-mic-off:before{content:"\f32b"}.ion-md-microphone:before{content:"\f32d"}.ion-md-moon:before{content:"\f32e"}.ion-md-more:before{content:"\f1c9"}.ion-md-move:before{content:"\f331"}.ion-md-musical-note:before{content:"\f332"}.ion-md-musical-notes:before{content:"\f333"}.ion-md-navigate:before{content:"\f334"}.ion-md-notifications:before{content:"\f338"}.ion-md-notifications-off:before{content:"\f336"}.ion-md-notifications-outline:before{content:"\f337"}.ion-md-nuclear:before{content:"\f339"}.ion-md-nutrition:before{content:"\f33a"}.ion-md-open:before{content:"\f33b"}.ion-md-options:before{content:"\f33c"}.ion-md-outlet:before{content:"\f33d"}.ion-md-paper:before{content:"\f33f"}.ion-md-paper-plane:before{content:"\f33e"}.ion-md-partly-sunny:before{content:"\f340"}.ion-md-pause:before{content:"\f341"}.ion-md-paw:before{content:"\f342"}.ion-md-people:before{content:"\f343"}.ion-md-person:before{content:"\f345"}.ion-md-person-add:before{content:"\f344"}.ion-md-phone-landscape:before{content:"\f346"}.ion-md-phone-portrait:before{content:"\f347"}.ion-md-photos:before{content:"\f348"}.ion-md-pie:before{content:"\f349"}.ion-md-pin:before{content:"\f34a"}.ion-md-pint:before{content:"\f34b"}.ion-md-pizza:before{content:"\f354"}.ion-md-plane:before{content:"\f355"}.ion-md-planet:before{content:"\f356"}.ion-md-play:before{content:"\f357"}.ion-md-play-circle:before{content:"\f174"}.ion-md-podium:before{content:"\f358"}.ion-md-power:before{content:"\f359"}.ion-md-pricetag:before{content:"\f35a"}.ion-md-pricetags:before{content:"\f35b"}.ion-md-print:before{content:"\f35c"}.ion-md-pulse:before{content:"\f35d"}.ion-md-qr-scanner:before{content:"\f35e"}.ion-md-quote:before{content:"\f35f"}.ion-md-radio:before{content:"\f362"}.ion-md-radio-button-off:before{content:"\f360"}.ion-md-radio-button-on:before{content:"\f361"}.ion-md-rainy:before{content:"\f363"}.ion-md-recording:before{content:"\f364"}.ion-md-redo:before{content:"\f365"}.ion-md-refresh:before{content:"\f366"}.ion-md-refresh-circle:before{content:"\f228"}.ion-md-remove:before{content:"\f368"}.ion-md-remove-circle:before{content:"\f367"}.ion-md-remove-circle-outline:before{content:"\f176"}.ion-md-reorder:before{content:"\f369"}.ion-md-repeat:before{content:"\f36a"}.ion-md-resize:before{content:"\f36b"}.ion-md-restaurant:before{content:"\f36c"}.ion-md-return-left:before{content:"\f36d"}.ion-md-return-right:before{content:"\f36e"}.ion-md-reverse-camera:before{content:"\f36f"}.ion-md-rewind:before{content:"\f370"}.ion-md-ribbon:before{content:"\f371"}.ion-md-rocket:before{content:"\f179"}.ion-md-rose:before{content:"\f372"}.ion-md-sad:before{content:"\f373"}.ion-md-save:before{content:"\f1a9"}.ion-md-school:before{content:"\f374"}.ion-md-search:before{content:"\f375"}.ion-md-send:before{content:"\f376"}.ion-md-settings:before{content:"\f377"}.ion-md-share:before{content:"\f379"}.ion-md-share-alt:before{content:"\f378"}.ion-md-shirt:before{content:"\f37a"}.ion-md-shuffle:before{content:"\f37b"}.ion-md-skip-backward:before{content:"\f37c"}.ion-md-skip-forward:before{content:"\f37d"}.ion-md-snow:before{content:"\f37e"}.ion-md-speedometer:before{content:"\f37f"}.ion-md-square:before{content:"\f381"}.ion-md-square-outline:before{content:"\f380"}.ion-md-star:before{content:"\f384"}.ion-md-star-half:before{content:"\f382"}.ion-md-star-outline:before{content:"\f383"}.ion-md-stats:before{content:"\f385"}.ion-md-stopwatch:before{content:"\f386"}.ion-md-subway:before{content:"\f387"}.ion-md-sunny:before{content:"\f388"}.ion-md-swap:before{content:"\f389"}.ion-md-switch:before{content:"\f38a"}.ion-md-sync:before{content:"\f38b"}.ion-md-tablet-landscape:before{content:"\f38c"}.ion-md-tablet-portrait:before{content:"\f38d"}.ion-md-tennisball:before{content:"\f38e"}.ion-md-text:before{content:"\f38f"}.ion-md-thermometer:before{content:"\f390"}.ion-md-thumbs-down:before{content:"\f391"}.ion-md-thumbs-up:before{content:"\f392"}.ion-md-thunderstorm:before{content:"\f393"}.ion-md-time:before{content:"\f394"}.ion-md-timer:before{content:"\f395"}.ion-md-today:before{content:"\f17d"}.ion-md-train:before{content:"\f396"}.ion-md-transgender:before{content:"\f397"}.ion-md-trash:before{content:"\f398"}.ion-md-trending-down:before{content:"\f399"}.ion-md-trending-up:before{content:"\f39a"}.ion-md-trophy:before{content:"\f39b"}.ion-md-tv:before{content:"\f17f"}.ion-md-umbrella:before{content:"\f39c"}.ion-md-undo:before{content:"\f39d"}.ion-md-unlock:before{content:"\f39e"}.ion-md-videocam:before{content:"\f39f"}.ion-md-volume-high:before{content:"\f123"}.ion-md-volume-low:before{content:"\f131"}.ion-md-volume-mute:before{content:"\f3a1"}.ion-md-volume-off:before{content:"\f3a2"}.ion-md-walk:before{content:"\f3a4"}.ion-md-wallet:before{content:"\f18f"}.ion-md-warning:before{content:"\f3a5"}.ion-md-watch:before{content:"\f3a6"}.ion-md-water:before{content:"\f3a7"}.ion-md-wifi:before{content:"\f3a8"}.ion-md-wine:before{content:"\f3a9"}.ion-md-woman:before{content:"\f3aa"} \ No newline at end of file diff --git a/public/css/jquery.timepicker.css b/public/css/jquery.timepicker.css new file mode 100644 index 0000000..950a0b1 --- /dev/null +++ b/public/css/jquery.timepicker.css @@ -0,0 +1,72 @@ +.ui-timepicker-wrapper { + overflow-y: auto; + max-height: 150px; + width: 6.5em; + background: #fff; + border: 1px solid #ddd; + -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2); + -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2); + box-shadow:0 5px 10px rgba(0,0,0,0.2); + outline: none; + z-index: 10001; + margin: 0; +} + +.ui-timepicker-wrapper.ui-timepicker-with-duration { + width: 13em; +} + +.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-30, +.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-60 { + width: 11em; +} + +.ui-timepicker-list { + margin: 0; + padding: 0; + list-style: none; +} + +.ui-timepicker-duration { + margin-left: 5px; color: #888; +} + +.ui-timepicker-list:hover .ui-timepicker-duration { + color: #888; +} + +.ui-timepicker-list li { + padding: 3px 0 3px 5px; + cursor: pointer; + white-space: nowrap; + color: #000; + list-style: none; + margin: 0; +} + +.ui-timepicker-list:hover .ui-timepicker-selected { + background: #fff; color: #000; +} + +li.ui-timepicker-selected, +.ui-timepicker-list li:hover, +.ui-timepicker-list .ui-timepicker-selected:hover { + background: #1980EC; color: #fff; +} + +li.ui-timepicker-selected .ui-timepicker-duration, +.ui-timepicker-list li:hover .ui-timepicker-duration { + color: #ccc; +} + +.ui-timepicker-list li.ui-timepicker-disabled, +.ui-timepicker-list li.ui-timepicker-disabled:hover, +.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { + color: #888; + cursor: default; +} + +.ui-timepicker-list li.ui-timepicker-disabled:hover, +.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { + background: #f2f2f2; +} diff --git a/public/css/magnific-popup.css b/public/css/magnific-popup.css new file mode 100644 index 0000000..9d33824 --- /dev/null +++ b/public/css/magnific-popup.css @@ -0,0 +1,351 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } + .mfp-preloader a { + color: #CCC; } + .mfp-preloader a:hover { + color: #FFF; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + box-shadow: none; + touch-action: manipulation; } + +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } + .mfp-close:hover, + .mfp-close:focus { + opacity: 1; } + .mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333; } + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; } + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: transparent; } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, + .mfp-arrow:focus { + opacity: 1; } + .mfp-arrow:before, + .mfp-arrow:after { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; } + +.mfp-arrow-left { + left: 0; } + .mfp-arrow-left:after { + border-right: 17px solid #FFF; + margin-left: 31px; } + .mfp-arrow-left:before { + margin-left: 25px; + border-right: 27px solid #3F3F3F; } + +.mfp-arrow-right { + right: 0; } + .mfp-arrow-right:after { + border-left: 17px solid #FFF; + margin-left: 39px; } + .mfp-arrow-right:before { + border-left: 27px solid #3F3F3F; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; } + +/* Main image in popup */ +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; } + .mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; } + .mfp-figure figure { + margin: 0; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } \ No newline at end of file diff --git a/public/css/open-iconic-bootstrap.min.css b/public/css/open-iconic-bootstrap.min.css new file mode 100644 index 0000000..6acaa87 --- /dev/null +++ b/public/css/open-iconic-bootstrap.min.css @@ -0,0 +1 @@ +@font-face{font-family:Icons;src:url(../fonts/open-iconic/open-iconic.eot);src:url(../fonts/open-iconic/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic/open-iconic.woff) format('woff'),url(../fonts/open-iconic/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic/open-iconic.otf) format('opentype'),url(../fonts/open-iconic/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/public/css/owl.carousel.min.css b/public/css/owl.carousel.min.css new file mode 100644 index 0000000..d0f2173 --- /dev/null +++ b/public/css/owl.carousel.min.css @@ -0,0 +1,6 @@ +/** + * Owl Carousel v2.3.0 + * Copyright 2013-2017 David Deutsch + * Licensed under () + */ +.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:-webkit-transform .1s ease;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-webkit-transform:scale(1.3,1.3);-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file diff --git a/public/css/owl.theme.default.min.css b/public/css/owl.theme.default.min.css new file mode 100644 index 0000000..e15a77e --- /dev/null +++ b/public/css/owl.theme.default.min.css @@ -0,0 +1,15 @@ +/** + * Owl Carousel v2.2.1 + * Copyright 2013-2017 David Deutsch + * Licensed under () + */ +.owl-theme .owl-dots, +.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent} +.owl-theme .owl-nav{margin-top:10px} +.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px;position: absolute;} +.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none} +.owl-theme .owl-nav .disabled{opacity:.5;cursor:default} +.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px} +.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1} +.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px} +.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..3ae6a60 --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,9941 @@ +/*! + * Bootstrap v4.2.1 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +*, +*::before, +*::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; } + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; } + +[tabindex="-1"]:focus { + outline: 0 !important; } + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; } + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small { + font-size: 80%; } + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; } + a:hover { + color: #0056b3; + text-decoration: underline; } + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):focus { + outline: 0; } + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; } + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; } + +figure { + margin: 0 0 1rem; } + +img { + vertical-align: middle; + border-style: none; } + +svg { + overflow: hidden; + vertical-align: middle; } + +table { + border-collapse: collapse; } + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; } + +th { + text-align: inherit; } + +label { + display: inline-block; + margin-bottom: 0.5rem; } + +button { + border-radius: 0; } + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +input { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; } + +input[type="radio"], +input[type="checkbox"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; } + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; } + +textarea { + overflow: auto; + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; } + +progress { + vertical-align: baseline; } + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; } + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +summary { + display: list-item; + cursor: pointer; } + +template { + display: none; } + +[hidden] { + display: none !important; } + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: inherit; } + +h1, .h1 { + font-size: 2.5rem; } + +h2, .h2 { + font-size: 2rem; } + +h3, .h3 { + font-size: 1.75rem; } + +h4, .h4 { + font-size: 1.5rem; } + +h5, .h5 { + font-size: 1.25rem; } + +h6, .h6 { + font-size: 1rem; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; } + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; } + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; } + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; } + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); } + +small, +.small { + font-size: 80%; + font-weight: 400; } + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; } + +.list-unstyled { + padding-left: 0; + list-style: none; } + +.list-inline { + padding-left: 0; + list-style: none; } + +.list-inline-item { + display: inline-block; } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; } + +.initialism { + font-size: 90%; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 90%; + color: #6c757d; } + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; } + kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; } + +pre { + display: block; + font-size: 87.5%; + color: #212529; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + @media (min-width: 576px) { + .container { + max-width: 540px; } } + @media (min-width: 768px) { + .container { + max-width: 720px; } } + @media (min-width: 992px) { + .container { + max-width: 960px; } } + @media (min-width: 1200px) { + .container { + max-width: 1140px; } } + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + +.row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; } + +.no-gutters { + margin-right: 0; + margin-left: 0; } + .no-gutters > .col, + .no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; } + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; } + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + +.col-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; } + +.col-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + +.col-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + +.col-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + +.col-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + +.col-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + +.col-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + +.col-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + +.col-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + +.col-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + +.col-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + +.col-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + +.col-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + +.order-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + +.order-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + +.order-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + +.order-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + +.order-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + +.order-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + +.order-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + +.order-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + +.order-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + +.order-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + +.order-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + +.order-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + +.order-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + +.order-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + +.order-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + +.offset-1 { + margin-left: 8.33333%; } + +.offset-2 { + margin-left: 16.66667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333%; } + +.offset-5 { + margin-left: 41.66667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333%; } + +.offset-8 { + margin-left: 66.66667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333%; } + +.offset-11 { + margin-left: 91.66667%; } + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-sm-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; } + .col-sm-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-sm-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-sm-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-sm-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-sm-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-sm-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-sm-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-sm-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-sm-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-sm-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-sm-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-sm-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-sm-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-sm-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-sm-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-sm-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-sm-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-sm-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-sm-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-sm-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-sm-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-sm-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-sm-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-sm-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-sm-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-sm-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-sm-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333%; } + .offset-sm-2 { + margin-left: 16.66667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333%; } + .offset-sm-5 { + margin-left: 41.66667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333%; } + .offset-sm-8 { + margin-left: 66.66667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333%; } + .offset-sm-11 { + margin-left: 91.66667%; } } + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-md-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; } + .col-md-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-md-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-md-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-md-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-md-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-md-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-md-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-md-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-md-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-md-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-md-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-md-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-md-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-md-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-md-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-md-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-md-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-md-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-md-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-md-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-md-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-md-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-md-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-md-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-md-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-md-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-md-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333%; } + .offset-md-2 { + margin-left: 16.66667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333%; } + .offset-md-5 { + margin-left: 41.66667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333%; } + .offset-md-8 { + margin-left: 66.66667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333%; } + .offset-md-11 { + margin-left: 91.66667%; } } + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-lg-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; } + .col-lg-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-lg-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-lg-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-lg-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-lg-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-lg-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-lg-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-lg-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-lg-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-lg-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-lg-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-lg-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-lg-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-lg-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-lg-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-lg-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-lg-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-lg-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-lg-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-lg-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-lg-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-lg-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-lg-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-lg-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-lg-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-lg-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-lg-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333%; } + .offset-lg-2 { + margin-left: 16.66667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333%; } + .offset-lg-5 { + margin-left: 41.66667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333%; } + .offset-lg-8 { + margin-left: 66.66667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333%; } + .offset-lg-11 { + margin-left: 91.66667%; } } + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-xl-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; } + .col-xl-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-xl-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-xl-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-xl-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-xl-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-xl-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-xl-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-xl-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-xl-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-xl-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-xl-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-xl-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-xl-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; } + .order-xl-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; } + .order-xl-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; } + .order-xl-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; } + .order-xl-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; } + .order-xl-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; } + .order-xl-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; } + .order-xl-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; } + .order-xl-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; } + .order-xl-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; } + .order-xl-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; } + .order-xl-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; } + .order-xl-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; } + .order-xl-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; } + .order-xl-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333%; } + .offset-xl-2 { + margin-left: 16.66667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333%; } + .offset-xl-5 { + margin-left: 41.66667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333%; } + .offset-xl-8 { + margin-left: 66.66667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333%; } + .offset-xl-11 { + margin-left: 91.66667%; } } + +.table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent; } + .table th, + .table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; } + .table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; } + .table tbody + tbody { + border-top: 2px solid #dee2e6; } + .table .table { + background-color: #fff; } + +.table-sm th, +.table-sm td { + padding: 0.3rem; } + +.table-bordered { + border: 1px solid #dee2e6; } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6; } + .table-bordered thead th, + .table-bordered thead td { + border-bottom-width: 2px; } + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; } + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); } + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); } + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; } + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #7abaff; } + +.table-hover .table-primary:hover { + background-color: #9fcdff; } + .table-hover .table-primary:hover > td, + .table-hover .table-primary:hover > th { + background-color: #9fcdff; } + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; } + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #b3b7bb; } + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; } + .table-hover .table-secondary:hover > td, + .table-hover .table-secondary:hover > th { + background-color: #c8cbcf; } + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; } + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8fd19e; } + +.table-hover .table-success:hover { + background-color: #b1dfbb; } + .table-hover .table-success:hover > td, + .table-hover .table-success:hover > th { + background-color: #b1dfbb; } + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; } + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #86cfda; } + +.table-hover .table-info:hover { + background-color: #abdde5; } + .table-hover .table-info:hover > td, + .table-hover .table-info:hover > th { + background-color: #abdde5; } + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; } + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdf7e; } + +.table-hover .table-warning:hover { + background-color: #ffe8a1; } + .table-hover .table-warning:hover > td, + .table-hover .table-warning:hover > th { + background-color: #ffe8a1; } + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; } + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ed969e; } + +.table-hover .table-danger:hover { + background-color: #f1b0b7; } + .table-hover .table-danger:hover > td, + .table-hover .table-danger:hover > th { + background-color: #f1b0b7; } + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; } + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; } + +.table-hover .table-light:hover { + background-color: #ececf6; } + .table-hover .table-light:hover > td, + .table-hover .table-light:hover > th { + background-color: #ececf6; } + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; } + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; } + +.table-hover .table-dark:hover { + background-color: #b9bbbe; } + .table-hover .table-dark:hover > td, + .table-hover .table-dark:hover > th { + background-color: #b9bbbe; } + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); } + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); } + .table-hover .table-active:hover > td, + .table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); } + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; } + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; } + +.table-dark { + color: #fff; + background-color: #212529; } + .table-dark th, + .table-dark td, + .table-dark thead th { + border-color: #32383e; } + .table-dark.table-bordered { + border: 0; } + .table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); } + .table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); } + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-sm > .table-bordered { + border: 0; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-md > .table-bordered { + border: 0; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-lg > .table-bordered { + border: 0; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-xl > .table-bordered { + border: 0; } } + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive > .table-bordered { + border: 0; } + +.form-control { + display: block; + width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .form-control { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .form-control::-ms-expand { + background-color: transparent; + border: 0; } + .form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; } + .form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; } + .form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; } + .form-control::placeholder { + color: #6c757d; + opacity: 1; } + .form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; } + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; } + +.form-control-file, +.form-control-range { + display: block; + width: 100%; } + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; } + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; } + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; } + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + height: calc(1.8125rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; } + +.form-control-lg { + height: calc(2.875rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; } + +select.form-control[size], select.form-control[multiple] { + height: auto; } + +textarea.form-control { + height: auto; } + +.form-group { + margin-bottom: 1rem; } + +.form-text { + display: block; + margin-top: 0.25rem; } + +.form-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; } + .form-row > .col, + .form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; } + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; } + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; } + .form-check-input:disabled ~ .form-check-label { + color: #6c757d; } + +.form-check-label { + margin-bottom: 0; } + +.form-check-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; } + .form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right calc(2.25rem / 4); + background-size: calc(2.25rem / 2) calc(2.25rem / 2); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + .was-validated .form-control:valid ~ .valid-feedback, + .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: 2.25rem; + background-position: top calc(2.25rem / 4) right calc(2.25rem / 4); } + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: 3.4375rem; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") no-repeat center right 1.75rem/1.125rem 1.125rem; } + .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, + .custom-select.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; } + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; } + .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; } + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; + background-color: #34ce57; } + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; } + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; } + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right calc(2.25rem / 4); + background-size: calc(2.25rem / 2) calc(2.25rem / 2); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + .was-validated .form-control:invalid ~ .invalid-feedback, + .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: 2.25rem; + background-position: top calc(2.25rem / 4) right calc(2.25rem / 4); } + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: 3.4375rem; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.125rem 1.125rem; } + .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, + .custom-select.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; } + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; } + .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; } + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; + background-color: #e4606d; } + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; } + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; } + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + +.form-inline { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .form-inline .form-check { + width: 100%; } + @media (min-width: 576px) { + .form-inline label { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; } + .form-inline .form-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; } + .form-inline .form-control-plaintext { + display: inline-block; } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; } + .form-inline .form-check { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; } + .form-inline .custom-control { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .form-inline .custom-control-label { + margin-bottom: 0; } } + +.btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .btn { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .btn:hover { + color: #212529; + text-decoration: none; } + .btn:focus, .btn.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .btn.disabled, .btn:disabled { + opacity: 0.65; } + .btn:not(:disabled):not(.disabled) { + cursor: pointer; } + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; } + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; } + .btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; } + .btn-primary:focus, .btn-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); } + .btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; } + .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, + .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; } + .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); } + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; } + .btn-secondary:focus, .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); } + .btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, + .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; } + .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); } + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; } + .btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; } + .btn-success:focus, .btn-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } + .btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; } + .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, + .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; } + .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); } + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; } + .btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; } + .btn-info:focus, .btn-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } + .btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; } + .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, + .show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; } + .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); } + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; } + .btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; } + .btn-warning:focus, .btn-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } + .btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; } + .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, + .show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; } + .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); } + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; } + .btn-danger:focus, .btn-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } + .btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, + .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; } + .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); } + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; } + .btn-light:focus, .btn-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } + .btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, + .show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; } + .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; } + .btn-dark:focus, .btn-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } + .btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, + .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; } + .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } + +.btn-outline-primary { + color: #007bff; + border-color: #007bff; } + .btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; } + .btn-outline-primary:focus, .btn-outline-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); } + .btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; } + .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, + .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; } + .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); } + +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; } + .btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-outline-secondary:focus, .btn-outline-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); } + .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; } + .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, + .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); } + +.btn-outline-success { + color: #28a745; + border-color: #28a745; } + .btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; } + .btn-outline-success:focus, .btn-outline-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } + .btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; } + .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, + .show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; } + .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); } + +.btn-outline-info { + color: #17a2b8; + border-color: #17a2b8; } + .btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; } + .btn-outline-info:focus, .btn-outline-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } + .btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; } + .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, + .show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; } + .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); } + +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; } + .btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; } + .btn-outline-warning:focus, .btn-outline-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } + .btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; } + .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, + .show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; } + .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); } + +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; } + .btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-outline-danger:focus, .btn-outline-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } + .btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; } + .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, + .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); } + +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:focus, .btn-outline-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + .btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; } + .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, + .show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + +.btn-outline-dark { + color: #343a40; + border-color: #343a40; } + .btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-outline-dark:focus, .btn-outline-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + .btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; } + .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, + .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + +.btn-link { + font-weight: 400; + color: #007bff; } + .btn-link:hover { + color: #0056b3; + text-decoration: underline; } + .btn-link:focus, .btn-link.focus { + text-decoration: underline; + -webkit-box-shadow: none; + box-shadow: none; } + .btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; } + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; } + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; } + +.btn-block { + display: block; + width: 100%; } + .btn-block + .btn-block { + margin-top: 0.5rem; } + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; } + +.fade { + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } + @media screen and (prefers-reduced-motion: reduce) { + .fade { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; } + @media screen and (prefers-reduced-motion: reduce) { + .collapsing { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; } + +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + +.dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; } + +.dropdown-menu-right { + right: 0; + left: auto; } + +@media (min-width: 576px) { + .dropdown-menu-sm-right { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-right { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-right { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-right { + right: 0; + left: auto; } } + +.dropdown-menu-left { + right: auto; + left: 0; } + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; } } + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; } } + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; } + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; } + +.dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropright .dropdown-toggle::after { + vertical-align: 0; } + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; } + +.dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropleft .dropdown-toggle::after { + display: none; } + +.dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropleft .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; } + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; } + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; } + .dropdown-item:first-child { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); } + .dropdown-item:last-child { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); } + .dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; } + .dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; } + .dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .btn-group > .btn:hover, + .btn-group-vertical > .btn:hover { + z-index: 1; } + .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; } + +.btn-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; } + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; } + .dropdown-toggle-split::after, + .dropup .dropdown-toggle-split::after, + .dropright .dropdown-toggle-split::after { + margin-left: 0; } + .dropleft .dropdown-toggle-split::before { + margin-right: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; } + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-group-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { + width: 100%; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; } + .btn-group-toggle > .btn input[type="radio"], + .btn-group-toggle > .btn input[type="checkbox"], + .btn-group-toggle > .btn-group > .btn input[type="radio"], + .btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + +.input-group { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .form-control-plaintext, + .input-group > .custom-select, + .input-group > .custom-file { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; } + .input-group > .form-control + .form-control, + .input-group > .form-control + .custom-select, + .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, + .input-group > .custom-select + .form-control, + .input-group > .custom-select + .custom-select, + .input-group > .custom-select + .custom-file, + .input-group > .custom-file + .form-control, + .input-group > .custom-file + .custom-select, + .input-group > .custom-file + .custom-file { + margin-left: -1px; } + .input-group > .form-control:focus, + .input-group > .custom-select:focus, + .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; } + .input-group > .custom-file .custom-file-input:focus { + z-index: 4; } + .input-group > .form-control:not(:last-child), + .input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .input-group > .form-control:not(:first-child), + .input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .input-group > .custom-file { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .input-group > .custom-file:not(:last-child) .custom-file-label, + .input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group-prepend, +.input-group-append { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .input-group-prepend .btn, + .input-group-append .btn { + position: relative; + z-index: 2; } + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; } + .input-group-prepend .btn + .btn, + .input-group-prepend .btn + .input-group-text, + .input-group-prepend .input-group-text + .input-group-text, + .input-group-prepend .input-group-text + .btn, + .input-group-append .btn + .btn, + .input-group-append .btn + .input-group-text, + .input-group-append .input-group-text + .input-group-text, + .input-group-append .input-group-text + .btn { + margin-left: -1px; } + +.input-group-prepend { + margin-right: -1px; } + +.input-group-append { + margin-left: -1px; } + +.input-group-text { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; } + .input-group-text input[type="radio"], + .input-group-text input[type="checkbox"] { + margin-top: 0; } + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(2.875rem + 2px); } + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; } + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.8125rem + 2px); } + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; } + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; } + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; } + +.custom-control-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; } + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; } + .custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; } + .custom-control-input:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; } + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; + border-color: #b3d7ff; } + .custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; } + .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; } + +.custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; } + .custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; } + .custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; } + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; } + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); } + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; + background-color: #007bff; } + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + +.custom-radio .custom-control-label::before { + border-radius: 50%; } + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + +.custom-switch { + padding-left: 2.25rem; } + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; } + .custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + -ms-transform: translateX(0.75rem); + transform: translateX(0.75rem); } + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + .custom-select:focus { + border-color: #80bdff; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); + box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); } + .custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; } + .custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; } + .custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; } + .custom-select::-ms-expand { + opacity: 0; } + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; } + +.custom-select-lg { + height: calc(2.875rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; } + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + margin-bottom: 0; } + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(2.25rem + 2px); + margin: 0; + opacity: 0; } + .custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; } + .custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; } + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); } + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; } + .custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: 2.25rem; + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; } + +.custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + .custom-range:focus { + outline: none; } + .custom-range:focus::-webkit-slider-thumb { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-range::-moz-focus-outer { + border: 0; } + .custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; } + @media screen and (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; } + .custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; } + .custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; } + @media screen and (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; } + .custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; } + .custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + appearance: none; } + @media screen and (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .custom-range::-ms-thumb:active { + background-color: #b3d7ff; } + .custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; } + .custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; } + .custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; } + .custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; } + .custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-moz-range-track { + cursor: default; } + .custom-range:disabled::-ms-thumb { + background-color: #adb5bd; } + +.custom-control-label::before, +.custom-file-label, +.custom-select { + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + +.nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: 0.5rem 1rem; } + .nav-link:hover, .nav-link:focus { + text-decoration: none; } + .nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; } + +.nav-tabs { + border-bottom: 1px solid #dee2e6; } + .nav-tabs .nav-item { + margin-bottom: -1px; } + .nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; } + .nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; } + .nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills .nav-link { + border-radius: 0.25rem; } + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; } + +.nav-fill .nav-item { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; } + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; } + .navbar > .container, + .navbar > .container-fluid { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; } + +.navbar-nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; } + .navbar-nav .dropdown-menu { + position: static; + float: none; } + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; } + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; } + .navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; } + .navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer; } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; } + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 576px) { + .navbar-expand-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-sm .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } } + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 768px) { + .navbar-expand-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-md .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } } + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-lg .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } } + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-xl .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } } + +.navbar-expand { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; } + .navbar-expand .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand .navbar-toggler { + display: none; } + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); } + .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); } + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); } + .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); } + .navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); } + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); } + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); } + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); } + .navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); } + .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); } + +.navbar-dark .navbar-brand { + color: #fff; } + .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; } + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); } + .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); } + .navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); } + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; } + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); } + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); } + .navbar-dark .navbar-text a { + color: #fff; } + .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; } + +.card { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + +.card-body { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; } + +.card-title { + margin-bottom: 0.75rem; } + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link:hover { + text-decoration: none; } + +.card-link + .card-link { + margin-left: 1.25rem; } + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + color: inherit; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); } + .card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } + .card-header + .list-group .list-group-item:first-child { + border-top: 0; } + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); } + .card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; } + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; } + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); } + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); } + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); } + +.card-deck { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } + .card-deck .card { + margin-bottom: 15px; } + @media (min-width: 576px) { + .card-deck { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; } + .card-deck .card { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; } } + +.card-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } + .card-group > .card { + margin-bottom: 15px; } + @media (min-width: 576px) { + .card-group { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; } + .card-group > .card { + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:first-child .card-img-top, + .card-group > .card:first-child .card-header { + border-top-right-radius: 0; } + .card-group > .card:first-child .card-img-bottom, + .card-group > .card:first-child .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:last-child .card-img-top, + .card-group > .card:last-child .card-header { + border-top-left-radius: 0; } + .card-group > .card:last-child .card-img-bottom, + .card-group > .card:last-child .card-footer { + border-bottom-left-radius: 0; } + .card-group > .card:only-child { + border-radius: 0.25rem; } + .card-group > .card:only-child .card-img-top, + .card-group > .card:only-child .card-header { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .card-group > .card:only-child .card-img-bottom, + .card-group > .card:only-child .card-footer { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0; } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { + border-radius: 0; } } + +.card-columns .card { + margin-bottom: 0.75rem; } + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; } + .card-columns .card { + display: inline-block; + width: 100%; } } + +.accordion .card { + overflow: hidden; } + .accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; } + .accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; } + .accordion .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .accordion .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; } + .accordion .card .card-header { + margin-bottom: -1px; } + +.breadcrumb { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; } + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; } + .breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; } + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; } + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; } + +.breadcrumb-item.active { + color: #6c757d; } + +.pagination { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; } + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; } + .page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; } + .page-link:focus { + z-index: 2; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .page-link:not(:disabled):not(.disabled) { + cursor: pointer; } + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; } + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; } + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; } + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; } + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; } + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; } + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; } + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; } + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; } + a.badge:hover, a.badge:focus { + text-decoration: none; } + .badge:empty { + display: none; } + +.btn .badge { + position: relative; + top: -1px; } + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; } + +.badge-primary { + color: #fff; + background-color: #007bff; } + a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #0062cc; } + +.badge-secondary { + color: #fff; + background-color: #6c757d; } + a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #545b62; } + +.badge-success { + color: #fff; + background-color: #28a745; } + a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #1e7e34; } + +.badge-info { + color: #fff; + background-color: #17a2b8; } + a.badge-info:hover, a.badge-info:focus { + color: #fff; + background-color: #117a8b; } + +.badge-warning { + color: #212529; + background-color: #ffc107; } + a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + background-color: #d39e00; } + +.badge-danger { + color: #fff; + background-color: #dc3545; } + a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #bd2130; } + +.badge-light { + color: #212529; + background-color: #f8f9fa; } + a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dae0e5; } + +.badge-dark { + color: #fff; + background-color: #343a40; } + a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #1d2124; } + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; } + @media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; } } + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; } + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; } + +.alert-heading { + color: inherit; } + +.alert-link { + font-weight: 700; } + +.alert-dismissible { + padding-right: 4rem; } + .alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; } + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; } + .alert-primary hr { + border-top-color: #9fcdff; } + .alert-primary .alert-link { + color: #002752; } + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; } + .alert-secondary hr { + border-top-color: #c8cbcf; } + .alert-secondary .alert-link { + color: #202326; } + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; } + .alert-success hr { + border-top-color: #b1dfbb; } + .alert-success .alert-link { + color: #0b2e13; } + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; } + .alert-info hr { + border-top-color: #abdde5; } + .alert-info .alert-link { + color: #062c33; } + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; } + .alert-warning hr { + border-top-color: #ffe8a1; } + .alert-warning .alert-link { + color: #533f03; } + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; } + .alert-danger hr { + border-top-color: #f1b0b7; } + .alert-danger .alert-link { + color: #491217; } + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; } + .alert-light hr { + border-top-color: #ececf6; } + .alert-light .alert-link { + color: #686868; } + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; } + .alert-dark hr { + border-top-color: #b9bbbe; } + .alert-dark .alert-link { + color: #040505; } + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; } + to { + background-position: 0 0; } } + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; } + to { + background-position: 0 0; } } + +.progress { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; } + +.progress-bar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; } + @media screen and (prefers-reduced-motion: reduce) { + .progress-bar { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; } + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; } + +.media { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; } + +.media-body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + +.list-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; } + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; } + .list-group-item-action:hover, .list-group-item-action:focus { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; } + .list-group-item-action:active { + color: #212529; + background-color: #e9ecef; } + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); } + .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + .list-group-item:hover, .list-group-item:focus { + z-index: 1; + text-decoration: none; } + .list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; } + .list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; } + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; } + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; } + +.list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; + border-bottom: 0; } + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; } + .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; } + .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; } + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; } + .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; } + .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; } + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; } + .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; } + .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; } + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; } + .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; } + .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; } + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; } + .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; } + .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; } + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; } + .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; } + .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; } + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; } + .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; } + .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; } + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; } + .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; } + .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; } + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; } + .close:hover { + color: #000; + text-decoration: none; } + .close:not(:disabled):not(.disabled) { + cursor: pointer; } + .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; } + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + +a.close.disabled { + pointer-events: none; } + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25rem; + -webkit-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; } + .toast:not(:last-child) { + margin-bottom: 0.75rem; } + .toast.showing { + opacity: 1; } + .toast.show { + display: block; + opacity: 1; } + .toast.hide { + display: none; } + +.toast-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); } + +.toast-body { + padding: 0.75rem; } + +.modal-open { + overflow: hidden; } + .modal-open .modal { + overflow-x: hidden; + overflow-y: auto; } + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; } + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; } + .modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + -o-transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + -ms-transform: translate(0, -50px); + transform: translate(0, -50px); } + @media screen and (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .modal.show .modal-dialog { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.modal-dialog-centered { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (0.5rem * 2)); } + .modal-dialog-centered::before { + display: block; + height: calc(100vh - (0.5rem * 2)); + content: ""; } + +.modal-content { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; } + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: 0.5; } + +.modal-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; } + .modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; } + +.modal-title { + margin-bottom: 0; + line-height: 1.5; } + +.modal-body { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; } + +.modal-footer { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #e9ecef; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } + .modal-footer > :not(:first-child) { + margin-left: .25rem; } + .modal-footer > :not(:last-child) { + margin-right: .25rem; } + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; } + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)); } + .modal-dialog-centered::before { + height: calc(100vh - (1.75rem * 2)); } + .modal-sm { + max-width: 300px; } } + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; } } + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; } } + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; } + .tooltip.show { + opacity: 0.9; } + .tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; } + .tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; } + .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; } + .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; } + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; } + .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; } + .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; } + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; } + .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; } + .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; } + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; } + .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; } + .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; } + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; } + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; } + .popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; } + .popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; } + .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + bottom: calc((0.5rem + 1px) * -1); } + .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, + .bs-popover-top .arrow::after, + .bs-popover-auto[x-placement^="top"] .arrow::after { + border-width: 0.5rem 0.5rem 0; } + .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.25); } + + .bs-popover-top .arrow::after, + .bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: 1px; + border-top-color: #fff; } + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; } + .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; } + .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, + .bs-popover-right .arrow::after, + .bs-popover-auto[x-placement^="right"] .arrow::after { + border-width: 0.5rem 0.5rem 0.5rem 0; } + .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, 0.25); } + + .bs-popover-right .arrow::after, + .bs-popover-auto[x-placement^="right"] .arrow::after { + left: 1px; + border-right-color: #fff; } + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; } + .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + top: calc((0.5rem + 1px) * -1); } + .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, + .bs-popover-bottom .arrow::after, + .bs-popover-auto[x-placement^="bottom"] .arrow::after { + border-width: 0 0.5rem 0.5rem 0.5rem; } + .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, 0.25); } + + .bs-popover-bottom .arrow::after, + .bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: 1px; + border-bottom-color: #fff; } + .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; } + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; } + .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; } + .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, + .bs-popover-left .arrow::after, + .bs-popover-auto[x-placement^="left"] .arrow::after { + border-width: 0.5rem 0 0.5rem 0.5rem; } + .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, 0.25); } + + .bs-popover-left .arrow::after, + .bs-popover-auto[x-placement^="left"] .arrow::after { + right: 1px; + border-left-color: #fff; } + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; } + +.carousel { + position: relative; } + +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + -o-transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .carousel-item { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + +.carousel-fade .carousel-item { + opacity: 0; + -webkit-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; + -webkit-transform: none; + -ms-transform: none; + transform: none; } + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; } + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + -webkit-transition: 0s 0.6s opacity; + -o-transition: 0s 0.6s opacity; + transition: 0s 0.6s opacity; } + @media screen and (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + -webkit-transition: opacity 0.15s ease; + -o-transition: opacity 0.15s ease; + transition: opacity 0.15s ease; } + @media screen and (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; } + +.carousel-control-prev { + left: 0; } + +.carousel-control-next { + right: 0; } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; } + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); } + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); } + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; } + .carousel-indicators li { + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + -webkit-transition: opacity 0.6s ease; + -o-transition: opacity 0.6s ease; + transition: opacity 0.6s ease; } + @media screen and (prefers-reduced-motion: reduce) { + .carousel-indicators li { + -webkit-transition: none; + -o-transition: none; + transition: none; } } + .carousel-indicators .active { + opacity: 1; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; } + +@-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; } + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; } + +@-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); } + 50% { + opacity: 1; } } + +@keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); } + 50% { + opacity: 1; } } + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; } + +.spinner-grow-sm { + width: 1rem; + height: 1rem; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.bg-primary { + background-color: #007bff !important; } + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; } + +.bg-secondary { + background-color: #6c757d !important; } + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; } + +.bg-success { + background-color: #28a745 !important; } + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; } + +.bg-info { + background-color: #17a2b8 !important; } + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; } + +.bg-warning { + background-color: #ffc107 !important; } + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; } + +.bg-danger { + background-color: #dc3545 !important; } + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; } + +.bg-light { + background-color: #f8f9fa !important; } + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; } + +.bg-dark { + background-color: #343a40 !important; } + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; } + +.bg-white { + background-color: #fff !important; } + +.bg-transparent { + background-color: transparent !important; } + +.border { + border: 1px solid #dee2e6 !important; } + +.border-top { + border-top: 1px solid #dee2e6 !important; } + +.border-right { + border-right: 1px solid #dee2e6 !important; } + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; } + +.border-left { + border-left: 1px solid #dee2e6 !important; } + +.border-0 { + border: 0 !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-right-0 { + border-right: 0 !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-left-0 { + border-left: 0 !important; } + +.border-primary { + border-color: #007bff !important; } + +.border-secondary { + border-color: #6c757d !important; } + +.border-success { + border-color: #28a745 !important; } + +.border-info { + border-color: #17a2b8 !important; } + +.border-warning { + border-color: #ffc107 !important; } + +.border-danger { + border-color: #dc3545 !important; } + +.border-light { + border-color: #f8f9fa !important; } + +.border-dark { + border-color: #343a40 !important; } + +.border-white { + border-color: #fff !important; } + +.rounded { + border-radius: 0.25rem !important; } + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; } + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; } + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; } + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-pill { + border-radius: 50rem !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.d-none { + display: none !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + +.d-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 768px) { + .d-md-none { + display: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block { + display: block !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media print { + .d-print-none { + display: none !important; } + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; } + .d-print-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; } + .embed-responsive::before { + display: block; + content: ""; } + .embed-responsive .embed-responsive-item, + .embed-responsive iframe, + .embed-responsive embed, + .embed-responsive object, + .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; } + +.embed-responsive-21by9::before { + padding-top: 42.85714%; } + +.embed-responsive-16by9::before { + padding-top: 56.25%; } + +.embed-responsive-3by4::before { + padding-top: 133.33333%; } + +.embed-responsive-1by1::before { + padding-top: 100%; } + +.flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + +.flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + +.flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + +.flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + +.flex-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + +.flex-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + +.flex-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + +.justify-content-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + +.justify-content-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + +.justify-content-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + +.justify-content-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + +.align-items-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + +.align-items-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + +.align-items-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + +.align-items-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + +.align-items-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + +.align-self-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; } + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + +.align-self-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; } + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; } + +@media (min-width: 576px) { + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-sm-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-sm-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-sm-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-sm-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-sm-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-sm-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-sm-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 768px) { + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-md-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-md-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-md-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-md-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-md-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-md-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-md-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-md-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-md-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-md-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 992px) { + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-lg-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-lg-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-lg-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-lg-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-lg-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-lg-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-lg-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 1200px) { + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .flex-xl-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; } + .flex-xl-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; } + .flex-xl-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-xl-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-xl-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-xl-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-xl-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; } } + +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-none { + float: none !important; } + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; } + .float-sm-right { + float: right !important; } + .float-sm-none { + float: none !important; } } + +@media (min-width: 768px) { + .float-md-left { + float: left !important; } + .float-md-right { + float: right !important; } + .float-md-none { + float: none !important; } } + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; } + .float-lg-right { + float: right !important; } + .float-lg-none { + float: none !important; } } + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; } + .float-xl-right { + float: right !important; } + .float-xl-none { + float: none !important; } } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; } } + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; } + +.shadow-sm { + -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } + +.shadow { + -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } + +.shadow-lg { + -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } + +.shadow-none { + -webkit-box-shadow: none !important; + box-shadow: none !important; } + +.w-25 { + width: 25% !important; } + +.w-50 { + width: 50% !important; } + +.w-75 { + width: 75% !important; } + +.w-100 { + width: 100% !important; } + +.w-auto { + width: auto !important; } + +.h-25 { + height: 25% !important; } + +.h-50 { + height: 50% !important; } + +.h-75 { + height: 75% !important; } + +.h-100 { + height: 100% !important; } + +.h-auto { + height: auto !important; } + +.mw-100 { + max-width: 100% !important; } + +.mh-100 { + max-height: 100% !important; } + +.min-vw-100 { + min-width: 100vw !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.vw-100 { + width: 100vw !important; } + +.vh-100 { + height: 100vh !important; } + +.m-0 { + margin: 0 !important; } + +.mt-0, +.my-0 { + margin-top: 0 !important; } + +.mr-0, +.mx-0 { + margin-right: 0 !important; } + +.mb-0, +.my-0 { + margin-bottom: 0 !important; } + +.ml-0, +.mx-0 { + margin-left: 0 !important; } + +.m-1 { + margin: 0.25rem !important; } + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; } + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; } + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; } + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; } + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; } + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; } + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.mt-3, +.my-3 { + margin-top: 1rem !important; } + +.mr-3, +.mx-3 { + margin-right: 1rem !important; } + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; } + +.ml-3, +.mx-3 { + margin-left: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; } + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; } + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; } + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.mt-5, +.my-5 { + margin-top: 3rem !important; } + +.mr-5, +.mx-5 { + margin-right: 3rem !important; } + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; } + +.ml-5, +.mx-5 { + margin-left: 3rem !important; } + +.p-0 { + padding: 0 !important; } + +.pt-0, +.py-0 { + padding-top: 0 !important; } + +.pr-0, +.px-0 { + padding-right: 0 !important; } + +.pb-0, +.py-0 { + padding-bottom: 0 !important; } + +.pl-0, +.px-0 { + padding-left: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; } + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; } + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; } + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; } + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; } + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; } + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.pt-3, +.py-3 { + padding-top: 1rem !important; } + +.pr-3, +.px-3 { + padding-right: 1rem !important; } + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; } + +.pl-3, +.px-3 { + padding-left: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; } + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; } + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; } + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.pt-5, +.py-5 { + padding-top: 3rem !important; } + +.pr-5, +.px-5 { + padding-right: 3rem !important; } + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; } + +.pl-5, +.px-5 { + padding-left: 3rem !important; } + +.m-n1 { + margin: -0.25rem !important; } + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; } + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; } + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; } + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; } + +.m-n2 { + margin: -0.5rem !important; } + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; } + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; } + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; } + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; } + +.m-n3 { + margin: -1rem !important; } + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; } + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; } + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; } + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; } + +.m-n4 { + margin: -1.5rem !important; } + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; } + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; } + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; } + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; } + +.m-n5 { + margin: -3rem !important; } + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; } + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; } + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; } + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; } + +.m-auto { + margin: auto !important; } + +.mt-auto, +.my-auto { + margin-top: auto !important; } + +.mr-auto, +.mx-auto { + margin-right: auto !important; } + +.mb-auto, +.my-auto { + margin-bottom: auto !important; } + +.ml-auto, +.mx-auto { + margin-left: auto !important; } + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; } + .p-sm-0 { + padding: 0 !important; } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; } + .m-sm-n1 { + margin: -0.25rem !important; } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; } + .m-sm-n2 { + margin: -0.5rem !important; } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; } + .m-sm-n3 { + margin: -1rem !important; } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; } + .m-sm-n4 { + margin: -1.5rem !important; } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; } + .m-sm-n5 { + margin: -3rem !important; } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; } } + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; } + .p-md-0 { + padding: 0 !important; } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; } + .m-md-n1 { + margin: -0.25rem !important; } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; } + .m-md-n2 { + margin: -0.5rem !important; } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; } + .m-md-n3 { + margin: -1rem !important; } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; } + .m-md-n4 { + margin: -1.5rem !important; } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; } + .m-md-n5 { + margin: -3rem !important; } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; } + .m-md-auto { + margin: auto !important; } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; } } + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; } + .p-lg-0 { + padding: 0 !important; } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; } + .m-lg-n1 { + margin: -0.25rem !important; } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; } + .m-lg-n2 { + margin: -0.5rem !important; } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; } + .m-lg-n3 { + margin: -1rem !important; } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; } + .m-lg-n4 { + margin: -1.5rem !important; } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; } + .m-lg-n5 { + margin: -3rem !important; } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; } } + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; } + .p-xl-0 { + padding: 0 !important; } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; } + .m-xl-n1 { + margin: -0.25rem !important; } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; } + .m-xl-n2 { + margin: -0.5rem !important; } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; } + .m-xl-n3 { + margin: -1rem !important; } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; } + .m-xl-n4 { + margin: -1.5rem !important; } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; } + .m-xl-n5 { + margin: -3rem !important; } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; } } + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +.text-justify { + text-align: justify !important; } + +.text-wrap { + white-space: normal !important; } + +.text-nowrap { + white-space: nowrap !important; } + +.text-truncate { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; } + +.text-left { + text-align: left !important; } + +.text-right { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; } + .text-sm-right { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; } + .text-md-right { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; } + .text-lg-right { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; } + .text-xl-right { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.font-weight-light { + font-weight: 300 !important; } + +.font-weight-lighter { + font-weight: lighter !important; } + +.font-weight-normal { + font-weight: 400 !important; } + +.font-weight-bold { + font-weight: 700 !important; } + +.font-weight-bolder { + font-weight: bolder !important; } + +.font-italic { + font-style: italic !important; } + +.text-white { + color: #fff !important; } + +.text-primary { + color: #007bff !important; } + +a.text-primary:hover, a.text-primary:focus { + color: #0056b3 !important; } + +.text-secondary { + color: #6c757d !important; } + +a.text-secondary:hover, a.text-secondary:focus { + color: #494f54 !important; } + +.text-success { + color: #28a745 !important; } + +a.text-success:hover, a.text-success:focus { + color: #19692c !important; } + +.text-info { + color: #17a2b8 !important; } + +a.text-info:hover, a.text-info:focus { + color: #0f6674 !important; } + +.text-warning { + color: #ffc107 !important; } + +a.text-warning:hover, a.text-warning:focus { + color: #ba8b00 !important; } + +.text-danger { + color: #dc3545 !important; } + +a.text-danger:hover, a.text-danger:focus { + color: #a71d2a !important; } + +.text-light { + color: #f8f9fa !important; } + +a.text-light:hover, a.text-light:focus { + color: #cbd3da !important; } + +.text-dark { + color: #343a40 !important; } + +a.text-dark:hover, a.text-dark:focus { + color: #121416 !important; } + +.text-body { + color: #212529 !important; } + +.text-muted { + color: #6c757d !important; } + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; } + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; } + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; } + +.text-decoration-none { + text-decoration: none !important; } + +.text-reset { + color: inherit !important; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + a:not(.btn) { + text-decoration: underline; } + abbr[title]::after { + content: " (" attr(title) ")"; } + pre { + white-space: pre-wrap !important; } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; } + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } + @page { + size: a3; } + body { + min-width: 992px !important; } + .container { + min-width: 992px !important; } + .navbar { + display: none; } + .badge { + border: 1px solid #000; } + .table { + border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; } + .table-dark { + color: inherit; } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; } } + +html { + overflow-x: hidden; } + +body { + font-family: "Lato", Arial, sans-serif; + background: #fff; + font-size: 16px; + line-height: 1.8; + font-weight: 400; + color: #999999; + overflow-x: hidden; } + +a { + -webkit-transition: .3s all ease; + -o-transition: .3s all ease; + transition: .3s all ease; + color: #00bd56; } + a:hover, a:focus { + text-decoration: none; + color: #00bd56; + outline: none !important; } + +h1, h2, h3, h4, h5, +.h1, .h2, .h3, .h4, .h5 { + line-height: 1.5; + color: rgba(0, 0, 0, 0.8); + font-weight: 400; + font-family: "Oswald", Arial, sans-serif; } + +.container { + max-width: 1200px; } + +.ftco-navbar-light { + background: transparent !important; + position: absolute; + top: 20px; + left: 0; + right: 0; + z-index: 3; + padding: 0; } + @media (max-width: 991.98px) { + .ftco-navbar-light { + background: #000000 !important; + position: relative; + top: 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 0; } } + .ftco-navbar-light .container { + width: 1170px; + margin: 0 auto; + padding: 0; } + @media (max-width: 1199.98px) { + .ftco-navbar-light .container { + background: #00bd56; } } + @media (min-width: 1200px) { + .ftco-navbar-light .container { + background: rgba(255, 255, 255, 0.1); + position: relative; + z-index: 0; } + .ftco-navbar-light .container:after { + position: absolute; + top: 0; + right: -100%; + bottom: 0; + content: ''; + width: 100%; + background: rgba(255, 255, 255, 0.1); } + .ftco-navbar-light .container:before { + position: absolute; + top: 0; + left: -100%; + bottom: 0; + content: ''; + width: 100%; + background: rgba(255, 255, 255, 0.1); } } + .ftco-navbar-light .navbar-brand { + color: #000000; + padding-top: 1.5rem; + padding-bottom: 1.5rem; } + @media (max-width: 1199.98px) { + .ftco-navbar-light .navbar-brand { + color: #fff; + padding-top: 1rem; + padding-bottom: 1rem; + padding-left: 1rem; + padding-right: 1rem; } } + @media (max-width: 991.98px) { + .ftco-navbar-light .navbar-nav { + padding-bottom: 20px; + padding-left: 1rem !important; + padding-right: 1rem !important; } } + .ftco-navbar-light .navbar-nav > .nav-item > .nav-link { + font-size: 15px; + padding-top: 1.5rem; + padding-bottom: 1.5rem; + padding-left: 20px; + padding-right: 20px; + color: #000000; + color: rgba(255, 255, 255, 0.8); + font-family: "Oswald", Arial, sans-serif; + text-transform: uppercase; + opacity: 1 !important; } + .ftco-navbar-light .navbar-nav > .nav-item > .nav-link:hover, .ftco-navbar-light .navbar-nav > .nav-item > .nav-link:focus { + color: #00bd56; } + @media (max-width: 991.98px) { + .ftco-navbar-light .navbar-nav > .nav-item > .nav-link { + padding-left: 0; + padding-right: 0; + padding-bottom: 0; + color: #000000; } } + .ftco-navbar-light .navbar-nav > .nav-item .dropdown-menu { + border: none; + background: #fff; + -webkit-box-shadow: 0px 10px 34px -20px rgba(0, 0, 0, 0.41); + -moz-box-shadow: 0px 10px 34px -20px rgba(0, 0, 0, 0.41); + box-shadow: 0px 10px 34px -20px rgba(0, 0, 0, 0.41); } + .ftco-navbar-light .navbar-nav > .nav-item.ftco-seperator { + position: relative; + margin-left: 20px; + padding-left: 20px; } + @media (max-width: 991.98px) { + .ftco-navbar-light .navbar-nav > .nav-item.ftco-seperator { + padding-left: 0; + margin-left: 0; } } + .ftco-navbar-light .navbar-nav > .nav-item.ftco-seperator:before { + position: absolute; + content: ""; + top: 10px; + bottom: 10px; + left: 0; + width: 2px; + background: rgba(255, 255, 255, 0.05); } + @media (max-width: 991.98px) { + .ftco-navbar-light .navbar-nav > .nav-item.ftco-seperator:before { + display: none; } } + .ftco-navbar-light .navbar-nav > .nav-item.cta > a { + color: #fff; + border: 1px solid #171b21; + padding-top: .8rem; + padding-bottom: .8rem; + padding-left: 18px; + padding-right: 18px; + background: #171b21; + margin-top: .5rem; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + border-radius: 4px; } + .ftco-navbar-light .navbar-nav > .nav-item.cta > a span { + display: inline-block; + color: #fff; } + .ftco-navbar-light .navbar-nav > .nav-item.cta > a:hover { + background: #171b21; + border: 1px solid #171b21; + color: #fff; } + .ftco-navbar-light .navbar-nav > .nav-item.cta.cta-colored a { + border: 1px solid #207dff; + background: #207dff !important; } + .ftco-navbar-light .navbar-nav > .nav-item.active > a { + color: white; } + @media (max-width: 991.98px) { + .ftco-navbar-light .navbar-nav > .nav-item.active > a { + color: #fff; } } + .ftco-navbar-light .navbar-toggler { + border: none; + color: black !important; + cursor: pointer; + padding-right: 1rem; + text-transform: uppercase; + font-size: 16px; + letter-spacing: .1em; + font-weight: 400; } + .ftco-navbar-light .navbar-toggler:hover, .ftco-navbar-light .navbar-toggler:focus { + text-decoration: none; + color: #00bd56; + outline: none !important; } + .ftco-navbar-light.scrolled { + position: fixed; + right: 0; + left: 0; + top: 0; + margin-top: -130px; + background: #fff !important; + -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); + padding: 0; } + @media (max-width: 991.98px) { + .ftco-navbar-light.scrolled .nav-item > .nav-link { + padding-left: 0 !important; + padding-right: 0 !important; + padding-bottom: 0 !important; } } + .ftco-navbar-light.scrolled .nav-item.active > a { + color: #00bd56 !important; } + .ftco-navbar-light.scrolled .nav-item.cta > a { + color: #fff !important; + background: #171b21; + border: none !important; + padding-top: 0.5rem !important; + padding-bottom: .5rem !important; + padding-left: 20px !important; + padding-right: 20px !important; + margin-top: 6px !important; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + border-radius: 5px; } + .ftco-navbar-light.scrolled .nav-item.cta > a span { + display: inline-block; + color: #fff !important; } + .ftco-navbar-light.scrolled .nav-item.cta.cta-colored span { + border-color: #00bd56; } + @media (max-width: 991.98px) { + .ftco-navbar-light.scrolled .navbar-nav { + background: none; + border-radius: 0px; + padding-left: 1rem !important; + padding-right: 1rem !important; + margin-left: 0 !important; } } + .ftco-navbar-light.scrolled .navbar-toggler { + border: none; + color: black !important; + border-color: black !important; + cursor: pointer; + text-transform: uppercase; + font-size: 16px; + letter-spacing: .1em; } + .ftco-navbar-light.scrolled .nav-link { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + color: #000000 !important; } + .ftco-navbar-light.scrolled .nav-link.active { + color: #00bd56 !important; } + .ftco-navbar-light.scrolled.awake { + margin-top: 0px; + -webkit-transition: .3s all ease-out; + -o-transition: .3s all ease-out; + transition: .3s all ease-out; } + .ftco-navbar-light.scrolled.sleep { + -webkit-transition: .3s all ease-out; + -o-transition: .3s all ease-out; + transition: .3s all ease-out; } + .ftco-navbar-light.scrolled .navbar-brand { + color: #000000; + padding-top: 1rem; + padding-bottom: 1rem; } + .ftco-navbar-light.scrolled .navbar-brand:before { + top: 0; + bottom: 0; } + .ftco-navbar-light.scrolled .navbar-brand span { + padding-left: 40px; } + .ftco-navbar-light.scrolled .navbar-brand i { + font-size: 40px; } + +.navbar-brand { + font-weight: 400; + font-size: 24px; + padding-right: 3em; + position: relative; + font-family: "Oswald", Arial, sans-serif; + text-transform: uppercase; + z-index: 0; } + .navbar-brand:before { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #171b21; + position: absolute; + right: -33px; + top: -20px; + bottom: -20px; + left: -1000%; + z-index: -1; } + .navbar-brand span { + font-weight: 900; + color: #fff; + padding-left: 50px; } + .navbar-brand i { + position: absolute; + top: 0; + left: 0; + font-size: 48px; + z-index: -1; + color: #00bd56; + color: #fdd043; } + +.hero-wrap { + width: 100%; + height: 100%; + position: inherit; + background-size: cover; + background-repeat: no-repeat; + background-position: top center; } + @media (max-width: 991.98px) { + .hero-wrap { + background-position: top center !important; } } + .hero-wrap .overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ''; + opacity: .3; + background: #000000; } + .hero-wrap.hero-wrap-2 { + height: 750px; + position: relative; } + .hero-wrap.hero-wrap-2 .slider-text { + height: 750px; } + +.slider-text h1 { + font-size: 80px; + color: #fff; + line-height: 1.2; + font-weight: 900; + text-transform: uppercase; } + @media (max-width: 991.98px) { + .slider-text h1 { + font-size: 40px; } } + +.slider-text p { + font-size: 20px; + line-height: 1.5; + font-weight: 400; + color: rgba(255, 255, 255, 0.8); } + .slider-text p strong { + font-weight: 700; } + .slider-text p strong a { + color: #000000; } + +.slider-text .subheading { + color: #fff; + font-size: 20px; + font-weight: 700; } + +.slider-text .icon-video { + width: 60px; + height: 60px; + background: rgba(255, 255, 255, 0.8); + -webkit-animation: pulse 2s infinite; + animation: pulse 2s infinite; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + .slider-text .icon-video span { + font-size: 20px; + color: #000000; } + +.slider-text .watch { + color: #fff; + text-transform: uppercase; + font-size: 18px; + letter-spacing: 2px; } + +.slider-text .breadcrumbs { + font-size: 16px; + margin-bottom: 20px; + z-index: 99; + font-weight: 400; } + .slider-text .breadcrumbs span { + color: rgba(255, 255, 255, 0.8); } + .slider-text .breadcrumbs span i { + color: rgba(255, 255, 255, 0.8); } + .slider-text .breadcrumbs span a { + color: white; } + .slider-text .breadcrumbs span a:hover, .slider-text .breadcrumbs span a:focus { + color: #00bd56; } + .slider-text .breadcrumbs span a:hover i, .slider-text .breadcrumbs span a:focus i { + color: #00bd56; } + +.slider-text .bread { + font-weight: 700; } + +.bg-light { + background: #f8f9fa !important; } + +.bg-primary { + background: #00bd56; } + +.btn { + cursor: pointer; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + -moz-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); } + .btn:hover, .btn:active, .btn:focus { + outline: none; } + .btn.btn-primary { + background: #00bd56 !important; + border: 1px solid #00bd56 !important; + color: #fff !important; } + .btn.btn-primary:hover { + border: 1px solid #000000 !important; + background: #000000 !important; + color: #fff !important; } + .btn.btn-primary.btn-outline-primary { + border: 1px solid #00bd56; + background: transparent; + color: #00bd56; } + .btn.btn-primary.btn-outline-primary:hover { + border: 1px solid transparent; + background: #00bd56; + color: #fff; } + .btn.btn-secondary { + background: #207dff !important; + border: 1px solid #207dff !important; + color: #fff !important; } + .btn.btn-secondary:hover { + border: 1px solid #000000 !important; + background: #000000 !important; + color: #fff !important; } + .btn.btn-secondary.btn-outline-secondary { + border: 1px solid #207dff; + background: transparent; + color: #207dff; } + .btn.btn-secondary.btn-outline-secondary:hover { + border: 1px solid transparent; + background: #00bd56; + color: #fff; } + .btn.btn-white { + background: #fff !important; + border: 1px solid #fff !important; + color: #000000 !important; } + .btn.btn-white:hover { + border: 1px solid #000000; + background: #000000 !important; + color: #fff; } + .btn.btn-white.btn-outline-white { + border: 1px solid #000000; + background: transparent; + color: #000000; } + .btn.btn-white.btn-outline-white:hover { + border: 1px solid transparent; + background: #000000; + color: #fff; } + .btn.btn-black { + background: #000000 !important; + border: 1px solid #000000 !important; + color: #fff !important; } + .btn.btn-black:hover { + border: 1px solid #171b21; + background: #171b21 !important; } + .btn.btn-black.btn-outline-white { + border: 1px solid #000000; + background: transparent; + color: #000000; } + .btn.btn-black.btn-outline-white:hover { + border: 1px solid transparent; + background: #000000; + color: #fff; } + +#timer { + width: 100%; } + @media (max-width: 991.98px) { + #timer { + width: 100%; } } + #timer .time { + width: 25%; + font-size: 40px; + font-weight: 600; + border-left: 1px solid rgba(255, 255, 255, 0.1); + color: #fff; + font-family: "Oswald", Arial, sans-serif; } + #timer .time:first-child { + border-left: transparent; } + #timer .time span { + font-size: 14px; + display: block; + color: #fff; + font-weight: 300; + font-family: "Lato", Arial, sans-serif; } + +.icon-video-2 { + width: 60px; + height: 60px; + background: white; + -webkit-animation: pulse 2s infinite; + animation: pulse 2s infinite; + margin: 0 auto; + margin-left: 30px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + .icon-video-2 span { + font-size: 20px; + color: #000000; } + +.game-wrap-1 { + position: relative; + background: #171b21; + padding: 30px; } + .game-wrap-1 .text { + width: 100%; + display: block; } + .game-wrap-1 .text.text-vs { + position: relative; } + .game-wrap-1 .text.text-vs .vs { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + margin-left: -8px; + margin-top: -20px; + font-weight: 700; } + .game-wrap-1 .text h3 { + font-size: 14px; + color: #fff; + font-weight: 700; } + .game-wrap-1 .text h3 span { + display: block; } + .game-wrap-1 .text .league { + font-size: 24px; + color: rgba(255, 255, 255, 0.5); + text-transform: uppercase; } + .game-wrap-1 .text span { + color: rgba(255, 255, 255, 0.8); } + .game-wrap-1 .text .btn { + display: block; } + .game-wrap-1 .team-logo { + width: 100%; + position: relative; } + .game-wrap-1 .team-logo h3 { + text-transform: uppercase; } + .game-wrap-1 .team-logo .img { + margin: 0 auto; + width: 60px; + height: 60px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + +.slash { + position: relative; + z-index: 0; } + .slash:after { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #00bd56; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + right: -1000%; + z-index: 0; + opacity: 1; + z-index: -1; } + .slash:before { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #207dff; + position: absolute; + right: 50%; + top: 0; + bottom: 0; + left: -1000%; + z-index: -1; + opacity: 1; } + +.scoreboard { + width: 100%; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + border-radius: 4px; + position: relative; + z-index: 0; + padding: 60px 0; } + @media (min-width: 992px) { + .scoreboard { + padding-bottom: 12em; } } + .scoreboard.scoreboard-2 { + overflow: hidden; + margin-bottom: 30px; + padding: 60px 30px; } + @media (min-width: 992px) { + .scoreboard.scoreboard-2 { + padding-bottom: 60px; } } + .scoreboard .divider { + position: relative; } + .scoreboard .divider span { + padding: 0 10px; + text-transform: uppercase; + letter-spacing: 1px; + font-size: 16px; + color: #fff; } + .scoreboard .sport-team-wrap { + position: relative; } + .scoreboard .sport-team-wrap span.vs { + position: absolute; + top: 50%; + left: 50%; + margin-left: -20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 40px; + line-height: 1; + color: #000000; } + @media (max-width: 767.98px) { + .scoreboard .sport-team-wrap span.vs { + left: 50px; + color: #fff; + margin-top: -5px; } } + .scoreboard .sport-team { + display: block; + width: 50%; } + @media (max-width: 767.98px) { + .scoreboard .sport-team { + width: 100%; } } + .scoreboard .sport-team .logo { + width: 100px; + height: 100px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; + -webkit-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + -moz-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); } + .scoreboard .sport-team .desc { + width: calc(100% - 100px); } + .scoreboard .sport-team .score { + font-weight: 800; + font-size: 60px; + line-height: 1; } + .scoreboard .sport-team .score.win span { + color: #000000; } + .scoreboard .sport-team .score.lost span { + color: rgba(0, 0, 0, 0.4); } + .scoreboard .sport-team .team-name { + font-size: 24px; + font-weight: 700; + text-transform: uppercase; } + +.ftco-highlights .video-wrap { + height: 400px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0px -18px 93px -56px rgba(0, 0, 0, 0.59); + -moz-box-shadow: 0px -18px 93px -56px rgba(0, 0, 0, 0.59); + box-shadow: 0px -18px 93px -56px rgba(0, 0, 0, 0.59); } + @media (min-width: 1200px) { + .ftco-highlights .video-wrap { + margin-top: -8em; } } + +.ftco-game-schedule { + position: relative; } + .ftco-game-schedule .img-game { + width: 100%; + display: block; } + .ftco-game-schedule .owl-carousel { + margin: 0; } + .ftco-game-schedule .owl-carousel .owl-stage-outer { + padding-top: 0; + padding-bottom: 2em; + position: relative; } + .ftco-game-schedule .owl-nav { + position: absolute; + bottom: 60px !important; + left: 0; + right: 0; + margin: 0 auto; } + @media (max-width: 991.98px) { + .ftco-game-schedule .owl-nav { + display: none; } } + .ftco-game-schedule .owl-nav .owl-prev, + .ftco-game-schedule .owl-nav .owl-next { + position: absolute; + width: 60px; + height: 60px; + background: #fff !important; + -moz-transition: all 0.7s ease; + -o-transition: all 0.7s ease; + -webkit-transition: all 0.7s ease; + -ms-transition: all 0.7s ease; + transition: all 0.7s ease; + opacity: 1; } + .ftco-game-schedule .owl-nav .owl-prev span:before, + .ftco-game-schedule .owl-nav .owl-next span:before { + font-size: 20px; + margin-top: 7px; + color: #000000; } + .ftco-game-schedule .owl-nav .owl-prev { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .ftco-game-schedule .owl-nav .owl-prev { + right: 61px !important; } } + .ftco-game-schedule .owl-nav .owl-prev:hover, .ftco-game-schedule .owl-nav .owl-prev:focus { + background: #000000 !important; + outline: none !important; } + .ftco-game-schedule .owl-nav .owl-prev:hover span:before, .ftco-game-schedule .owl-nav .owl-prev:focus span:before { + font-size: 20px; + margin-top: 7px; + color: #fff; } + .ftco-game-schedule .owl-nav .owl-next { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .ftco-game-schedule .owl-nav .owl-next { + right: 0 !important; } } + .ftco-game-schedule .owl-nav .owl-next:hover, .ftco-game-schedule .owl-nav .owl-next:focus { + background: #000000 !important; + outline: none !important; } + .ftco-game-schedule .owl-nav .owl-next:hover span:before, .ftco-game-schedule .owl-nav .owl-next:focus span:before { + font-size: 24px; + margin-top: 7px; + color: #fff; } + .ftco-game-schedule .owl-dots { + text-align: center; } + .ftco-game-schedule .owl-dots .owl-dot { + width: 10px; + height: 10px; + margin: 5px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.1); } + .ftco-game-schedule .owl-dots .owl-dot.active { + background: #00bd56; } + +.game-sched { + padding: 20px 0; + width: 100%; + display: block; + border: 1px solid rgba(0, 0, 0, 0.1); + background: #fff; + -webkit-box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); + box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); } + .game-sched .divider p { + font-size: 12px; + text-transform: uppercase; } + .game-sched .sched-wrap { + position: relative; } + .game-sched .sched-wrap .vs { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + margin-left: -8px; + margin-top: -20px; + font-weight: 700; } + .game-sched h3 { + font-size: 18px; + color: #fff; + font-weight: 700; } + .game-sched h3 span { + display: block; } + .game-sched .league { + font-size: 24px; + color: rgba(255, 255, 255, 0.5); + text-transform: uppercase; } + .game-sched span { + color: rgba(0, 0, 0, 0.8); } + .game-sched .btn { + display: block; } + +.team-logo { + width: 100%; + position: relative; } + .team-logo h3 { + text-transform: uppercase; } + .team-logo .img { + margin: 0 auto; + width: 100px; + height: 100px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + +.game-schedule .sport-team { + display: block; + width: 100%; + border: 1px solid rgba(0, 0, 0, 0.1); + padding: 20px; + background: #fff; + -webkit-box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); + box-shadow: 0px 42px 29px -31px rgba(0, 0, 0, 0.05); } + .game-schedule .sport-team .logo { + width: 100px; + height: 100px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; + -webkit-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + -moz-box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); + box-shadow: 0px 24px 36px -11px rgba(0, 0, 0, 0.09); } + .game-schedule .sport-team .desc { + width: calc(100% - 100px); } + .game-schedule .sport-team .team-name { + font-size: 22px; + font-weight: 900; + margin-bottom: 0; } + .game-schedule .sport-team .venue { + color: rgba(0, 0, 0, 0.7); } + .game-schedule .sport-team .date { + color: black; } + +.table thead tr { + background: #00bd56; } + +.table thead th { + color: #000000; + border: none; } + +.table tbody { + border: none; } + .table tbody tr { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + background: #fafafa; } + .table tbody tr td { + border: none; + text-transform: uppercase; + color: #000000; + font-family: "Oswald", Arial, sans-serif; } + +.ftco-team { + position: relative; + z-index: 0; } + .ftco-team:after { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #171b21; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + right: -1000%; + z-index: 0; + opacity: .5; + z-index: -1; } + .ftco-team:before { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #207dff; + position: absolute; + right: 50%; + top: 0; + bottom: 0; + left: -1000%; + z-index: 0; + opacity: .8; } + @media (max-width: 1199.98px) { + .ftco-team { + background-position: center center !important; } } + .ftco-team .owl-carousel { + margin: 0; } + .ftco-team .owl-carousel .owl-stage-outer { + padding-top: 0; + padding-bottom: 2em; + position: relative; } + .ftco-team .owl-nav { + position: absolute; + bottom: 60px !important; + left: 0; + right: 0; + margin: 0 auto; } + @media (max-width: 991.98px) { + .ftco-team .owl-nav { + display: none; } } + .ftco-team .owl-nav .owl-prev, + .ftco-team .owl-nav .owl-next { + position: absolute; + width: 60px; + height: 60px; + background: #fff !important; + -moz-transition: all 0.7s ease; + -o-transition: all 0.7s ease; + -webkit-transition: all 0.7s ease; + -ms-transition: all 0.7s ease; + transition: all 0.7s ease; + opacity: 1; } + .ftco-team .owl-nav .owl-prev span:before, + .ftco-team .owl-nav .owl-next span:before { + font-size: 20px; + margin-top: 7px; + color: #000000; } + .ftco-team .owl-nav .owl-prev { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .ftco-team .owl-nav .owl-prev { + right: 61px !important; } } + .ftco-team .owl-nav .owl-prev:hover, .ftco-team .owl-nav .owl-prev:focus { + background: #000000 !important; + outline: none !important; } + .ftco-team .owl-nav .owl-prev:hover span:before, .ftco-team .owl-nav .owl-prev:focus span:before { + font-size: 20px; + margin-top: 7px; + color: #fff; } + .ftco-team .owl-nav .owl-next { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .ftco-team .owl-nav .owl-next { + right: 0 !important; } } + .ftco-team .owl-nav .owl-next:hover, .ftco-team .owl-nav .owl-next:focus { + background: #000000 !important; + outline: none !important; } + .ftco-team .owl-nav .owl-next:hover span:before, .ftco-team .owl-nav .owl-next:focus span:before { + font-size: 24px; + margin-top: 7px; + color: #fff; } + .ftco-team .owl-dots { + text-align: center; } + .ftco-team .owl-dots .owl-dot { + width: 10px; + height: 10px; + margin: 5px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); } + .ftco-team .owl-dots .owl-dot.active { + background: #00bd56; } + +.team-wrap .img { + width: 120px; + height: 120px; + margin: 0 auto; + margin-bottom: 10px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + +.team-wrap .text h3 { + color: #fff; + font-size: 22px; + font-weight: 800; } + +.team-wrap .text .position { + color: rgba(255, 255, 255, 0.8); } + +.top-score .img { + width: 120px; + height: 120px; + margin: 0 auto; + margin-bottom: 10px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + +.top-score .text h3 { + color: #000000; + font-size: 22px; + font-weight: 800; } + +.top-score .text .score { + color: rgba(0, 0, 0, 0.8); } + +.intro h1 { + font-size: 80px; + text-transform: uppercase; + font-weight: 700; } + @media (max-width: 991.98px) { + .intro h1 { + font-size: 40px; } } + +.ftco-about { + position: relative; + z-index: 0; } + @media (max-width: 1199.98px) { + .ftco-about { + background-position: center center !important; } } + .ftco-about:after { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #207dff; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + right: -1000%; + z-index: 0; + opacity: .8; + z-index: -1; } + .ftco-about:before { + content: ''; + -ms-transform: skewX(-40deg); + transform: skewX(-40deg); + -webkit-transform: skewX(-40deg); + background: #00bd56; + position: absolute; + right: 50%; + top: 0; + bottom: 0; + left: -1000%; + z-index: 0; + opacity: .8; } + .ftco-about .img { + display: block; + width: 100%; + position: relative; + webkit-box-shadow: -25px -25px 41px -38px rgba(0, 0, 0, 0.59); + -moz-box-shadow: -25px -25px 41px -38px rgba(0, 0, 0, 0.59); + -webkit-box-shadow: -25px -25px 41px -38px rgba(0, 0, 0, 0.59); + box-shadow: -25px -25px 41px -38px rgba(0, 0, 0, 0.59); } + @media (min-width: 1200px) { + .ftco-about .img { + margin: -30px 0; } } + +.services { + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -webkit-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + transition: all 0.3s ease; } + .services .icon { + line-height: 1.3; + position: relative; + width: 75px; } + .services .icon span { + font-size: 60px; + color: #00bd56; + background: #6b75ff; + background: -moz-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -webkit-gradient(left bottom, right top, color-stop(0%, #6b75ff), color-stop(0%, #6b75ff), color-stop(100%, #59b7ff)); + background: -webkit-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -o-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -ms-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6b75ff', endColorstr='#59b7ff', GradientType=1 ); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; } + .services .media-body { + width: calc(100% - 75px); } + .services .media-body h3 { + font-size: 22px; + font-weight: 700; + text-transform: uppercase; } + +.aside-stretch { + background: #00f06d; } + .aside-stretch:after { + position: absolute; + top: 0; + right: 100%; + bottom: 0; + content: ''; + width: 360%; + background: #00f06d; } + @media (max-width: 767.98px) { + .aside-stretch { + background: transparent; } + .aside-stretch:after { + background: transparent; + display: none; } } + +.form-control { + height: 52px !important; + background: #fff !important; + color: #000000 !important; + font-size: 18px; + border-radius: 5px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .form-control:focus, .form-control:active { + border-color: #000000; } + +textarea.form-control { + height: inherit !important; } + +.ftco-vh-100 { + height: 100vh; } + @media (max-width: 1199.98px) { + .ftco-vh-100 { + height: inherit; + padding-top: 5em; + padding-bottom: 5em; } } + +.ftco-animate { + opacity: 0; + visibility: hidden; } + +.bg-primary { + background: #00bd56 !important; } + +.media-custom { + background: #fff; } + .media-custom .media-body .name { + font-weight: 500; + font-size: 16px; + margin-bottom: 0; + color: #00bd56; } + .media-custom .media-body .position { + font-size: 13px; + color: #d9d9d9; } + +.about-author .desc h3 { + font-size: 24px; } + +.ftco-section { + padding: 6em 0; + position: relative; } + @media (max-width: 767.98px) { + .ftco-section { + padding: 6em 0; } } + +.ftco-no-pt { + padding-top: 0 !important; } + +.ftco-no-pb { + padding-bottom: 0 !important; } + +.ftco-bg-dark { + background: #3c312e; } + +.ftco-subscribe { + width: 100%; + display: block; + z-index: 0; + padding: 7em 0; + position: relative; + z-index: 0; } + +.subscribe-form .form-group { + position: relative; + margin-bottom: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + border-radius: 0; } + .subscribe-form .form-group input { + height: 70px !important; + border: 1px solid transparent; + color: rgba(0, 0, 0, 0.7) !important; + font-size: 20px; + background: white !important; + border-radius: 5px 0px 0px 5px; + padding: 0 20px; } + .subscribe-form .form-group input::-webkit-input-placeholder { + /* Chrome/Opera/Safari */ + color: rgba(0, 0, 0, 0.7) !important; } + .subscribe-form .form-group input::-moz-placeholder { + /* Firefox 19+ */ + color: rgba(0, 0, 0, 0.7) !important; } + .subscribe-form .form-group input:-ms-input-placeholder { + /* IE 10+ */ + color: rgba(0, 0, 0, 0.7) !important; } + .subscribe-form .form-group input:-moz-placeholder { + /* Firefox 18- */ + color: rgba(0, 0, 0, 0.7) !important; } + .subscribe-form .form-group .submit { + color: #000000 !important; + background: #00bd56 !important; + border-radius: 0px 5px 5px 0px; + font-size: 16px; } + .subscribe-form .form-group .submit:hover { + cursor: pointer; } + +.subscribe-form .icon { + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + color: rgba(255, 255, 255, 0.8); } + +.ftco-footer { + font-size: 16px; + background: #000000; + padding: 7em 0; + z-index: 0; } + .ftco-footer .ftco-footer-logo { + text-transform: uppercase; + letter-spacing: .1em; } + .ftco-footer .ftco-footer-widget h2 { + font-weight: normal; + color: #fff; + margin-bottom: 40px; + font-size: 22px; + font-weight: 900; } + .ftco-footer .ftco-footer-widget ul li a { + color: rgba(255, 255, 255, 0.4); } + .ftco-footer .ftco-footer-widget ul li a span { + color: #fff; } + .ftco-footer .ftco-footer-widget .btn-primary { + background: #fff !important; + border: 2px solid #fff !important; } + .ftco-footer .ftco-footer-widget .btn-primary:hover { + background: #fff; + border: 2px solid #fff !important; } + .ftco-footer p { + color: rgba(255, 255, 255, 0.7); } + .ftco-footer a { + color: rgba(255, 255, 255, 0.7); } + .ftco-footer a:hover { + color: #fff; } + .ftco-footer .ftco-heading-2 { + font-size: 17px; + font-weight: 400; + color: #000000; } + +.ftco-footer-social li { + list-style: none; + margin: 0 10px 0 0; + display: inline-block; } + .ftco-footer-social li a { + height: 50px; + width: 50px; + display: block; + float: left; + background: rgba(255, 255, 255, 0.1); + background: #00bd56; + border-radius: 50%; + position: relative; } + .ftco-footer-social li a span { + position: absolute; + font-size: 26px; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: #000000 !important; } + .ftco-footer-social li a:hover { + color: #fff; } + +.footer-small-nav > li { + display: inline-block; } + .footer-small-nav > li a { + margin: 0 10px 10px 0; } + .footer-small-nav > li a:hover, .footer-small-nav > li a:focus { + color: #00bd56; } + +.media .ftco-icon { + width: 100px; } + .media .ftco-icon span { + color: #00bd56; } + +.ftco-media { + background: #fff; + border-radius: 0px; } + .ftco-media .heading { + font-weight: normal; } + .ftco-media.ftco-media-shadow { + padding: 40px; + background: #fff; + -webkit-box-shadow: 0 10px 50px -15px rgba(0, 0, 0, 0.3); + box-shadow: 0 10px 50px -15px rgba(0, 0, 0, 0.3); + -webkit-transition: .2s all ease; + -o-transition: .2s all ease; + transition: .2s all ease; + position: relative; + top: 0; } + .ftco-media.ftco-media-shadow:hover, .ftco-media.ftco-media-shadow:focus { + top: -3px; + -webkit-box-shadow: 0 10px 70px -15px rgba(0, 0, 0, 0.3); + box-shadow: 0 10px 70px -15px rgba(0, 0, 0, 0.3); } + .ftco-media .icon { + font-size: 50px; + display: block; + color: #00bd56; } + .ftco-media.text-center .ftco-icon { + margin: 0 auto; } + +.ftco-overflow-hidden { + overflow: hidden; } + +.padding-top-bottom { + padding-top: 120px; + padding-bottom: 120px; } + +#map { + width: 100%; } + @media (max-width: 991.98px) { + #map { + height: 300px; } } + +@-webkit-keyframes pulse { + 0% { + -webkit-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4); } + 70% { + -webkit-box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); } + 100% { + -webkit-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); } } + +@keyframes pulse { + 0% { + -moz-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4); + -webkit-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4); + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4); } + 70% { + -moz-box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); + -webkit-box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); + box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); } + 100% { + -moz-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); + -webkit-box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); } } + +.heading-section .subheading { + font-size: 16px; + display: block; + margin-bottom: 0px; + text-transform: uppercase; + letter-spacing: 1px; } + +.heading-section h2 { + font-size: 50px; + font-weight: 700; + text-transform: uppercase; } + .heading-section h2 span { + font-weight: 700; + color: #00bd56; } + @media (max-width: 767.98px) { + .heading-section h2 { + font-size: 28px; } } + +.heading-section.heading-section-white .subheading { + color: rgba(255, 255, 255, 0.9); } + +.heading-section.heading-section-white h2 { + font-size: 50px; + color: #fff; } + .heading-section.heading-section-white h2 span { + color: #00bd56; } + +.heading-section.heading-section-white p { + color: rgba(255, 255, 255, 0.9); } + +.img, +.blog-img, +.user-img { + background-size: cover; + background-repeat: no-repeat; + background-position: center center; } + +.testimony-section { + position: relative; } + .testimony-section .overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ''; + opacity: 0; + background: #171b21; } + .testimony-section .owl-carousel { + margin: 0; } + .testimony-section .owl-carousel .owl-stage-outer { + padding-top: 0; + padding-bottom: 0; + position: relative; } + .testimony-section .owl-nav { + position: absolute; + bottom: 60px !important; + left: 0; + right: 0; + margin: 0 auto; } + @media (max-width: 991.98px) { + .testimony-section .owl-nav { + display: none; } } + .testimony-section .owl-nav .owl-prev, + .testimony-section .owl-nav .owl-next { + position: absolute; + width: 60px; + height: 60px; + background: #fff !important; + -moz-transition: all 0.7s ease; + -o-transition: all 0.7s ease; + -webkit-transition: all 0.7s ease; + -ms-transition: all 0.7s ease; + transition: all 0.7s ease; + opacity: 1; } + .testimony-section .owl-nav .owl-prev span:before, + .testimony-section .owl-nav .owl-next span:before { + font-size: 20px; + margin-top: 7px; + color: #000000; } + .testimony-section .owl-nav .owl-prev { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .testimony-section .owl-nav .owl-prev { + right: 61px !important; } } + .testimony-section .owl-nav .owl-prev:hover, .testimony-section .owl-nav .owl-prev:focus { + background: #000000 !important; + outline: none !important; } + .testimony-section .owl-nav .owl-prev:hover span:before, .testimony-section .owl-nav .owl-prev:focus span:before { + font-size: 20px; + margin-top: 7px; + color: #fff; } + .testimony-section .owl-nav .owl-next { + top: 0 !important; + right: 0 !important; } + @media (min-width: 992px) { + .testimony-section .owl-nav .owl-next { + right: 0 !important; } } + .testimony-section .owl-nav .owl-next:hover, .testimony-section .owl-nav .owl-next:focus { + background: #000000 !important; + outline: none !important; } + .testimony-section .owl-nav .owl-next:hover span:before, .testimony-section .owl-nav .owl-next:focus span:before { + font-size: 24px; + margin-top: 7px; + color: #fff; } + .testimony-section .owl-dots { + text-align: center; } + .testimony-section .owl-dots .owl-dot { + width: 10px; + height: 10px; + margin: 5px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); } + .testimony-section .owl-dots .owl-dot.active { + background: #fff; } + +.testimony-wrap { + display: block; + position: relative; + color: rgba(255, 255, 255, 0.9); } + .testimony-wrap .user-img { + width: 130px; + height: 130px; + border-radius: 50%; + position: relative; + margin: 0 auto; + background-position: top center; } + .testimony-wrap .user-img .quote { + position: absolute; + bottom: -10px; + right: 0; + width: 40px; + height: 40px; + background: #fff; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + .testimony-wrap .user-img .quote i { + color: #00bd56; } + .testimony-wrap p { + font-size: 20px; } + .testimony-wrap .name { + font-weight: 700; + font-size: 20px; + margin-bottom: 0; + color: #fff; + font-family: "Oswald", Arial, sans-serif; + text-transform: uppercase; } + .testimony-wrap .position { + font-size: 14px; + color: rgba(255, 255, 255, 0.6); + text-transform: uppercase; } + +@media (max-width: 767.98px) { + .about-image { + height: 400px; + margin-bottom: 30px; } } + +.image-popup { + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-with-zoom .mfp-container, +.mfp-with-zoom.mfp-bg { + opacity: 0; + -webkit-backface-visibility: hidden; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; } + +.mfp-with-zoom.mfp-ready .mfp-container { + opacity: 1; } + +.mfp-with-zoom.mfp-ready.mfp-bg { + opacity: 0.8; } + +.mfp-with-zoom.mfp-removing .mfp-container, +.mfp-with-zoom.mfp-removing.mfp-bg { + opacity: 0; } + +#section-counter { + position: relative; + z-index: 0; } + +@media (max-width: 1199.98px) { + .ftco-counter { + background-position: center center !important; } } + +.ftco-counter .img { + display: block; + width: 100%; } + @media (max-width: 767.98px) { + .ftco-counter .img { + height: 400px; + background-position: top center !important; } } + +.ftco-counter .text strong.number { + font-weight: 300; + font-size: 60px; + color: #000000; } + +.ftco-counter .text span { + display: block; + font-size: 14px; + color: rgba(0, 0, 0, 0.5); + margin-bottom: 10px; + font-weight: 700; + text-transform: uppercase; } + +.ftco-counter .icon { + width: 70px; + height: 70px; + margin: 0 auto; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + .ftco-counter .icon span { + color: #fff; + font-size: 48px; + background: #6b75ff; + background: -moz-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -webkit-gradient(left bottom, right top, color-stop(0%, #6b75ff), color-stop(0%, #6b75ff), color-stop(100%, #59b7ff)); + background: -webkit-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -o-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: -ms-linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + background: linear-gradient(45deg, #6b75ff 0%, #6b75ff 0%, #59b7ff 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6b75ff', endColorstr='#59b7ff', GradientType=1 ); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; } + +@media (max-width: 767.98px) { + .ftco-counter .counter-wrap { + margin-bottom: 0px; } } + +.block-20 { + overflow: hidden; + background-size: cover; + background-repeat: no-repeat; + background-position: center center; + position: relative; + display: block; + width: 100%; + height: 270px; } + .block-20:after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ''; + opacity: .3; + background: rgba(0, 0, 0, 0); + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 17%, rgba(0, 0, 0, 0) 27%, black 100%); + background: -webkit-gradient(left top, left bottom, color-stop(17%, rgba(0, 0, 0, 0)), color-stop(27%, rgba(0, 0, 0, 0)), color-stop(100%, black)); + background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 17%, rgba(0, 0, 0, 0) 27%, black 100%); + background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 17%, rgba(0, 0, 0, 0) 27%, black 100%); + background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 17%, rgba(0, 0, 0, 0) 27%, black 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(17%, rgba(0, 0, 0, 0)), color-stop(27%, rgba(0, 0, 0, 0)), to(black)); + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 17%, rgba(0, 0, 0, 0) 27%, black 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#000000', GradientType=0 ); } + +.blog-entry { + overflow: hidden; } + @media (min-width: 768px) { + .blog-entry { + margin-bottom: 30px; } } + @media (max-width: 767.98px) { + .blog-entry { + margin-bottom: 30px; } } + .blog-entry .text { + position: relative; + width: 100%; + margin: 0 auto; } + .blog-entry .text .heading { + font-size: 20px; + margin-bottom: 16px; + font-weight: 600; } + .blog-entry .text .heading a { + color: #000000; } + .blog-entry .text .heading a:hover, .blog-entry .text .heading a:focus, .blog-entry .text .heading a:active { + color: #00bd56; } + .blog-entry .meta > div { + display: inline-block; + margin-right: 5px; + margin-bottom: 0; + font-size: 14px; } + .blog-entry .meta > div a { + color: gray; + font-size: 15px; } + .blog-entry .meta > div a:hover { + color: #666666; } + .blog-entry .topp { + position: absolute; + top: -74px; + left: 0; + background: #fff; } + .blog-entry span.day { + font-size: 50px; + font-weight: 300; + color: #000000; + line-height: 1; } + .blog-entry span.yr, .blog-entry span.mos { + display: block; + font-size: 13px; + line-height: 1.4; + color: rgba(0, 0, 0, 0.8); } + +.block-23 ul { + padding: 0; } + .block-23 ul li, .block-23 ul li > a { + display: table; + line-height: 1.5; + margin-bottom: 15px; } + .block-23 ul li span { + color: rgba(255, 255, 255, 0.7); } + .block-23 ul li .icon, .block-23 ul li .text { + display: table-cell; + vertical-align: top; } + .block-23 ul li .icon { + width: 40px; + font-size: 18px; + padding-top: 2px; + color: white; } + +.block-6 .media-body p { + font-size: 16px; } + +.block-27 ul { + padding: 0; + margin: 0; } + .block-27 ul li { + display: inline-block; + margin-bottom: 4px; + font-weight: 400; } + .block-27 ul li a, .block-27 ul li span { + color: #207dff; + text-align: center; + display: inline-block; + width: 40px; + height: 40px; + line-height: 40px; + border-radius: 50%; + border: 1px solid #cccccc; } + .block-27 ul li.active a, .block-27 ul li.active span { + background: #207dff; + color: #fff; + border: 1px solid transparent; } + +.contact-section .contact-info p a { + color: #1a1a1a; } + +.contact-section .box { + width: 100%; + display: block; } + .contact-section .box .icon { + width: 100px; + height: 100px; + margin: 0 auto; + margin-bottom: 2em; + background: rgba(0, 0, 0, 0.05); + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + border-radius: 50%; } + .contact-section .box .icon span { + color: #000000; + font-size: 30px; } + .contact-section .box h3 { + font-size: 18px; + font-weight: 700; } + +.contact-section .contact-form { + width: 100%; } + +.block-9 .form-control { + outline: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + font-size: 15px; } + +.block-21 .blog-img { + display: block; + height: 80px; + width: 80px; } + +.block-21 .text { + width: calc(100% - 100px); } + .block-21 .text .heading { + font-size: 18px; + font-weight: 300; } + .block-21 .text .heading a { + color: #000000; } + .block-21 .text .heading a:hover, .block-21 .text .heading a:active, .block-21 .text .heading a:focus { + color: #00bd56; } + .block-21 .text .meta > div { + display: inline-block; + font-size: 14px; + margin-right: 5px; } + .block-21 .text .meta > div a { + color: gray; } + +/* Blog*/ +.post-info { + font-size: 12px; + text-transform: uppercase; + font-weight: bold; + color: #fff; + letter-spacing: .1em; } + .post-info > div { + display: inline-block; } + .post-info > div .seperator { + display: inline-block; + margin: 0 10px; + opacity: .5; } + +.tagcloud a { + text-transform: uppercase; + display: inline-block; + padding: 4px 10px; + margin-bottom: 7px; + margin-right: 4px; + border-radius: 4px; + color: #000000; + border: 1px solid #ccc; + font-size: 11px; } + .tagcloud a:hover { + border: 1px solid #000; } + +.comment-form-wrap { + clear: both; } + +.comment-list { + padding: 0; + margin: 0; } + .comment-list .children { + padding: 50px 0 0 40px; + margin: 0; + float: left; + width: 100%; } + .comment-list li { + padding: 0; + margin: 0 0 30px 0; + float: left; + width: 100%; + clear: both; + list-style: none; } + .comment-list li .vcard { + width: 80px; + float: left; } + .comment-list li .vcard img { + width: 50px; + border-radius: 50%; } + .comment-list li .comment-body { + float: right; + width: calc(100% - 80px); } + .comment-list li .comment-body h3 { + font-size: 20px; } + .comment-list li .comment-body .meta { + text-transform: uppercase; + font-size: 13px; + letter-spacing: .1em; + color: #ccc; } + .comment-list li .comment-body .reply { + padding: 5px 10px; + background: #e6e6e6; + color: #000000; + text-transform: uppercase; + font-size: 11px; + letter-spacing: .1em; + font-weight: 400; + border-radius: 4px; } + .comment-list li .comment-body .reply:hover { + color: #fff; + background: black; } + +.search-form { + background: #f2f2f2; + padding: 10px; } + .search-form .form-group { + position: relative; } + .search-form .form-group input { + padding-right: 50px; + font-size: 14px; } + .search-form .icon { + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.sidebar { + width: 100%; } + .sidebar h2 { + font-size: 24px; + font-weight: 900; } + .sidebar .heading-name { + font-size: 20px; + font-weight: 700; } + +.sidebar-box { + margin-bottom: 30px; + padding: 25px; + font-size: 15px; + width: 100%; + background: #fff; } + .sidebar-box h3 { + font-size: 18px; + margin-bottom: 15px; } + +.categories li, .sidelink li { + position: relative; + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px solid #dee2e6; + list-style: none; } + .categories li:last-child, .sidelink li:last-child { + margin-bottom: 0; + border-bottom: none; + padding-bottom: 0; } + .categories li a, .sidelink li a { + display: block; + color: #1a1a1a; } + .categories li a span, .sidelink li a span { + position: absolute; + right: 0; + top: 0; + color: #ccc; } + .categories li.active a, .sidelink li.active a { + color: #000000; + font-style: italic; } + +#ftco-loader { + position: fixed; + width: 96px; + height: 96px; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + background-color: rgba(255, 255, 255, 0.9); + -webkit-box-shadow: 0px 24px 64px rgba(0, 0, 0, 0.24); + box-shadow: 0px 24px 64px rgba(0, 0, 0, 0.24); + border-radius: 16px; + opacity: 0; + visibility: hidden; + -webkit-transition: opacity .2s ease-out, visibility 0s linear .2s; + -o-transition: opacity .2s ease-out, visibility 0s linear .2s; + transition: opacity .2s ease-out, visibility 0s linear .2s; + z-index: 1000; } + +#ftco-loader.fullscreen { + padding: 0; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transform: none; + -ms-transform: none; + transform: none; + background-color: #fff; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; } + +#ftco-loader.show { + -webkit-transition: opacity .4s ease-out, visibility 0s linear 0s; + -o-transition: opacity .4s ease-out, visibility 0s linear 0s; + transition: opacity .4s ease-out, visibility 0s linear 0s; + visibility: visible; + opacity: 1; } + +#ftco-loader .circular { + -webkit-animation: loader-rotate 2s linear infinite; + animation: loader-rotate 2s linear infinite; + position: absolute; + left: calc(50% - 24px); + top: calc(50% - 24px); + display: block; + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); } + +#ftco-loader .path { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + -webkit-animation: loader-dash 1.5s ease-in-out infinite; + animation: loader-dash 1.5s ease-in-out infinite; + stroke-linecap: round; } + +@-webkit-keyframes loader-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes loader-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes loader-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -35px; } + 100% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -136px; } } + +@keyframes loader-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -35px; } + 100% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -136px; } } diff --git a/public/fonts/.DS_Store b/public/fonts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..011eea37a726e5d2e0e1c2972f9b151bcdd1f4b9 GIT binary patch literal 6148 zcmeHKPm9w)6o0c@-E4~xbw$BTF5)h%uvONsw_2;>__lc-~4G!n=E@-L}gx>`Mu2i-pqS1$xH?SNUi6U0Zafeuy8CC zvC0wN&r3!YRLdzuBF3Q50tVsjfVDDg-Jmm|Gw`=%fPcFNJca-qNFeq7x&d>sk1q_j zu&iPs<1yAbe77G*ivQD%0vab98{f#nV&T~FC1bf*;+J`{_|R^%zMVKpFRnS=2jY%; zzN_?xle8!LJ;s8m?zr33?>Ehr8!Sv58v5Oo>Fy2e7HFPmE=LHO;ewLAi2y-MU&Cu3Lj^n^#cXstkwbJHt4?wt4-|{b=~~ z`HPpYUcY(!;iHHg2(EKNPAik?3_r*73@7FLiSN&Z?>U_5Q#p{6<9`XgiNMDQE=^;= z?`|%NuX9ld7mm16@3K)k;&JtGIs-Zb|9%Ge`e0$iea7(|+5yQO$lg(Hd59Edu65H&MVCln%P$MG#e2U3-&Yn=g| zf!Pc!%3G7~|2Gdl|IZrfJDmZYf&VH4q)@l(H4I7Zt(oBXUTa}_goO*|jU);atkiZa h6uuRo!y*LxEUq9{6^`tM8-iR?|U-RboX6C&&o!{=v>;M2J3fUe24FIB~ z5+e;%{6S>D)J;;OTIvYV&ryIpoCFURNJ9x32pRa_8IWtY0ZcF;1G7-Ieg`d)F)d+I zzuX)KNRO`gLKbZnkOKiWcpLmaNk39tS&?pQerD0lt9-xAyv1FwyZbZN)JE!d)JJ0t zjq;~8H{40hh+@h!yn>rBoJqgNv&>X>((q;~_J|PHs%@B~oE6hrYrn8PgWJrh3Y{9` zc2*PwAPk%*gSFZ88FVFi}SSmljp<`p0K zt-{AwO{-#L=dRsNTJxTk*0%PJz5DhbIC!YDQ%`FxrjePQcH~_8g(aMXRbb;hBkUBv z&&EBr;7KE`?b+Zr%(8danno7$2hkev{oC+4K5 z%tjMYPsAT7l{Yfnp6tbpo=;;8Bq;a8%JzmvskPvenYuM z;W%7^>yUyOD8dtX3UA>(EW;Q04nHx1?RW%_;~Bhw19%N@;cd*Ig>xuy0ZaG*9|n19 zDsRBy%J2c=Bf@&HfYWMYw0c}%>(>tslSlPBTc2QSYwBM{8@D!Xm@Q-=WMCUGAomBI zRAO9VIY58wpu)cb5Jsrk7qaE&f{f7>#ub(Wq#hCsLJ5OVR96fP!l_+XesP860E2Kq zb@@OwGO8O2`lC~R-FF9!2N;$i10e(J8K@1anmqrn&>H^B{eOK>SPK~l8Q4|~VB~V@ za)PF$&elznlV`0?dXH3!^eYGGhftx8W8aWR@m^A2s85#$VO(K3Kx!cgKLmUl!Xjkg HpEB?pOk4qK literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/backup.txt b/public/fonts/flaticon/backup.txt new file mode 100644 index 0000000..a7a9e5d --- /dev/null +++ b/public/fonts/flaticon/backup.txt @@ -0,0 +1 @@ +eyIxIjp7IklEIjoxLCJuYW1lIjoiTXkgaWNvbnMgY29sbGVjdGlvbiIsImJvb2ttYXJrX2lkIjoiNjVwcG04eDViMTIwMDAwMCIsImNyZWF0ZWQiOm51bGwsInVwZGF0ZWQiOjE1NTkwNDYxNDksImFjdGl2ZSI6MSwic291cmNlIjoibG9jYWwiLCJvcmRlciI6MCwiY29sb3IiOiIwMDAwMDAiLCJzdGF0dXMiOjF9LCI2NXBwbTh4NWIxMjAwMDAwIjpbeyJpZCI6MTc4NDk0MywidGVhbSI6MCwibmFtZSI6ImhlbG1ldCIsImNvbG9yIjoiIzAwMDAwMCIsInByZW1pdW0iOjAsInNvcnQiOjJ9LHsiaWQiOjE3ODQ5MzksInRlYW0iOjAsIm5hbWUiOiJoZWxtZXQiLCJjb2xvciI6IiMwMDAwMDAiLCJwcmVtaXVtIjowLCJzb3J0IjozfSx7ImlkIjoxNzg0OTQyLCJ0ZWFtIjowLCJuYW1lIjoiYmFzZWJhbGwtYmF0IiwiY29sb3IiOiIjMDAwMDAwIiwicHJlbWl1bSI6MCwic29ydCI6NH0seyJpZCI6MTc4NDk0MSwidGVhbSI6MCwibmFtZSI6ImJhc2ViYWxsLWJhbGwiLCJjb2xvciI6IiMwMDAwMDAiLCJwcmVtaXVtIjowLCJzb3J0IjoxfV19 \ No newline at end of file diff --git a/public/fonts/flaticon/font/.DS_Store b/public/fonts/flaticon/font/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d7c84326d548072b604f540ceed7008989b8c2e5 GIT binary patch literal 6148 zcmeHKK~BRk5S%SN6wy{aa`cfC61*U)N+quF0HB2cQXq#0xaJu=iU;r;n6<4ciBoYy z2<=MiacoaEJC3q30GYqso&YldBf8>XpG}YHyn14TIHHr{?@{3qYm|7#akAP5{-Of9 zcT-#;M}ZqO_iw|U++cHFlrEJ@MX{Vcuo>9GlGPZYECK zQAM+Ca(QWH3YY?>z>f;BW~+@30$OVdm;$E2RssD!IJ#mMu@2}z9c=s&fH>r^H}>^6 zQ8_MR7O@V<8JYwtF;FEQF(lAA?&7*EVjVEhA@T4bF|x!HiumZfzw^r>SwL$|0aKu@ zz+SkVY5hOjeg1Eg?8+1{1^$%+GF)6P=1eKp)+9NtwT^yGSJQQMz%7LxUy8X_OYtGy a8^@h?h*`usAV+BSBj9DQ#uWHf1-=0VQib&Z literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/font/Flaticon.eot b/public/fonts/flaticon/font/Flaticon.eot new file mode 100644 index 0000000000000000000000000000000000000000..e4d38865dd2f4adf7b6537710ee56f497eb5ea54 GIT binary patch literal 3894 zcmds4U2GKB6~1SF?wy~Vnf;mF_2R$v?y`#wHtX5lSqKJ$3ra3PLBA}SlR{Ka5| zO_R22N~=hzM5OW%5#_B9=}RhAf`=wjtJZy~(wF8XmC_1TYMS<;Qq-V`R8A4rvm21#NBip1 zH`am-C-aFgvoXYIKa}9mB(ZaJ( zsGrbpfaOE3oV~F2qBhA=kl%s4X?bO-BmTxUjITgWU+BDei5;gK=m#DvUhG`xes=xC zZHy(F(EZ}l%Iey8F2D6U0{R5~7oyk@U*Ya+SHAAe++}ueRsN9v;1%>UNjEk&))k_4 zh(^3b zE3lUz-5Kbk2b%%H!s!F2*i}}%qxO7&Z+oQ;TK_3R`nk*#p1086?Ku$1y?=7o$u<;^ z+Yd=13^9#u0p*}_lVTPbAt)l<_=_jC@k9LKq$K0(C9mHdb;g_fq3-{Wi}p90=>3$W z>Z?D}UW&3I^Zy1dBC~=`-6Xbs=9bXd$H7gm-=4XpDqz`7RjPHVz9l%_o4JKlejGGX zja03XDyM$%!s*krc>gCUY5)yy4(vwkJ@$8+psm!PCe6@pIzaRE6dk5#X^BoD@wu$e z%cWYiRt@vHeAosZrLbLoK=O^SRW3DmQL|PqNy~PlS}R9mBqt(nmZ~+L_47FqnY5Z= zBgp4?ty(ULT)rLVJbFMHk(6x&{#Nn@h5%u@%ww)x>vP+QixH&}v>%1)?G` zpcJZvRWX~;B(!Q;xt;q;(P)A~ivW5vN(@*_mtqtQmlzTrb_U1jWQLnOpC*3-UbSRE za1oBmn4-C&u%cl4kr@aR+9+fMBe>G_Jn^FE8LPrJ3|m}912T>C z%a(nDi-D}2AkEPz;i#@cjzb>)B^`$wQh;+#f=J^qu;-p0ufo~!t>na|R=O$ec!Ce=5)&YVfYovHip`4K;B$ylmXbj=v!4OZ8Ln0?4SkFnjT0%=@ ziE{Vv$myS+lgz0LD#&=<3 zo&JSdUSNytS$x7**|*qB?ECD8><#uNyUE^Rzhu8+Y_mr$YF(By>af~sRw1ASYE6`& z;CU1%b}UMML__ILQ8R3#RH152DX3IlZKG~;cn_dnvvT8ywMMv`$~nK5ZM5>fX!ME= z`#LJ$wv=7Ux68vyLl!0KjBllEqaD^tk_Mr4g%49>5AC9s@N+@ftd^%st|DD&m3e*- z%~Cl_e@fc=Xm)vg#N?V<2@*y+IVjRJqucrpN?DuIp0AruGHvSQ`5CV?@GdEd-N%EY zdvuG>9Xon8(r7E>9T71U-MyaLl)zL-mBGqZ-oQ*kMiI zqN)>PhDG#Vy0BLnOdq_R%q5dHw}cjK+IH%N)ay=0wI9a>C$Mad&N_(!UyPldK&8tfTWA%eu+wghU*#(}+4Gz$C*Wne%9ZZa@gyBio3B54% z77N0D5;P32AzE^?g-oV6Vhhd-si9PU^&B;o!rVj_>Lx(K~&C zeT^N*u?=Ud&2l~Es^dle$db2uOD^BZy(LHH@k)}5jW<>auROUD;PC32q6dqQwQq0< z)C_}YwOY+71*?^%zuHM`$@hZCu{N3HAkXYVnC-Mx$hg_@$0mj{6~n05Y2|mi5c-N? zJf(j3_>nzaE>36voSOdkK)FyTPs+H2Wm`hWiW>=|QwbiVbq>~hdTAY=m>52n8S-4) zu!MK)+fh#U&z*RsJOG>ty_AHGg9d)oA93jQKfo3{komsCXC{MYBimN@Hd;*Kz66WD~6>dhZE&QB2h}%Xr`*VC<>k^ zIVNb*Fg0!3ytgT^%*}(kZR3bqX~GFxpLeT6aAH)9j1LXNbaN%0^4!6JMPb@WW7^0k z^~HqaXVWS2Gc;a1mcIYTZF$=?)xxMT4mjVi9m;B!i98Oa7BKlvv>j+CR7-QXrNfJa z0h%;T%~GdLstkIz&4)Hy)~wvq@}%<9hbKjx411?W!WlXn^NKtb#k|TYIMMcOG}ycy z^ExgiAI3aq2I=yYs+qkhVxC~5#=L@gM`B)OPp~lNHQ4+(=5oL!v|5T!V>E<)P z+*v!fw1V5z7p_uAx@WE|cW|egk1kSc5xtD6?E*K5E>uPK82B$j_Ot=p!6sP?Er>2) zI{~zEaczF(@|kWin5q{aEB2=b8|;{DO$PO8Y4ychUf+!U@2lN2-OH=zRxTFn_35d4 zyT6x@(Dg jy%DpM)5&_h`KaYu51DYokh4bX|NA# + + + + +Created by FontForge 20170731 at Tue May 28 12:22:31 2019 + By root + + + + + + + + + + + + + diff --git a/public/fonts/flaticon/font/Flaticon.ttf b/public/fonts/flaticon/font/Flaticon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e7b499059061dfa1010c3537d4a2dd15081c08d1 GIT binary patch literal 3716 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 PlH%{)s>vCi`3?4OUkSx| literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/font/Flaticon.woff b/public/fonts/flaticon/font/Flaticon.woff new file mode 100644 index 0000000000000000000000000000000000000000..b8c02bad010cfee032412b0a3678136f0df18ab7 GIT binary patch literal 2512 zcmZuzXH-+!8oeoo7K*e4qy(i1(gdV8(S#Pt(1J=yfJ8t8k&d(kkRl3!0fN{-MWhHe znkb?m1dt{m8I>nU5d@`59m%`QtoQGoyY{(j?{A;;oxAQ@=li0aa5w-0fP-%U5ZrqU zrS8rDZ{Tol4xsND7?TDelitNaIk{@-005)}bT{&itxQ3k{C|&qo9`dl1xwuu4`8#Ge>I1V~-A zu6C1K)D|6@?ooQHL+ODZ+S^<%m!}9VB@8slAc;YM$1ZXj_}5P~UE%^Ma$;>Hv9XXgOObs84KWYtUmsh2|8i2I-Lgm{U`F@- zn{*)Ygn(;*%Yzi2!E#&g&hh6pJ73a9!b(5dWn}cBY-$qBI$!e6feFBW3eIZ(K2Q;u zIIIMoxR=-69a}Wnz5nNTkCf8`dFqdNqSbR=q?q{swW2fRPnkhcD3nIi=idtL4V&QE zM&$n2_C<4|eO2{lSwoe+$J~=pv)nXiQ86o@fhGNNcR|{c~mv55I_3w5XDruVp^AW`P?#+9S zu=P`wT!Q0@|8p!zK)pCJEuQnCntUF|zny<{9Rt6i*%FvJP!RecQz8lV7f2)y=RJQO_UM!Dq1AKM>bFSV=lE8SPIMVN@ENfj1g07V)btoVfj9 z`b?Mil)?%+RxDN}R%;8hB@>$&&xpSkpB0}T&tkg66oSXPr6QAcs+Y>%G?e~kVj0l4 z!V*farb;3jNSrHwRL)j5sH(ZU`43Y=e)(aZ$|nxhUiWvN39_iN#;VO%aB$OZD*iii zR!22aK~!v}vDg9T$mIPmbx{Kxm-d6hosgk`V&P(v`_HHom&-6YhqK%G4(o27np&P- z7&&KOL-PzBuTm^#@ySffS@1r-WsmP3!`OKVDO0b7?CeTY0G`v}HXKv7U>IGtdYfG~~R<9k%)S=ac$JgpSs6cK8mo| zAQ~ik=<*D9p10n}F``_8axQ%ob=s`#qK{QlYuQw->vzg}%T9=e=0cd9NnEiKH-vT5 zv5CBs_i-q1vZJ6@ZeCC`=a(K%{&sfcg@lAl6r3n??0pt< zO5d7hzNKs>#w@=7x_!sXr+udKH}n35bL44Fx#{4NgI@}wn?9aYPBl#PiS%7bCY-mc ztL`0%AGSA?xjTcDi6+f? z^{Qj{>~e1qmg=_B1;WIO`X)MgA<^HRUOG) z{uZz%B=j9~fgcyAPb78njOL#fAY4SK_}UJl&qVh$AyrjX&ra}r(Q9hbduB(+`sqq? zHgvB-!{e>@Id94_^<7~qQM@tY&DBfl>%5|x`g|(wUSCtQAHS8fKc7jhT*#D_4cCgY zT~Sx{m6&vOn}0uB-AxCAhpI=w(G~ z#aFESu_D;YLf)v$Ng1oyf!l>VlQ<12l-tVTtq-Sl&Do1H{t~jgCKLOPb>IVS<;iNO zcfPs9kh5xN3mD`{eToM4_Z;`5kv?q@0EU(0KWiA04YF1 zPg{G~!A{-L!R}qx;J*D{2n6oARE1Gfg_0=((cyf*rj*WL@IC1k1qSbmD}tpJfPg&` cbZ<{0F#t%evL80GT>Gc_kOs`n5as~zUq10ZxBvhE literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/font/Flaticon.woff2 b/public/fonts/flaticon/font/Flaticon.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1b4db5b48f997382a530d1e9f89421299e699cd5 GIT binary patch literal 1952 zcmV;R2VeMiPew8T0RR9100*D|4FCWD01kuz00&F}0RR9100000000000000000000 z0000#Mn+Uk90p(jf=UPk5eN#Ae2ygx5&!`<0we<(1Rw>2JO^zXvkM~;=7dcg**_9v zW9~(rJ=BYM%(3mFQ^k;v>-o>qX8yS&FnO;ThGc*!OP1_9B)(=)g*669>rtsW)B4c% z+sLYseDnPMszw0hKd{BwTG|Id{h2Qq^+MLk1Dq`aNt8`hC7_VNj=)uTVqvRot?W?V zrqfsr^e-t0fNJrz3u_b;zE$_l=Wzi@^dWjRWPma>2H-k#-@i5D89;z6;t+>49C~mp zJ%SQqe-i0~)sYm_vAY$KAu(TqsFD`i38V-ir-ZdmA0!lNDXD^~z`W{D0+LijK6q+L z0H8)fL4O$$I1r>13aD!2YDK9jlMn~QJCwRN31M#)0mxvI^qbwJ2uG?uIwUJnonMk_ z8L#zwyOE;OUd9x1L#crg7r9X2A{&1TN?&Ex{?8X&FLZRB7YUnEh>KvGa*vp0a&Cs1 zg{s4Dgu6gzYjj1V)mKq!b@b$`og(uayqtCH@TZw&IH8E==sK(B62#Ue#!7m~DP2I! zwrwn|3~yNZ+}C)y*aAiCEGskluCd)t;Jp`(lw+&Gk1FdNR0f>TH^?kh9nU2lQ!u_y zY!8w3S2Xt1zittkWk9!3-q%c?H8cEGTDpmSw?N5emg^FkTZo}lrePy?&s-ij9H7}H%85(=jdO|ml8)gFIP}H>Nw6t?uOk(b16dR2RJYDQ(yl&vkuyB+Bc+m|zaIP>0-h6zkWuCa~ zh24U61>nb*I47gzls(gBRDuHdhFUhilJ}M(D;S2$4oYYtV<>&G>l)Id{nhdZh|HyF zD6=l;yfU^+!v`ScK{Ni<(iLklS892CgAxIg>$bozu9nssIgVHK%tcE#uB?4mrDbV@ z=jiX-ZZco(h4y!EHo9?$6+Y~m9xsQAUgUW5G1-i;hnxHZyNXK#rx$x|{c@$j%S7|8 zbgd@u$kXAN5!tD?sbzW34DSxwb%q@Kh3R%FbjbP6V#?OvRcY}e@nHUie9#`y#(Kt* zKk0qv&MC*4y6G36Sh0Kc*H*tvvZl4%%&>NAMi|NtYMB<{uIPf$QY$E$BGk4BL_XPn zm(Y?CKt5^pkdV1m(*&u$FQ-jgy?cyx9}Cx#tbcPumG>!qcKET}lY6GF+kfJfw%lXG z!I?~KFgp~>Cd9$yf)-UpzvdU!sJ0N6eFQO)jSa1qd_=L#OmMibUKY^y%87xecGs;e zUk5?1?;}V}v&v$SPY#o`mrjj(N| zLQod^WgihqU5L_o+F%wZ56|EhBTohtuBaK~4_S2&-lGTnAZP4JpDg=*n?7)LrQ)w; zzi0kSQ|5olAD4BR=?vc+3#2aW`(o}d0*4cd z+f*0mRoR|bKKD<(CaeCqf5qw_4>xEHpCsV}+ix6L-<|t<>X@-->pEra$5T!eD#wy3r`=@A8ffoi}gYldhy^bBPAGv0hE7 ztuJmp+B#XkT;Hw)ly=_Q^m%!ljmh&&-~B@IiAQce{B>hUry1P0Z_gg#*1CT`7k@DR zeEfy@r+CxV@|N+}aq<#xknx=l^z;VP>C~}QI{mrTOKZMYEPn6v?&l_c^Vw7-ZQKj$ z>QocV@5L~#t>M)k)E^EeDp{mfyV`T)wPsqTITY#lM?AYUDjBpLyQAdG(wT_^Qz}ZYdK$Sw!5r2p!V;Mmh77_JH zKmbxLK^jGXi{#3BcOyAl#T#o&5L_TA2!Q}Uk|3fTC6J)tT_8ilkBfa!$R83xQcVJA zAZQRlfQl%HS8#nlNYE~VjMxWn;e+-U;M$qN`zD9y=kO~4b2i%-I6OLje`3Ks_!lM( z*i7U;Q@)4kIU4IucG7chjaA3ToThtoqA$_i*|i0q^Hb_R_l%Fmx|5x;t+8flr?z`@ zqAzjPH~!u!3k~<&JJ|;5tQC_c+mi&`qpR-h>`HdZ6OYxzFY&U~8xM)fEp|2uLXl8FB7v2YxBDJpo literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/font/_flaticon.scss b/public/fonts/flaticon/font/_flaticon.scss new file mode 100644 index 0000000..f5340f4 --- /dev/null +++ b/public/fonts/flaticon/font/_flaticon.scss @@ -0,0 +1,48 @@ + /* + Flaticon icon font: Flaticon + Creation date: 28/05/2019 12:22 + */ + + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.eot"); + src: url("./Flaticon.eot?#iefix") format("embedded-opentype"), + url("./Flaticon.woff2") format("woff2"), + url("./Flaticon.woff") format("woff"), + url("./Flaticon.ttf") format("truetype"), + url("./Flaticon.svg#Flaticon") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.svg#Flaticon") format("svg"); + } +} + + .fi:before{ + display: inline-block; + font-family: "Flaticon"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-rendering: optimizeLegibility; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-smoothing: antialiased; + } + + .flaticon-baseball-ball:before { content: "\f100"; } +.flaticon-helmet:before { content: "\f101"; } +.flaticon-helmet-1:before { content: "\f102"; } +.flaticon-baseball-bat:before { content: "\f103"; } + + $font-Flaticon-baseball-ball: "\f100"; + $font-Flaticon-helmet: "\f101"; + $font-Flaticon-helmet-1: "\f102"; + $font-Flaticon-baseball-bat: "\f103"; \ No newline at end of file diff --git a/public/fonts/flaticon/font/flaticon.css b/public/fonts/flaticon/font/flaticon.css new file mode 100644 index 0000000..93a7e58 --- /dev/null +++ b/public/fonts/flaticon/font/flaticon.css @@ -0,0 +1,36 @@ + /* + Flaticon icon font: Flaticon + Creation date: 28/05/2019 12:22 + */ + +@font-face { + font-family: "Flaticon"; + src: url("./Flaticon.eot"); + src: url("./Flaticon.eot?#iefix") format("embedded-opentype"), + url("./Flaticon.woff2") format("woff2"), + url("./Flaticon.woff") format("woff"), + url("./Flaticon.ttf") format("truetype"), + url("./Flaticon.svg#Flaticon") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.svg#Flaticon") format("svg"); + } +} + +[class^="flaticon-"]:before, [class*=" flaticon-"]:before, +[class^="flaticon-"]:after, [class*=" flaticon-"]:after { + font-family: Flaticon; + font-size: 20px; +font-style: normal; +margin-left: 20px; +} + +.flaticon-baseball-ball:before { content: "\f100"; } +.flaticon-helmet:before { content: "\f101"; } +.flaticon-helmet-1:before { content: "\f102"; } +.flaticon-baseball-bat:before { content: "\f103"; } \ No newline at end of file diff --git a/public/fonts/flaticon/font/flaticon.html b/public/fonts/flaticon/font/flaticon.html new file mode 100644 index 0000000..5348079 --- /dev/null +++ b/public/fonts/flaticon/font/flaticon.html @@ -0,0 +1,475 @@ + + + + + + + + Flaticon WebFont + + + + + + + + +
          + + Font Demo +
          + + +
          + +

          Instructions

          + +
            +
          • + 1Copy the "Fonts" files and CSS files to your website CSS folder. +
          • +
          • + 2Add the CSS link to your website source code on header. + + <head> +
            ... +
            <link rel="stylesheet" type="text/css" href="your_website_domain/css_root/flaticon.css"> +
            ... +
            </head> +
            +
          • + +
          • +

            + 3Use the icon class on "display: inline" elements: +
            + Use example: <i class="flaticon-airplane49"></i> or <span class="flaticon-airplane49"></span> +

          • +
          + +
          + + + + +
          + + +
          +
          .flaticon-baseball-ball
          +
          Author: Freepik
          +
          + +
          +
          .flaticon-helmet
          +
          Author: Freepik
          +
          + +
          +
          .flaticon-helmet-1
          +
          Author: Freepik
          +
          + +
          +
          .flaticon-baseball-bat
          +
          Author: Freepik
          +
          + + +
          + + + +
          + +
          License and attribution:
          Font generated by flaticon.com.

          Under CC: Freepik

          +
          +
          Copy the Attribution License:
          + + + +
          + +
          + +
          Examples:
          + +
          +

          + + <i class="flaticon-baseball-ball"></i> +

          +
          + +
          +

          + + <i class="flaticon-helmet"></i> +

          +
          + +
          +

          + + <i class="flaticon-helmet-1"></i> +

          +
          + +
          +

          + + <i class="flaticon-baseball-bat"></i> +

          +
          + + + +
          + + + + + + + \ No newline at end of file diff --git a/public/fonts/flaticon/license/.DS_Store b/public/fonts/flaticon/license/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..79dbdcc43b5246a883cc551b27e21ddde07256f8 GIT binary patch literal 6148 zcmeHKJxc>o5S-N%fix*CUuh-y4;~>3*8TxWq97bb2=-U`yZmQ5`+*ov8^K0qVRzo! z+qri)#qBKsTfOWqfhB-B-4U-Irsmh(Cw5X9Bhq<~Cme8(3p`^tss29U+yw?aVoT;% z{=?0%-)@Heh86yJ*YxxEFs@`$Knh3!DIf);!0#0B-b8c9h8O{eGp571j#+}(JVES*VLuSIxJ4+ed=VZ3B}@c z=3A7*dZMBfkOIdFoaT1v{r`&o!~B0t(oPCUfq$id&DOW;6*VFU*Eaec-D}?H rZd?b2A=)u9+A%lYj?bbf>zc25y%&y&L1#YbMEwl7E;1?b*9v?9nYbIu literal 0 HcmV?d00001 diff --git a/public/fonts/flaticon/license/license.pdf b/public/fonts/flaticon/license/license.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bdeedb70141a16f53adfc34f68f3a7026524ccfc GIT binary patch literal 36473 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≫L^D~U%1ANk`f0LejUNs9 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

          ti1vqubZPT=j7c4CgmFmj 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 literal 0 HcmV?d00001 diff --git a/public/fonts/icomoon/icomoon.eot b/public/fonts/icomoon/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..e5ab0bea0bd92ce0cdad2e6944316f8a4c9c0a50 GIT binary patch literal 307332 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/fonts/icomoon/icomoon.ttf b/public/fonts/icomoon/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..26590309ab9ef41336682b46fcf25fa87ed695fb GIT binary patch literal 307168 zcmeFae|%fzeLs4hb8O4MZCTb2%eHJumSs!wFUgYPM6s2SI3Wp%39>LD1V{p8;YS0c zlyW<&@a4-WOBti7$1=t;+I9UZTGz3TFRxzi=5DO(7-PM?j=o*jF()C+4U9P+>w3HB zz2wMci?>N01i~n*L)qnC-A%L!2O3GJvH`)-@xy~l4Sq>eV^KQXZ4@;-Y1n! zZ@}-_`|o`8P(_=3R4V%h-QW4Zo%i4Mn_H^>6TerX4^JKX)We6-Pf05K!x=g+Da!w1 z&q?KyB>$%T7LNRy*s}Mf2&=+xWlzC%x=ZyU~u zt-`Nrlgi2mal>ZZVv;uFSm&HF*D~jx>zWJB4b6?r-8A>$+$(dh&%H7CS95Pt7nb*(! z#hJf8^VZqQv-M{kXM<-~o&BA&|Ksc*p8b=ve|q+NXWuzHclN`x|91AL@7BC)dDr%C z|GSBE;d8NbBj-lXji1|gZsOcc=k}a?=-iv<{_(x~_ss8gzSs5Mb?mhvz>t|M>iq^H0wooj*4Jd-H!V|3~w$ z&i~o`+w{)nV;qirM7hYQU#=}4K#nHv>i+dIy zSbTi(*~OO@zp?nIi*GN!vp9FDaOo066OjDVGv5UyO=oM) zHlB5!?K}I@+21|;2WS82>}zLd&b|pqo;iEr?7yG=*}HY`THkfNJ9w_|+%O=y=3MgJ z=5yQ6?L0Si?v8VRaqe#c$;S7Z0m*Ja@(lwd7ykL*=4{8RJK%s)FnJ^%aje>nfg^RLZ+2ax>1{D1tU@+ao^*DOd2jSKFDfgE=U&|FE}oAUKqTPyfAU$jthq_WG*~+;lzb+UYNP?{R?v! z78a$&#zpty;9_!dV)2f}LyMWk=N3;aesghV@%tJi*`>3cWgY+8@nOfmbo`{_y^eDo z?{=K+_-e;jI)1z3#g5$4JMjj(A6`Bihl_(b!Sdp>)U{%%!@1?)s_gUtRCJ zzV7;c*VkNMb=~0F=Gx-g?5cOwx@uh2uB!I0wtuDlMEmcw|91O}?Z4H2y!|)Zf1`c6 z{mbpg+P~EPeEYAr{chWdwwKy|yY0oc-)cMF_M2^AZadbtp>2IzQ=7T1p{=&9rmed5 zXzQn254S$-yw7>Sd5`mM=WWhgook&zXTaI(^f|knUZ=Z?b{#rxZR$Ix8HD!VV@mg(j_UEPRkjO`|u6h zr*64n`(Zaehxv6k9Cmv!-m>CzTcxy15P_F5xW zuPlv^jo#LZ&uycln~eL0-Whv3fKj9-waZ7x#I0kaDUH9OQi9_5HofwN;+*9*` z9pmG_XncB9?iY}q(45KHO9WG8jVXj}F` zhwH%j_>PJ3@dMN%_9q5Hq3v#WtE|40c+Y=(Y%E3%QKPZ3RpH1Er?YaWni9Pt0gmuT zngm=JpfW(KhGCY1%u~_Mnr&-XIJTAno1$0_D;%deHUoNY%rcE$!B{i&fJ~DknNFYQ zJNyuSv16X$h_{gI3WvMcsSu4LM}I=LjBV*J78>@b60i!(&@)W^%%Y!Z^pogH4f=^y z>NZFCKRKJrsZuVLlY?r2rPZvQE2JQD8s@x}M&>rVqZkXm%X=+nE`jW2vssoBJ*2;K zFs-K2=~S9Y!=6HpcLt}?ZdN*}Ov@*+2g$ZdcAK$2*?sCUHN)EgA_?5<+$JTA_t$Jl-BB$HG;nUmKN4J(tXq;tWzD-SD zb1>dq-Q{ds*KTtFIpguMu~>Y-@!XgKQV`IV4 z=qO7>kM5W_I-Ka}_D%Np4-F3Vr@DQe7vG6^H|?vav~60`;cK=gqCJznqD{MfA|4yl znrvK+=3VPufdPws)zDy1t%3GP^eO3riKRwHd>oETbjmtdqbh#-mxajnc;0)qxiB@ z@u8t@EiI;_M@=m)+lGeXgFQVXjSUTrBRxG6Tcg1GZQF(~Nl|EzSart!B(9-H%-n1P z#30}i)wf)G|J3sxR%^SAKOMu@(p5IB{><9mZe^9$jt=#nr5z{wMs$Bt>XQ1Ts3ci9 z{k{?$V{s66FsrqUF`ru2aAQ9v8BL5ULt`&VIs%53GkG9Kb zt;y`Ra=NPoR1hhUuq?KDPk6|yf@(&*IXPX(dcyLNR7!=&fd4ELF45I+wvbH?d1VM6 zCEi^rwMe~yliqeY#EE{ug%~&Hb1jQ6>qS<3NH$yNZVIlWSJ z_2hImt7fzEsX|Up6>`S08RTv+;CQuh$QdxV%nDt`DoCk0`pT&l#VUi`twB+0M5{Fs$`aCvua2_rRLQ< zj_7i&EV(49PmW(jKxA23i0KtN`u@z!`4xd#!cW4^)t_90v6#z0w(Jz9gg=vIq_bVdA7M#}L`vlIjR^8YG;3;BnU=9Gf~Cx{f< zE5V`$Yn9VMG^6P?mSq&kKnHoV2J)j(Kz2$zaV7Gn$pF;51Ehqg&;PA8&p( z+y&Wr2$WrF4G~`n0JrnN?MjTT3wk0Bg2NGCZf6#qvg5#V(oRd+0zq50JvTV`+>Cz& z(%Hz!-;>C$N+jgV83@SfQ=NnObh4xTG%h*J&*Li6<^+inWD3)rfqj7ZaiwIYUPQoW z{Bf%puy#l7CIB|2LJ-HGv)NNQNVVB)hUIdM?+{+-_g4VVz%?0RS3F|5yrBSuuRyNU z8VhDa0X2Jhn-KgVBczohT++JY+FmMb=}ZG1ztTEOH#b9Zi$)=OHRD73c|gClb@!-l z3=niG)~{dDABzt3k2g2x@_8DguIp4tbp$1FKC3tGw?wRd=4W7uarx1wraqW@s{ezj z!hAw@sEKzH>{I*@ds{p96pji0aT5H4)@21+;#w1v31!mkpnQ_BmNXUOGvYd#uB&2Z zx|B_`gDQ!qTuq^+N*`TLxfNQ9Pg*B!l&(k1SRAGZRz_U;gtWihjFBlZTC`?hbTx4)uh?2a2D{g0A%;c$>9Fbb{UMu%O_ zU9LN$*#oYQE$hFQOnx=_RSc;J6ZjPvlt<`U009Aw!vOTIsE;;)`*9eMxa0*a%upDX z%WDesN#Jryg{CTzlvYU5UpC2U1i(z7PA|~}2-e~`HIU1E&`qwxb3h|>!o*01>Gqpk zQ0E}48mug)ew^V#Eh&1-`$B4U#EUPp4n@M@QJ=r7`_=LN`!?ZwKmAD1VR>_@n=%{r zkPhq_R$m+X{QC8ehex|_8w%gLRoSy^%G{Uv6e-shu5_KZ-qFR$n0+>pTnz z+`}rHoXTXOHukhqE?PYNjJk@w<7k>jyLrr`4fs+n)uP=9y61(}$z*o1d^VrY%E`pw zU_uV&3#oi&ipa@>lw##lg_lnKwEs4{*R3*=^JVd|hOIo}d?Eg7^uAcb+2)$bQd zP87yfKb~Wb_?eJ%{ZY;OC-fSB8!n8xm@MsDfQB>W*&b>gw7#0pzWJt{ZEP6vcMl}v z@f~)X-I}bfJt!X-T&=Kg?Rpa0%~We|^_0nJepQ{zGwDtB)kuH;*4EbgsRoaC-`dd) zgSYzEw~V+dYby@y!AOX1M?v@9QadZ!p*X#D6C$v1Z$MlPkI+12!PSFck>`f5hVTdrjW*h{@uO%O_ZwdhFuQ+1|pcucbWWGuwN9)U%yE^xge;zq$WE zH^kTj8)E9kcXq3e0|&|ko40>Bow64J{h;f=>nX{7Jmn?#oDlmK^HrZ?e zOr7>X;bF)Na{4d?R1hf!A;r|{Qm@RSt^{hWlX_S%l(Zm!%wBYs;aT-;L%!_ zBQ`!dy1TU%;zQ2bJl;Pr9PJ-~IMLiZ4kM7zGx?K%mnB(ei}Y#f2cShC4-)17-%Nv- zObL7%gP21uiF(OAsZACp6$S@74$el?27&;`5gBMoQ;Y>Q2u=t)HJ|2Ud(rH*Lj2jK zvszY`(r2~7T1``k56yBdpJi=U&(t=Rl`FP#OmN6nuhc7bE!CBkI0OW#s8f`3K3Pf~ zzo$mQPGxnMeh0QrcH|nT%f2!~)Rc?qzZ@azYb&X1cu-|SM;S2IQC(k!UYQid#Jhwp z0=voyr(~tfS-hN&2nsIQw}m{sUV0Ggj%*?oL*6)+v}q6|IvgD)*MPRB3^SvxJXnxz zm`Jfw2QbNA-^W8S_K{Lk=B&PZOIcY3MnN#GR!lYMZ+S(fy@7t$0H&V$S}cm{vN9|g z^&8hZ<@d01SyA@5y3w5YR4AsFdTO+;qRJ$IVymseQp5suR#uleuW`0O5)JF?zld&K z*`BkqesUSzDq=X1t`+Fkt3sN?w8TrBRC+7$MrG)6?&Q_wag1AdrS!0>tHbpM;UrCSdzUG;(0GA^Mg-$Aee71$dB;5Q^k)=O6C(F4$OVVxJAXcCa^5%^%rEnbt~ zYw<(y3&JiHjxCqbVIJ|4y-~^dTBnoYu4H$kO+CIX844t~Jc&cotv)$G9V+0lIE{#s z0QBwe1X_LMg4<)v1&o6OHl zPtW9`qrMWmB*pq;gKsivdioN+EKi{1Am)Iiz8!%LmTcG+QZ=9n%aMs3M`X1m(<`i& zvxSTt$QDBKY$3#sWHPV>v1}@Z4Yz5W!u>}uN?`--L<@eC-vnRY5>1*+yJob<+)+21 zxnoOg3p*I`Ug9J4V@NZvtGJ=qTEXf{|QRcOfOjj?23x|9gY0T>Hg`RW2y`6L_VURA@7NK!kSbA%;+FFz6W@$MfmLY;I0CB)QNcLz}nO0|`*Khqa z8Dr(_lAs1Wm+(i#ZjpV)Mj9jYnU~MKqRqRUC9kJ$!y>hqOyFd$&N23kdY;A9EZLx8 z!WkZBPp48?WcvEa!$wmM%~Z2)!k}q4qNy^SRP%qHd;)g$6aqVlY_RVn)!CV3CIpi@ zaFx)N;B@KzGU$3XMJoZeD_A8AfI=`mGbIG6_v(lInRxKH)!g5p)ag zFpXrLw#Sbl1)8I)ZCZ49AuD zhLVmQjK%I#KT4*Fd8Au?EMFqRU==J_q`Dww(}HLC*sVqitey{GOgb-Hc}y@Gu?($B zu{L>pwC#V=)02jH%&o|FtRT*0v{m~kjWgpf-QK-TwZCM%Cb3t8=Cya zfhFUF8-bb1B=FTW*n>sGs4@>QVWt=M&xl|@!r;*W>D6G)>W7&&vUi}arenle(NI;@ zP;syVpP`YF$2V@g{`!p@A0HVRq9X^z*_M&c>iYhDa0&v)n$e734 z2nbh17T8X*EZMmcj|&)xwgET9?xAJkZ!AEeGO!hcr={d0Xf>VAr4XsOVxMTG^3`hg z8yp!5d7<<#tf~m{L8rihsbd-bpXFd{46eCr+dyyg>T10}OKMPHsuwl+7nn((1*lD(?C zh95CHg)RaBm<{mqa==aaF^GCc5Q!@MTnIyjy^r@2&MdMzku%E%Yp;;z>~I@kwOAl~ z`yn1#y$HhP5uWq|Ueln&w_)FS+-o?__+7AL+QGP zI|9S7!dshTjj_Ys-Qn=S>NSrg)y2bGAQzx<1b5N{(umP$;n34o8i8tPP+y7w6^nzH zL9W!87I8I-l^pJ7ABFltw}e8W*mJR61O12k2g;SFV{CsT*vm6L4~_}HeoyD|#->sB z9b7j>*FHOOARhnPop+`h-R7rb>WgnTH$EK*3#WbT(Zq{jV8JoMixud1kyZ*IdEG_& zU8I#uNw}btvSg&-aKURj5HL;yx873eZe`MVkAN5Dyp%z2g5>EoBam7Pix-`MS_H9` zlSpD946MA6P0J}`GvK!+8mMcl8hyjcUx^Z$nA1qiZt!1;-m!n`>+RjlsaJVfZS55a z9PlwMS$XcxfV7q3#VvMbVqOX@rqEa-ye30T0oD^1RWX1Zi>Lg`_`p%dB2a@II!jRI zXaJ69bw;j)&1geaReyJ2WK(l_`AH)PEn?FwP5xx_($Ca#_`-MGL zz;BVcfWRV3m$;^G=2NK<$qEGfA;5l;TM#IlM`D65fy`UL^UJxf5SnY;!aawV3DSgx zM6UQmfs$TP2xm=p`v@Y15-(@j})hL~9auK>R|3$)wda-A4uqV;x@w9=T z=<$bKCx#~BCX1F^Cz0r{(DMs0j+C@U`3OZzdBUKPDKaFHJOKGBppE;A_5wLC?m+-N z53M@FEnO-&95+8w<3JYBIoL^|bNKKB;)IaI%sisNYUW~w;J;c5gBiWbW{As@7(;SL zabICMHNR=!zD+DZyp`;@EI^!A&2xJvOvYE{S0$VAQdS{Dseq+P4wab2DTG+!qsOl5 zss?6Xl1@RdJjvxvior8Pf4L3&Y^hPxt;^Fq=Tc*?|{29d$ z`QT6>IA&>TvWx`-Lxox6uc2Tt*<@*R&a|{!nv%gF3(_q&uN|Gzw=9DUlwfd>uB0|_ z(a<1LdYUZacwoEBwLKt?aC|w5cvTt~<-Qn3f(RB4II+Nsih*$;G!dAl@DQ`IZ>O{0 zuCqJF{M`X#G-jaNKjyHrNnI#KK4rGMqoc2`mZCNFSj@WGzD@-7kvt@FERS%hz9bb; zst6(;Nynvh5sL}ZB)33<1oBR(WLG4MRhoidvVm+afWNsc3C{u{Gif=OhAl{aOFxGz z=$Sw`p4WK(z?&`aZNYXfZysU^r&ZX%sLUBCr8UCnT05{_-fEsJH}hMu6B2{@Bx@;1^>4Z4a+M z(pz5%K=mDr;#mJLkM%zk!cS8}|L4cXJ~z<+%U@<6R9E|2Ra>jCR^I0BC_GZZ%nAKe+X&e4dl>>nD+JZzrbqOAqAmZXgo6RM9}Nb-v~S;oalbzr^+Ojec-#-)u>I!Iczh?)Di217zxCPA ze&Nu*eaC`9byQpfpECMQ_C~U4QVucMG~vR8$$|H#-hbD-?YI)8_cxFqEUFL5q>5Vl+Lyhe!OF8xuhAoR{tXwZad*1Ad ziAI8UYGYDB4^TnD;`X~~7C{pjgl1Z@n#GaRLZFiUNAk8FtOfb}vD`5^T~$LP^bFTj zt*&x5$Wnu|NE+v$27#SJ+166f(Rrvk~_0918Gr1n8_nS;4LhsvT@tF7TZ}c>a%!3Lg7*J=^)BH}{ ztqx$a7(Q@Z2_QQo#R6nR!IwFx>xAYJ?<;ld0)b>bB$P}BG78mn;1@x; z;Q9$sao^C84|pzk4(VsjfNmcvFE^~GxUZZd?%5sc3H5|hEj(PdCiVn_DUTib@!M}# z@_HH||F+(mGiPc*>(P>)+o1au$e#e;0!5WmUP>XONCgSG0Srz%7C?Frsmh$*Q7k8e zu8es$yAg{5nkV1Apw2cfq!_X#;AR1_&eOHJZ-p|2qE&E+n29ZNmN=QC4IJULjvv!# zM8xM42B&@;v|g<-MWH|93-0y*n$)3ayzhvj>qCc8UVAZC>|PxN1{TW zu&u4y7`LjQ-(oV?nyw49O}Ly5!!@-v4Rx)Rrt6y=4{hFaefhxyCYyatr`tKQqpogM zD7aQ>j`rN{?^@&CdV7;O)NCoMvNTrvzm!Zj-Dqhrv&GF-mRi$5bYm#dWxd_w9cZmG zO*&k=9v?n^ z!@Wrq^o$655?pn_@dFidK7<4bR8OEv3ZYyswtagnH_K9mi`eFtpOcT6%_xZw66Fzg zZjZ&b?*t!A1+X>qVhOlowb{ILJ8((IYsy8j5{8uftmVr&AY6CA6XeedYbV#j;g-th z)3fCMHP-ZC(t3t?6ZpzN>yWSG=GZ_+8B!KFerU?6()5Cwd9m-%*vN2XvZKSi-`3mv zsp~du3HJ1E^?2AnA6GNSeZeO4XfPP*TtBjEr^8-Z+15;*l=2Mxo>Bg^#K7x?r2&gX zj7P+~Q0_9ugFvYzP+tmPvMuCS$m`{c?rIE|=2tvR)F=AH)rl0Wd0FF2m&YEh(7j)V zmEx0BCQ>s16JW^WG$1okE~4fQ;K7pJUMs4ZWDniA^N`2g2#e3BH*B1MpFbc68~ge* z+i#dy)!Q4ZtNR86$p-##d6~CEkqDQyRBp1PJvnfBdzav}U#VTP$ME)vMhYJyJbdu@44JEP)P?`x9F$C{l#hsn>@ibOzb7;tFtZ zE9F~a#UjvyTb}SY;syIaNMM%i7c%-sp?Yvur?}S}LItYLhRU_*=Bf;RPxhd#7&N9batj%qemFTrj z7f3s$9Ic4rRU$}eE=j~9iz;rHzrO276F=HDxbP0Q4RX?|PECDT4i#oIa?&V=sJ0J2 zFyL(kRxW9%aG+x5?JF}a87h7%H+wnfl99KX$>dAyOGw?ASdPAiXBqT~awG)ffnZCzP?|zSDZC^T$Rb#Z z!PSVM++hfD@Uc(?7L^Qv7bR5SGYJKac@YpLLNmFY8qWfK*6EHOkt;+Chu~JpO{bDt+2-Om>|k2m!*|*$&JO+4EuLyJ>PrsyRkRq=VISo zh4s5q7P+Xpb|W&!+g+}9RA9SNG?F`W_weVK^v27{mtRhPJ;`M!(n%&k*(uUFjwNqOg#45Yaa#PNPPHV;*G$+?R;5oe0k?VnTggK9tz|8uc6@d6`t;qbCv@zA~|syYht^~U84L+0@duS-^PY?9p z?9c7Bhg+P(7?vWrF8#G~M)@L-ge4oe#%q0c)B{6EP1FxLDsGQ3@Y=mQpGiHl)AclK zI(qbb&p!J-@mGB`97c>M;$&0r77rdhsy_STi^lfJp2u~#Qk0iPw?T20ZD~a$%;}Qn zL%tV<7&aNbR)&4{tHw^rlT>_xEFdZ`J)%3XM6`k^GQyrUbQidVN=6ziTFDxFwOXkV z8V#_q+GWYm6JwPV_Nyg89X)Aur5StjkOoQ`fw3R;R9k6TKcM1X<7Gf9~>Z;0AI-NTr;Z>qcr~Cti&_B54`kMx( zP&*;kt`+PAU)JLa>p)RjFbb-hgMN|miX2^WEKa+roRS~x09jES@gi6giS^_PPh}Es zypec{J&<_nsl*$FSsW(cdg@3DprLJ4OW>qMr--h zRAqbnt~G1;deq0)N|CS2*1?hj1yq+x^D`|Ou24k`BU?%4VXvcWE@~sBLYT{Fi!br3ENO^B1ci=) zFl$tQLN(W%lDa5<0nv&&5-bRC-znLPIL#D7P6jKsU0Hw*K>B{zHdKXL07FZyM|R}^ zW9qaz&3?t??>;g$b??1XQ%AbHE7=d3nq)KVf0Vbju5H0*ZEGu3(2`Ep3cC>1R3?Rq zg4tn5=6p$*yLm-r9qSE>25R795YTTkmKL&oJDRcBLX;R)(l|urCFC2i)EzZ`2dzPe zzvd3lFiiF20Y^|`$*RoPpspuU-7F_6hy^Kv+d}d;85{|uL=d7}o+7UnN~jdA^5t-` zxE0|ya9a^8tIm4D3KiX;h*^*UbvDN%x*-Xvvq+PGj!qN;8Gk zMZUlAB1?a}@NGJXcFKxzLlgrc>as$&<6%0Are+D5xgDeC@sXt3atM^%R}uEs0jeeH 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 bwQTI+X)xqK?U`wgz0SLfb|u!# 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 Crw6k7?26OxdaAPW;hfFwW`0u7K- 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

          EpR1`#aDxa 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�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 literal 0 HcmV?d00001 diff --git a/public/fonts/ionicons/fonts/ionicons.svg b/public/fonts/ionicons/fonts/ionicons.svg new file mode 100644 index 0000000..3d25c45 --- /dev/null +++ b/public/fonts/ionicons/fonts/ionicons.svg @@ -0,0 +1,2094 @@ + + + + + +Created by FontForge 20180321 at Thu May 10 14:48:40 2018 + By Kevin Ports +Copyright (c) 2018, Kevin Ports + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/ionicons/fonts/ionicons.ttf b/public/fonts/ionicons/fonts/ionicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ff1f45eee84678c06c92458a97cbcffaeb114a76 GIT binary patch literal 112648 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

          @`Gwiv?3Ql;-TU=q9_ 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 literal 0 HcmV?d00001 diff --git a/public/fonts/ionicons/fonts/ionicons.woff b/public/fonts/ionicons/fonts/ionicons.woff new file mode 100644 index 0000000000000000000000000000000000000000..467efed6d7c11705a9c5a9216fb468f97583f986 GIT binary patch literal 66024 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 YL(HzHol0Hh3=D$a>938Z-)Ck306X@(O8@`> literal 0 HcmV?d00001 diff --git a/public/fonts/open-iconic/open-iconic.eot b/public/fonts/open-iconic/open-iconic.eot new file mode 100644 index 0000000000000000000000000000000000000000..f98177dbf711863eff7c90f84d5d419d02d99ba8 GIT binary patch literal 28196 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 f%X4~$E_2;^J#ifP;CI~=<%5iE_!YyhznS + + + + +Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 + By P.J. Onori +Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/open-iconic/open-iconic.ttf b/public/fonts/open-iconic/open-iconic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fab604866cd5e55ef4525ea22e420c411f510b01 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/public/fonts/open-iconic/open-iconic.woff b/public/fonts/open-iconic/open-iconic.woff new file mode 100644 index 0000000000000000000000000000000000000000..f9309988aeab3868040d3b322658902098eba27f GIT binary patch literal 14984 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 literal 0 HcmV?d00001 diff --git a/public/icons/144x144.png b/public/icons/144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..9b79a6a53888983415e0cfb7a1a11c5cb3fc3ac2 GIT binary patch literal 3775 zcmV;w4nXmVP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 NprNX(Qm9qg= literal 0 HcmV?d00001 diff --git a/public/icons/256x256.png b/public/icons/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..473857ff82f710be935ef3027a31981c31ad687a GIT binary patch literal 7097 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 ISqu380FHLIkN^Mx literal 0 HcmV?d00001 diff --git a/public/icons/384x384.png b/public/icons/384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..c44fa1ce07fa7692feddbe5222c6f6aae72020e5 GIT binary patch literal 11814 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

          + + Get professional support for this package with a Tidelift subscription + +
          + + Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. +
          +
          +
          +
          +
        1. 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