From 3871765ac1a35b633b8fa9a431cb73fa06041b6f Mon Sep 17 00:00:00 2001 From: Estevao Soares dos Santos Date: Thu, 3 Mar 2022 12:15:50 +0000 Subject: [PATCH] fix(cli): cli now works properly The CLI was completely rewrote. Changed dependency from yargs to commanderjs, which is cleaner, faster and has no dependencies. Also added a complete testsuite for the cli. Closes #893, #894 --- Gruntfile.js | 53 ++- bin/showdown.js | Bin 47 -> 5534 bytes dist/showdown.js | Bin 159791 -> 159755 bytes dist/showdown.js.map | Bin 451655 -> 451629 bytes dist/showdown.min.js | Bin 75261 -> 75209 bytes dist/showdown.min.js.map | Bin 85604 -> 85554 bytes package-lock.json | 276 +++++++------- package.json | 11 +- performance.json | 2 +- performance.log.md | 41 ++ src/cli/cli.js | 353 ++++++++++++++++-- src/cli/makehtml.cmd.js | 195 ---------- src/cli/messenger.js | 40 -- src/options.js | 30 +- src/showdown.js | 2 +- test/cli/basic.html | 1 - test/mocks/mock-extension.js | 14 + test/node/cli.js | 18 - test/node/testsuite.cli.js | 293 +++++++++++++++ ...ter.js => testsuite.showdown.Converter.js} | 0 ... testsuite.showdown.Converter.makeHtml.js} | 0 ...tsuite.showdown.Converter.makeMarkdown.js} | 0 ...lpers.js => testsuite.showdown.helpers.js} | 0 .../{showdown.js => testsuite.showdown.js} | 52 ++- 24 files changed, 903 insertions(+), 478 deletions(-) delete mode 100644 src/cli/makehtml.cmd.js delete mode 100644 src/cli/messenger.js create mode 100644 test/mocks/mock-extension.js delete mode 100644 test/node/cli.js create mode 100644 test/node/testsuite.cli.js rename test/node/{showdown.Converter.js => testsuite.showdown.Converter.js} (100%) rename test/node/{showdown.Converter.makeHtml.js => testsuite.showdown.Converter.makeHtml.js} (100%) rename test/node/{showdown.Converter.makeMarkdown.js => testsuite.showdown.Converter.makeMarkdown.js} (100%) rename test/node/{showdown.helpers.js => testsuite.showdown.helpers.js} (100%) rename test/node/{showdown.js => testsuite.showdown.js} (77%) diff --git a/Gruntfile.js b/Gruntfile.js index 0d1e1c4..a5feeab 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -13,12 +13,12 @@ module.exports = function (grunt) { pkg: grunt.file.readJSON('package.json'), concat: { - options: { - sourceMap: true, - banner: ';/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */\n(function(){\n', - footer: '}).call(this);\n' - }, dist: { + options: { + sourceMap: true, + banner: ';/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */\n(function(){\n', + footer: '}).call(this);\n' + }, src: [ 'src/options.js', 'src/showdown.js', @@ -30,6 +30,12 @@ module.exports = function (grunt) { ], dest: 'dist/<%= pkg.name %>.js' }, + cli: { + src: [ + 'src/cli/cli.js' + ], + dest: 'bin/showdown.js' + }, test: { src: '<%= concat.dist.src %>', dest: '.build/<%= pkg.name %>.js', @@ -42,14 +48,23 @@ module.exports = function (grunt) { clean: ['.build/'], uglify: { - options: { - sourceMap: true, - banner: '/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */' - }, dist: { + options: { + sourceMap: true, + banner: '/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */' + }, files: { 'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>'] } + }, + cli: { + options: { + sourceMap: false, + banner: '#!/usr/bin/env node' + }, + files: { + 'bin/showdown.js': ['<%= concat.cli.dest %>'] + } } }, @@ -164,6 +179,15 @@ module.exports = function (grunt) { ignoreLeaks: false, reporter: 'spec' } + }, + cli: { + src: 'test/node/testsuite.cli.js', + options: { + globals: ['should'], + timeout: 3000, + ignoreLeaks: false, + reporter: 'spec' + } } } }; @@ -227,19 +251,14 @@ module.exports = function (grunt) { grunt.task.run(['lint', 'concat:test', 'simplemocha:single', 'clean']); }); - - /** - * Test in Legacy Node - */ - grunt.registerTask('test-old', ['concat:test', 'simplemocha:node', 'clean']); - /** * Tasks for new node versions */ grunt.registerTask('test', ['clean', 'lint', 'concat:test', 'simplemocha:node', 'clean']); + grunt.registerTask('test-cli', ['clean', 'lint', 'concat:test', 'simplemocha:cli', 'clean']); grunt.registerTask('performance', ['concat:test', 'performancejs', 'clean']); - grunt.registerTask('build', ['test', 'concat:dist', 'uglify', 'endline']); - grunt.registerTask('prep-release', ['build', 'generate-changelog']); + grunt.registerTask('build', ['test', 'concat:dist', 'concat:cli', 'uglify:dist', 'uglify:cli', 'endline']); + grunt.registerTask('prep-release', ['build', 'performance', 'generate-changelog']); // Default task(s). grunt.registerTask('default', ['test']); diff --git a/bin/showdown.js b/bin/showdown.js index 4bacdaaa4c309f3bf7609532bf87680173bb477b..498a80e11e2b7218f378b43575ee083f9b57c351 100644 GIT binary patch literal 5534 zcmbVQQFGfi5`Mp50pVtBazxR}!`<9iW-~X5b9FC?Tf298ustm;LJ}GZU;)sMYv;fB zTL2U(+0G^B7mFl--Tij=+g<#1bkJIJa4pq=P&Z8JO8n)fG|aB_ZKZEjwy=c}zqite zgfA>lv)`;%#SiDF@AIZKRwN6X8&OtoWG&9`)I8x$IsaHLMNSKO##^`e2T#-NMi?ux zm0suZA$z6Q>rz#{h8!onsQwzam(Vn*`if*hvV2gVXaV0VG^CWOr`g{ zwSrk^+)CQ~m&Qot3T|DcTgQu{NOYke9_WQI5dCtlmDRP# zYrQ<|e&dTa;Q;^h_>*)+r$?gGd-d>;Y%Nas@!8qw*&*X&ov)!NU`ex`C1uo2>TPLL0Ucbwl_8g*lGM1;i#V($7H?{c&53pvAz-gkLInZR^eJ)Az@tM`upE zGd()*>~hOEpa}a$KxufC-r93a2yN}cmThyf;d6(X53=(ZXr~Ri(ZC zDcozZDBId~J4P?k8GuSOlZtiH;5f3p+s4-AN3nA2nieeNlIbAskf2FjzAEkMt@_dE zMi_SoXYTE7oy5q6V}6KuzNmuuf{)#WzRKg{f6KZRV}8Z6_}0#iycX$fc+UQ%x>U!X z%5_tV!%dF$%1!1_OsKa~eY7X)y}11#6|#^mSMP-K_zZs1s)DbaYwY2{!BXob0v6%J z_tPF?pQF1N1JEa6R)w3%1#BlU33pLUXW~fbHS)`?X5+C)@9DiM^o6*}WcX)`(R6lD z9OO<|mlzvlA9zH%3{z|uX1*&t5M6m^A zfiSQ)qZgnjxP~5?v`nlUcgNFN;0MoTGiUDZquSFW_i~p2ch$*snmc_CMpDZpJ>>lJ zyma#wS@!>^Hsq2)E_J984<`;Xw_zLTysIxQ{zjD+5Q2c5z)n+h8 z{!8FFPfj*R85i*O^9$Ck6UbGUOVzY)Z;$g)(Lar*{nJZMmVyv{rtqx9GI(#et9y*w z!sBos-tesQWxcQB;oPDqUv}l$%Rt5DnM9<*zK+zNss+>3=Y77Y%NuRddq7y_T|q-V zR^@e#JY?ZJ#c*6Y=6Rl@8jQeRLjiC6L0zrsR;Oti8Q@0CidFfhBS;2B6ZUQiAx;U* zGuKNct*B6kXG0ZF|Bcf8nK)QbLF)pbc#_GxubD(0i=l#Y7Gh?%stIuOXo_y9TL2c{ z+Z)Q>z!Sm-nxlXX7hI|nC7mp5`3Ip0Iq2k^Fdn-=jNYFc1YdP4HjzBwn&%({AMN^%4VPUsSLuwZPP^$+ zAAL4?SyjiKZb`ePDIJhKfB2ZQ8oG)W$U-0`Sp(c<1pA6&i7kcB{IXQ7NCoQIJ~ zz1I$|A?63lacuQCR;4RLY2;(uB}dHmqOcw@1w_#KZ)!DgQFBe(zs||TT#TUa5AwVn z`G-*art@};`w{aAg~YlvA8D2e#%i=8M7`gm8%)%eXZQycE85|WM|t7na%egc7MRJ~ z9_!4euJw-lLR4=Ij=R0Js8W$S@gvlwuY<43L-(J+uU*1XXM_pCIva+uJU^)LbkKdr zREF_pGtupS<|&oJodd8aziwq+ec_a6)*KEcJr>rDcDX9om@hjeG5b}5`e)yyqhWh{ z;){J86@IfDmom?ahTZUS94XUowoEoJTAI5O-j7xnvHQP*pzt%{lixEonfMBcCjTd@ zlx&S@IA^D-zGJ?GFwgP;u-~<&T~s!)=^g&XJ+HM0JRkOz>JC$rS|TCQ?a(j_iuRLl z!n-!$kut!M$-N>CQT-x z$`^bo-KxFju#q?cuJK(9Ydt;u>&-hn-_>IO8AC4BdkxQ`lCWDpk6G-*ZN{?@e^?3S zXA9zz;dnt;6S1^TT8|*2%&i2%izZLj(H(;*gL{Er=c{?c{{FY=^u@0ff_M$s=Vk4C zm@Zw|yq3emVrVfe0=;U6sbzvIm_BGF1+8!K*afw57+U!Wb$ra~*31#}|FJEE+_93u zRkS2$Ckv+6(m8<;fTlDT`R0EsLUI-+)`$?ZLQuOS*tMwjZO*gNbfAYOJwiP7ik$i` zlDX1g)E{c%L*)y)^br%|a$8tS!ZrXOb-%uY?dQTF(%^=GN%sj~!sS(u98B&s{$FQB zyS{K(Nrwf(hp2!0iDXlH;&!R5Lvk<;^g(E3BZ3OvSSoGc3b|nMosWQ!kQuH-dYy$g zylYM@JL=m7R7A3$dM9tcZNywIB+ebIVdpD9FkcIHgT}7{=em{8Ou8*Z54gq)d5wv% z-!zQ2hUCY7`zZV;p>*$ci@ZdPHLyg0!qx~_gq!cUy~W{@CTH=+hnnY`Qpvh5aX|NL zVCtMih31!T(r9psCi>2n5~*NB(`ikSGTIfM_+wDDr8 iHNXPblJOi*8XK8G6tS4UyG%Ojj}u^D9Q?v0o&5>05SkeP delta 33 lcmbQItv^9Tx+t}}-<_ z_}jt!{ru~}{BnVpV19;R3z+^Q*bWwN5$Xcd#iBx!HHANbyLpyESw_5zp{(n?bD*qJzGYCBEPpqYwTgce zlocoN7RvG!Y=^S033fqQNkV-P*5*$_Y>ZIBU&3>tteGOKpe$EWs4<&O#41Iaw`sL+ N(_-AdO^Yei6##0SMUVgh diff --git a/dist/showdown.js.map b/dist/showdown.js.map index e35296c1be0f7db5a629aa0c1ddfda0ca94d741e..f1f54d0ff124d4ddd2835fb62fee368339ab2787 100644 GIT binary patch delta 926 zcmZWnTS!z<6y@%Ft~qD0JL)yxuU=z1!bnM&Wivh!!(jBIsK~}iC+VYxw2y`qrN9WS zX?C_Dddx>pLKw4<{K=qHh*aoL3;YTMDT_Wr3Oo0n`s!oDVxP0tUVEK0HJv>?ogIIb zgOPLtS1LI54ygvk?yHhrb9zYPXCRu!Q>stAuSq_^01rc;3doO}(;!2FFR5Uv;IvM@4fqq%k= z_{t86s6P<{lQbO9JVgF5l6C{d-5zO+>CFc6?6)H5L-Iz2Knbj3Ufok;%1eJ@EQE2&Tp;xN5#-v zYY)K)>e%A^0v!h|^8-cI_&d|UUR}KB4$#nXOG8g7k8Uf6GU>qFFY;X&cV7@Q7Jx^K z18~~RunGr?N^!P0?f)_6k_9Eh&>=JWn}YcrG2|-5UD;*yb4t}Iavp4>^RA_Q@v$_U zxx1^$>usXGB_&k}Q(pyS<3yqD;#y<>TB9NgM5$wIjqFV_%{DWQ-nFnt5`~Ym2NF5` z?5;%b{p_(s-K}g;qLcu8F40VYeKk=6O`c$vW$$1cyDHIg8;e+I>{2^RRAlo;kliy; t0_{G@p30s$P9^AIALZ@O9n6=OcqVYF{Y2N%WBuhlOq4cO-jk3L`~&~qNV@<4 delta 898 zcmYjPT}V@57-rx3PHx|rXVyup{c23hEm{|%CdpiCR4%4nbRn(HY-$&}3r$k6K^GE4 zoqWj`=^_<^Frch?QGMs^EV_6P&-u>xKJW89=Uv=ztZz6n zt4;`y%b+$gu-{;q+9nLtG=rZ`KYlq#&2Yim07+LHzvaesQqaE0ID1!M7`o0Mvz`1X z-CT-lJF#N?m5D;Ijgo8a&}nUkq+4s0LAl6ab~nGhWMUX!5ct4^h|xnt!t@C$fzm5t zUM6O!D-S`!Q)tRRkTJ7EVPi?+6aa?dyV}$_8CPzNr*~K0ExW;v!s{#{@&KOk_;o=WqEn2EkQ^N*8w%f5CHj zYZ9@egP2L3Hu3-}eqw`WTLrA_*JpD}5~x*cr2dR9sYcR8W9lQ3Avz|*Rw<`sBDh^< zIPM66Env9PmBh$co8I@{7cM4*p>D!7v$;90XhZ_LRYvb`!skqL@SIQxd1I>M$7 z*OB^yAj1gcx@8PK;sHf1Tvcrk87^f1AE*DH@}d9?`Z%H2zeolPu@qfv`;`h*!pxpy zuzps;O)s%5?F7Dhv;`93SB$}@4l~T(s(^e`6xC|J8Sc~EmGaI8=SF>Kf1|C}njqcG zL?$y46EDI`$YvtcRVJo}2ZjdmLyRsMaQqT|Y(QU}&KYncPM;WXBtaDemh{l90dqa{ zy8)kFrne0k?xpt(xZO*k0JB%GP^-x}9!=7D13LQXQv+`H71^@6etLfIq;rDu60^>U HU1iC?ld(SL diff --git a/dist/showdown.min.js b/dist/showdown.min.js index 7d2302986cffd9a3b20955d15c115ebf1b665011..6dbbf3c2a01dd45fc31c129776d7a5c1cf8dc3bb 100644 GIT binary patch delta 2607 zcmZuyU2No571qsPn{Kz+Hr>Ajc06uKeB(QwnPwl*c|suGP#sd(VGLa1uhzMz#*vw~L;NL9C6B#=1Qo=LKF zrO`cS&OLwkobw(3_pOOPy*2UuGic@KXCIpu-@Ic|#M6DC6XM47PELDwr8)iJu4jw? z$J%2XO#JQGbCRTY|1p<7bbLLhFCKq7r!)7obK1Y>x>S35rkDTSpZRu9J15?hbZ_O} zS7wka{!*HobS>60#lOU9alEXE-~RCaz02iaPmQO<7Uh$(GXY6RNI0$3o0?5+QP*bY zd>XKx@>SM(_-drZy4qLul&Bq5x5c-#*%Qt!*Wd?)yIpFvOgG$Vhp`sWni)~wU{{%= zF>GSq)*K^cNvcIwt%Y%*>;1kKQY`^3-%ip;0+(II6?tp;Ea;>jHkqF=1uTQb#d4(* z;GJzdR$LkxTq^5FbV)>acYM}P8#_sA$7v%ZEN~mifNa^RpmYa=p2vMA6V{GAizXPGxf1Az zH}LrrdCiOWaGKIoJbL}HQ^cpLN*sB_H179-hBOrJ@@6TK4#5qH^`)k*crj~JbxBY4 zB{(%l{B!wBvkunP3#!g_wOO@+@%3=;l1`??tEH3T!}=03#dG!c*no)Z`uyH!AAIdc zXCYv-3Qe_=mb5i1^)jWJL$8W=Yxj$}caE2UH$3J?EH;wJ=jrE)Mrn*Vm~^R#Dy0?8 zvFa_75>9-g@+}qT1)`KnIo^nwy=gM|1D$okz_C-UyZ8J%-|w@9k?po={*|i_-bjH9AkmegZ`U?g^gyEFoR- z-S-#9IpyNj_kVVuZ>2D9!{Rg3roIUF&x)7#@4SOUPH-un**|rrD><0RfJ)BjaX0ly zLc8J*`!@(*Ts)`(PaaQW9&|L0p(jkIOG+x^%64cn=(!J1@BQcc?@uCI{N_fF2Y?E2 zWDkcLI$ATsW@3iAKI*@1g)Otzq})iD9Xp;@{oRY&rT!POw&v=1tzPZm)u5O+jvKcq zu039rX>h7>@sp3{5EsAt=z(3X%f3bzRB~X32NISE)Vl!Jt$D~hiLK!P29OXmw_G>> zKa&E&4gh+H#bQMm3w1!?h%Y~A`V_`hy`;hrxT~qrxtMPG5BZ_9nOIS)(G}0$Tt<<2 z>E=9~Z{B=h+@X&6`^`ndk&E#rEp{)AVf}lLTZem`Ehyu zWnexnugTZRSFkC=+GMyr0lTqP%YHeAs_>XN`^6ZlTXG{3S00f(JUC2QYQU1m+o=X{ zKHzSXu&M$YWjq5WZcBqyhg(M`1Cfj@8b^~)!J^6cWz!ilhtn>D6^=)Dc_pG^m|)vW z0FdgHhNY~ft>sE(d0|)^J6oMVr?S6}BNYw#xe2sT@OZXxI*Ob-{lN<-zYu{tSy4%0 zjbY*rBL!6A5O5%G$actGr3NDi8!mv6ES^WyX6mWB7G{5*KspMtu}SoqVTTbUDBo=*~rdKp-(OJ=+-bG*@XC;%^s9y6L08r z%i1h@zmZ*;LZv5)>-J%Kn|KG*Act56%g00p*akP-xtne2rVVba?UtFVRtwz`I5u8? zZwh_w4D5jNPv^6LE9ma&9LO;ye&(0ZF7mT~ln{U{n^n-#0syp8sZ<*3z=qWLl##M~d&4?x zp>S1g$Za&TPJHe#ty0IUL&@QHF0$Q+16TWmCh_3yYDI<5Y(s6_&g}dVJL2WKx7E8v M?e)*A=#BCJ0dQ|r(f|Me delta 2569 zcmZuzU2Ggz71oV6rjBFm)HV4r$<9uUJvVcA)|*m5J9`sCOVxtZANr@V*;wP5yF0hO zo>|Sz+6H?`ACM4=K&@`2c|h$$ANqi(ATm|ph4!t2kf;?xN-H&0r9Ocw`aly}se*H7 zW@Dp9TFsn2_nvdU^PQjFKVL3=e!2AAAymJ3_|dVwy@ZE>6l3QL>7%j1P`7WbkUre^ zY$0{V{X%+c{1=6^wExXQGA5itx-hX^NdKA`T0H&b4+>p#a=nmVoBU}Z*;9p=?b3nY zP4209^3<`i{Hq+7|J1ZQ?1&}(DA43DUpTZ~uDm`v(kF@hU}5^aLjn>Lk5=nVBcaLG zmab!q2OisaxMS#D9g~m-Y+d^S>wb5mXGEsHrJH>MCuU+rtS20o8MSV$OTZA5-v3=D zx4Xh=t8IJXW+#jc=R94sT^d?!gSiI7Hs&3pXC*9747at|#@I2~F{yaCpqUQ_>pmAu0Wx;M zrUAyoQgC?ze|^8J=+E(n@-lvMhErW9LOmiHscMjz#_}5{R>}eR;^2Wq=0ela{D^g^ zzF;Qi0z3^N-#GETX@O1slx~Km-mEzwa5LUMYLZcTk2Whmsx8ZN^@TkHA}^Y=+hZqR z`xWZT*RRYVA^(2m_%T5@ET4%Ui>$aOcycD^+F(Rr;>wr)RyiqJ^)^WeC(r?WRmX|| zmr|n=0y{#=der;|7 zvSTz-ejsys&$YAi<9F`b{>`-uC9O}woFYy=tNTPGVqgfQ$9W=H4A7o>Z*C-{q5R2v zzrK^V5@?&E5X^QcmsegnGNH84NFkt0+Va5lgNNKg6;LHv>)cCxAlsGCUH^oH^YgdJ z;PGQg#DlI8Vg=Hq3tFNgEB3)*xP9^ccV|ZW)R4dZcUivr$&iT;HgjeXOQJh7>;X(N7PKU?Y@2yK($* zXi}(f@03n%S>k~js1zMT(?_y6>Z_WAqN5xLNId!RjU#6S%vm-fJ(`cTHCKnh7|JJY zPNCEE@9R+6-s!~ZK9H=6?}*S{iCb>F;hmP1&!**nfBz-PZcZL`+c2*i35iI88*tgb zH}u%>wtW8P@ex6VymWIOae4jbf+18&9<40mfx<+^U|1{)9RMH4dM4z7A)o)t^!B&^ zQyY7@kF#Z=l3_q<)|`fZHh|?60kct)6-3*n8R6PFZF7;_Jvh5n%NGf2MeVF|@TTx3 z{S!iD>I>S>5SlG1t$gFt*(2~KKO&D{TSZNXLp+$&9`PwlAKHWJdzZjdJ$+;ksahwBTanMK*yo+Zz+^|d4PITZPz4KUjQFYnNaMU46jTUc-ItA-U*y-+L2-0)8F;snCMt7vRgvO_HPs4DTC;9d( zGxvu8G3!Qn!+ye~TljaVuh{aaxy zTcuOL?a@M|FnO>nTReSnFDhHTEOZvxDb2{3WR?BD~;_0`_=sdjsP)0Cg>HB50FbCt?s8*{D9cFB? z-3r?6r>T_)Rq*c?<`zd?CydRci1vJaL;# z5XVhv1!;}j8`fc4g{Sp~+FC>FSaA4zQmy0DxhA~|!8LGu>wvhBv|iPr;~IKn*R3f? S!p%;0YfDOdX-Y?b9Qhx)@<`MG diff --git a/dist/showdown.min.js.map b/dist/showdown.min.js.map index 1a27c066ad4ff7561a0694c0a32fc6c692a6e4b8..788cc8ae3e069a0cbd84496ac8310fc385397027 100644 GIT binary patch delta 2160 zcmZWqT}+!*7|x-L(aNA3nHk7_$j~u4OG`_kOqX%aY5Vn~z&HL{I>88~=?^QV<)?)U ziI-};*-31caI-|cFwro-xkgR&T20J|Hzu0J3lrlK!}LNknBaR31xkDK{haguKJW9s z?{90zK3hAsURR-?tuPF&GCWMkD4uZ<=4aSPNIwn`_fUf36eDDwVMf>-OH&*oB!u0B zO&2th@LjBtq&P+inV~`>N*BsCA|*aj6gyWzrA?}I(WP>g&Jri{6rv+R;liIS7q`)) zF)dOYCL|*5Pp?osDRNi_q5UM5HP4~ODCC_f2!Vr}?d1-v>Y=!RX&GRG3?M846SY(R z%V6`Wl?o>WUT~VFj&eK65-4mG_Y*qC2TqleB~pT0gdIWXR=Gw3OzqPvNEAO- z2?>kGSf5~_2Wx;A&=VNzV*m;83)(UU;vB?hwYS@C4U8Gbd;#Ij5%`UyNq*vbSm z!XD6JQ6_GP>cR@xlwu^DVdBrXAR<%1j&Qfg?*uw(qf#ym*UUm={O3S3it_&gD@ftl zvCHN-#q)v^(%S-?;rGT!YZt@8!?TdU2Lu%2&N6`Fp!BzRWAJ^jb1(R6?ZTm(EM4T= z!E?3Q!=n{y<2`}r^=mgjL3I`vm{6ch8u5@6lPQ793 zI;ysKAc4t|PW_Eg5WOtxMMX*hudFUKzCskpK@@LFUQEJ?C(1Xb&l|KQs#k`e7)>h- zC*`cm=sUB!#{vJHr6z;YO?hjk!>keyR8J1ZghE1oeKK?E+9`*CoJ|QdePEt>JGt}0 z1^vVOZ=te9&B37k7&R6ca(QIF0b=m!F%UXuy`VXUM8w`s&@&rgn&h5_Kx0 z@V_3vz@I!i!#5u`7$HQ_5Z*=o_S|gA&1e!6asW1Kh zJ*sx7!sDckul;jHU;5+RiQa0l-{`0Uu}deU{k67`TSfJdWeiL ztYBZL{!|YB8}p%R^rOKDGcibD@h0=vYtWs8%B6C@HlUXMI;Qe9jVM`Vf-wbIyZuS! z_Ty&0xqBw}^##-?*aRhHy=^pi_Z8HXw>G1y3X@%C2TLoK>$!;jJOK>|3>F9wEs?+4 zg1)IV%}Il>&69b@LPqn%*d-w9rl; zB%0`p(P&O$W3msLY#@Uvfp8crF^j+sD~xt}4tTD4-o&gCG~i8Uz_p zssLQF5s(ZrfrPkZWV`_;3YKcgw!Nc-^T2=wQ-L@dfYP;^NnSe<+!%W}VrH@dAX^WZ zAi^TXehyd|t_Ex$ls`IC%ggH|!aT-{9N~@8|JQz`J_OXSI{8EcOsZO8E?ATXkE5(M zKt$^$j?)^o)*4_^Kp7-vpZogGZc^URD&=yyMdQE3l~^oLLBSHhA;7%Gto~kFq`bL( z7=CeNl=6OwxBx<9lv}VO3NnapT*DEK@{_v73CQ5b1ExGn`R&$(aW4X9I!u!6UHaJyl4m!9r>w=}Peo$a_k*9Jj+g{4WT>JCyTC6CT^zg!bBL2-B{8srN**W$ z9hVFe@&X8hm7HPsL?t8tgKIS>H7NmEKlBu+5dvwa0;_EHQt#=STONok#|Y+{s7Ds| z(xu_13Z0QTsL8O%!+3-^v`LH}@-Y0uxGn%0fV+4gCC?sQ`m*B?ph4YoB&+W(-9B+7 zzk)pp>eP2bPasoF2G5}dr*01iQ8#3!!a9Rk{wbr%uol3xgRqanJr8XXEZHjcTsH26 zz^GFFyOrO~7BHlZrKst**8Xj4<*pJkYu*}Ue{7Als5qDq^@;q+^Cul5Xik^8j4EVL zr<|<)TEAX=|5;SAN!2#J{n|it$Ew8lQruvZAaQp7`Ue)6BWRZmmv>aZd;P^O^B6E7 zSXtKCD?4s8@Zs$~mDhjViMMs+L?I8GZyFfOQ97zW_3al{(>iZaWjP6eUS0j^D`avg zJWj~YGJl@a)n87vSAY4 z>UP6X6KCPFO;onn3wt92FqH{1%V{dy3Qv}Tm6c4PLUF7>*=Ku0GE8C=H=5?7{7r$d#r6J9}*ZjCq*y^+sKzEWW?eX3Q&HV6pu{wzt1z zKDg_%>rda+P)BtlSjp-?-*cPHusGmZQhb}`$6L`3Y6h}eX|fgdm2D<;>x3DWND$Kv zk}0>}k6u5jNw)M(H#&1zp=|m4Zj^4d!rp<@Bwt1b$|8I9wxjfNKbp2cdq8#Qbd;8! z>_a`}d;O@b$pWQ=RN!GsmaM1IZaa(;v}C}LKV3GRL7y~RHVlvOc4x{rhtM<4mI`0$ y+mzXxUq4V@J%`Me&hcp;SBA+036<rMDgE8&htIm(8P=8" } @@ -272,6 +274,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -493,6 +496,12 @@ "node": ">=4" } }, + "node_modules/chai-match": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chai-match/-/chai-match-1.1.1.tgz", + "integrity": "sha1-OfsKLmt8j2OG3P6tSNFIqRX6bEY=", + "dev": true + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -574,6 +583,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -584,6 +594,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -594,7 +605,8 @@ "node_modules/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colors": { "version": "1.1.2", @@ -617,6 +629,14 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/compare-func": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", @@ -1293,7 +1313,8 @@ "node_modules/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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/entities": { "version": "1.0.0", @@ -1314,6 +1335,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -1414,12 +1436,12 @@ } }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1866,6 +1888,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2294,14 +2317,14 @@ } }, "node_modules/grunt-contrib-jshint": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.1.1.tgz", - "integrity": "sha512-EwMY6L91FqTcMlZTVoDeeq/EZL+7MoFyo1rxIea9sxyv73geVggeE37jcUhNbu5hLbxHE82CGIUqitHuR2/q+g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz", + "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==", "dev": true, "dependencies": { - "chalk": "^4.1.0", + "chalk": "~4.1.2", "hooker": "^0.2.3", - "jshint": "~2.13.0" + "jshint": "~2.13.4" }, "engines": { "node": ">=10" @@ -3011,6 +3034,7 @@ "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==", + "dev": true, "engines": { "node": ">=8" } @@ -3875,9 +3899,9 @@ } }, "node_modules/mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -3988,24 +4012,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -4774,6 +4780,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4960,16 +4967,16 @@ "dev": true }, "node_modules/sinon": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", - "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz", + "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^8.1.0", - "@sinonjs/samsam": "^6.0.2", + "@sinonjs/fake-timers": "^9.0.0", + "@sinonjs/samsam": "^6.1.1", "diff": "^5.0.0", - "nise": "^5.1.0", + "nise": "^5.1.1", "supports-color": "^7.2.0" }, "funding": { @@ -5077,6 +5084,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5090,6 +5098,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5287,9 +5296,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -5503,6 +5512,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5570,6 +5580,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -5581,20 +5592,21 @@ "dev": true }, "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -5654,14 +5666,6 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5677,9 +5681,9 @@ }, "dependencies": { "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -5717,9 +5721,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -5743,9 +5747,9 @@ } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.0.tgz", + "integrity": "sha512-M8vapsv9qQupMdzrVzkn5rb9jG7aUTEPAZdMtME2PuBaefksFZVE2C1g4LBRTkF/k3nRDNbDc5tp5NFC1PEYxA==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -5865,12 +5869,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -6044,6 +6050,12 @@ "type-detect": "^4.0.5" } }, + "chai-match": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chai-match/-/chai-match-1.1.1.tgz", + "integrity": "sha1-OfsKLmt8j2OG3P6tSNFIqRX6bEY=", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6101,6 +6113,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6111,6 +6124,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -6118,7 +6132,8 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "colors": { "version": "1.1.2", @@ -6135,6 +6150,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==" + }, "compare-func": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", @@ -6701,7 +6721,8 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "entities": { "version": "1.0.0", @@ -6721,7 +6742,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "4.0.0", @@ -6791,12 +6813,12 @@ } }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -7140,7 +7162,8 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-func-name": { "version": "2.0.0", @@ -7467,14 +7490,14 @@ } }, "grunt-contrib-jshint": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.1.1.tgz", - "integrity": "sha512-EwMY6L91FqTcMlZTVoDeeq/EZL+7MoFyo1rxIea9sxyv73geVggeE37jcUhNbu5hLbxHE82CGIUqitHuR2/q+g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz", + "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==", "dev": true, "requires": { - "chalk": "^4.1.0", + "chalk": "~4.1.2", "hooker": "^0.2.3", - "jshint": "~2.13.0" + "jshint": "~2.13.4" } }, "grunt-contrib-uglify": { @@ -8021,7 +8044,8 @@ "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -8687,9 +8711,9 @@ "dev": true }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -8770,21 +8794,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } } } }, @@ -9382,7 +9391,8 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "resolve": { "version": "1.22.0", @@ -9522,16 +9532,16 @@ "dev": true }, "sinon": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", - "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz", + "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", "dev": true, "requires": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^8.1.0", - "@sinonjs/samsam": "^6.0.2", + "@sinonjs/fake-timers": "^9.0.0", + "@sinonjs/samsam": "^6.1.1", "diff": "^5.0.0", - "nise": "^5.1.0", + "nise": "^5.1.1", "supports-color": "^7.2.0" } }, @@ -9628,6 +9638,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9638,6 +9649,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -9781,9 +9793,9 @@ "dev": true }, "uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "dev": true }, "unc-path-regex": { @@ -9953,6 +9965,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9993,7 +10006,8 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yallist": { "version": "4.0.0", @@ -10002,24 +10016,18 @@ "dev": true }, "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" - } + "yargs-parser": "^20.2.2" } }, "yargs-parser": { diff --git a/package.json b/package.json index 13db0a6..193dd45 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,13 @@ "bin": { "showdown": "bin/showdown.js" }, + "files": [ + "bin", + "dist" + ], "devDependencies": { - "chai": "^4.3.4", + "chai": "*", + "chai-match": "*", "grunt": "^1.4.1", "grunt-contrib-clean": "^2.0.0", "grunt-contrib-concat": "^2.0.0", @@ -56,10 +61,10 @@ "quiet-grunt": "^0.2.0", "semver": "^7.3.0", "semver-sort": "^0.0.4", - "sinon": "^12.0.1", + "sinon": "*", "source-map-support": "^0.5.20" }, "dependencies": { - "yargs": "^17.2.1" + "commander": "^9.0.0" } } diff --git a/performance.json b/performance.json index e9b5113..b174246 100644 --- a/performance.json +++ b/performance.json @@ -1 +1 @@ -{"1.9.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3936490399999775,"maxTime":9.154145999999855,"minTime":0.1039659999999003},{"name":"performance.testfile.md","time":49.28604768000001,"maxTime":177.703806,"minTime":26.15487600000006}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":6.101473349999969,"maxTime":16.106017999999494,"minTime":2.3755520000004253},{"name":"anchors","time":0.7673005500000272,"maxTime":3.5068249999994805,"minTime":0.3227470000001631},{"name":"autoLinks","time":0.24398885000014162,"maxTime":0.5475550000001022,"minTime":0.1238549999998213},{"name":"blockQuotes","time":2.39676685000004,"maxTime":3.9998349999996208,"minTime":2.0133280000000013},{"name":"codeBlocks","time":0.22560649999995802,"maxTime":0.3432389999998122,"minTime":0.2076310000002195},{"name":"codeSpans","time":0.3156803499997295,"maxTime":1.136395000000448,"minTime":0.25765599999976985},{"name":"detab","time":0.09548314999992727,"maxTime":0.1841260000001057,"minTime":0.08528200000000652},{"name":"encodeAmpsAndAngles","time":0.1041621500000474,"maxTime":0.15278500000022177,"minTime":0.09643300000061572},{"name":"encodeBackslashEscapes","time":0.06167165000006207,"maxTime":0.13681400000041322,"minTime":0.0557490000001053},{"name":"encodeCode","time":0.5582229499999357,"maxTime":1.4690870000003997,"minTime":0.4854770000001736},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2429643500000566,"maxTime":0.7139010000000781,"minTime":0.19226200000048266},{"name":"githubCodeBlocks","time":0.21287450000004354,"maxTime":0.40682400000059715,"minTime":0.18593400000008842},{"name":"hashBlock","time":0.04615199999998367,"maxTime":0.14736100000027363,"minTime":0.03616299999976036},{"name":"hashElement","time":0.0030586500000481464,"maxTime":0.05032500000015716,"minTime":0.0003010000000358559},{"name":"hashHTMLSpans","time":4.914028949999965,"maxTime":7.36442100000022,"minTime":4.474463000000469},{"name":"hashPreCodeTags","time":0.1344178499998634,"maxTime":0.23384899999928166,"minTime":0.11029499999949621},{"name":"headers","time":1.5151488000000426,"maxTime":3.8660350000000108,"minTime":1.1529700000000958},{"name":"horizontalRule","time":0.21591819999998735,"maxTime":0.2929129999993165,"minTime":0.19437199999993027},{"name":"images","time":0.1438803000000007,"maxTime":0.2862829999994574,"minTime":0.12355399999978545},{"name":"italicsAndBold","time":0.2337130000000343,"maxTime":0.656343000000561,"minTime":0.18985200000042823},{"name":"lists","time":4.48329264999993,"maxTime":7.663963999999396,"minTime":2.481929000000491},{"name":"outdent","time":0.28611790000009024,"maxTime":0.5382139999992432,"minTime":0.1790019999998549},{"name":"paragraphs","time":10.25719725000008,"maxTime":18.655751000000237,"minTime":5.229348000000755},{"name":"spanGamut","time":10.287920150000037,"maxTime":31.12385600000016,"minTime":6.1023629999999685},{"name":"strikethrough","time":0.006765400000085719,"maxTime":0.106075000000601,"minTime":0.0009039999995366088},{"name":"stripLinkDefinitions","time":0.4384660999999596,"maxTime":0.6777389999997467,"minTime":0.3917570000003252},{"name":"tables","time":0.007413199999791687,"maxTime":0.09552799999983108,"minTime":0.0009039999995366088},{"name":"unescapeSpecialChars","time":0.041104299999869906,"maxTime":0.08648799999991752,"minTime":0.007834999999431602}]}],"1.8.7":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.33883280000000016,"maxTime":9.453979000000004,"minTime":0.10396600000001399},{"name":"performance.testfile.md","time":31.606076540000007,"maxTime":62.065620999999965,"minTime":24.85089999999991}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":3.9868116500000497,"maxTime":7.593740000000253,"minTime":2.211011999999755},{"name":"anchors","time":0.7631257499999947,"maxTime":7.965909000000011,"minTime":0.28959800000029645},{"name":"autoLinks","time":0.09381050000001778,"maxTime":0.1928649999999834,"minTime":0.07111800000029689},{"name":"blockQuotes","time":2.9216417500000262,"maxTime":9.315057000000252,"minTime":2.0208590000002005},{"name":"codeBlocks","time":0.23919720000003508,"maxTime":0.3462520000002769,"minTime":0.2049179999999069},{"name":"codeSpans","time":0.28953800000001595,"maxTime":0.3781959999996616,"minTime":0.24288799999976618},{"name":"detab","time":0.09350929999993696,"maxTime":0.16061999999965337,"minTime":0.08377500000005966},{"name":"encodeAmpsAndAngles","time":0.2622806499999797,"maxTime":1.4684820000002219,"minTime":0.09341799999992872},{"name":"encodeBackslashEscapes","time":0.0919119000000137,"maxTime":0.17659199999980046,"minTime":0.05364000000008673},{"name":"encodeCode","time":0.5350182500000074,"maxTime":1.1794870000003357,"minTime":0.4565459999998893},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.18979079999999157,"maxTime":0.2516279999999824,"minTime":0.17478299999993396},{"name":"githubCodeBlocks","time":0.21962444999999206,"maxTime":0.44569799999999304,"minTime":0.18352299999969546},{"name":"hashBlock","time":0.0413153000000193,"maxTime":0.09432299999980387,"minTime":0.03555899999992107},{"name":"hashElement","time":0.0017178000000058092,"maxTime":0.024711000000024796,"minTime":0.00030099999958110857},{"name":"hashHTMLSpans","time":4.397085900000002,"maxTime":5.805222999999842,"minTime":4.070948999999928},{"name":"hashPreCodeTags","time":0.11919945000004191,"maxTime":0.22119199999997363,"minTime":0.10788400000001275},{"name":"headers","time":1.3265012499999784,"maxTime":3.3853760000001785,"minTime":1.0848630000000412},{"name":"horizontalRule","time":0.2119551499999716,"maxTime":0.27031199999964883,"minTime":0.19828899999993155},{"name":"images","time":0.2279720999999654,"maxTime":1.3355869999995775,"minTime":0.12264999999979409},{"name":"italicsAndBold","time":0.21115654999998695,"maxTime":0.36282699999992474,"minTime":0.1901519999996708},{"name":"lists","time":2.6773367000000237,"maxTime":4.027855000000272,"minTime":2.23542099999986},{"name":"outdent","time":0.14778250000003937,"maxTime":0.21757500000012442,"minTime":0.1353070000000116},{"name":"paragraphs","time":5.846387499999992,"maxTime":7.678721000000223,"minTime":4.920155999999679},{"name":"spanGamut","time":4.081857800000011,"maxTime":5.226328000000194,"minTime":3.633086000000276},{"name":"strikethrough","time":0.004595649999987472,"maxTime":0.07895400000006703,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.32735740000002805,"maxTime":1.680934999999863,"minTime":0.22058900000001813},{"name":"tables","time":0.0027121500000021116,"maxTime":0.04279100000030667,"minTime":0.0003010000000358559},{"name":"unescapeSpecialChars","time":0.009658349999972416,"maxTime":0.04158599999982471,"minTime":0.007233000000269385}]}],"1.8.6":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.45411727999999585,"maxTime":9.635387000000037,"minTime":0.08739200000002256},{"name":"performance.testfile.md","time":31.98737462000001,"maxTime":60.66882399999997,"minTime":27.815873999999894}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.333244149999996,"maxTime":15.245030000000042,"minTime":2.412311999999929},{"name":"anchors","time":0.3991541500000039,"maxTime":0.6699029999999766,"minTime":0.29050199999983306},{"name":"autoLinks","time":0.11754180000002634,"maxTime":0.29050199999983306,"minTime":0.07202300000017203},{"name":"blockQuotes","time":2.896627800000033,"maxTime":6.028219000000263,"minTime":1.9973519999998643},{"name":"codeBlocks","time":0.30523805000000265,"maxTime":1.1201209999999264,"minTime":0.1892480000001342},{"name":"codeSpans","time":0.29353060000003095,"maxTime":0.6256039999998393,"minTime":0.23475199999984397},{"name":"detab","time":0.12911374999996497,"maxTime":0.7654300000003786,"minTime":0.08708999999998923},{"name":"encodeAmpsAndAngles","time":0.11029435000000376,"maxTime":0.16634600000043065,"minTime":0.09432199999992008},{"name":"encodeBackslashEscapes","time":0.09931010000000243,"maxTime":0.34926499999983207,"minTime":0.06810500000028696},{"name":"encodeCode","time":0.9484710999999834,"maxTime":1.385609999999815,"minTime":0.8416729999999006},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.21427540000001954,"maxTime":0.4731200000001081,"minTime":0.16182600000001912},{"name":"githubCodeBlocks","time":0.16141849999999067,"maxTime":0.2519290000000183,"minTime":0.14766199999985474},{"name":"hashBlock","time":0.04166174999995746,"maxTime":0.06961200000023382,"minTime":0.03706700000020646},{"name":"hashElement","time":0.0017780000001039297,"maxTime":0.02320400000007794,"minTime":0.0003020000003743917},{"name":"hashHTMLSpans","time":4.291640700000016,"maxTime":5.134413000000222,"minTime":3.9208739999999125},{"name":"hashPreCodeTags","time":0.13144915000002583,"maxTime":0.3613190000000941,"minTime":0.10969199999999546},{"name":"headers","time":1.550358849999975,"maxTime":3.809976000000006,"minTime":1.1493510000000242},{"name":"horizontalRule","time":0.2135671499999944,"maxTime":0.28748899999982314,"minTime":0.20100000000002183},{"name":"images","time":0.17642580000001545,"maxTime":0.4318359999997483,"minTime":0.13229299999966315},{"name":"italicsAndBold","time":0.32444914999998675,"maxTime":1.5516539999998713,"minTime":0.22842399999990448},{"name":"lists","time":2.931177999999977,"maxTime":3.8349889999999505,"minTime":2.5855889999998},{"name":"outdent","time":0.15392984999996315,"maxTime":0.2724209999996674,"minTime":0.13681300000007468},{"name":"paragraphs","time":6.5485914500000035,"maxTime":8.260927000000265,"minTime":5.729882000000089},{"name":"spanGamut","time":4.222872200000029,"maxTime":5.584631000000172,"minTime":3.756336999999803},{"name":"strikethrough","time":0.00494234999996479,"maxTime":0.08709099999987302,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24242145000005166,"maxTime":0.37276999999994587,"minTime":0.2239039999999477},{"name":"tables","time":0.0029532999999901223,"maxTime":0.04218899999978021,"minTime":0.0006020000000717118},{"name":"unescapeSpecialChars","time":0.009808949999978722,"maxTime":0.05303699999967648,"minTime":0.007231999999930849}]}],"1.8.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.7357727200000045,"maxTime":11.075555000000008,"minTime":0.11662300000000414},{"name":"performance.testfile.md","time":32.917593419999996,"maxTime":62.42667800000004,"minTime":27.940666000000192}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.259524950000037,"maxTime":17.332808000000114,"minTime":2.340292000000318},{"name":"anchors","time":0.5218948500000351,"maxTime":2.8983949999997094,"minTime":0.306775000000016},{"name":"autoLinks","time":0.12436755000001085,"maxTime":0.30014600000004066,"minTime":0.07142100000010032},{"name":"blockQuotes","time":2.24432690000001,"maxTime":3.3329420000000027,"minTime":2.0148330000001806},{"name":"codeBlocks","time":0.24412445000000388,"maxTime":0.8169630000002144,"minTime":0.19015300000000934},{"name":"codeSpans","time":0.3541780499999959,"maxTime":1.2014869999998155,"minTime":0.24288900000010472},{"name":"detab","time":0.09634199999998146,"maxTime":0.1431420000003527,"minTime":0.08769299999994473},{"name":"encodeAmpsAndAngles","time":0.1376722000000427,"maxTime":0.19768599999997605,"minTime":0.09613100000024133},{"name":"encodeBackslashEscapes","time":0.0932680999999775,"maxTime":0.1841260000001057,"minTime":0.07051599999977043},{"name":"encodeCode","time":0.9610537499999964,"maxTime":1.6110220000000481,"minTime":0.8582480000000032},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2516583999999966,"maxTime":0.5204329999996844,"minTime":0.1582090000001699},{"name":"githubCodeBlocks","time":0.26234104999991814,"maxTime":0.3896469999999681,"minTime":0.16092100000014398},{"name":"hashBlock","time":0.051877600000034364,"maxTime":0.12867700000015247,"minTime":0.03736699999990378},{"name":"hashElement","time":0.002682149999986905,"maxTime":0.040380999999797496,"minTime":0.0003020000003743917},{"name":"hashHTMLSpans","time":4.239888850000034,"maxTime":4.673051000000214,"minTime":4.043529000000035},{"name":"hashPreCodeTags","time":0.13398059999999531,"maxTime":0.3372110000000248,"minTime":0.11270500000000538},{"name":"headers","time":1.4121460499999785,"maxTime":4.474761999999828,"minTime":1.076727000000119},{"name":"horizontalRule","time":0.3580051499999854,"maxTime":2.6859419999996135,"minTime":0.19648099999994884},{"name":"images","time":0.18359815000001162,"maxTime":0.4803540000002613,"minTime":0.13048499999968044},{"name":"italicsAndBold","time":0.29952790000002094,"maxTime":0.4577519999998003,"minTime":0.23414999999977226},{"name":"lists","time":3.073871250000002,"maxTime":4.651354000000083,"minTime":2.6256719999996676},{"name":"outdent","time":0.20359270000003563,"maxTime":0.9311750000001666,"minTime":0.13681300000007468},{"name":"paragraphs","time":6.405547999999953,"maxTime":8.019855000000007,"minTime":5.821198000000095},{"name":"spanGamut","time":4.135636349999913,"maxTime":6.038471999999729,"minTime":3.839814999999817},{"name":"strikethrough","time":0.007217349999996259,"maxTime":0.1319909999997435,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24829814999998234,"maxTime":0.40260499999976673,"minTime":0.21667100000013306},{"name":"tables","time":0.0033450000000129878,"maxTime":0.04008000000021639,"minTime":0.0006029999999555002},{"name":"unescapeSpecialChars","time":0.009387199999969198,"maxTime":0.03947699999980614,"minTime":0.006930999999894993}]}],"1.8.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.9269011799999908,"maxTime":32.65378700000008,"minTime":0.14705900000001293},{"name":"performance.testfile.md","time":32.484542280000035,"maxTime":62.282010000000014,"minTime":28.40262900000016}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.454346750000013,"maxTime":18.356191000000308,"minTime":2.3848909999996977},{"name":"anchors","time":0.504325800000015,"maxTime":3.1102430000000822,"minTime":0.2902009999997972},{"name":"autoLinks","time":0.11421199999999772,"maxTime":0.28417399999989357,"minTime":0.06931099999974322},{"name":"blockQuotes","time":2.268720650000046,"maxTime":3.373623999999836,"minTime":1.996752000000015},{"name":"codeBlocks","time":0.2502117500000395,"maxTime":0.8398649999999179,"minTime":0.19196000000010827},{"name":"codeSpans","time":0.3517671000000064,"maxTime":1.230717999999797,"minTime":0.2486149999999725},{"name":"detab","time":0.11473945000000185,"maxTime":0.17900200000030964,"minTime":0.08739199999990888},{"name":"encodeAmpsAndAngles","time":0.10544264999996358,"maxTime":0.16212700000005498,"minTime":0.09462399999983973},{"name":"encodeBackslashEscapes","time":0.10833570000006602,"maxTime":0.2347530000001825,"minTime":0.07503700000006575},{"name":"encodeCode","time":0.9939308499999925,"maxTime":1.9153870000000097,"minTime":0.8467970000001515},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.23689210000002275,"maxTime":0.4746280000003935,"minTime":0.1600180000000364},{"name":"githubCodeBlocks","time":0.2020106000000169,"maxTime":0.7714579999997113,"minTime":0.15127899999970396},{"name":"hashBlock","time":0.07104355000003579,"maxTime":0.4927090000001044,"minTime":0.03917600000022503},{"name":"hashElement","time":0.0024862499999926515,"maxTime":0.036463999999796215,"minTime":0.0006019999996169645},{"name":"hashHTMLSpans","time":4.161957949999987,"maxTime":4.708306999999877,"minTime":3.9594499999998334},{"name":"hashPreCodeTags","time":0.1303646000000299,"maxTime":0.3314860000000408,"minTime":0.11240400000042428},{"name":"headers","time":1.4091020500000013,"maxTime":4.621517999999924,"minTime":1.043880000000172},{"name":"horizontalRule","time":0.3509834499999897,"maxTime":2.6549019999997654,"minTime":0.19617999999991298},{"name":"images","time":0.19913270000001831,"maxTime":0.5445410000002084,"minTime":0.1307859999997163},{"name":"italicsAndBold","time":0.268699450000031,"maxTime":0.35710100000005696,"minTime":0.23475200000029872},{"name":"lists","time":3.0566478999999847,"maxTime":4.403038999999808,"minTime":2.6856400000001486},{"name":"outdent","time":0.15278490000002876,"maxTime":0.3073779999999715,"minTime":0.13621100000000297},{"name":"paragraphs","time":6.455042899999944,"maxTime":7.90051799999992,"minTime":5.708189999999831},{"name":"spanGamut","time":4.255919250000034,"maxTime":5.54154299999982,"minTime":3.929916999999932},{"name":"strikethrough","time":0.005107850000035797,"maxTime":0.08889899999985573,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24843364999996992,"maxTime":0.3935639999999694,"minTime":0.22480699999960052},{"name":"tables","time":0.0021395500000380707,"maxTime":0.028025000000070577,"minTime":0.0006020000000717118},{"name":"unescapeSpecialChars","time":0.008935100000007879,"maxTime":0.03887399999985064,"minTime":0.006930999999894993}]}],"1.8.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.36118707999999744,"maxTime":8.97694100000001,"minTime":0.10366399999998066},{"name":"performance.testfile.md","time":33.109353200000044,"maxTime":56.477973000000134,"minTime":29.178900000000112}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.488247100000035,"maxTime":20.713954999999714,"minTime":2.3207030000003215},{"name":"anchors","time":0.5058775499999456,"maxTime":3.1581569999998464,"minTime":0.29200900000023466},{"name":"autoLinks","time":0.14073085000002267,"maxTime":0.36463400000002366,"minTime":0.07232500000009168},{"name":"blockQuotes","time":2.3000001499999825,"maxTime":3.6421259999997346,"minTime":2.046473999999762},{"name":"codeBlocks","time":0.24317504999999073,"maxTime":0.8772320000002765,"minTime":0.18924799999967945},{"name":"codeSpans","time":0.26844330000001265,"maxTime":1.1755699999998797,"minTime":0.1594150000000809},{"name":"detab","time":0.0950761500000226,"maxTime":0.17207199999984368,"minTime":0.0891990000000078},{"name":"encodeAmpsAndAngles","time":0.10803434999995716,"maxTime":0.22993099999985134,"minTime":0.09733700000015233},{"name":"encodeBackslashEscapes","time":0.07844164999999066,"maxTime":0.11903299999994488,"minTime":0.07413300000007439},{"name":"encodeCode","time":1.0021724500000346,"maxTime":1.5441220000002431,"minTime":0.850713999999698},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.25580170000000635,"maxTime":0.5656359999998131,"minTime":0.16363400000000183},{"name":"githubCodeBlocks","time":0.2531047000000399,"maxTime":0.9986770000000433,"minTime":0.15248300000030213},{"name":"hashBlock","time":0.04166155000000345,"maxTime":0.08015899999963949,"minTime":0.037066000000322674},{"name":"hashElement","time":0.002244949999999335,"maxTime":0.0322439999999915,"minTime":0.00030099999958110857},{"name":"hashHTMLSpans","time":4.444473249999987,"maxTime":5.282380000000103,"minTime":3.9871729999999843},{"name":"hashPreCodeTags","time":0.15179035000001023,"maxTime":0.2648869999998169,"minTime":0.11722499999996217},{"name":"headers","time":1.4647912000000134,"maxTime":4.970481000000291,"minTime":1.0589469999999892},{"name":"horizontalRule","time":0.24510365000001003,"maxTime":0.5623199999999997,"minTime":0.20461699999987104},{"name":"images","time":0.31239540000003674,"maxTime":2.6151230000000396,"minTime":0.1310880000000907},{"name":"italicsAndBold","time":0.287217499999997,"maxTime":0.42671299999983603,"minTime":0.24379300000009607},{"name":"lists","time":3.260661600000026,"maxTime":4.098372000000381,"minTime":2.7923170000003665},{"name":"outdent","time":0.17895719999999074,"maxTime":0.37729099999978644,"minTime":0.1410319999999956},{"name":"paragraphs","time":6.661300749999964,"maxTime":9.04655300000013,"minTime":5.883574999999837},{"name":"spanGamut","time":4.560794749999991,"maxTime":6.1731730000001335,"minTime":4.0085690000000795},{"name":"strikethrough","time":0.005469599999855745,"maxTime":0.09703499999977794,"minTime":0.00030099999958110857},{"name":"stripLinkDefinitions","time":0.25079934999998843,"maxTime":0.4017010000002301,"minTime":0.21576699999968696},{"name":"tables","time":0.005861300000015035,"maxTime":0.08618700000033641,"minTime":0.001205000000027212},{"name":"unescapeSpecialChars","time":0.013244550000035816,"maxTime":0.06358499999987544,"minTime":0.007835999999770138}]}],"1.8.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3569385800000009,"maxTime":9.000459999999975,"minTime":0.09070699999995213},{"name":"performance.testfile.md","time":31.433715060000004,"maxTime":57.438766999999984,"minTime":26.734683000000132}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.177346950000015,"maxTime":7.660953999999947,"minTime":2.346321999999873},{"name":"anchors","time":0.541678950000005,"maxTime":3.749413000000004,"minTime":0.30014600000004066},{"name":"autoLinks","time":0.08653315000001385,"maxTime":0.18322200000011435,"minTime":0.06931100000019796},{"name":"blockQuotes","time":2.048646549999944,"maxTime":3.5523299999999836,"minTime":1.8153400000001056},{"name":"codeBlocks","time":0.26372769999998125,"maxTime":1.1626129999999648,"minTime":0.18472799999972267},{"name":"codeSpans","time":0.27142715000002227,"maxTime":0.7904450000000907,"minTime":0.16303100000004633},{"name":"detab","time":0.09152044999998452,"maxTime":0.11963699999978417,"minTime":0.08648700000003373},{"name":"encodeAmpsAndAngles","time":0.10590985000001182,"maxTime":0.14615600000024642,"minTime":0.09703500000023269},{"name":"encodeBackslashEscapes","time":0.09130940000002283,"maxTime":0.15218199999981152,"minTime":0.07684500000004846},{"name":"encodeCode","time":0.961777750000033,"maxTime":1.551958999999897,"minTime":0.8615639999998166},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.23877579999996215,"maxTime":0.48698400000012043,"minTime":0.17297599999983504},{"name":"githubCodeBlocks","time":0.22202060000001894,"maxTime":0.9139990000003309,"minTime":0.1404299999999239},{"name":"hashBlock","time":0.0631934499999943,"maxTime":0.402002999999695,"minTime":0.035257999999885214},{"name":"hashElement","time":0.0014766499999950612,"maxTime":0.02531300000009651,"minTime":0},{"name":"hashHTMLSpans","time":4.30338740000002,"maxTime":4.888522000000194,"minTime":4.0212320000000545},{"name":"hashPreCodeTags","time":0.16443229999997583,"maxTime":0.5409259999996721,"minTime":0.11029499999995096},{"name":"headers","time":1.1587860999999975,"maxTime":3.7789459999999053,"minTime":0.9682419999999183},{"name":"horizontalRule","time":0.2442149499999914,"maxTime":0.4185769999999138,"minTime":0.1940709999998944},{"name":"images","time":0.32417875000003277,"maxTime":3.0575109999999768,"minTime":0.13319700000010926},{"name":"italicsAndBold","time":0.28938759999996366,"maxTime":0.41917899999998554,"minTime":0.23656099999971048},{"name":"lists","time":2.6713588999999955,"maxTime":3.1388750000000982,"minTime":2.4942840000003343},{"name":"outdent","time":0.15887245000001257,"maxTime":0.2525319999999738,"minTime":0.13862199999994118},{"name":"paragraphs","time":5.593502349999949,"maxTime":6.832538999999997,"minTime":5.159435999999914},{"name":"spanGamut","time":5.069422249999979,"maxTime":9.599546000000373,"minTime":4.127910000000156},{"name":"strikethrough","time":0.003405200000020159,"maxTime":0.062079000000267115,"minTime":0},{"name":"stripLinkDefinitions","time":0.2712614000000258,"maxTime":0.4004960000002029,"minTime":0.22480799999993906},{"name":"tables","time":0.0018532499999764696,"maxTime":0.03103899999996429,"minTime":0},{"name":"unescapeSpecialChars","time":0.008362499999998363,"maxTime":0.03797099999974307,"minTime":0.006628999999975349}]}],"1.7.6":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3132123199999978,"maxTime":6.2674990000000435,"minTime":0.09161100000005717},{"name":"performance.testfile.md","time":30.962222960000013,"maxTime":54.58250999999996,"minTime":26.38147600000002}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.098720800000001,"maxTime":7.07210699999996,"minTime":2.3604820000000473},{"name":"anchors","time":0.573802499999988,"maxTime":4.501581999999871,"minTime":0.2944200000001729},{"name":"autoLinks","time":0.08704519999992044,"maxTime":0.21034299999973882,"minTime":0.06629800000018804},{"name":"blockQuotes","time":2.176025850000019,"maxTime":4.601932000000033,"minTime":1.8228730000000724},{"name":"codeBlocks","time":0.2823659499999621,"maxTime":0.8853699999999662,"minTime":0.19256300000006377},{"name":"codeSpans","time":0.26464649999998074,"maxTime":0.7636240000001635,"minTime":0.16604400000005626},{"name":"detab","time":0.10188689999999952,"maxTime":0.15459400000008827,"minTime":0.09070699999983844},{"name":"encodeAmpsAndAngles","time":0.1072658999999021,"maxTime":0.17538599999988946,"minTime":0.09823999999980515},{"name":"encodeBackslashEscapes","time":0.1198171499999944,"maxTime":0.8715069999998377,"minTime":0.07292699999970864},{"name":"encodeCode","time":0.982675499999982,"maxTime":1.8424599999998463,"minTime":0.8727119999998649},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.3008235499999728,"maxTime":0.3890440000000126,"minTime":0.2772429999999986},{"name":"githubCodeBlocks","time":0.20439130000002023,"maxTime":0.8889859999999317,"minTime":0.1461549999999079},{"name":"hashBlock","time":0.06328369999998813,"maxTime":0.4149600000000646,"minTime":0.034957000000304106},{"name":"hashElement","time":0.0017929999999978462,"maxTime":0.031942999999955646,"minTime":0},{"name":"hashHTMLSpans","time":4.130528449999997,"maxTime":4.411176999999952,"minTime":3.987779000000046},{"name":"hashPreCodeTags","time":0.26229599999996933,"maxTime":2.428888999999799,"minTime":0.10848600000008446},{"name":"headers","time":1.263836200000037,"maxTime":4.308414999999968,"minTime":0.9534750000002532},{"name":"horizontalRule","time":0.2299157000000605,"maxTime":0.33088400000042384,"minTime":0.19376899999997477},{"name":"images","time":0.18361319999996795,"maxTime":0.5638280000002851,"minTime":0.13379999999961},{"name":"italicsAndBold","time":0.31194355000000085,"maxTime":0.8284139999996114,"minTime":0.25132699999994657},{"name":"lists","time":2.641733750000003,"maxTime":3.2741790000000037,"minTime":2.4511889999998857},{"name":"outdent","time":0.1594599499999731,"maxTime":0.2401769999996759,"minTime":0.14404600000034407},{"name":"paragraphs","time":6.723880100000019,"maxTime":12.671812000000045,"minTime":5.367362999999841},{"name":"spanGamut","time":4.990629550000063,"maxTime":9.206274000000121,"minTime":4.172807000000375},{"name":"strikethrough","time":0.0031943499999670167,"maxTime":0.0581609999999273,"minTime":0},{"name":"stripLinkDefinitions","time":0.245947799999999,"maxTime":0.38994800000000396,"minTime":0.21908299999995506},{"name":"tables","time":0.0024710999999797423,"maxTime":0.043695999999727064,"minTime":0},{"name":"unescapeSpecialChars","time":0.010472100000015416,"maxTime":0.05092800000011266,"minTime":0.006930999999894993}]}],"1.7.5":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.5624536399999989,"maxTime":14.434112000000027,"minTime":0.1175269999999955},{"name":"performance.testfile.md","time":30.396062639999997,"maxTime":57.88561900000002,"minTime":26.627980999999863}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.279682000000003,"maxTime":8.3917220000003,"minTime":2.3574690000000373},{"name":"anchors","time":0.6018129999999928,"maxTime":5.340845000000172,"minTime":0.2853789999999208},{"name":"autoLinks","time":0.09221340000001418,"maxTime":0.19316600000001927,"minTime":0.06478999999990265},{"name":"blockQuotes","time":2.0676297999999633,"maxTime":4.429558999999699,"minTime":1.7363850000001548},{"name":"codeBlocks","time":0.2791716500000575,"maxTime":0.9365990000001148,"minTime":0.18141300000024785},{"name":"codeSpans","time":0.22182445000000825,"maxTime":0.5915520000003198,"minTime":0.1576060000002144},{"name":"detab","time":0.12001294999997754,"maxTime":0.14494999999988067,"minTime":0.09130899999991016},{"name":"encodeAmpsAndAngles","time":0.1162462000000005,"maxTime":0.22179400000004534,"minTime":0.09643299999970623},{"name":"encodeBackslashEscapes","time":0.13970635000002857,"maxTime":0.9139979999999923,"minTime":0.07111899999972593},{"name":"encodeCode","time":1.1949925000000348,"maxTime":2.009107000000313,"minTime":0.8612610000000132},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.30746834999999917,"maxTime":0.46829899999966074,"minTime":0.2691060000001926},{"name":"githubCodeBlocks","time":0.19697799999999005,"maxTime":0.8374539999999797,"minTime":0.14404599999988932},{"name":"hashBlock","time":0.059848400000032595,"maxTime":0.4420820000000276,"minTime":0.03616199999987657},{"name":"hashElement","time":0.00222985000002609,"maxTime":0.0406820000002881,"minTime":0},{"name":"hashHTMLSpans","time":4.289491099999987,"maxTime":4.712226999999984,"minTime":4.001941999999872},{"name":"hashPreCodeTags","time":0.28119055000001936,"maxTime":2.4391359999999622,"minTime":0.10758299999997689},{"name":"headers","time":1.2212554000000182,"maxTime":4.602836000000025,"minTime":0.9082720000001245},{"name":"horizontalRule","time":0.20826354999994692,"maxTime":0.3522789999997258,"minTime":0.19316600000001927},{"name":"images","time":0.1816696500000262,"maxTime":0.6337419999999838,"minTime":0.12807400000019697},{"name":"italicsAndBold","time":0.33532845000006545,"maxTime":1.2762219999999616,"minTime":0.23897100000021965},{"name":"lists","time":3.142624149999983,"maxTime":6.410941999999977,"minTime":2.3930279999999584},{"name":"outdent","time":0.3979791999999634,"maxTime":0.5846209999999701,"minTime":0.15851100000008955},{"name":"paragraphs","time":5.925721800000019,"maxTime":11.595988000000034,"minTime":4.961444000000029},{"name":"spanGamut","time":4.442833449999966,"maxTime":6.011651999999685,"minTime":4.023940000000039},{"name":"strikethrough","time":0.00299849999998969,"maxTime":0.054544999999961874,"minTime":0},{"name":"stripLinkDefinitions","time":0.24257244999998875,"maxTime":0.42400099999986196,"minTime":0.21486400000003414},{"name":"tables","time":0.0026519000000007507,"maxTime":0.04851700000017445,"minTime":0},{"name":"unescapeSpecialChars","time":0.00845289999997476,"maxTime":0.04098400000020774,"minTime":0.006327999999939493}]}],"1.7.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.9721513400000095,"maxTime":25.185683999999924,"minTime":0.16001700000003893},{"name":"performance.testfile.md","time":30.397026539999985,"maxTime":61.91279899999995,"minTime":26.54959800000006}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":3.9990743000000064,"maxTime":6.602594000000408,"minTime":2.3143739999995887},{"name":"anchors","time":0.5273032499999545,"maxTime":3.822632999999769,"minTime":0.2850779999998849},{"name":"autoLinks","time":0.08963684999998804,"maxTime":0.18834400000014284,"minTime":0.06328400000029433},{"name":"blockQuotes","time":2.05724574999997,"maxTime":4.121875000000273,"minTime":1.7803800000001502},{"name":"codeBlocks","time":0.24737865000001874,"maxTime":1.0845610000001216,"minTime":0.18623500000012427},{"name":"codeSpans","time":0.26315439999996215,"maxTime":1.0170579999999063,"minTime":0.16182500000013533},{"name":"detab","time":0.1229059499999721,"maxTime":0.1579079999996793,"minTime":0.0970340000003489},{"name":"encodeAmpsAndAngles","time":0.11849099999999453,"maxTime":0.17116699999996854,"minTime":0.09613099999978658},{"name":"encodeBackslashEscapes","time":0.07934549999995397,"maxTime":0.14645599999994374,"minTime":0.07111799999984214},{"name":"encodeCode","time":0.9450961000000007,"maxTime":1.4528110000001107,"minTime":0.8663830000000416},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2850024500000245,"maxTime":0.4384650000001784,"minTime":0.245600000000195},{"name":"githubCodeBlocks","time":0.22539534999998523,"maxTime":0.9688430000001063,"minTime":0.1416349999999511},{"name":"hashBlock","time":0.06790930000001935,"maxTime":0.5767860000000837,"minTime":0.03555899999992107},{"name":"hashElement","time":0.0022601500000064335,"maxTime":0.04068300000017189,"minTime":0},{"name":"hashHTMLSpans","time":4.125777100000005,"maxTime":4.527794000000085,"minTime":3.95040599999993},{"name":"hashPreCodeTags","time":0.14892740000002505,"maxTime":0.5373079999999391,"minTime":0.10969100000011167},{"name":"headers","time":1.1714858000000277,"maxTime":3.876875999999811,"minTime":0.8841630000001715},{"name":"horizontalRule","time":0.3806509500000175,"maxTime":3.456793000000289,"minTime":0.1967819999999847},{"name":"images","time":0.19467249999997877,"maxTime":0.6180699999999888,"minTime":0.132593999999699},{"name":"italicsAndBold","time":0.2980658500000118,"maxTime":0.5623199999999997,"minTime":0.24499800000012328},{"name":"lists","time":3.7902082000000066,"maxTime":6.13881500000025,"minTime":2.612108000000262},{"name":"outdent","time":0.16693305000001146,"maxTime":0.2763379999996687,"minTime":0.13892200000009325},{"name":"paragraphs","time":5.349426699999981,"maxTime":6.076133999999911,"minTime":4.8972499999999854},{"name":"spanGamut","time":4.370021999999949,"maxTime":6.111091000000215,"minTime":3.9455849999999373},{"name":"strikethrough","time":0.002681949999941935,"maxTime":0.048215999999683845,"minTime":0},{"name":"stripLinkDefinitions","time":0.2550632000000178,"maxTime":0.400796000000355,"minTime":0.21817700000019613},{"name":"tables","time":0.001913599999966209,"maxTime":0.03284799999983079,"minTime":0},{"name":"unescapeSpecialChars","time":0.008859800000004725,"maxTime":0.04008000000021639,"minTime":0.006630000000313885}]}],"1.7.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.2769780200000014,"maxTime":5.742551000000049,"minTime":0.08799399999998059},{"name":"performance.testfile.md","time":30.73344694000001,"maxTime":54.768493000000035,"minTime":26.97154599999999}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.315576899999996,"maxTime":8.270586999999978,"minTime":2.3387870000001385},{"name":"anchors","time":0.5248635000000377,"maxTime":3.812093999999888,"minTime":0.28809199999977864},{"name":"autoLinks","time":0.0845591499999955,"maxTime":0.21998700000040117,"minTime":0.06268099999988408},{"name":"blockQuotes","time":2.032795400000032,"maxTime":3.6222429999997985,"minTime":1.7451259999998001},{"name":"codeBlocks","time":0.25076970000002347,"maxTime":1.059552000000167,"minTime":0.17809899999974732},{"name":"codeSpans","time":0.24638479999996435,"maxTime":0.7494609999998829,"minTime":0.1570040000001427},{"name":"detab","time":0.1421171499999673,"maxTime":0.7524739999998928,"minTime":0.08739100000002509},{"name":"encodeAmpsAndAngles","time":0.10028979999999592,"maxTime":0.12927999999965323,"minTime":0.09492600000021412},{"name":"encodeBackslashEscapes","time":0.07875814999997602,"maxTime":0.1247600000001512,"minTime":0.06991299999981493},{"name":"encodeCode","time":0.9767702500000042,"maxTime":1.773754000000281,"minTime":0.8516189999995731},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.27073390000000475,"maxTime":0.4414790000000721,"minTime":0.24409500000001572},{"name":"githubCodeBlocks","time":0.23499365000002398,"maxTime":0.9848159999996824,"minTime":0.1392240000000129},{"name":"hashBlock","time":0.0681052000000136,"maxTime":0.5496650000000045,"minTime":0.03616199999987657},{"name":"hashElement","time":0.001687549999996918,"maxTime":0.029532000000017433,"minTime":0},{"name":"hashHTMLSpans","time":4.197401899999977,"maxTime":4.563965999999709,"minTime":4.005560999999943},{"name":"hashPreCodeTags","time":0.13869685000001936,"maxTime":0.5433360000001812,"minTime":0.10577400000011039},{"name":"headers","time":1.148419750000039,"maxTime":4.214097000000038,"minTime":0.8796440000000985},{"name":"horizontalRule","time":0.21377854999998364,"maxTime":0.27302400000007765,"minTime":0.1985909999998512},{"name":"images","time":0.3095482500000116,"maxTime":3.095480999999836,"minTime":0.11993800000027477},{"name":"italicsAndBold","time":0.2785843000000341,"maxTime":0.3778940000001967,"minTime":0.23505399999976362},{"name":"lists","time":3.8429223499999354,"maxTime":8.277819999999792,"minTime":2.629892999999811},{"name":"outdent","time":0.19257850000001325,"maxTime":0.3863329999999223,"minTime":0.14404500000000553},{"name":"paragraphs","time":5.540976899999987,"maxTime":8.153060000000096,"minTime":4.83608600000025},{"name":"spanGamut","time":4.637932300000012,"maxTime":5.775095999999849,"minTime":4.142072999999982},{"name":"strikethrough","time":0.0028779499999927794,"maxTime":0.051530999999613414,"minTime":0},{"name":"stripLinkDefinitions","time":0.16675279999994927,"maxTime":0.27483299999994415,"minTime":0.1416349999999511},{"name":"tables","time":0.0021245000000135405,"maxTime":0.03646299999991243,"minTime":0},{"name":"unescapeSpecialChars","time":0.009130949999985205,"maxTime":0.031942999999955646,"minTime":0.00783499999988635}]}],"1.7.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.2924792600000001,"maxTime":5.779913000000079,"minTime":0.0870909999999867},{"name":"performance.testfile.md","time":30.395544379999997,"maxTime":53.85987,"minTime":26.054209000000128}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.303097000000003,"maxTime":7.7980609999999615,"minTime":2.377357999999731},{"name":"anchors","time":0.3474425999999994,"maxTime":0.6473019999998542,"minTime":0.28688599999986764},{"name":"autoLinks","time":0.08811514999999873,"maxTime":0.16544199999998455,"minTime":0.06328399999983958},{"name":"blockQuotes","time":2.1012153500000297,"maxTime":5.12055700000019,"minTime":1.7381930000001375},{"name":"codeBlocks","time":0.23850445000000492,"maxTime":0.8784390000000712,"minTime":0.18412599999965096},{"name":"codeSpans","time":0.2522458500000312,"maxTime":0.6283170000001519,"minTime":0.16031900000007226},{"name":"detab","time":0.09415714999997818,"maxTime":0.12867700000015247,"minTime":0.08769299999994473},{"name":"encodeAmpsAndAngles","time":0.1305904000000055,"maxTime":0.7331880000001547,"minTime":0.09251499999982116},{"name":"encodeBackslashEscapes","time":0.07973749999998744,"maxTime":0.1157189999998991,"minTime":0.07021500000018932},{"name":"encodeCode","time":0.9388443000000052,"maxTime":1.4799349999998412,"minTime":0.8573440000000119},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.28453565000002073,"maxTime":0.4731209999999919,"minTime":0.24349200000006022},{"name":"githubCodeBlocks","time":0.2144414500000039,"maxTime":1.046893000000182,"minTime":0.13952599999993254},{"name":"hashBlock","time":0.06795475000005809,"maxTime":0.5532809999999699,"minTime":0.03616200000033132},{"name":"hashElement","time":0.0016724999999723877,"maxTime":0.029833999999937078,"minTime":0},{"name":"hashHTMLSpans","time":4.323498449999988,"maxTime":6.161724999999933,"minTime":4.0037499999998545},{"name":"hashPreCodeTags","time":0.1474811499999987,"maxTime":0.5584039999998822,"minTime":0.1087880000000041},{"name":"headers","time":1.1759319999999889,"maxTime":4.491336000000047,"minTime":0.8841640000000552},{"name":"horizontalRule","time":0.21614389999997458,"maxTime":0.2636819999997897,"minTime":0.19316600000001927},{"name":"images","time":0.15570804999995289,"maxTime":0.5587049999999181,"minTime":0.11782799999991767},{"name":"italicsAndBold","time":0.3219485000000077,"maxTime":1.012539999999717,"minTime":0.2365599999998267},{"name":"lists","time":2.753399100000024,"maxTime":5.612964000000375,"minTime":2.3276349999996455},{"name":"outdent","time":0.16286519999998744,"maxTime":0.2323420000002443,"minTime":0.1398269999999684},{"name":"paragraphs","time":5.108954950000021,"maxTime":6.168355000000247,"minTime":4.741155999999592},{"name":"spanGamut","time":4.422869150000042,"maxTime":6.14906800000017,"minTime":4.000737000000299},{"name":"strikethrough","time":0.0028779999999869687,"maxTime":0.051230000000032305,"minTime":0},{"name":"stripLinkDefinitions","time":0.1603637499999877,"maxTime":0.2257119999999304,"minTime":0.14193599999998696},{"name":"tables","time":0.002470999999968626,"maxTime":0.04339399999980742,"minTime":0},{"name":"unescapeSpecialChars","time":0.011074649999977737,"maxTime":0.04640800000015588,"minTime":0.006628999999975349}]}],"1.7.1":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":1.0738219599999979,"maxTime":20.566299000000072,"minTime":0.3242529999999988},{"name":"performance.testfile.md","time":30.4629232,"maxTime":82.115725,"minTime":26.02165500000001}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.232850950000011,"maxTime":9.06222600000001,"minTime":2.35927700000002},{"name":"anchors","time":0.35050129999999624,"maxTime":0.7627189999998336,"minTime":0.28568100000029517},{"name":"autoLinks","time":0.08923019999999723,"maxTime":0.19015300000000934,"minTime":0.06509199999982229},{"name":"blockQuotes","time":2.073701349999965,"maxTime":4.988563999999769,"minTime":1.7291510000000017},{"name":"codeBlocks","time":0.2560277500000211,"maxTime":0.9369000000001506,"minTime":0.1790019999998549},{"name":"codeSpans","time":0.24160820000001876,"maxTime":0.8386599999998907,"minTime":0.1576060000002144},{"name":"detab","time":0.09915939999998499,"maxTime":0.16815399999995861,"minTime":0.08618599999999788},{"name":"encodeAmpsAndAngles","time":0.13123839999998382,"maxTime":0.646096999999827,"minTime":0.09311699999989287},{"name":"encodeBackslashEscapes","time":0.07607604999996057,"maxTime":0.1404299999999239,"minTime":0.07021399999985078},{"name":"encodeCode","time":0.9938553500000807,"maxTime":1.7056470000002264,"minTime":0.8648769999999786},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.26711740000000644,"maxTime":0.37518199999976787,"minTime":0.24951800000008006},{"name":"githubCodeBlocks","time":0.19164420000001883,"maxTime":0.9664330000000518,"minTime":0.14012899999988804},{"name":"hashBlock","time":0.05914020000000164,"maxTime":0.39748199999985445,"minTime":0.03646299999991243},{"name":"hashElement","time":0.0017327499999964858,"maxTime":0.030737999999928434,"minTime":0},{"name":"hashHTMLSpans","time":4.116996499999937,"maxTime":5.5849379999999655,"minTime":3.89044100000001},{"name":"hashPreCodeTags","time":0.1423884499999531,"maxTime":0.5294739999999365,"minTime":0.1081850000000486},{"name":"headers","time":1.1452692999999954,"maxTime":4.103494999999839,"minTime":0.8639729999999872},{"name":"horizontalRule","time":0.21682209999996757,"maxTime":0.36583999999993466,"minTime":0.19407000000001062},{"name":"images","time":0.15055509999997413,"maxTime":0.5526780000000144,"minTime":0.11662299999989045},{"name":"italicsAndBold","time":0.3119285999999647,"maxTime":1.2412650000001122,"minTime":0.23625899999979083},{"name":"lists","time":4.022899600000005,"maxTime":7.077227000000221,"minTime":2.4975970000000416},{"name":"outdent","time":0.17451229999999213,"maxTime":0.26066899999977977,"minTime":0.14826499999981024},{"name":"paragraphs","time":6.5566433999999845,"maxTime":8.645457999999962,"minTime":4.997002000000066},{"name":"spanGamut","time":5.072655700000018,"maxTime":6.34705299999996,"minTime":4.136643999999706},{"name":"strikethrough","time":0.006192800000076204,"maxTime":0.11029400000006717,"minTime":0},{"name":"stripLinkDefinitions","time":0.16428144999997585,"maxTime":0.27694100000007893,"minTime":0.1416349999999511},{"name":"tables","time":0.004354600000010578,"maxTime":0.08015999999997803,"minTime":0},{"name":"unescapeSpecialChars","time":0.009130899999991015,"maxTime":0.04580600000008417,"minTime":0.006930999999894993}]}],"1.7.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.39255787999999486,"maxTime":9.953321000000074,"minTime":0.09673299999997198},{"name":"performance.testfile.md","time":29.416470079999975,"maxTime":54.25341800000001,"minTime":25.948727999999846}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.0619999999999665,"maxTime":7.184810000000198,"minTime":2.325826999999663},{"name":"anchors","time":0.4883242500000051,"maxTime":4.085716999999931,"minTime":0.28085900000041875},{"name":"autoLinks","time":0.08583980000000793,"maxTime":0.19979499999999462,"minTime":0.06298299999980372},{"name":"blockQuotes","time":2.071019450000017,"maxTime":4.554016000000047,"minTime":1.7333710000002611},{"name":"codeBlocks","time":0.2531195000000025,"maxTime":0.8639729999999872,"minTime":0.17809799999986353},{"name":"codeSpans","time":0.2609549000000243,"maxTime":0.5924559999998564,"minTime":0.15971599999966202},{"name":"detab","time":0.09453374999998232,"maxTime":0.1298820000001797,"minTime":0.08859699999993609},{"name":"encodeAmpsAndAngles","time":0.10304694999997537,"maxTime":0.19196099999999205,"minTime":0.09462400000029447},{"name":"encodeBackslashEscapes","time":0.1064521499999728,"maxTime":0.5894419999999627,"minTime":0.07051600000022518},{"name":"encodeCode","time":0.9265486000000009,"maxTime":1.1821999999997388,"minTime":0.8347420000000056},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2759772000000112,"maxTime":0.6171669999998812,"minTime":0.24530000000004293},{"name":"githubCodeBlocks","time":0.1951549499999828,"maxTime":0.9799929999999222,"minTime":0.1386210000000574},{"name":"hashBlock","time":0.062304449999965074,"maxTime":0.4833670000002712,"minTime":0.03495699999984936},{"name":"hashElement","time":0.0014464500000030966,"maxTime":0.024711000000024796,"minTime":0},{"name":"hashHTMLSpans","time":4.1203715999999755,"maxTime":4.609765000000152,"minTime":3.8587989999996353},{"name":"hashPreCodeTags","time":0.14734550000000582,"maxTime":0.5351989999999205,"minTime":0.10487000000011903},{"name":"headers","time":1.3076671999999916,"maxTime":4.252966000000015,"minTime":0.8564390000001367},{"name":"horizontalRule","time":0.2203779999999597,"maxTime":0.3742779999997765,"minTime":0.19407000000001062},{"name":"images","time":0.15025354999997945,"maxTime":0.506872000000385,"minTime":0.1163219999998546},{"name":"italicsAndBold","time":0.30579589999997553,"maxTime":0.872110000000248,"minTime":0.24138200000015786},{"name":"lists","time":3.447394599999984,"maxTime":4.893336999999974,"minTime":2.407492000000275},{"name":"outdent","time":0.26698190000001887,"maxTime":0.8684939999998278,"minTime":0.1808109999997214},{"name":"paragraphs","time":5.866655149999997,"maxTime":8.331147999999757,"minTime":4.9695779999997285},{"name":"spanGamut","time":5.038527899999986,"maxTime":7.123635999999806,"minTime":4.11615299999994},{"name":"strikethrough","time":0.003992900000002919,"maxTime":0.07322800000019924,"minTime":0},{"name":"stripLinkDefinitions","time":0.15298084999997172,"maxTime":0.24288900000010472,"minTime":0.13952599999993254},{"name":"tables","time":0.0024410000000443686,"maxTime":0.043695999999727064,"minTime":0},{"name":"unescapeSpecialChars","time":0.008663700000033714,"maxTime":0.0406820000002881,"minTime":0.006628999999975349}]}],"1.6.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.37575447999999595,"maxTime":6.3811059999999316,"minTime":0.182617999999934},{"name":"performance.testfile.md","time":33.83478732000001,"maxTime":61.04858100000001,"minTime":30.186325000000124}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.5643760500000328,"maxTime":8.346818999999869,"minTime":1.8710879999998724},{"name":"anchors","time":0.4985702000000174,"maxTime":4.221624999999676,"minTime":0.27031199999964883},{"name":"autoLinks","time":0.08000864999996793,"maxTime":0.17357799999990675,"minTime":0.06087299999990137},{"name":"blockQuotes","time":3.3429765499999804,"maxTime":7.305651000000125,"minTime":2.8504790000001776},{"name":"codeBlocks","time":0.22134235000003172,"maxTime":0.8220859999996719,"minTime":0.17176999999992404},{"name":"codeSpans","time":0.22901160000001256,"maxTime":0.7443360000002031,"minTime":0.15579799999977695},{"name":"detab","time":0.0973213499999929,"maxTime":0.15429100000028484,"minTime":0.08618699999988166},{"name":"encodeAmpsAndAngles","time":0.11678870000000643,"maxTime":0.19979600000033315,"minTime":0.09432200000037483},{"name":"encodeBackslashEscapes","time":0.08623155000002498,"maxTime":0.2296289999999317,"minTime":0.06810499999983222},{"name":"encodeCode","time":0.8853238499999861,"maxTime":1.1647219999999834,"minTime":0.8163599999998041},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2983526000000438,"maxTime":0.4954210000000785,"minTime":0.2401769999996759},{"name":"githubCodeBlocks","time":0.18343240000001515,"maxTime":0.7847170000000006,"minTime":0.1331980000004478},{"name":"hashBlock","time":0.0443587499999694,"maxTime":0.09763799999973344,"minTime":0.035257999999885214},{"name":"hashElement","time":0.00200395000001663,"maxTime":0.03345000000035725,"minTime":0},{"name":"hashHTMLSpans","time":4.199521549999963,"maxTime":4.551605000000109,"minTime":3.9874759999997877},{"name":"hashPreCodeTags","time":0.1295205500000293,"maxTime":0.3134050000003299,"minTime":0.10637700000006589},{"name":"headers","time":1.2236204000000044,"maxTime":4.009776000000329,"minTime":0.944735000000037},{"name":"horizontalRule","time":0.41190154999999323,"maxTime":4.175217999999859,"minTime":0.19648000000006505},{"name":"images","time":0.08806979999997111,"maxTime":0.20250800000030722,"minTime":0.0732279999997445},{"name":"italicsAndBold","time":0.2764291999999841,"maxTime":0.4137550000000374,"minTime":0.23324500000035187},{"name":"lists","time":5.0047764500000085,"maxTime":6.109288000000106,"minTime":4.663406000000123},{"name":"outdent","time":0.1521370000000161,"maxTime":0.3366089999999531,"minTime":0.13922500000035143},{"name":"paragraphs","time":5.336081549999994,"maxTime":7.117005000000063,"minTime":4.843312999999853},{"name":"spanGamut","time":4.449883849999901,"maxTime":6.152983999999833,"minTime":3.8569910000001073},{"name":"strikethrough","time":0.002606700000001183,"maxTime":0.04881900000009409,"minTime":0},{"name":"stripLinkDefinitions","time":0.18040370000001077,"maxTime":0.3161169999998492,"minTime":0.14705999999978303},{"name":"tables","time":0.0031190500000320754,"maxTime":0.05544899999995323,"minTime":0},{"name":"unescapeSpecialChars","time":0.009281650000002629,"maxTime":0.047313000000031025,"minTime":0.006628999999975349}]}],"1.6.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3880986600000119,"maxTime":6.064399999999978,"minTime":0.17418099999997594},{"name":"performance.testfile.md","time":26.898552680000012,"maxTime":49.06275100000005,"minTime":24.84523399999989}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6158222500000194,"maxTime":8.18079200000011,"minTime":1.8985149999998612},{"name":"anchors","time":0.5154769000000442,"maxTime":4.690839000000324,"minTime":0.2639840000001641},{"name":"autoLinks","time":0.09307249999999385,"maxTime":0.18834400000014284,"minTime":0.07262600000012753},{"name":"blockQuotes","time":4.5183903999999755,"maxTime":8.952854000000116,"minTime":3.035816000000068},{"name":"codeBlocks","time":0.22262349999998604,"maxTime":0.347758999999769,"minTime":0.18834500000002663},{"name":"codeSpans","time":0.31763950000004115,"maxTime":1.0948100000000522,"minTime":0.1771950000002107},{"name":"detab","time":0.0919273999999632,"maxTime":0.13651200000003882,"minTime":0.08739199999990888},{"name":"encodeAmpsAndAngles","time":0.0438916999999492,"maxTime":0.08919999999989159,"minTime":0.038271000000349886},{"name":"encodeBackslashEscapes","time":0.10785369999998692,"maxTime":0.2651890000001913,"minTime":0.07835100000011153},{"name":"encodeCode","time":1.5346329500000138,"maxTime":9.895783999999821,"minTime":0.8645779999997103},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2937122499999759,"maxTime":0.5234480000003714,"minTime":0.25343700000030367},{"name":"githubCodeBlocks","time":0.20775164999997742,"maxTime":0.7901440000000548,"minTime":0.1416349999999511},{"name":"hashBlock","time":0.042234400000006646,"maxTime":0.12325299999974959,"minTime":0.035860999999840715},{"name":"hashElement","time":0.0016724999999951252,"maxTime":0.028929000000061933,"minTime":0},{"name":"hashHTMLSpans","time":0.4103353000000197,"maxTime":1.5980680000002394,"minTime":0.2404790000000503},{"name":"hashPreCodeTags","time":0.13196184999997057,"maxTime":0.3950719999998,"minTime":0.11029400000006717},{"name":"headers","time":1.0150126000000683,"maxTime":1.501936999999998,"minTime":0.8055130000002464},{"name":"horizontalRule","time":0.22018260000002102,"maxTime":0.35710100000005696,"minTime":0.1946739999998499},{"name":"images","time":0.1582398000000012,"maxTime":0.978186999999707,"minTime":0.07684500000004846},{"name":"italicsAndBold","time":0.28757974999998626,"maxTime":0.6394679999998516,"minTime":0.24078000000008615},{"name":"lists","time":5.151319100000023,"maxTime":6.331397000000379,"minTime":4.629061999999976},{"name":"outdent","time":0.18019314999994548,"maxTime":0.36342999999988024,"minTime":0.14253999999982625},{"name":"paragraphs","time":4.547636500000022,"maxTime":6.308794999999918,"minTime":4.002250999999887},{"name":"spanGamut","time":1.5190982500000245,"maxTime":1.863557999999557,"minTime":1.3720530000000508},{"name":"strikethrough","time":0.003450399999996989,"maxTime":0.06539299999985815,"minTime":0},{"name":"stripLinkDefinitions","time":0.1786111499999606,"maxTime":0.3128030000002582,"minTime":0.1443480000002637},{"name":"tables","time":0.0035106999999925392,"maxTime":0.06268099999988408,"minTime":0.00030099999958110857},{"name":"unescapeSpecialChars","time":0.01146649999998317,"maxTime":0.04881900000009409,"minTime":0.006628999999975349}]}],"1.6.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.6130621400000001,"maxTime":5.893518999999998,"minTime":0.16875699999999938},{"name":"performance.testfile.md","time":25.970254839999992,"maxTime":62.88168,"minTime":23.709682999999927}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6685977000000323,"maxTime":8.478507000000036,"minTime":1.8846490000000813},{"name":"anchors","time":0.5002727000000278,"maxTime":3.841318999999885,"minTime":0.2676000000001295},{"name":"autoLinks","time":0.09846654999997781,"maxTime":0.21064500000011321,"minTime":0.07202299999994466},{"name":"blockQuotes","time":3.221817550000014,"maxTime":5.825714999999946,"minTime":2.791112000000112},{"name":"codeBlocks","time":0.17663659999998343,"maxTime":0.3712639999998828,"minTime":0.1570040000001427},{"name":"codeSpans","time":0.2181328999999778,"maxTime":0.483066000000008,"minTime":0.15097700000001169},{"name":"detab","time":0.13492999999998573,"maxTime":0.6545340000000124,"minTime":0.08498099999997066},{"name":"encodeAmpsAndAngles","time":0.04158639999994875,"maxTime":0.11752699999988181,"minTime":0.03616199999987657},{"name":"encodeBackslashEscapes","time":0.0800689000000034,"maxTime":0.13319799999999304,"minTime":0.06780399999979636},{"name":"encodeCode","time":0.5599700499999927,"maxTime":0.9821019999999407,"minTime":0.48396900000011556},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.35280645000001415,"maxTime":0.5683480000000145,"minTime":0.2914060000000518},{"name":"githubCodeBlocks","time":0.17996669999999995,"maxTime":0.7729650000001129,"minTime":0.1274710000000141},{"name":"hashBlock","time":0.057723849999990764,"maxTime":0.31159699999989243,"minTime":0.037368000000014945},{"name":"hashElement","time":0.0025463500000000748,"maxTime":0.04610600000000886,"minTime":0},{"name":"hashHTMLSpans","time":0.47458235000001425,"maxTime":2.325223000000051,"minTime":0.2344510000000355},{"name":"hashPreCodeTags","time":0.12186629999998785,"maxTime":0.3073779999999715,"minTime":0.10697999999979402},{"name":"headers","time":0.8577350000000024,"maxTime":0.9540770000000975,"minTime":0.7801970000000438},{"name":"horizontalRule","time":0.22663095000001476,"maxTime":0.41797300000007453,"minTime":0.1967819999999847},{"name":"images","time":0.17053435000000264,"maxTime":1.4528119999999944,"minTime":0.07714599999985694},{"name":"italicsAndBold","time":0.10093754999998054,"maxTime":0.20220699999981662,"minTime":0.0882960000001276},{"name":"lists","time":4.9306124000000064,"maxTime":5.460477999999966,"minTime":4.55642499999999},{"name":"outdent","time":0.16260889999998654,"maxTime":0.31461000000012973,"minTime":0.1416349999999511},{"name":"paragraphs","time":3.7896679000000177,"maxTime":5.563840999999911,"minTime":3.278396000000157},{"name":"spanGamut","time":1.4417527499999891,"maxTime":2.0124210000001312,"minTime":1.2032939999999144},{"name":"strikethrough","time":0.004233999999985372,"maxTime":0.08196800000018811,"minTime":0},{"name":"stripBlankLines","time":0.08623144999999113,"maxTime":0.1304850000001352,"minTime":0.0804600000001301},{"name":"stripLinkDefinitions","time":0.15983660000002828,"maxTime":0.21727400000008856,"minTime":0.1446480000001884},{"name":"tables","time":0.004143600000008974,"maxTime":0.07593999999994594,"minTime":0},{"name":"unescapeSpecialChars","time":0.00991439999999102,"maxTime":0.0581609999999273,"minTime":0.006628999999975349}]}],"1.6.1":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3172682400000001,"maxTime":5.4981469999999995,"minTime":0.16062000000000154},{"name":"readme.md","time":26.0144148,"maxTime":46.79858399999999,"minTime":24.245484999999917}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6414157500000215,"maxTime":7.791727999999921,"minTime":1.9364810000001853},{"name":"anchors","time":0.47462755000000245,"maxTime":4.062812000000122,"minTime":0.25885999999991327},{"name":"autoLinks","time":0.08906409999998459,"maxTime":0.19708299999979317,"minTime":0.06870800000001509},{"name":"blockQuotes","time":3.213485000000014,"maxTime":6.05383699999993,"minTime":2.880010000000084},{"name":"codeBlocks","time":0.16200620000001892,"maxTime":0.2691060000001926,"minTime":0.15308599999980288},{"name":"codeSpans","time":0.169494799999984,"maxTime":0.39868699999988166,"minTime":0.1410319999999956},{"name":"detab","time":0.12471390000000611,"maxTime":0.6647800000000643,"minTime":0.08558400000015354},{"name":"encodeAmpsAndAngles","time":0.04181244999999763,"maxTime":0.08920000000011896,"minTime":0.03796999999985928},{"name":"encodeBackslashEscapes","time":0.07586505000000443,"maxTime":0.13289599999984603,"minTime":0.06810500000005959},{"name":"encodeCode","time":0.5765897500000051,"maxTime":0.970348999999942,"minTime":0.4791480000001229},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.24603789999998754,"maxTime":0.35047099999997045,"minTime":0.22119199999997363},{"name":"githubCodeBlocks","time":0.1767573999999968,"maxTime":0.815454999999929,"minTime":0.1250600000000759},{"name":"hashBlock","time":0.06537804999999253,"maxTime":0.42972599999984595,"minTime":0.0376690000000508},{"name":"hashElement","time":0.0020039500000052614,"maxTime":0.034051999999974214,"minTime":0},{"name":"hashHTMLSpans","time":0.42437735000000887,"maxTime":2.3210050000000138,"minTime":0.24078000000008615},{"name":"hashPreCodeTags","time":0.12225794999998243,"maxTime":0.23836899999992056,"minTime":0.10396600000012768},{"name":"headers","time":0.8037480999999957,"maxTime":0.9462419999999838,"minTime":0.7256529999999657},{"name":"horizontalRule","time":0.2186149999999884,"maxTime":0.27362700000003315,"minTime":0.19437100000004648},{"name":"images","time":0.12388539999997192,"maxTime":0.9019430000000739,"minTime":0.07081799999991745},{"name":"italicsAndBold","time":0.10089220000002115,"maxTime":0.15037400000005618,"minTime":0.08950099999992744},{"name":"lists","time":4.938929699999983,"maxTime":5.421000999999933,"minTime":4.623625999999831},{"name":"outdent","time":0.1648239000000217,"maxTime":0.3372110000000248,"minTime":0.1404290000000401},{"name":"paragraphs","time":3.4947812,"maxTime":4.554917999999816,"minTime":3.1714170000000195},{"name":"spanGamut","time":1.318997649999983,"maxTime":1.9916279999999915,"minTime":1.1469409999999698},{"name":"strikethrough","time":0.007458499999995638,"maxTime":0.14314200000012534,"minTime":0},{"name":"stripBlankLines","time":0.09447364999999763,"maxTime":0.1545929999999771,"minTime":0.0822689999999966},{"name":"stripLinkDefinitions","time":0.1762751000000094,"maxTime":0.3112949999999728,"minTime":0.1464570000000549},{"name":"tables","time":0.0023505499999828317,"maxTime":0.03947699999980614,"minTime":0},{"name":"unescapeSpecialChars","time":0.008332400000006146,"maxTime":0.03375200000004952,"minTime":0.0066299999998591375}]}],"1.6.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3075345600000001,"maxTime":5.369168,"minTime":0.1570040000000006},{"name":"readme.md","time":25.81825956,"maxTime":47.795452,"minTime":23.775378000000046}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.652987649999966,"maxTime":8.557761999999911,"minTime":1.8804290000000492},{"name":"anchors","time":0.5166509500000303,"maxTime":4.142066999999997,"minTime":0.27121600000009494},{"name":"autoLinks","time":0.0885518999999931,"maxTime":0.19437100000004648,"minTime":0.0705159999999978},{"name":"blockGamut","time":17.371581599999978,"maxTime":22.94093699999985,"minTime":14.081522999999834},{"name":"blockQuotes","time":3.011308699999995,"maxTime":4.110426000000189,"minTime":2.7742359999999735},{"name":"codeBlocks","time":0.24291900000000624,"maxTime":0.8344409999999698,"minTime":0.19346700000005512},{"name":"codeSpans","time":0.2271433000000002,"maxTime":0.4583549999999832,"minTime":0.19135800000003655},{"name":"detab","time":0.09469964999999547,"maxTime":0.13289599999984603,"minTime":0.08950099999992744},{"name":"encodeAmpsAndAngles","time":0.040486450000014426,"maxTime":0.07262600000012753,"minTime":0.03766799999993964},{"name":"encodeBackslashEscapes","time":0.09959649999997282,"maxTime":0.5095850000000155,"minTime":0.06840699999997923},{"name":"encodeCode","time":0.5320952499999863,"maxTime":0.7057630000001609,"minTime":0.4794489999999314},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.38607564999999794,"maxTime":0.7018459999999322,"minTime":0.326663999999937},{"name":"githubCodeBlocks","time":0.21441115000002356,"maxTime":0.7780880000000252,"minTime":0.15579800000000432},{"name":"hashBlock","time":0.056638900000007195,"maxTime":0.27995499999997264,"minTime":0.035257999999885214},{"name":"hashElement","time":0.001958799999999883,"maxTime":0.033148999999866646,"minTime":0},{"name":"hashHTMLSpans","time":0.38414695000003574,"maxTime":1.9973540000000867,"minTime":0.2356569999999465},{"name":"hashPreCodeTags","time":0.1327451500000393,"maxTime":0.20009700000014163,"minTime":0.1157189999998991},{"name":"headers","time":0.9440720999999825,"maxTime":2.4683650000001762,"minTime":0.7823069999999461},{"name":"images","time":0.12035954999996648,"maxTime":0.4857769999998709,"minTime":0.08588499999996202},{"name":"italicsAndBold","time":0.11076150000000098,"maxTime":0.4447930000001179,"minTime":0.08799499999986438},{"name":"lists","time":5.782546349999995,"maxTime":13.248890999999958,"minTime":4.463608999999906},{"name":"outdent","time":0.3057505000000219,"maxTime":0.9561860000001161,"minTime":0.22541000000001077},{"name":"paragraphs","time":6.582542549999971,"maxTime":8.810596000000032,"minTime":4.498867000000246},{"name":"spanGamut","time":2.43690389999997,"maxTime":3.067450000000008,"minTime":1.6474849999999606},{"name":"strikethrough","time":0.005228549999992537,"maxTime":0.10035000000016225,"minTime":0},{"name":"stripBlankLines","time":0.12142940000005638,"maxTime":0.17508399999996982,"minTime":0.09191199999986566},{"name":"stripLinkDefinitions","time":0.24673084999997172,"maxTime":0.572566000000279,"minTime":0.17146900000034293},{"name":"tables","time":0.005650249999962398,"maxTime":0.0985419999997248,"minTime":0.00030099999958110857},{"name":"unescapeSpecialChars","time":0.016694800000050237,"maxTime":0.06569400000034875,"minTime":0.011450999999851774}]}]} \ No newline at end of file +{"2.0.1":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3865813207626343,"maxTime":11.381125926971436,"minTime":0.10385394096374512},{"name":"performance.testfile.md","time":30.322567601203918,"maxTime":64.08384299278259,"minTime":23.32712709903717}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.435867667198181,"maxTime":7.669201016426086,"minTime":2.2745211124420166},{"name":"anchors","time":0.31466996669769287,"maxTime":0.9765210151672363,"minTime":0.25575900077819824},{"name":"autoLinks","time":0.08270589113235474,"maxTime":0.23026597499847412,"minTime":0.07214593887329102},{"name":"blockQuotes","time":4.346578878164292,"maxTime":13.862305998802185,"minTime":2.032451033592224},{"name":"codeBlocks","time":0.21687456369400024,"maxTime":0.37099695205688477,"minTime":0.20330798625946045},{"name":"codeSpans","time":0.3108913660049438,"maxTime":0.7343809604644775,"minTime":0.22551703453063965},{"name":"detab","time":0.06189696192741394,"maxTime":0.1404510736465454,"minTime":0.0447690486907959},{"name":"encodeAmpsAndAngles","time":0.1676434099674225,"maxTime":1.439987063407898,"minTime":0.09121298789978027},{"name":"encodeBackslashEscapes","time":0.07289693355560303,"maxTime":0.15036892890930176,"minTime":0.06062197685241699},{"name":"encodeCode","time":0.6009387910366059,"maxTime":1.7365329265594482,"minTime":0.5258350372314453},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.21107785701751708,"maxTime":0.28928303718566895,"minTime":0.19471800327301025},{"name":"githubCodeBlocks","time":0.16878905296325683,"maxTime":0.2673529386520386,"minTime":0.14869308471679688},{"name":"hashBlock","time":0.03823458552360535,"maxTime":0.11433100700378418,"minTime":0.03380298614501953},{"name":"hashElement","time":0.004378896951675415,"maxTime":0.05741000175476074,"minTime":0.001326918601989746},{"name":"hashHTMLSpans","time":4.053039556741714,"maxTime":4.393575072288513,"minTime":3.929759979248047},{"name":"hashPreCodeTags","time":0.24762220978736876,"maxTime":1.8907430171966553,"minTime":0.11181604862213135},{"name":"headers","time":1.2734403908252716,"maxTime":3.1448830366134644,"minTime":1.0228259563446045},{"name":"horizontalRule","time":0.18026734590530397,"maxTime":0.4179999828338623,"minTime":0.1472949981689453},{"name":"images","time":0.14869558215141296,"maxTime":0.40228593349456787,"minTime":0.12159395217895508},{"name":"italicsAndBold","time":0.27772718071937563,"maxTime":1.0414729118347168,"minTime":0.20896494388580322},{"name":"lists","time":2.979495048522949,"maxTime":4.758007049560547,"minTime":2.2697709798812866},{"name":"outdent","time":0.20757519006729125,"maxTime":0.4265209436416626,"minTime":0.15958690643310547},{"name":"paragraphs","time":5.246857392787933,"maxTime":7.340946912765503,"minTime":4.530882954597473},{"name":"spanGamut","time":4.851279991865158,"maxTime":10.234540939331055,"minTime":3.5122480392456055},{"name":"strikethrough","time":0.007162201404571533,"maxTime":0.10092103481292725,"minTime":0.001326918601989746},{"name":"stripLinkDefinitions","time":1.7138003587722779,"maxTime":2.9899749755859375,"minTime":1.4627560377120972},{"name":"tables","time":0.007528853416442871,"maxTime":0.10790503025054932,"minTime":0.0013959407806396484},{"name":"unescapeSpecialChars","time":0.011873072385787964,"maxTime":0.07850110530853271,"minTime":0.008031010627746582}]}],"1.9.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3936490399999775,"maxTime":9.154145999999855,"minTime":0.1039659999999003},{"name":"performance.testfile.md","time":49.28604768000001,"maxTime":177.703806,"minTime":26.15487600000006}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":6.101473349999969,"maxTime":16.106017999999494,"minTime":2.3755520000004253},{"name":"anchors","time":0.7673005500000272,"maxTime":3.5068249999994805,"minTime":0.3227470000001631},{"name":"autoLinks","time":0.24398885000014162,"maxTime":0.5475550000001022,"minTime":0.1238549999998213},{"name":"blockQuotes","time":2.39676685000004,"maxTime":3.9998349999996208,"minTime":2.0133280000000013},{"name":"codeBlocks","time":0.22560649999995802,"maxTime":0.3432389999998122,"minTime":0.2076310000002195},{"name":"codeSpans","time":0.3156803499997295,"maxTime":1.136395000000448,"minTime":0.25765599999976985},{"name":"detab","time":0.09548314999992727,"maxTime":0.1841260000001057,"minTime":0.08528200000000652},{"name":"encodeAmpsAndAngles","time":0.1041621500000474,"maxTime":0.15278500000022177,"minTime":0.09643300000061572},{"name":"encodeBackslashEscapes","time":0.06167165000006207,"maxTime":0.13681400000041322,"minTime":0.0557490000001053},{"name":"encodeCode","time":0.5582229499999357,"maxTime":1.4690870000003997,"minTime":0.4854770000001736},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2429643500000566,"maxTime":0.7139010000000781,"minTime":0.19226200000048266},{"name":"githubCodeBlocks","time":0.21287450000004354,"maxTime":0.40682400000059715,"minTime":0.18593400000008842},{"name":"hashBlock","time":0.04615199999998367,"maxTime":0.14736100000027363,"minTime":0.03616299999976036},{"name":"hashElement","time":0.0030586500000481464,"maxTime":0.05032500000015716,"minTime":0.0003010000000358559},{"name":"hashHTMLSpans","time":4.914028949999965,"maxTime":7.36442100000022,"minTime":4.474463000000469},{"name":"hashPreCodeTags","time":0.1344178499998634,"maxTime":0.23384899999928166,"minTime":0.11029499999949621},{"name":"headers","time":1.5151488000000426,"maxTime":3.8660350000000108,"minTime":1.1529700000000958},{"name":"horizontalRule","time":0.21591819999998735,"maxTime":0.2929129999993165,"minTime":0.19437199999993027},{"name":"images","time":0.1438803000000007,"maxTime":0.2862829999994574,"minTime":0.12355399999978545},{"name":"italicsAndBold","time":0.2337130000000343,"maxTime":0.656343000000561,"minTime":0.18985200000042823},{"name":"lists","time":4.48329264999993,"maxTime":7.663963999999396,"minTime":2.481929000000491},{"name":"outdent","time":0.28611790000009024,"maxTime":0.5382139999992432,"minTime":0.1790019999998549},{"name":"paragraphs","time":10.25719725000008,"maxTime":18.655751000000237,"minTime":5.229348000000755},{"name":"spanGamut","time":10.287920150000037,"maxTime":31.12385600000016,"minTime":6.1023629999999685},{"name":"strikethrough","time":0.006765400000085719,"maxTime":0.106075000000601,"minTime":0.0009039999995366088},{"name":"stripLinkDefinitions","time":0.4384660999999596,"maxTime":0.6777389999997467,"minTime":0.3917570000003252},{"name":"tables","time":0.007413199999791687,"maxTime":0.09552799999983108,"minTime":0.0009039999995366088},{"name":"unescapeSpecialChars","time":0.041104299999869906,"maxTime":0.08648799999991752,"minTime":0.007834999999431602}]}],"1.8.7":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.33883280000000016,"maxTime":9.453979000000004,"minTime":0.10396600000001399},{"name":"performance.testfile.md","time":31.606076540000007,"maxTime":62.065620999999965,"minTime":24.85089999999991}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":3.9868116500000497,"maxTime":7.593740000000253,"minTime":2.211011999999755},{"name":"anchors","time":0.7631257499999947,"maxTime":7.965909000000011,"minTime":0.28959800000029645},{"name":"autoLinks","time":0.09381050000001778,"maxTime":0.1928649999999834,"minTime":0.07111800000029689},{"name":"blockQuotes","time":2.9216417500000262,"maxTime":9.315057000000252,"minTime":2.0208590000002005},{"name":"codeBlocks","time":0.23919720000003508,"maxTime":0.3462520000002769,"minTime":0.2049179999999069},{"name":"codeSpans","time":0.28953800000001595,"maxTime":0.3781959999996616,"minTime":0.24288799999976618},{"name":"detab","time":0.09350929999993696,"maxTime":0.16061999999965337,"minTime":0.08377500000005966},{"name":"encodeAmpsAndAngles","time":0.2622806499999797,"maxTime":1.4684820000002219,"minTime":0.09341799999992872},{"name":"encodeBackslashEscapes","time":0.0919119000000137,"maxTime":0.17659199999980046,"minTime":0.05364000000008673},{"name":"encodeCode","time":0.5350182500000074,"maxTime":1.1794870000003357,"minTime":0.4565459999998893},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.18979079999999157,"maxTime":0.2516279999999824,"minTime":0.17478299999993396},{"name":"githubCodeBlocks","time":0.21962444999999206,"maxTime":0.44569799999999304,"minTime":0.18352299999969546},{"name":"hashBlock","time":0.0413153000000193,"maxTime":0.09432299999980387,"minTime":0.03555899999992107},{"name":"hashElement","time":0.0017178000000058092,"maxTime":0.024711000000024796,"minTime":0.00030099999958110857},{"name":"hashHTMLSpans","time":4.397085900000002,"maxTime":5.805222999999842,"minTime":4.070948999999928},{"name":"hashPreCodeTags","time":0.11919945000004191,"maxTime":0.22119199999997363,"minTime":0.10788400000001275},{"name":"headers","time":1.3265012499999784,"maxTime":3.3853760000001785,"minTime":1.0848630000000412},{"name":"horizontalRule","time":0.2119551499999716,"maxTime":0.27031199999964883,"minTime":0.19828899999993155},{"name":"images","time":0.2279720999999654,"maxTime":1.3355869999995775,"minTime":0.12264999999979409},{"name":"italicsAndBold","time":0.21115654999998695,"maxTime":0.36282699999992474,"minTime":0.1901519999996708},{"name":"lists","time":2.6773367000000237,"maxTime":4.027855000000272,"minTime":2.23542099999986},{"name":"outdent","time":0.14778250000003937,"maxTime":0.21757500000012442,"minTime":0.1353070000000116},{"name":"paragraphs","time":5.846387499999992,"maxTime":7.678721000000223,"minTime":4.920155999999679},{"name":"spanGamut","time":4.081857800000011,"maxTime":5.226328000000194,"minTime":3.633086000000276},{"name":"strikethrough","time":0.004595649999987472,"maxTime":0.07895400000006703,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.32735740000002805,"maxTime":1.680934999999863,"minTime":0.22058900000001813},{"name":"tables","time":0.0027121500000021116,"maxTime":0.04279100000030667,"minTime":0.0003010000000358559},{"name":"unescapeSpecialChars","time":0.009658349999972416,"maxTime":0.04158599999982471,"minTime":0.007233000000269385}]}],"1.8.6":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.45411727999999585,"maxTime":9.635387000000037,"minTime":0.08739200000002256},{"name":"performance.testfile.md","time":31.98737462000001,"maxTime":60.66882399999997,"minTime":27.815873999999894}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.333244149999996,"maxTime":15.245030000000042,"minTime":2.412311999999929},{"name":"anchors","time":0.3991541500000039,"maxTime":0.6699029999999766,"minTime":0.29050199999983306},{"name":"autoLinks","time":0.11754180000002634,"maxTime":0.29050199999983306,"minTime":0.07202300000017203},{"name":"blockQuotes","time":2.896627800000033,"maxTime":6.028219000000263,"minTime":1.9973519999998643},{"name":"codeBlocks","time":0.30523805000000265,"maxTime":1.1201209999999264,"minTime":0.1892480000001342},{"name":"codeSpans","time":0.29353060000003095,"maxTime":0.6256039999998393,"minTime":0.23475199999984397},{"name":"detab","time":0.12911374999996497,"maxTime":0.7654300000003786,"minTime":0.08708999999998923},{"name":"encodeAmpsAndAngles","time":0.11029435000000376,"maxTime":0.16634600000043065,"minTime":0.09432199999992008},{"name":"encodeBackslashEscapes","time":0.09931010000000243,"maxTime":0.34926499999983207,"minTime":0.06810500000028696},{"name":"encodeCode","time":0.9484710999999834,"maxTime":1.385609999999815,"minTime":0.8416729999999006},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.21427540000001954,"maxTime":0.4731200000001081,"minTime":0.16182600000001912},{"name":"githubCodeBlocks","time":0.16141849999999067,"maxTime":0.2519290000000183,"minTime":0.14766199999985474},{"name":"hashBlock","time":0.04166174999995746,"maxTime":0.06961200000023382,"minTime":0.03706700000020646},{"name":"hashElement","time":0.0017780000001039297,"maxTime":0.02320400000007794,"minTime":0.0003020000003743917},{"name":"hashHTMLSpans","time":4.291640700000016,"maxTime":5.134413000000222,"minTime":3.9208739999999125},{"name":"hashPreCodeTags","time":0.13144915000002583,"maxTime":0.3613190000000941,"minTime":0.10969199999999546},{"name":"headers","time":1.550358849999975,"maxTime":3.809976000000006,"minTime":1.1493510000000242},{"name":"horizontalRule","time":0.2135671499999944,"maxTime":0.28748899999982314,"minTime":0.20100000000002183},{"name":"images","time":0.17642580000001545,"maxTime":0.4318359999997483,"minTime":0.13229299999966315},{"name":"italicsAndBold","time":0.32444914999998675,"maxTime":1.5516539999998713,"minTime":0.22842399999990448},{"name":"lists","time":2.931177999999977,"maxTime":3.8349889999999505,"minTime":2.5855889999998},{"name":"outdent","time":0.15392984999996315,"maxTime":0.2724209999996674,"minTime":0.13681300000007468},{"name":"paragraphs","time":6.5485914500000035,"maxTime":8.260927000000265,"minTime":5.729882000000089},{"name":"spanGamut","time":4.222872200000029,"maxTime":5.584631000000172,"minTime":3.756336999999803},{"name":"strikethrough","time":0.00494234999996479,"maxTime":0.08709099999987302,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24242145000005166,"maxTime":0.37276999999994587,"minTime":0.2239039999999477},{"name":"tables","time":0.0029532999999901223,"maxTime":0.04218899999978021,"minTime":0.0006020000000717118},{"name":"unescapeSpecialChars","time":0.009808949999978722,"maxTime":0.05303699999967648,"minTime":0.007231999999930849}]}],"1.8.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.7357727200000045,"maxTime":11.075555000000008,"minTime":0.11662300000000414},{"name":"performance.testfile.md","time":32.917593419999996,"maxTime":62.42667800000004,"minTime":27.940666000000192}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.259524950000037,"maxTime":17.332808000000114,"minTime":2.340292000000318},{"name":"anchors","time":0.5218948500000351,"maxTime":2.8983949999997094,"minTime":0.306775000000016},{"name":"autoLinks","time":0.12436755000001085,"maxTime":0.30014600000004066,"minTime":0.07142100000010032},{"name":"blockQuotes","time":2.24432690000001,"maxTime":3.3329420000000027,"minTime":2.0148330000001806},{"name":"codeBlocks","time":0.24412445000000388,"maxTime":0.8169630000002144,"minTime":0.19015300000000934},{"name":"codeSpans","time":0.3541780499999959,"maxTime":1.2014869999998155,"minTime":0.24288900000010472},{"name":"detab","time":0.09634199999998146,"maxTime":0.1431420000003527,"minTime":0.08769299999994473},{"name":"encodeAmpsAndAngles","time":0.1376722000000427,"maxTime":0.19768599999997605,"minTime":0.09613100000024133},{"name":"encodeBackslashEscapes","time":0.0932680999999775,"maxTime":0.1841260000001057,"minTime":0.07051599999977043},{"name":"encodeCode","time":0.9610537499999964,"maxTime":1.6110220000000481,"minTime":0.8582480000000032},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2516583999999966,"maxTime":0.5204329999996844,"minTime":0.1582090000001699},{"name":"githubCodeBlocks","time":0.26234104999991814,"maxTime":0.3896469999999681,"minTime":0.16092100000014398},{"name":"hashBlock","time":0.051877600000034364,"maxTime":0.12867700000015247,"minTime":0.03736699999990378},{"name":"hashElement","time":0.002682149999986905,"maxTime":0.040380999999797496,"minTime":0.0003020000003743917},{"name":"hashHTMLSpans","time":4.239888850000034,"maxTime":4.673051000000214,"minTime":4.043529000000035},{"name":"hashPreCodeTags","time":0.13398059999999531,"maxTime":0.3372110000000248,"minTime":0.11270500000000538},{"name":"headers","time":1.4121460499999785,"maxTime":4.474761999999828,"minTime":1.076727000000119},{"name":"horizontalRule","time":0.3580051499999854,"maxTime":2.6859419999996135,"minTime":0.19648099999994884},{"name":"images","time":0.18359815000001162,"maxTime":0.4803540000002613,"minTime":0.13048499999968044},{"name":"italicsAndBold","time":0.29952790000002094,"maxTime":0.4577519999998003,"minTime":0.23414999999977226},{"name":"lists","time":3.073871250000002,"maxTime":4.651354000000083,"minTime":2.6256719999996676},{"name":"outdent","time":0.20359270000003563,"maxTime":0.9311750000001666,"minTime":0.13681300000007468},{"name":"paragraphs","time":6.405547999999953,"maxTime":8.019855000000007,"minTime":5.821198000000095},{"name":"spanGamut","time":4.135636349999913,"maxTime":6.038471999999729,"minTime":3.839814999999817},{"name":"strikethrough","time":0.007217349999996259,"maxTime":0.1319909999997435,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24829814999998234,"maxTime":0.40260499999976673,"minTime":0.21667100000013306},{"name":"tables","time":0.0033450000000129878,"maxTime":0.04008000000021639,"minTime":0.0006029999999555002},{"name":"unescapeSpecialChars","time":0.009387199999969198,"maxTime":0.03947699999980614,"minTime":0.006930999999894993}]}],"1.8.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.9269011799999908,"maxTime":32.65378700000008,"minTime":0.14705900000001293},{"name":"performance.testfile.md","time":32.484542280000035,"maxTime":62.282010000000014,"minTime":28.40262900000016}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.454346750000013,"maxTime":18.356191000000308,"minTime":2.3848909999996977},{"name":"anchors","time":0.504325800000015,"maxTime":3.1102430000000822,"minTime":0.2902009999997972},{"name":"autoLinks","time":0.11421199999999772,"maxTime":0.28417399999989357,"minTime":0.06931099999974322},{"name":"blockQuotes","time":2.268720650000046,"maxTime":3.373623999999836,"minTime":1.996752000000015},{"name":"codeBlocks","time":0.2502117500000395,"maxTime":0.8398649999999179,"minTime":0.19196000000010827},{"name":"codeSpans","time":0.3517671000000064,"maxTime":1.230717999999797,"minTime":0.2486149999999725},{"name":"detab","time":0.11473945000000185,"maxTime":0.17900200000030964,"minTime":0.08739199999990888},{"name":"encodeAmpsAndAngles","time":0.10544264999996358,"maxTime":0.16212700000005498,"minTime":0.09462399999983973},{"name":"encodeBackslashEscapes","time":0.10833570000006602,"maxTime":0.2347530000001825,"minTime":0.07503700000006575},{"name":"encodeCode","time":0.9939308499999925,"maxTime":1.9153870000000097,"minTime":0.8467970000001515},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.23689210000002275,"maxTime":0.4746280000003935,"minTime":0.1600180000000364},{"name":"githubCodeBlocks","time":0.2020106000000169,"maxTime":0.7714579999997113,"minTime":0.15127899999970396},{"name":"hashBlock","time":0.07104355000003579,"maxTime":0.4927090000001044,"minTime":0.03917600000022503},{"name":"hashElement","time":0.0024862499999926515,"maxTime":0.036463999999796215,"minTime":0.0006019999996169645},{"name":"hashHTMLSpans","time":4.161957949999987,"maxTime":4.708306999999877,"minTime":3.9594499999998334},{"name":"hashPreCodeTags","time":0.1303646000000299,"maxTime":0.3314860000000408,"minTime":0.11240400000042428},{"name":"headers","time":1.4091020500000013,"maxTime":4.621517999999924,"minTime":1.043880000000172},{"name":"horizontalRule","time":0.3509834499999897,"maxTime":2.6549019999997654,"minTime":0.19617999999991298},{"name":"images","time":0.19913270000001831,"maxTime":0.5445410000002084,"minTime":0.1307859999997163},{"name":"italicsAndBold","time":0.268699450000031,"maxTime":0.35710100000005696,"minTime":0.23475200000029872},{"name":"lists","time":3.0566478999999847,"maxTime":4.403038999999808,"minTime":2.6856400000001486},{"name":"outdent","time":0.15278490000002876,"maxTime":0.3073779999999715,"minTime":0.13621100000000297},{"name":"paragraphs","time":6.455042899999944,"maxTime":7.90051799999992,"minTime":5.708189999999831},{"name":"spanGamut","time":4.255919250000034,"maxTime":5.54154299999982,"minTime":3.929916999999932},{"name":"strikethrough","time":0.005107850000035797,"maxTime":0.08889899999985573,"minTime":0.0003010000000358559},{"name":"stripLinkDefinitions","time":0.24843364999996992,"maxTime":0.3935639999999694,"minTime":0.22480699999960052},{"name":"tables","time":0.0021395500000380707,"maxTime":0.028025000000070577,"minTime":0.0006020000000717118},{"name":"unescapeSpecialChars","time":0.008935100000007879,"maxTime":0.03887399999985064,"minTime":0.006930999999894993}]}],"1.8.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.36118707999999744,"maxTime":8.97694100000001,"minTime":0.10366399999998066},{"name":"performance.testfile.md","time":33.109353200000044,"maxTime":56.477973000000134,"minTime":29.178900000000112}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":5.488247100000035,"maxTime":20.713954999999714,"minTime":2.3207030000003215},{"name":"anchors","time":0.5058775499999456,"maxTime":3.1581569999998464,"minTime":0.29200900000023466},{"name":"autoLinks","time":0.14073085000002267,"maxTime":0.36463400000002366,"minTime":0.07232500000009168},{"name":"blockQuotes","time":2.3000001499999825,"maxTime":3.6421259999997346,"minTime":2.046473999999762},{"name":"codeBlocks","time":0.24317504999999073,"maxTime":0.8772320000002765,"minTime":0.18924799999967945},{"name":"codeSpans","time":0.26844330000001265,"maxTime":1.1755699999998797,"minTime":0.1594150000000809},{"name":"detab","time":0.0950761500000226,"maxTime":0.17207199999984368,"minTime":0.0891990000000078},{"name":"encodeAmpsAndAngles","time":0.10803434999995716,"maxTime":0.22993099999985134,"minTime":0.09733700000015233},{"name":"encodeBackslashEscapes","time":0.07844164999999066,"maxTime":0.11903299999994488,"minTime":0.07413300000007439},{"name":"encodeCode","time":1.0021724500000346,"maxTime":1.5441220000002431,"minTime":0.850713999999698},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.25580170000000635,"maxTime":0.5656359999998131,"minTime":0.16363400000000183},{"name":"githubCodeBlocks","time":0.2531047000000399,"maxTime":0.9986770000000433,"minTime":0.15248300000030213},{"name":"hashBlock","time":0.04166155000000345,"maxTime":0.08015899999963949,"minTime":0.037066000000322674},{"name":"hashElement","time":0.002244949999999335,"maxTime":0.0322439999999915,"minTime":0.00030099999958110857},{"name":"hashHTMLSpans","time":4.444473249999987,"maxTime":5.282380000000103,"minTime":3.9871729999999843},{"name":"hashPreCodeTags","time":0.15179035000001023,"maxTime":0.2648869999998169,"minTime":0.11722499999996217},{"name":"headers","time":1.4647912000000134,"maxTime":4.970481000000291,"minTime":1.0589469999999892},{"name":"horizontalRule","time":0.24510365000001003,"maxTime":0.5623199999999997,"minTime":0.20461699999987104},{"name":"images","time":0.31239540000003674,"maxTime":2.6151230000000396,"minTime":0.1310880000000907},{"name":"italicsAndBold","time":0.287217499999997,"maxTime":0.42671299999983603,"minTime":0.24379300000009607},{"name":"lists","time":3.260661600000026,"maxTime":4.098372000000381,"minTime":2.7923170000003665},{"name":"outdent","time":0.17895719999999074,"maxTime":0.37729099999978644,"minTime":0.1410319999999956},{"name":"paragraphs","time":6.661300749999964,"maxTime":9.04655300000013,"minTime":5.883574999999837},{"name":"spanGamut","time":4.560794749999991,"maxTime":6.1731730000001335,"minTime":4.0085690000000795},{"name":"strikethrough","time":0.005469599999855745,"maxTime":0.09703499999977794,"minTime":0.00030099999958110857},{"name":"stripLinkDefinitions","time":0.25079934999998843,"maxTime":0.4017010000002301,"minTime":0.21576699999968696},{"name":"tables","time":0.005861300000015035,"maxTime":0.08618700000033641,"minTime":0.001205000000027212},{"name":"unescapeSpecialChars","time":0.013244550000035816,"maxTime":0.06358499999987544,"minTime":0.007835999999770138}]}],"1.8.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3569385800000009,"maxTime":9.000459999999975,"minTime":0.09070699999995213},{"name":"performance.testfile.md","time":31.433715060000004,"maxTime":57.438766999999984,"minTime":26.734683000000132}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.177346950000015,"maxTime":7.660953999999947,"minTime":2.346321999999873},{"name":"anchors","time":0.541678950000005,"maxTime":3.749413000000004,"minTime":0.30014600000004066},{"name":"autoLinks","time":0.08653315000001385,"maxTime":0.18322200000011435,"minTime":0.06931100000019796},{"name":"blockQuotes","time":2.048646549999944,"maxTime":3.5523299999999836,"minTime":1.8153400000001056},{"name":"codeBlocks","time":0.26372769999998125,"maxTime":1.1626129999999648,"minTime":0.18472799999972267},{"name":"codeSpans","time":0.27142715000002227,"maxTime":0.7904450000000907,"minTime":0.16303100000004633},{"name":"detab","time":0.09152044999998452,"maxTime":0.11963699999978417,"minTime":0.08648700000003373},{"name":"encodeAmpsAndAngles","time":0.10590985000001182,"maxTime":0.14615600000024642,"minTime":0.09703500000023269},{"name":"encodeBackslashEscapes","time":0.09130940000002283,"maxTime":0.15218199999981152,"minTime":0.07684500000004846},{"name":"encodeCode","time":0.961777750000033,"maxTime":1.551958999999897,"minTime":0.8615639999998166},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.23877579999996215,"maxTime":0.48698400000012043,"minTime":0.17297599999983504},{"name":"githubCodeBlocks","time":0.22202060000001894,"maxTime":0.9139990000003309,"minTime":0.1404299999999239},{"name":"hashBlock","time":0.0631934499999943,"maxTime":0.402002999999695,"minTime":0.035257999999885214},{"name":"hashElement","time":0.0014766499999950612,"maxTime":0.02531300000009651,"minTime":0},{"name":"hashHTMLSpans","time":4.30338740000002,"maxTime":4.888522000000194,"minTime":4.0212320000000545},{"name":"hashPreCodeTags","time":0.16443229999997583,"maxTime":0.5409259999996721,"minTime":0.11029499999995096},{"name":"headers","time":1.1587860999999975,"maxTime":3.7789459999999053,"minTime":0.9682419999999183},{"name":"horizontalRule","time":0.2442149499999914,"maxTime":0.4185769999999138,"minTime":0.1940709999998944},{"name":"images","time":0.32417875000003277,"maxTime":3.0575109999999768,"minTime":0.13319700000010926},{"name":"italicsAndBold","time":0.28938759999996366,"maxTime":0.41917899999998554,"minTime":0.23656099999971048},{"name":"lists","time":2.6713588999999955,"maxTime":3.1388750000000982,"minTime":2.4942840000003343},{"name":"outdent","time":0.15887245000001257,"maxTime":0.2525319999999738,"minTime":0.13862199999994118},{"name":"paragraphs","time":5.593502349999949,"maxTime":6.832538999999997,"minTime":5.159435999999914},{"name":"spanGamut","time":5.069422249999979,"maxTime":9.599546000000373,"minTime":4.127910000000156},{"name":"strikethrough","time":0.003405200000020159,"maxTime":0.062079000000267115,"minTime":0},{"name":"stripLinkDefinitions","time":0.2712614000000258,"maxTime":0.4004960000002029,"minTime":0.22480799999993906},{"name":"tables","time":0.0018532499999764696,"maxTime":0.03103899999996429,"minTime":0},{"name":"unescapeSpecialChars","time":0.008362499999998363,"maxTime":0.03797099999974307,"minTime":0.006628999999975349}]}],"1.7.6":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3132123199999978,"maxTime":6.2674990000000435,"minTime":0.09161100000005717},{"name":"performance.testfile.md","time":30.962222960000013,"maxTime":54.58250999999996,"minTime":26.38147600000002}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.098720800000001,"maxTime":7.07210699999996,"minTime":2.3604820000000473},{"name":"anchors","time":0.573802499999988,"maxTime":4.501581999999871,"minTime":0.2944200000001729},{"name":"autoLinks","time":0.08704519999992044,"maxTime":0.21034299999973882,"minTime":0.06629800000018804},{"name":"blockQuotes","time":2.176025850000019,"maxTime":4.601932000000033,"minTime":1.8228730000000724},{"name":"codeBlocks","time":0.2823659499999621,"maxTime":0.8853699999999662,"minTime":0.19256300000006377},{"name":"codeSpans","time":0.26464649999998074,"maxTime":0.7636240000001635,"minTime":0.16604400000005626},{"name":"detab","time":0.10188689999999952,"maxTime":0.15459400000008827,"minTime":0.09070699999983844},{"name":"encodeAmpsAndAngles","time":0.1072658999999021,"maxTime":0.17538599999988946,"minTime":0.09823999999980515},{"name":"encodeBackslashEscapes","time":0.1198171499999944,"maxTime":0.8715069999998377,"minTime":0.07292699999970864},{"name":"encodeCode","time":0.982675499999982,"maxTime":1.8424599999998463,"minTime":0.8727119999998649},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.3008235499999728,"maxTime":0.3890440000000126,"minTime":0.2772429999999986},{"name":"githubCodeBlocks","time":0.20439130000002023,"maxTime":0.8889859999999317,"minTime":0.1461549999999079},{"name":"hashBlock","time":0.06328369999998813,"maxTime":0.4149600000000646,"minTime":0.034957000000304106},{"name":"hashElement","time":0.0017929999999978462,"maxTime":0.031942999999955646,"minTime":0},{"name":"hashHTMLSpans","time":4.130528449999997,"maxTime":4.411176999999952,"minTime":3.987779000000046},{"name":"hashPreCodeTags","time":0.26229599999996933,"maxTime":2.428888999999799,"minTime":0.10848600000008446},{"name":"headers","time":1.263836200000037,"maxTime":4.308414999999968,"minTime":0.9534750000002532},{"name":"horizontalRule","time":0.2299157000000605,"maxTime":0.33088400000042384,"minTime":0.19376899999997477},{"name":"images","time":0.18361319999996795,"maxTime":0.5638280000002851,"minTime":0.13379999999961},{"name":"italicsAndBold","time":0.31194355000000085,"maxTime":0.8284139999996114,"minTime":0.25132699999994657},{"name":"lists","time":2.641733750000003,"maxTime":3.2741790000000037,"minTime":2.4511889999998857},{"name":"outdent","time":0.1594599499999731,"maxTime":0.2401769999996759,"minTime":0.14404600000034407},{"name":"paragraphs","time":6.723880100000019,"maxTime":12.671812000000045,"minTime":5.367362999999841},{"name":"spanGamut","time":4.990629550000063,"maxTime":9.206274000000121,"minTime":4.172807000000375},{"name":"strikethrough","time":0.0031943499999670167,"maxTime":0.0581609999999273,"minTime":0},{"name":"stripLinkDefinitions","time":0.245947799999999,"maxTime":0.38994800000000396,"minTime":0.21908299999995506},{"name":"tables","time":0.0024710999999797423,"maxTime":0.043695999999727064,"minTime":0},{"name":"unescapeSpecialChars","time":0.010472100000015416,"maxTime":0.05092800000011266,"minTime":0.006930999999894993}]}],"1.7.5":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.5624536399999989,"maxTime":14.434112000000027,"minTime":0.1175269999999955},{"name":"performance.testfile.md","time":30.396062639999997,"maxTime":57.88561900000002,"minTime":26.627980999999863}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.279682000000003,"maxTime":8.3917220000003,"minTime":2.3574690000000373},{"name":"anchors","time":0.6018129999999928,"maxTime":5.340845000000172,"minTime":0.2853789999999208},{"name":"autoLinks","time":0.09221340000001418,"maxTime":0.19316600000001927,"minTime":0.06478999999990265},{"name":"blockQuotes","time":2.0676297999999633,"maxTime":4.429558999999699,"minTime":1.7363850000001548},{"name":"codeBlocks","time":0.2791716500000575,"maxTime":0.9365990000001148,"minTime":0.18141300000024785},{"name":"codeSpans","time":0.22182445000000825,"maxTime":0.5915520000003198,"minTime":0.1576060000002144},{"name":"detab","time":0.12001294999997754,"maxTime":0.14494999999988067,"minTime":0.09130899999991016},{"name":"encodeAmpsAndAngles","time":0.1162462000000005,"maxTime":0.22179400000004534,"minTime":0.09643299999970623},{"name":"encodeBackslashEscapes","time":0.13970635000002857,"maxTime":0.9139979999999923,"minTime":0.07111899999972593},{"name":"encodeCode","time":1.1949925000000348,"maxTime":2.009107000000313,"minTime":0.8612610000000132},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.30746834999999917,"maxTime":0.46829899999966074,"minTime":0.2691060000001926},{"name":"githubCodeBlocks","time":0.19697799999999005,"maxTime":0.8374539999999797,"minTime":0.14404599999988932},{"name":"hashBlock","time":0.059848400000032595,"maxTime":0.4420820000000276,"minTime":0.03616199999987657},{"name":"hashElement","time":0.00222985000002609,"maxTime":0.0406820000002881,"minTime":0},{"name":"hashHTMLSpans","time":4.289491099999987,"maxTime":4.712226999999984,"minTime":4.001941999999872},{"name":"hashPreCodeTags","time":0.28119055000001936,"maxTime":2.4391359999999622,"minTime":0.10758299999997689},{"name":"headers","time":1.2212554000000182,"maxTime":4.602836000000025,"minTime":0.9082720000001245},{"name":"horizontalRule","time":0.20826354999994692,"maxTime":0.3522789999997258,"minTime":0.19316600000001927},{"name":"images","time":0.1816696500000262,"maxTime":0.6337419999999838,"minTime":0.12807400000019697},{"name":"italicsAndBold","time":0.33532845000006545,"maxTime":1.2762219999999616,"minTime":0.23897100000021965},{"name":"lists","time":3.142624149999983,"maxTime":6.410941999999977,"minTime":2.3930279999999584},{"name":"outdent","time":0.3979791999999634,"maxTime":0.5846209999999701,"minTime":0.15851100000008955},{"name":"paragraphs","time":5.925721800000019,"maxTime":11.595988000000034,"minTime":4.961444000000029},{"name":"spanGamut","time":4.442833449999966,"maxTime":6.011651999999685,"minTime":4.023940000000039},{"name":"strikethrough","time":0.00299849999998969,"maxTime":0.054544999999961874,"minTime":0},{"name":"stripLinkDefinitions","time":0.24257244999998875,"maxTime":0.42400099999986196,"minTime":0.21486400000003414},{"name":"tables","time":0.0026519000000007507,"maxTime":0.04851700000017445,"minTime":0},{"name":"unescapeSpecialChars","time":0.00845289999997476,"maxTime":0.04098400000020774,"minTime":0.006327999999939493}]}],"1.7.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.9721513400000095,"maxTime":25.185683999999924,"minTime":0.16001700000003893},{"name":"performance.testfile.md","time":30.397026539999985,"maxTime":61.91279899999995,"minTime":26.54959800000006}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":3.9990743000000064,"maxTime":6.602594000000408,"minTime":2.3143739999995887},{"name":"anchors","time":0.5273032499999545,"maxTime":3.822632999999769,"minTime":0.2850779999998849},{"name":"autoLinks","time":0.08963684999998804,"maxTime":0.18834400000014284,"minTime":0.06328400000029433},{"name":"blockQuotes","time":2.05724574999997,"maxTime":4.121875000000273,"minTime":1.7803800000001502},{"name":"codeBlocks","time":0.24737865000001874,"maxTime":1.0845610000001216,"minTime":0.18623500000012427},{"name":"codeSpans","time":0.26315439999996215,"maxTime":1.0170579999999063,"minTime":0.16182500000013533},{"name":"detab","time":0.1229059499999721,"maxTime":0.1579079999996793,"minTime":0.0970340000003489},{"name":"encodeAmpsAndAngles","time":0.11849099999999453,"maxTime":0.17116699999996854,"minTime":0.09613099999978658},{"name":"encodeBackslashEscapes","time":0.07934549999995397,"maxTime":0.14645599999994374,"minTime":0.07111799999984214},{"name":"encodeCode","time":0.9450961000000007,"maxTime":1.4528110000001107,"minTime":0.8663830000000416},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2850024500000245,"maxTime":0.4384650000001784,"minTime":0.245600000000195},{"name":"githubCodeBlocks","time":0.22539534999998523,"maxTime":0.9688430000001063,"minTime":0.1416349999999511},{"name":"hashBlock","time":0.06790930000001935,"maxTime":0.5767860000000837,"minTime":0.03555899999992107},{"name":"hashElement","time":0.0022601500000064335,"maxTime":0.04068300000017189,"minTime":0},{"name":"hashHTMLSpans","time":4.125777100000005,"maxTime":4.527794000000085,"minTime":3.95040599999993},{"name":"hashPreCodeTags","time":0.14892740000002505,"maxTime":0.5373079999999391,"minTime":0.10969100000011167},{"name":"headers","time":1.1714858000000277,"maxTime":3.876875999999811,"minTime":0.8841630000001715},{"name":"horizontalRule","time":0.3806509500000175,"maxTime":3.456793000000289,"minTime":0.1967819999999847},{"name":"images","time":0.19467249999997877,"maxTime":0.6180699999999888,"minTime":0.132593999999699},{"name":"italicsAndBold","time":0.2980658500000118,"maxTime":0.5623199999999997,"minTime":0.24499800000012328},{"name":"lists","time":3.7902082000000066,"maxTime":6.13881500000025,"minTime":2.612108000000262},{"name":"outdent","time":0.16693305000001146,"maxTime":0.2763379999996687,"minTime":0.13892200000009325},{"name":"paragraphs","time":5.349426699999981,"maxTime":6.076133999999911,"minTime":4.8972499999999854},{"name":"spanGamut","time":4.370021999999949,"maxTime":6.111091000000215,"minTime":3.9455849999999373},{"name":"strikethrough","time":0.002681949999941935,"maxTime":0.048215999999683845,"minTime":0},{"name":"stripLinkDefinitions","time":0.2550632000000178,"maxTime":0.400796000000355,"minTime":0.21817700000019613},{"name":"tables","time":0.001913599999966209,"maxTime":0.03284799999983079,"minTime":0},{"name":"unescapeSpecialChars","time":0.008859800000004725,"maxTime":0.04008000000021639,"minTime":0.006630000000313885}]}],"1.7.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.2769780200000014,"maxTime":5.742551000000049,"minTime":0.08799399999998059},{"name":"performance.testfile.md","time":30.73344694000001,"maxTime":54.768493000000035,"minTime":26.97154599999999}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.315576899999996,"maxTime":8.270586999999978,"minTime":2.3387870000001385},{"name":"anchors","time":0.5248635000000377,"maxTime":3.812093999999888,"minTime":0.28809199999977864},{"name":"autoLinks","time":0.0845591499999955,"maxTime":0.21998700000040117,"minTime":0.06268099999988408},{"name":"blockQuotes","time":2.032795400000032,"maxTime":3.6222429999997985,"minTime":1.7451259999998001},{"name":"codeBlocks","time":0.25076970000002347,"maxTime":1.059552000000167,"minTime":0.17809899999974732},{"name":"codeSpans","time":0.24638479999996435,"maxTime":0.7494609999998829,"minTime":0.1570040000001427},{"name":"detab","time":0.1421171499999673,"maxTime":0.7524739999998928,"minTime":0.08739100000002509},{"name":"encodeAmpsAndAngles","time":0.10028979999999592,"maxTime":0.12927999999965323,"minTime":0.09492600000021412},{"name":"encodeBackslashEscapes","time":0.07875814999997602,"maxTime":0.1247600000001512,"minTime":0.06991299999981493},{"name":"encodeCode","time":0.9767702500000042,"maxTime":1.773754000000281,"minTime":0.8516189999995731},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.27073390000000475,"maxTime":0.4414790000000721,"minTime":0.24409500000001572},{"name":"githubCodeBlocks","time":0.23499365000002398,"maxTime":0.9848159999996824,"minTime":0.1392240000000129},{"name":"hashBlock","time":0.0681052000000136,"maxTime":0.5496650000000045,"minTime":0.03616199999987657},{"name":"hashElement","time":0.001687549999996918,"maxTime":0.029532000000017433,"minTime":0},{"name":"hashHTMLSpans","time":4.197401899999977,"maxTime":4.563965999999709,"minTime":4.005560999999943},{"name":"hashPreCodeTags","time":0.13869685000001936,"maxTime":0.5433360000001812,"minTime":0.10577400000011039},{"name":"headers","time":1.148419750000039,"maxTime":4.214097000000038,"minTime":0.8796440000000985},{"name":"horizontalRule","time":0.21377854999998364,"maxTime":0.27302400000007765,"minTime":0.1985909999998512},{"name":"images","time":0.3095482500000116,"maxTime":3.095480999999836,"minTime":0.11993800000027477},{"name":"italicsAndBold","time":0.2785843000000341,"maxTime":0.3778940000001967,"minTime":0.23505399999976362},{"name":"lists","time":3.8429223499999354,"maxTime":8.277819999999792,"minTime":2.629892999999811},{"name":"outdent","time":0.19257850000001325,"maxTime":0.3863329999999223,"minTime":0.14404500000000553},{"name":"paragraphs","time":5.540976899999987,"maxTime":8.153060000000096,"minTime":4.83608600000025},{"name":"spanGamut","time":4.637932300000012,"maxTime":5.775095999999849,"minTime":4.142072999999982},{"name":"strikethrough","time":0.0028779499999927794,"maxTime":0.051530999999613414,"minTime":0},{"name":"stripLinkDefinitions","time":0.16675279999994927,"maxTime":0.27483299999994415,"minTime":0.1416349999999511},{"name":"tables","time":0.0021245000000135405,"maxTime":0.03646299999991243,"minTime":0},{"name":"unescapeSpecialChars","time":0.009130949999985205,"maxTime":0.031942999999955646,"minTime":0.00783499999988635}]}],"1.7.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.2924792600000001,"maxTime":5.779913000000079,"minTime":0.0870909999999867},{"name":"performance.testfile.md","time":30.395544379999997,"maxTime":53.85987,"minTime":26.054209000000128}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.303097000000003,"maxTime":7.7980609999999615,"minTime":2.377357999999731},{"name":"anchors","time":0.3474425999999994,"maxTime":0.6473019999998542,"minTime":0.28688599999986764},{"name":"autoLinks","time":0.08811514999999873,"maxTime":0.16544199999998455,"minTime":0.06328399999983958},{"name":"blockQuotes","time":2.1012153500000297,"maxTime":5.12055700000019,"minTime":1.7381930000001375},{"name":"codeBlocks","time":0.23850445000000492,"maxTime":0.8784390000000712,"minTime":0.18412599999965096},{"name":"codeSpans","time":0.2522458500000312,"maxTime":0.6283170000001519,"minTime":0.16031900000007226},{"name":"detab","time":0.09415714999997818,"maxTime":0.12867700000015247,"minTime":0.08769299999994473},{"name":"encodeAmpsAndAngles","time":0.1305904000000055,"maxTime":0.7331880000001547,"minTime":0.09251499999982116},{"name":"encodeBackslashEscapes","time":0.07973749999998744,"maxTime":0.1157189999998991,"minTime":0.07021500000018932},{"name":"encodeCode","time":0.9388443000000052,"maxTime":1.4799349999998412,"minTime":0.8573440000000119},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.28453565000002073,"maxTime":0.4731209999999919,"minTime":0.24349200000006022},{"name":"githubCodeBlocks","time":0.2144414500000039,"maxTime":1.046893000000182,"minTime":0.13952599999993254},{"name":"hashBlock","time":0.06795475000005809,"maxTime":0.5532809999999699,"minTime":0.03616200000033132},{"name":"hashElement","time":0.0016724999999723877,"maxTime":0.029833999999937078,"minTime":0},{"name":"hashHTMLSpans","time":4.323498449999988,"maxTime":6.161724999999933,"minTime":4.0037499999998545},{"name":"hashPreCodeTags","time":0.1474811499999987,"maxTime":0.5584039999998822,"minTime":0.1087880000000041},{"name":"headers","time":1.1759319999999889,"maxTime":4.491336000000047,"minTime":0.8841640000000552},{"name":"horizontalRule","time":0.21614389999997458,"maxTime":0.2636819999997897,"minTime":0.19316600000001927},{"name":"images","time":0.15570804999995289,"maxTime":0.5587049999999181,"minTime":0.11782799999991767},{"name":"italicsAndBold","time":0.3219485000000077,"maxTime":1.012539999999717,"minTime":0.2365599999998267},{"name":"lists","time":2.753399100000024,"maxTime":5.612964000000375,"minTime":2.3276349999996455},{"name":"outdent","time":0.16286519999998744,"maxTime":0.2323420000002443,"minTime":0.1398269999999684},{"name":"paragraphs","time":5.108954950000021,"maxTime":6.168355000000247,"minTime":4.741155999999592},{"name":"spanGamut","time":4.422869150000042,"maxTime":6.14906800000017,"minTime":4.000737000000299},{"name":"strikethrough","time":0.0028779999999869687,"maxTime":0.051230000000032305,"minTime":0},{"name":"stripLinkDefinitions","time":0.1603637499999877,"maxTime":0.2257119999999304,"minTime":0.14193599999998696},{"name":"tables","time":0.002470999999968626,"maxTime":0.04339399999980742,"minTime":0},{"name":"unescapeSpecialChars","time":0.011074649999977737,"maxTime":0.04640800000015588,"minTime":0.006628999999975349}]}],"1.7.1":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":1.0738219599999979,"maxTime":20.566299000000072,"minTime":0.3242529999999988},{"name":"performance.testfile.md","time":30.4629232,"maxTime":82.115725,"minTime":26.02165500000001}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.232850950000011,"maxTime":9.06222600000001,"minTime":2.35927700000002},{"name":"anchors","time":0.35050129999999624,"maxTime":0.7627189999998336,"minTime":0.28568100000029517},{"name":"autoLinks","time":0.08923019999999723,"maxTime":0.19015300000000934,"minTime":0.06509199999982229},{"name":"blockQuotes","time":2.073701349999965,"maxTime":4.988563999999769,"minTime":1.7291510000000017},{"name":"codeBlocks","time":0.2560277500000211,"maxTime":0.9369000000001506,"minTime":0.1790019999998549},{"name":"codeSpans","time":0.24160820000001876,"maxTime":0.8386599999998907,"minTime":0.1576060000002144},{"name":"detab","time":0.09915939999998499,"maxTime":0.16815399999995861,"minTime":0.08618599999999788},{"name":"encodeAmpsAndAngles","time":0.13123839999998382,"maxTime":0.646096999999827,"minTime":0.09311699999989287},{"name":"encodeBackslashEscapes","time":0.07607604999996057,"maxTime":0.1404299999999239,"minTime":0.07021399999985078},{"name":"encodeCode","time":0.9938553500000807,"maxTime":1.7056470000002264,"minTime":0.8648769999999786},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.26711740000000644,"maxTime":0.37518199999976787,"minTime":0.24951800000008006},{"name":"githubCodeBlocks","time":0.19164420000001883,"maxTime":0.9664330000000518,"minTime":0.14012899999988804},{"name":"hashBlock","time":0.05914020000000164,"maxTime":0.39748199999985445,"minTime":0.03646299999991243},{"name":"hashElement","time":0.0017327499999964858,"maxTime":0.030737999999928434,"minTime":0},{"name":"hashHTMLSpans","time":4.116996499999937,"maxTime":5.5849379999999655,"minTime":3.89044100000001},{"name":"hashPreCodeTags","time":0.1423884499999531,"maxTime":0.5294739999999365,"minTime":0.1081850000000486},{"name":"headers","time":1.1452692999999954,"maxTime":4.103494999999839,"minTime":0.8639729999999872},{"name":"horizontalRule","time":0.21682209999996757,"maxTime":0.36583999999993466,"minTime":0.19407000000001062},{"name":"images","time":0.15055509999997413,"maxTime":0.5526780000000144,"minTime":0.11662299999989045},{"name":"italicsAndBold","time":0.3119285999999647,"maxTime":1.2412650000001122,"minTime":0.23625899999979083},{"name":"lists","time":4.022899600000005,"maxTime":7.077227000000221,"minTime":2.4975970000000416},{"name":"outdent","time":0.17451229999999213,"maxTime":0.26066899999977977,"minTime":0.14826499999981024},{"name":"paragraphs","time":6.5566433999999845,"maxTime":8.645457999999962,"minTime":4.997002000000066},{"name":"spanGamut","time":5.072655700000018,"maxTime":6.34705299999996,"minTime":4.136643999999706},{"name":"strikethrough","time":0.006192800000076204,"maxTime":0.11029400000006717,"minTime":0},{"name":"stripLinkDefinitions","time":0.16428144999997585,"maxTime":0.27694100000007893,"minTime":0.1416349999999511},{"name":"tables","time":0.004354600000010578,"maxTime":0.08015999999997803,"minTime":0},{"name":"unescapeSpecialChars","time":0.009130899999991015,"maxTime":0.04580600000008417,"minTime":0.006930999999894993}]}],"1.7.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.39255787999999486,"maxTime":9.953321000000074,"minTime":0.09673299999997198},{"name":"performance.testfile.md","time":29.416470079999975,"maxTime":54.25341800000001,"minTime":25.948727999999846}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":4.0619999999999665,"maxTime":7.184810000000198,"minTime":2.325826999999663},{"name":"anchors","time":0.4883242500000051,"maxTime":4.085716999999931,"minTime":0.28085900000041875},{"name":"autoLinks","time":0.08583980000000793,"maxTime":0.19979499999999462,"minTime":0.06298299999980372},{"name":"blockQuotes","time":2.071019450000017,"maxTime":4.554016000000047,"minTime":1.7333710000002611},{"name":"codeBlocks","time":0.2531195000000025,"maxTime":0.8639729999999872,"minTime":0.17809799999986353},{"name":"codeSpans","time":0.2609549000000243,"maxTime":0.5924559999998564,"minTime":0.15971599999966202},{"name":"detab","time":0.09453374999998232,"maxTime":0.1298820000001797,"minTime":0.08859699999993609},{"name":"encodeAmpsAndAngles","time":0.10304694999997537,"maxTime":0.19196099999999205,"minTime":0.09462400000029447},{"name":"encodeBackslashEscapes","time":0.1064521499999728,"maxTime":0.5894419999999627,"minTime":0.07051600000022518},{"name":"encodeCode","time":0.9265486000000009,"maxTime":1.1821999999997388,"minTime":0.8347420000000056},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2759772000000112,"maxTime":0.6171669999998812,"minTime":0.24530000000004293},{"name":"githubCodeBlocks","time":0.1951549499999828,"maxTime":0.9799929999999222,"minTime":0.1386210000000574},{"name":"hashBlock","time":0.062304449999965074,"maxTime":0.4833670000002712,"minTime":0.03495699999984936},{"name":"hashElement","time":0.0014464500000030966,"maxTime":0.024711000000024796,"minTime":0},{"name":"hashHTMLSpans","time":4.1203715999999755,"maxTime":4.609765000000152,"minTime":3.8587989999996353},{"name":"hashPreCodeTags","time":0.14734550000000582,"maxTime":0.5351989999999205,"minTime":0.10487000000011903},{"name":"headers","time":1.3076671999999916,"maxTime":4.252966000000015,"minTime":0.8564390000001367},{"name":"horizontalRule","time":0.2203779999999597,"maxTime":0.3742779999997765,"minTime":0.19407000000001062},{"name":"images","time":0.15025354999997945,"maxTime":0.506872000000385,"minTime":0.1163219999998546},{"name":"italicsAndBold","time":0.30579589999997553,"maxTime":0.872110000000248,"minTime":0.24138200000015786},{"name":"lists","time":3.447394599999984,"maxTime":4.893336999999974,"minTime":2.407492000000275},{"name":"outdent","time":0.26698190000001887,"maxTime":0.8684939999998278,"minTime":0.1808109999997214},{"name":"paragraphs","time":5.866655149999997,"maxTime":8.331147999999757,"minTime":4.9695779999997285},{"name":"spanGamut","time":5.038527899999986,"maxTime":7.123635999999806,"minTime":4.11615299999994},{"name":"strikethrough","time":0.003992900000002919,"maxTime":0.07322800000019924,"minTime":0},{"name":"stripLinkDefinitions","time":0.15298084999997172,"maxTime":0.24288900000010472,"minTime":0.13952599999993254},{"name":"tables","time":0.0024410000000443686,"maxTime":0.043695999999727064,"minTime":0},{"name":"unescapeSpecialChars","time":0.008663700000033714,"maxTime":0.0406820000002881,"minTime":0.006628999999975349}]}],"1.6.4":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.37575447999999595,"maxTime":6.3811059999999316,"minTime":0.182617999999934},{"name":"performance.testfile.md","time":33.83478732000001,"maxTime":61.04858100000001,"minTime":30.186325000000124}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.5643760500000328,"maxTime":8.346818999999869,"minTime":1.8710879999998724},{"name":"anchors","time":0.4985702000000174,"maxTime":4.221624999999676,"minTime":0.27031199999964883},{"name":"autoLinks","time":0.08000864999996793,"maxTime":0.17357799999990675,"minTime":0.06087299999990137},{"name":"blockQuotes","time":3.3429765499999804,"maxTime":7.305651000000125,"minTime":2.8504790000001776},{"name":"codeBlocks","time":0.22134235000003172,"maxTime":0.8220859999996719,"minTime":0.17176999999992404},{"name":"codeSpans","time":0.22901160000001256,"maxTime":0.7443360000002031,"minTime":0.15579799999977695},{"name":"detab","time":0.0973213499999929,"maxTime":0.15429100000028484,"minTime":0.08618699999988166},{"name":"encodeAmpsAndAngles","time":0.11678870000000643,"maxTime":0.19979600000033315,"minTime":0.09432200000037483},{"name":"encodeBackslashEscapes","time":0.08623155000002498,"maxTime":0.2296289999999317,"minTime":0.06810499999983222},{"name":"encodeCode","time":0.8853238499999861,"maxTime":1.1647219999999834,"minTime":0.8163599999998041},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2983526000000438,"maxTime":0.4954210000000785,"minTime":0.2401769999996759},{"name":"githubCodeBlocks","time":0.18343240000001515,"maxTime":0.7847170000000006,"minTime":0.1331980000004478},{"name":"hashBlock","time":0.0443587499999694,"maxTime":0.09763799999973344,"minTime":0.035257999999885214},{"name":"hashElement","time":0.00200395000001663,"maxTime":0.03345000000035725,"minTime":0},{"name":"hashHTMLSpans","time":4.199521549999963,"maxTime":4.551605000000109,"minTime":3.9874759999997877},{"name":"hashPreCodeTags","time":0.1295205500000293,"maxTime":0.3134050000003299,"minTime":0.10637700000006589},{"name":"headers","time":1.2236204000000044,"maxTime":4.009776000000329,"minTime":0.944735000000037},{"name":"horizontalRule","time":0.41190154999999323,"maxTime":4.175217999999859,"minTime":0.19648000000006505},{"name":"images","time":0.08806979999997111,"maxTime":0.20250800000030722,"minTime":0.0732279999997445},{"name":"italicsAndBold","time":0.2764291999999841,"maxTime":0.4137550000000374,"minTime":0.23324500000035187},{"name":"lists","time":5.0047764500000085,"maxTime":6.109288000000106,"minTime":4.663406000000123},{"name":"outdent","time":0.1521370000000161,"maxTime":0.3366089999999531,"minTime":0.13922500000035143},{"name":"paragraphs","time":5.336081549999994,"maxTime":7.117005000000063,"minTime":4.843312999999853},{"name":"spanGamut","time":4.449883849999901,"maxTime":6.152983999999833,"minTime":3.8569910000001073},{"name":"strikethrough","time":0.002606700000001183,"maxTime":0.04881900000009409,"minTime":0},{"name":"stripLinkDefinitions","time":0.18040370000001077,"maxTime":0.3161169999998492,"minTime":0.14705999999978303},{"name":"tables","time":0.0031190500000320754,"maxTime":0.05544899999995323,"minTime":0},{"name":"unescapeSpecialChars","time":0.009281650000002629,"maxTime":0.047313000000031025,"minTime":0.006628999999975349}]}],"1.6.3":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3880986600000119,"maxTime":6.064399999999978,"minTime":0.17418099999997594},{"name":"performance.testfile.md","time":26.898552680000012,"maxTime":49.06275100000005,"minTime":24.84523399999989}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6158222500000194,"maxTime":8.18079200000011,"minTime":1.8985149999998612},{"name":"anchors","time":0.5154769000000442,"maxTime":4.690839000000324,"minTime":0.2639840000001641},{"name":"autoLinks","time":0.09307249999999385,"maxTime":0.18834400000014284,"minTime":0.07262600000012753},{"name":"blockQuotes","time":4.5183903999999755,"maxTime":8.952854000000116,"minTime":3.035816000000068},{"name":"codeBlocks","time":0.22262349999998604,"maxTime":0.347758999999769,"minTime":0.18834500000002663},{"name":"codeSpans","time":0.31763950000004115,"maxTime":1.0948100000000522,"minTime":0.1771950000002107},{"name":"detab","time":0.0919273999999632,"maxTime":0.13651200000003882,"minTime":0.08739199999990888},{"name":"encodeAmpsAndAngles","time":0.0438916999999492,"maxTime":0.08919999999989159,"minTime":0.038271000000349886},{"name":"encodeBackslashEscapes","time":0.10785369999998692,"maxTime":0.2651890000001913,"minTime":0.07835100000011153},{"name":"encodeCode","time":1.5346329500000138,"maxTime":9.895783999999821,"minTime":0.8645779999997103},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.2937122499999759,"maxTime":0.5234480000003714,"minTime":0.25343700000030367},{"name":"githubCodeBlocks","time":0.20775164999997742,"maxTime":0.7901440000000548,"minTime":0.1416349999999511},{"name":"hashBlock","time":0.042234400000006646,"maxTime":0.12325299999974959,"minTime":0.035860999999840715},{"name":"hashElement","time":0.0016724999999951252,"maxTime":0.028929000000061933,"minTime":0},{"name":"hashHTMLSpans","time":0.4103353000000197,"maxTime":1.5980680000002394,"minTime":0.2404790000000503},{"name":"hashPreCodeTags","time":0.13196184999997057,"maxTime":0.3950719999998,"minTime":0.11029400000006717},{"name":"headers","time":1.0150126000000683,"maxTime":1.501936999999998,"minTime":0.8055130000002464},{"name":"horizontalRule","time":0.22018260000002102,"maxTime":0.35710100000005696,"minTime":0.1946739999998499},{"name":"images","time":0.1582398000000012,"maxTime":0.978186999999707,"minTime":0.07684500000004846},{"name":"italicsAndBold","time":0.28757974999998626,"maxTime":0.6394679999998516,"minTime":0.24078000000008615},{"name":"lists","time":5.151319100000023,"maxTime":6.331397000000379,"minTime":4.629061999999976},{"name":"outdent","time":0.18019314999994548,"maxTime":0.36342999999988024,"minTime":0.14253999999982625},{"name":"paragraphs","time":4.547636500000022,"maxTime":6.308794999999918,"minTime":4.002250999999887},{"name":"spanGamut","time":1.5190982500000245,"maxTime":1.863557999999557,"minTime":1.3720530000000508},{"name":"strikethrough","time":0.003450399999996989,"maxTime":0.06539299999985815,"minTime":0},{"name":"stripLinkDefinitions","time":0.1786111499999606,"maxTime":0.3128030000002582,"minTime":0.1443480000002637},{"name":"tables","time":0.0035106999999925392,"maxTime":0.06268099999988408,"minTime":0.00030099999958110857},{"name":"unescapeSpecialChars","time":0.01146649999998317,"maxTime":0.04881900000009409,"minTime":0.006628999999975349}]}],"1.6.2":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.6130621400000001,"maxTime":5.893518999999998,"minTime":0.16875699999999938},{"name":"performance.testfile.md","time":25.970254839999992,"maxTime":62.88168,"minTime":23.709682999999927}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6685977000000323,"maxTime":8.478507000000036,"minTime":1.8846490000000813},{"name":"anchors","time":0.5002727000000278,"maxTime":3.841318999999885,"minTime":0.2676000000001295},{"name":"autoLinks","time":0.09846654999997781,"maxTime":0.21064500000011321,"minTime":0.07202299999994466},{"name":"blockQuotes","time":3.221817550000014,"maxTime":5.825714999999946,"minTime":2.791112000000112},{"name":"codeBlocks","time":0.17663659999998343,"maxTime":0.3712639999998828,"minTime":0.1570040000001427},{"name":"codeSpans","time":0.2181328999999778,"maxTime":0.483066000000008,"minTime":0.15097700000001169},{"name":"detab","time":0.13492999999998573,"maxTime":0.6545340000000124,"minTime":0.08498099999997066},{"name":"encodeAmpsAndAngles","time":0.04158639999994875,"maxTime":0.11752699999988181,"minTime":0.03616199999987657},{"name":"encodeBackslashEscapes","time":0.0800689000000034,"maxTime":0.13319799999999304,"minTime":0.06780399999979636},{"name":"encodeCode","time":0.5599700499999927,"maxTime":0.9821019999999407,"minTime":0.48396900000011556},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.35280645000001415,"maxTime":0.5683480000000145,"minTime":0.2914060000000518},{"name":"githubCodeBlocks","time":0.17996669999999995,"maxTime":0.7729650000001129,"minTime":0.1274710000000141},{"name":"hashBlock","time":0.057723849999990764,"maxTime":0.31159699999989243,"minTime":0.037368000000014945},{"name":"hashElement","time":0.0025463500000000748,"maxTime":0.04610600000000886,"minTime":0},{"name":"hashHTMLSpans","time":0.47458235000001425,"maxTime":2.325223000000051,"minTime":0.2344510000000355},{"name":"hashPreCodeTags","time":0.12186629999998785,"maxTime":0.3073779999999715,"minTime":0.10697999999979402},{"name":"headers","time":0.8577350000000024,"maxTime":0.9540770000000975,"minTime":0.7801970000000438},{"name":"horizontalRule","time":0.22663095000001476,"maxTime":0.41797300000007453,"minTime":0.1967819999999847},{"name":"images","time":0.17053435000000264,"maxTime":1.4528119999999944,"minTime":0.07714599999985694},{"name":"italicsAndBold","time":0.10093754999998054,"maxTime":0.20220699999981662,"minTime":0.0882960000001276},{"name":"lists","time":4.9306124000000064,"maxTime":5.460477999999966,"minTime":4.55642499999999},{"name":"outdent","time":0.16260889999998654,"maxTime":0.31461000000012973,"minTime":0.1416349999999511},{"name":"paragraphs","time":3.7896679000000177,"maxTime":5.563840999999911,"minTime":3.278396000000157},{"name":"spanGamut","time":1.4417527499999891,"maxTime":2.0124210000001312,"minTime":1.2032939999999144},{"name":"strikethrough","time":0.004233999999985372,"maxTime":0.08196800000018811,"minTime":0},{"name":"stripBlankLines","time":0.08623144999999113,"maxTime":0.1304850000001352,"minTime":0.0804600000001301},{"name":"stripLinkDefinitions","time":0.15983660000002828,"maxTime":0.21727400000008856,"minTime":0.1446480000001884},{"name":"tables","time":0.004143600000008974,"maxTime":0.07593999999994594,"minTime":0},{"name":"unescapeSpecialChars","time":0.00991439999999102,"maxTime":0.0581609999999273,"minTime":0.006628999999975349}]}],"1.6.1":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3172682400000001,"maxTime":5.4981469999999995,"minTime":0.16062000000000154},{"name":"readme.md","time":26.0144148,"maxTime":46.79858399999999,"minTime":24.245484999999917}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.6414157500000215,"maxTime":7.791727999999921,"minTime":1.9364810000001853},{"name":"anchors","time":0.47462755000000245,"maxTime":4.062812000000122,"minTime":0.25885999999991327},{"name":"autoLinks","time":0.08906409999998459,"maxTime":0.19708299999979317,"minTime":0.06870800000001509},{"name":"blockQuotes","time":3.213485000000014,"maxTime":6.05383699999993,"minTime":2.880010000000084},{"name":"codeBlocks","time":0.16200620000001892,"maxTime":0.2691060000001926,"minTime":0.15308599999980288},{"name":"codeSpans","time":0.169494799999984,"maxTime":0.39868699999988166,"minTime":0.1410319999999956},{"name":"detab","time":0.12471390000000611,"maxTime":0.6647800000000643,"minTime":0.08558400000015354},{"name":"encodeAmpsAndAngles","time":0.04181244999999763,"maxTime":0.08920000000011896,"minTime":0.03796999999985928},{"name":"encodeBackslashEscapes","time":0.07586505000000443,"maxTime":0.13289599999984603,"minTime":0.06810500000005959},{"name":"encodeCode","time":0.5765897500000051,"maxTime":0.970348999999942,"minTime":0.4791480000001229},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.24603789999998754,"maxTime":0.35047099999997045,"minTime":0.22119199999997363},{"name":"githubCodeBlocks","time":0.1767573999999968,"maxTime":0.815454999999929,"minTime":0.1250600000000759},{"name":"hashBlock","time":0.06537804999999253,"maxTime":0.42972599999984595,"minTime":0.0376690000000508},{"name":"hashElement","time":0.0020039500000052614,"maxTime":0.034051999999974214,"minTime":0},{"name":"hashHTMLSpans","time":0.42437735000000887,"maxTime":2.3210050000000138,"minTime":0.24078000000008615},{"name":"hashPreCodeTags","time":0.12225794999998243,"maxTime":0.23836899999992056,"minTime":0.10396600000012768},{"name":"headers","time":0.8037480999999957,"maxTime":0.9462419999999838,"minTime":0.7256529999999657},{"name":"horizontalRule","time":0.2186149999999884,"maxTime":0.27362700000003315,"minTime":0.19437100000004648},{"name":"images","time":0.12388539999997192,"maxTime":0.9019430000000739,"minTime":0.07081799999991745},{"name":"italicsAndBold","time":0.10089220000002115,"maxTime":0.15037400000005618,"minTime":0.08950099999992744},{"name":"lists","time":4.938929699999983,"maxTime":5.421000999999933,"minTime":4.623625999999831},{"name":"outdent","time":0.1648239000000217,"maxTime":0.3372110000000248,"minTime":0.1404290000000401},{"name":"paragraphs","time":3.4947812,"maxTime":4.554917999999816,"minTime":3.1714170000000195},{"name":"spanGamut","time":1.318997649999983,"maxTime":1.9916279999999915,"minTime":1.1469409999999698},{"name":"strikethrough","time":0.007458499999995638,"maxTime":0.14314200000012534,"minTime":0},{"name":"stripBlankLines","time":0.09447364999999763,"maxTime":0.1545929999999771,"minTime":0.0822689999999966},{"name":"stripLinkDefinitions","time":0.1762751000000094,"maxTime":0.3112949999999728,"minTime":0.1464570000000549},{"name":"tables","time":0.0023505499999828317,"maxTime":0.03947699999980614,"minTime":0},{"name":"unescapeSpecialChars","time":0.008332400000006146,"maxTime":0.03375200000004952,"minTime":0.0066299999998591375}]}],"1.6.0":[{"suiteName":"Basic","cycles":50,"tests":[{"name":"Simple \"Hello World\"","time":0.3075345600000001,"maxTime":5.369168,"minTime":0.1570040000000006},{"name":"readme.md","time":25.81825956,"maxTime":47.795452,"minTime":23.775378000000046}]},{"suiteName":"subParsers","cycles":20,"tests":[{"name":"hashHTMLBlocks","time":2.652987649999966,"maxTime":8.557761999999911,"minTime":1.8804290000000492},{"name":"anchors","time":0.5166509500000303,"maxTime":4.142066999999997,"minTime":0.27121600000009494},{"name":"autoLinks","time":0.0885518999999931,"maxTime":0.19437100000004648,"minTime":0.0705159999999978},{"name":"blockGamut","time":17.371581599999978,"maxTime":22.94093699999985,"minTime":14.081522999999834},{"name":"blockQuotes","time":3.011308699999995,"maxTime":4.110426000000189,"minTime":2.7742359999999735},{"name":"codeBlocks","time":0.24291900000000624,"maxTime":0.8344409999999698,"minTime":0.19346700000005512},{"name":"codeSpans","time":0.2271433000000002,"maxTime":0.4583549999999832,"minTime":0.19135800000003655},{"name":"detab","time":0.09469964999999547,"maxTime":0.13289599999984603,"minTime":0.08950099999992744},{"name":"encodeAmpsAndAngles","time":0.040486450000014426,"maxTime":0.07262600000012753,"minTime":0.03766799999993964},{"name":"encodeBackslashEscapes","time":0.09959649999997282,"maxTime":0.5095850000000155,"minTime":0.06840699999997923},{"name":"encodeCode","time":0.5320952499999863,"maxTime":0.7057630000001609,"minTime":0.4794489999999314},{"name":"escapeSpecialCharsWithinTagAttributes","time":0.38607564999999794,"maxTime":0.7018459999999322,"minTime":0.326663999999937},{"name":"githubCodeBlocks","time":0.21441115000002356,"maxTime":0.7780880000000252,"minTime":0.15579800000000432},{"name":"hashBlock","time":0.056638900000007195,"maxTime":0.27995499999997264,"minTime":0.035257999999885214},{"name":"hashElement","time":0.001958799999999883,"maxTime":0.033148999999866646,"minTime":0},{"name":"hashHTMLSpans","time":0.38414695000003574,"maxTime":1.9973540000000867,"minTime":0.2356569999999465},{"name":"hashPreCodeTags","time":0.1327451500000393,"maxTime":0.20009700000014163,"minTime":0.1157189999998991},{"name":"headers","time":0.9440720999999825,"maxTime":2.4683650000001762,"minTime":0.7823069999999461},{"name":"images","time":0.12035954999996648,"maxTime":0.4857769999998709,"minTime":0.08588499999996202},{"name":"italicsAndBold","time":0.11076150000000098,"maxTime":0.4447930000001179,"minTime":0.08799499999986438},{"name":"lists","time":5.782546349999995,"maxTime":13.248890999999958,"minTime":4.463608999999906},{"name":"outdent","time":0.3057505000000219,"maxTime":0.9561860000001161,"minTime":0.22541000000001077},{"name":"paragraphs","time":6.582542549999971,"maxTime":8.810596000000032,"minTime":4.498867000000246},{"name":"spanGamut","time":2.43690389999997,"maxTime":3.067450000000008,"minTime":1.6474849999999606},{"name":"strikethrough","time":0.005228549999992537,"maxTime":0.10035000000016225,"minTime":0},{"name":"stripBlankLines","time":0.12142940000005638,"maxTime":0.17508399999996982,"minTime":0.09191199999986566},{"name":"stripLinkDefinitions","time":0.24673084999997172,"maxTime":0.572566000000279,"minTime":0.17146900000034293},{"name":"tables","time":0.005650249999962398,"maxTime":0.0985419999997248,"minTime":0.00030099999958110857},{"name":"unescapeSpecialChars","time":0.016694800000050237,"maxTime":0.06569400000034875,"minTime":0.011450999999851774}]}]} \ No newline at end of file diff --git a/performance.log.md b/performance.log.md index 09c3264..dd2f165 100644 --- a/performance.log.md +++ b/performance.log.md @@ -1,6 +1,47 @@ # Performance Tests for showdown +## [version 2.0.1](https://github.com/showdownjs/showdown/tree/2.0.1) + +### Test Suite: Basic (50 cycles) +| test | avgTime | max | min | +|:-----|--------:|----:|----:| +|Simple "Hello World"|0.387|11.381|0.104| +|performance.testfile.md|30.323|64.084|23.327| + +### Test Suite: subParsers (20 cycles) +| test | avgTime | max | min | +|:-----|--------:|----:|----:| +|hashHTMLBlocks|4.436|7.669|2.275| +|anchors|0.315|0.977|0.256| +|autoLinks|0.083|0.230|0.072| +|blockQuotes|4.347|13.862|2.032| +|codeBlocks|0.217|0.371|0.203| +|codeSpans|0.311|0.734|0.226| +|detab|0.062|0.140|0.045| +|encodeAmpsAndAngles|0.168|1.440|0.091| +|encodeBackslashEscapes|0.073|0.150|0.061| +|encodeCode|0.601|1.737|0.526| +|escapeSpecialCharsWithinTagAttributes|0.211|0.289|0.195| +|githubCodeBlocks|0.169|0.267|0.149| +|hashBlock|0.038|0.114|0.034| +|hashElement|0.004|0.057|0.001| +|hashHTMLSpans|4.053|4.394|3.930| +|hashPreCodeTags|0.248|1.891|0.112| +|headers|1.273|3.145|1.023| +|horizontalRule|0.180|0.418|0.147| +|images|0.149|0.402|0.122| +|italicsAndBold|0.278|1.041|0.209| +|lists|2.979|4.758|2.270| +|outdent|0.208|0.427|0.160| +|paragraphs|5.247|7.341|4.531| +|spanGamut|4.851|10.235|3.512| +|strikethrough|0.007|0.101|0.001| +|stripLinkDefinitions|1.714|2.990|1.463| +|tables|0.008|0.108|0.001| +|unescapeSpecialChars|0.012|0.079|0.008| + + ## [version 1.9.0](https://github.com/showdownjs/showdown/tree/1.9.0) ### Test Suite: Basic (50 cycles) diff --git a/src/cli/cli.js b/src/cli/cli.js index 3080c77..f1fe223 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -1,45 +1,324 @@ /** * Created by tivie */ -'use strict'; +var fs = require('fs'), + json = JSON.parse(fs.readFileSync('package.json', 'utf8')), + version = json.version, + Command = require('commander').Command, + program = new Command(), + showdown; -var yargs = require('yargs'); - -yargs - .version() - .alias('v', 'version') - .option('h', { - alias: 'help', - description: 'Show help' - }) - .option('q', { - alias: 'quiet', - description: 'Quiet mode. Only print errors', - type: 'boolean', - default: false - }) - .option('m', { - alias: 'mute', - description: 'Mute mode. Does not print anything', - type: 'boolean', - default: false - }) - .usage('Usage: showdown [options]') - .demand(1, 'You must provide a valid command') - .command('makehtml', 'Converts markdown into html') - .example('showdown makehtml -i foo.md -o bar.html', 'Converts \'foo.md\' to \'bar.html\'') - .wrap(yargs.terminalWidth()); - -var argv = yargs.argv, - command = argv._[0]; - -if (command === 'makehtml') { - require('./makehtml.cmd.js').run(); +// require shodown. We use conditional loading for each use case +if (fs.existsSync('../dist/showdown.js')) { + // production. File lives in bin directory + showdown = require('../dist/showdown'); +} else if (fs.existsSync('../../.build/showdown.js')) { + // testing envo, uses the concatenated stuff for testing + showdown = require('../../.build/showdown.js'); } else { - yargs.showHelp(); + // cold testing (manual) of cli.js in the src file. We load the dist file + showdown = require('../../dist/showdown'); } -if (argv.help) { - yargs.showHelp(); +program + .name('showdown') + .description('CLI to Showdownjs markdown parser v' + version) + .version(version) + .usage(' [options]') + .option('-q, --quiet', 'Quiet mode. Only print errors') + .option('-m, --mute', 'Mute mode. Does not print anything'); + +program.command('makehtml') + .description('Converts markdown into html') + + .addHelpText('after', '\n\nExamples:') + .addHelpText('after', ' showdown makehtml -i Reads from stdin and outputs to stdout') + .addHelpText('after', ' showdown makehtml -i foo.md -o bar.html Reads \'foo.md\' and writes to \'bar.html\'') + .addHelpText('after', ' showdown makehtml -i --flavor="github" Parses stdin using GFM style') + + .addHelpText('after', '\nNote for windows users:') + .addHelpText('after', 'When reading from stdin, use option -u to set the proper encoding or run `chcp 65001` prior to calling showdown cli to set the command line to utf-8') + + .option('-i, --input [file]', 'Input source. Usually a md file. If omitted or empty, reads from stdin. Windows users see note below.', true) + .option('-o, --output [file]', 'Output target. Usually a html file. If omitted or empty, writes to stdout', true) + .option('-u, --encoding ', 'Sets the input encoding', 'utf8') + .option('-y, --output-encoding ', 'Sets the output encoding', 'utf8') + .option('-a, --append', 'Append data to output instead of overwriting. Ignored if writing to stdout', false) + .option('-e, --extensions ', 'Load the specified extensions. Should be valid paths to node compatible extensions') + .option('-p, --flavor ', 'Run with a predetermined flavor of options. Default is vanilla', 'vanilla') + .option('-c, --config ', 'Enables showdown makehtml parser config options. Overrides flavor') + .option('--config-help', 'Shows configuration options for showdown parser') + .action(makehtmlCommand); + +program.parse(); + + +// +// HELPER FUCNTIONS +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Messenger helper object to the CLI + * @param {string} writeMode + * @param {boolean} supress + * @param {boolean} mute + * @constructor + */ +function Messenger (writeMode, supress, mute) { + 'use strict'; + writeMode = writeMode || 'stderr'; + supress = (!!supress || !!mute); + mute = !!mute; + this._print = (writeMode === 'stdout') ? console.log : console.error; + + this.errorExit = function (e) { + if (!mute) { + console.error('ERROR: ' + e.message); + console.error('Run \'showdown -h\' for help'); + } + process.exit(1); + }; + + this.okExit = function () { + if (!mute) { + this._print('\n'); + this._print('DONE!'); + } + process.exit(0); + }; + + this.printMsg = function (msg) { + if (supress || mute || !msg) { + return; + } + this._print(msg); + }; + + this.printError = function (msg) { + if (mute) { + return; + } + console.error(msg); + }; + +} + +/** + * Helper function to show Showdown Options + */ +function showShowdownOptions () { + 'use strict'; + var showdownOptions = showdown.getDefaultOptions(false); + console.log('\nshowdown makehtml config options:'); + // show showdown options + for (var sopt in showdownOptions) { + if (showdownOptions.hasOwnProperty(sopt)) { + console.log(' ' + sopt + ':', '[default=' + showdownOptions[sopt].defaultValue + ']',showdownOptions[sopt].describe); + } + } + console.log('\n\nExample: showdown makehtml -c openLinksInNewWindow ghMentions ghMentionsLink="https://google.com"'); +} + +/** + * Helper function to parse showdown options + * @param {{}} configOptions + * @param {{}} defaultOptions + * @returns {{}} + */ +function parseShowdownOptions (configOptions, defaultOptions) { + 'use strict'; + var shOpt = defaultOptions; + + // first prepare passed options + if (configOptions) { + for (var i = 0; i < configOptions.length; ++i) { + var opt = configOptions[i], + key = configOptions[i], + val = true; + if (/=/.test(opt)) { + key = opt.split('=')[0]; + val = opt.split('=')[1]; + } + shOpt[key] = val; + } + } + return shOpt; +} + +/** + * Reads stdin + * @returns {string} + */ +function readFromStdIn (encoding) { + 'use strict'; + var size = fs.fstatSync(process.stdin.fd).size; + if (size <= 0) { + throw new Error('Could not read from stdin, reason: stdin is empty'); + } + encoding = encoding || 'utf8'; + try { + return size > 0 ? fs.readFileSync(process.stdin.fd, encoding).toString() : ''; + } catch (e) { + throw new Error('Could not read from stdin, reason: ' + e.message); + } +} + +/** + * Reads from a file + * @param {string} file Filepath to dile + * @param {string} encoding Encoding of the file + * @returns {Buffer} + */ +function readFromFile (file, encoding) { + 'use strict'; + try { + return fs.readFileSync(file, encoding); + } catch (err) { + throw new Error('Could not read from file ' + file + ', reason: ' + err.message); + } +} + +/** + * Writes to stdout + * @param {string} html + * @returns {boolean} + */ +function writeToStdOut (html) { + 'use strict'; + if (!process.stdout.write(html)) { + throw new Error('Could not write to StdOut'); + } +} + +/** + * Writes to file + * @param {string} html HTML to write + * @param {string} file Filepath + * @param {boolean} append If the result should be appended + */ +function writeToFile (html, file, append) { + 'use strict'; + // If a flag is passed, it means we should append instead of overwriting. + // Only works with files, obviously + var write = (append) ? fs.appendFileSync : fs.writeFileSync; + try { + write(file, html); + } catch (err) { + throw new Error('Could not write to file ' + file + ', readon: ' + err.message); + } +} + +/** + * makehtml command + * @param {{}} options + * @param {Command} cmd + */ +function makehtmlCommand (options, cmd) { + 'use strict'; + + // show configuration options for showdown helper if configHelp was passed + if (options.configHelp) { + showShowdownOptions(); + return; + } + + var quiet = !!(cmd.parent._optionValues.quiet), + mute = !!(cmd.parent._optionValues.mute), + readMode = (!options.input || options.input === '' || options.input === true) ? 'stdin' : 'file', + writeMode = (!options.output || options.output === '' || options.output === true) ? 'stdout' : 'file', + msgMode = (writeMode === 'file') ? 'stdout' : 'stderr', + // initiate Messenger helper, can maybe be replaced with commanderjs internal stuff + messenger = new Messenger(msgMode, quiet, mute), + defaultOptions = showdown.getDefaultOptions(true), + md, html; + + // deal with flavor first since config flag overrides flavor individual options + if (options.flavor) { + messenger.printMsg('Enabling flavor ' + options.flavor + '...'); + defaultOptions = showdown.getFlavorOptions(options.flavor); + if (!defaultOptions) { + messenger.errorExit(new Error('Flavor ' + options.flavor + ' is not recognised')); + return; + } + messenger.printMsg('OK!'); + } + // store config options in the options.config as an object + options.config = parseShowdownOptions(options.config, defaultOptions); + + // print enabled options + for (var o in options.config) { + if (options.config.hasOwnProperty(o) && options.config[o] === true) { + messenger.printMsg('Enabling option ' + o); + } + } + + // initialize the converter + messenger.printMsg('\nInitializing converter...'); + var converter; + try { + converter = new showdown.Converter(options.config); + } catch (e) { + messenger.errorExit(e); + return; + } + messenger.printMsg('OK!'); + + // load extensions + if (options.extensions) { + messenger.printMsg('\nLoading extensions...'); + for (var i = 0; i < options.extensions.length; ++i) { + try { + messenger.printMsg(options.extensions[i]); + var ext = require(options.extensions[i]); + converter.addExtension(ext, options.extensions[i]); + messenger.printMsg(options.extensions[i] + ' loaded...'); + } catch (e) { + messenger.printError('Could not load extension ' + options.extensions[i] + '. Reason:'); + messenger.errorExit(e); + } + } + } + + messenger.printMsg('...'); + // read the input + messenger.printMsg('Reading data from ' + readMode + '...'); + + if (readMode === 'stdin') { + try { + md = readFromStdIn(options.encoding); + } catch (err) { + messenger.errorExit(err); + return; + } + } else { + try { + md = readFromFile(options.input, options.encoding); + } catch (err) { + messenger.errorExit(err); + return; + } + } + + // process the input + messenger.printMsg('Parsing markdown...'); + html = converter.makeHtml(md); + + // write the output + messenger.printMsg('Writing data to ' + writeMode + '...'); + if (writeMode === 'stdout') { + try { + writeToStdOut(html); + } catch (err) { + messenger.errorExit(err); + return; + } + } else { + try { + writeToFile(html, options.output, options.append); + } catch (err) { + messenger.errorExit(err); + return; + } + } + messenger.okExit(); } -process.exit(0); diff --git a/src/cli/makehtml.cmd.js b/src/cli/makehtml.cmd.js deleted file mode 100644 index eabc716..0000000 --- a/src/cli/makehtml.cmd.js +++ /dev/null @@ -1,195 +0,0 @@ -var yargs = require('yargs'), - fs = require('fs'), - Messenger = require('./messenger.js'), - showdown = require('../../dist/showdown'), - showdownOptions = showdown.getDefaultOptions(false); - -yargs.reset() - .usage('Usage: showdown makehtml [options]') - .example('showdown makehtml -i', 'Reads from stdin and outputs to stdout') - .example('showdown makehtml -i foo.md -o bar.html', 'Reads \'foo.md\' and writes to \'bar.html\'') - .example('showdown makehtml -i --flavor="github"', 'Parses stdin using GFM style') - .version() - .alias('v', 'version') - .config('c') - .alias('c', 'config') - .help('h') - .alias('h', 'help') - .option('i', { - alias : 'input', - describe: 'Input source. Usually a md file. If omitted or empty, reads from stdin', - type: 'string' - }) - .option('o', { - alias : 'output', - describe: 'Output target. Usually a html file. If omitted or empty, writes to stdout', - type: 'string', - default: false - }) - .option('u', { - alias : 'encoding', - describe: 'Input encoding', - type: 'string' - }) - .option('a', { - alias : 'append', - describe: 'Append data to output instead of overwriting', - type: 'string', - default: false - }) - .option('e', { - alias : 'extensions', - describe: 'Load the specified extensions. Should be valid paths to node compatible extensions', - type: 'array' - }) - .option('p', { - alias : 'flavor', - describe: 'Run with a predetermined flavor of options. Default is vanilla', - type: 'string' - }) - .option('q', { - alias: 'quiet', - description: 'Quiet mode. Only print errors', - type: 'boolean', - default: false - }) - .option('m', { - alias: 'mute', - description: 'Mute mode. Does not print anything', - type: 'boolean', - default: false - }); - -// load showdown default options -for (var opt in showdownOptions) { - if (showdownOptions.hasOwnProperty(opt)) { - if (showdownOptions[opt].defaultValue === false) { - showdownOptions[opt].default = null; - } else { - showdownOptions[opt].default = showdownOptions[opt].defaultValue; - } - yargs.option(opt, showdownOptions[opt]); - } -} - -function run () { - 'use strict'; - var argv = yargs.argv, - readMode = (!argv.i || argv.i === '') ? 'stdin' : 'file', - writeMode = (!argv.o || argv.o === '') ? 'stdout' : 'file', - msgMode = (writeMode === 'file') ? 'stdout' : 'stderr', - /** - * MSG object - * @type {Messenger} - */ - messenger = new Messenger(msgMode, argv.q, argv.m), - read = (readMode === 'stdin') ? readFromStdIn : readFromFile, - write = (writeMode === 'stdout') ? writeToStdOut : writeToFile, - enc = argv.encoding || 'utf8', - flavor = argv.p, - append = argv.a || false, - options = parseOptions(flavor), - converter = new showdown.Converter(options), - md, html; - - // Load extensions - if (argv.e) { - messenger.printMsg('Loading extensions'); - for (var i = 0; i < argv.e.length; ++i) { - try { - var ext = require(argv.e[i]); - converter.addExtension(ext, argv.e[i]); - } catch (e) { - messenger.printError('Could not load extension ' + argv.e[i] + '. Reason:'); - messenger.errorExit(e); - } - } - } - - messenger.printMsg('...'); - // read the input - messenger.printMsg('Reading data from ' + readMode + '...'); - md = read(enc); - - // process the input - messenger.printMsg('Parsing markdown...'); - html = converter.makeHtml(md); - - // write the output - messenger.printMsg('Writing data to ' + writeMode + '...'); - write(html, append); - messenger.okExit(); - - function parseOptions (flavor) { - var options = {}, - flavorOpts = showdown.getFlavorOptions(flavor) || {}; - - // if flavor is not undefined, let's tell the user we're loading that preset - if (flavor) { - messenger.printMsg('Loading ' + flavor + ' flavor.'); - } - - for (var opt in argv) { - if (argv.hasOwnProperty(opt)) { - // first we load the default options - if (showdownOptions.hasOwnProperty(opt) && showdownOptions[opt].default !== null) { - options[opt] = showdownOptions[opt].default; - } - - // we now override defaults with flavor, if a flavor was indeed passed - if (flavorOpts.hasOwnProperty(opt)) { - options[opt] = flavorOpts[opt]; - } - - // lastly we override with explicit passed options - // being careful not to pass CLI specific options, such as -v, -h or --extensions - if (showdownOptions.hasOwnProperty(opt)) { - if (argv[opt] === true) { - messenger.printMsg('Enabling option ' + opt); - options[opt] = argv[opt]; - } else if (argv[opt] === false) { - options[opt] = argv[opt]; - } - } - } - } - return options; - } - - function readFromStdIn () { - try { - var size = fs.fstatSync(process.stdin.fd).size; - return size > 0 ? fs.readSync(process.stdin.fd, size)[0] : ''; - } catch (e) { - var err = new Error('Could not read from stdin, reason: ' + e.message); - messenger.errorExit(err); - } - } - - function readFromFile (encoding) { - try { - return fs.readFileSync(argv.i, encoding); - } catch (err) { - messenger.errorExit(err); - } - } - - function writeToStdOut (html) { - return process.stdout.write(html); - } - - function writeToFile (html, append) { - // If a flag is passed, it means we should append instead of overwriting. - // Only works with files, obviously - var write = (append) ? fs.appendFileSync : fs.writeFileSync; - try { - write(argv.o, html); - } catch (err) { - messenger.errorExit(err); - } - } -} - -module.exports = exports = { - run: run -}; diff --git a/src/cli/messenger.js b/src/cli/messenger.js deleted file mode 100644 index 906fb2e..0000000 --- a/src/cli/messenger.js +++ /dev/null @@ -1,40 +0,0 @@ -function Messenger (writeMode, supress, mute) { - 'use strict'; - writeMode = writeMode || 'stderr'; - supress = (!!supress || !!mute); - mute = !!mute; - this._print = (writeMode === 'stdout') ? console.log : console.error; - - this.errorExit = function (e) { - if (!mute) { - console.error('ERROR: ' + e.message); - console.error('Run \'showdown -h\' for help'); - } - process.exit(1); - }; - - this.okExit = function () { - if (!mute) { - this._print('\n'); - this._print('DONE!'); - } - process.exit(0); - }; - - this.printMsg = function (msg) { - if (supress || mute || !msg) { - return; - } - this._print(msg); - }; - - this.printError = function (msg) { - if (mute) { - return; - } - console.error(msg); - }; - -} - -module.exports = Messenger; diff --git a/src/options.js b/src/options.js index 0e90a0d..4bf33f5 100644 --- a/src/options.js +++ b/src/options.js @@ -98,77 +98,77 @@ function getDefaultOpts (simple) { }, smartIndentationFix: { defaultValue: false, - description: 'Tries to smartly fix indentation in es6 strings', + describe: 'Tries to smartly fix indentation in es6 strings', type: 'boolean' }, disableForced4SpacesIndentedSublists: { defaultValue: false, - description: 'Disables the requirement of indenting nested sublists by 4 spaces', + describe: 'Disables the requirement of indenting nested sublists by 4 spaces', type: 'boolean' }, simpleLineBreaks: { defaultValue: false, - description: 'Parses simple line breaks as
(GFM Style)', + describe: 'Parses simple line breaks as
(GFM Style)', type: 'boolean' }, requireSpaceBeforeHeadingText: { defaultValue: false, - description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)', + describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)', type: 'boolean' }, ghMentions: { defaultValue: false, - description: 'Enables github @mentions', + describe: 'Enables github @mentions', type: 'boolean' }, ghMentionsLink: { defaultValue: 'https://github.com/{u}', - description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.', + describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.', type: 'string' }, encodeEmails: { defaultValue: true, - description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities', + describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities', type: 'boolean' }, openLinksInNewWindow: { defaultValue: false, - description: 'Open all links in new windows', + describe: 'Open all links in new windows', type: 'boolean' }, backslashEscapesHTMLTags: { defaultValue: false, - description: 'Support for HTML Tag escaping. ex: \
foo\
', + describe: 'Support for HTML Tag escaping. ex: \
foo\
', type: 'boolean' }, emoji: { defaultValue: false, - description: 'Enable emoji support. Ex: `this is a :smile: emoji`', + describe: 'Enable emoji support. Ex: `this is a :smile: emoji`', type: 'boolean' }, underline: { defaultValue: false, - description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``', + describe: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``', type: 'boolean' }, ellipsis: { defaultValue: true, - description: 'Replaces three dots with the ellipsis unicode character', + describe: 'Replaces three dots with the ellipsis unicode character', type: 'boolean' }, completeHTMLDocument: { defaultValue: false, - description: 'Outputs a complete html document, including ``, `` and `` tags', + describe: 'Outputs a complete html document, including ``, `` and `` tags', type: 'boolean' }, metadata: { defaultValue: false, - description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).', + describe: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).', type: 'boolean' }, splitAdjacentBlockquotes: { defaultValue: false, - description: 'Split adjacent blockquote blocks', + describe: 'Split adjacent blockquote blocks', type: 'boolean' } }; diff --git a/src/showdown.js b/src/showdown.js index df881a8..c061523 100644 --- a/src/showdown.js +++ b/src/showdown.js @@ -188,7 +188,7 @@ showdown.subParser = function (name, func) { * Gets or registers an extension * @static * @param {string} name - * @param {object|function=} ext + * @param {object|object[]|function=} ext * @returns {*} */ showdown.extension = function (name, ext) { diff --git a/test/cli/basic.html b/test/cli/basic.html index a014504..c42f755 100644 --- a/test/cli/basic.html +++ b/test/cli/basic.html @@ -1,3 +1,2 @@

some title

-

Test bold and italic

diff --git a/test/mocks/mock-extension.js b/test/mocks/mock-extension.js new file mode 100644 index 0000000..cbb1c98 --- /dev/null +++ b/test/mocks/mock-extension.js @@ -0,0 +1,14 @@ +var showdown = require('../../.build/showdown.js'); + +var ext = { + type: 'lang', + regex: /foo/g, + replace: 'bar' +}; + +showdown.extension('mockextension', function () { + 'use strict'; + return [ext]; +}); + +module.exports = ext; diff --git a/test/node/cli.js b/test/node/cli.js deleted file mode 100644 index 7dba282..0000000 --- a/test/node/cli.js +++ /dev/null @@ -1,18 +0,0 @@ -/* -var semver = require('semver'), - cmd = 'node bin/showdown.js'; - -describe('showdown cli', function () { - 'use strict'; - if (semver.gt(process.versions.node, '0.12.0')) { - var execSync = require('child_process').execSync; - it('basic stdin stdout', function () { - var otp = execSync(cmd + ' makehtml -q', { - encoding: 'utf8', - input: '**foo**' - }); - otp.trim().should.equal('

foo

'); - }); - } -}); -*/ diff --git a/test/node/testsuite.cli.js b/test/node/testsuite.cli.js new file mode 100644 index 0000000..02d372a --- /dev/null +++ b/test/node/testsuite.cli.js @@ -0,0 +1,293 @@ +var fs = require('fs'), + path = require('path'), + chai = require('chai'), + expect = chai.expect, + chaiMatch = require('chai-match'), + execSync = require('child_process').execSync, + spawnSync = require('child_process').spawnSync, + cmd = 'node src/cli/cli.js', + packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); + +require('sinon'); +chai.should(); +chai.use(chaiMatch); + +/** + * Spawns a CLI process synchrously + * @param {string|null} command + * @param {string[]} args + * @param {{}} [options] + * @returns {{output: *, stdout: string, stderr: string, status: number}} + */ +function spawnCLI (command, args, options) { + 'use strict'; + var nargs = ['src/cli/cli.js']; + if (command) { nargs.push(command);} + args = nargs.concat(args); + var otp = spawnSync('node', args, options), + stdout = otp.stdout.toString(), + stderr = otp.stderr.toString(), + output = otp.output[0], + status = otp.status; + + return {stdout: stdout, stderr: stderr, output: output, status: status}; +} + +describe('showdown cli', function () { + 'use strict'; + + describe('without commands', function () { + + it('should display help if no commands are specified', function () { + var proc = spawnCLI(null, [], {}); + proc.status.should.equal(1); + proc.stderr.should.contain('CLI to Showdownjs markdown parser'); + proc.stderr.should.contain('Usage:'); + proc.stderr.should.contain('Options:'); + proc.stderr.should.contain('Commands:'); + proc.stdout.should.equal(''); + }); + + describe('-h', function () { + it('should display help', function () { + var proc = spawnCLI(null, ['-h'], {}); + proc.status.should.equal(0); + proc.stdout.should.contain('CLI to Showdownjs markdown parser'); + proc.stdout.should.contain('Usage:'); + proc.stdout.should.contain('Options:'); + proc.stdout.should.contain('Commands:'); + proc.stderr.should.equal(''); + }); + }); + + describe('-v', function () { + it('should display version', function () { + var proc = spawnCLI(null, ['-V'], {}); + proc.status.should.equal(0); + proc.stdout.should.match(/^\d{1,2}\.\d{1,3}\.\d{1,3}/); + proc.stdout.should.match(/^(\d{1,2}\.\d{1,3}\.\d{1,3})/).and.capture(0).equals(packageJson.version); + proc.stderr.should.equal(''); + }); + }); + }); + + describe('makehtml command', function () { + + describe('makehtml without flags', function () { + it('should read from stdin and output to stdout', function () { + var proc = spawnCLI('makehtml', [], { + input: '**foo**', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stdout.should.equal('

foo

'); + proc.stderr.should.not.equal(''); + }); + }); + + describe('makehtml -p', function () { + + it('should enable a flavor', function () { + var proc = spawnCLI('makehtml', ['-p', 'github'], { + input: 'this is a :smile:', // test the emoji option as a proxy + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stderr.should.contain('Enabling flavor github...'); + proc.stdout.should.equal('

this is a 😄

'); + //'Here in London'.should.match(/(here|there) in (\w+)/i).and.capture(1).equals('London'); + }); + + it('should give an error if a flavor is not recognised', function () { + var proc = spawnCLI('makehtml', ['-p', 'foobar'], { + input: '**foo**', + encoding: 'utf-8' + }); + proc.status.should.equal(1); + }); + }); + + describe('makehtml -c', function () { + it('should not parse emoji if config option is not passed', function () { + var proc = spawnCLI('makehtml', [], { + input: 'this is a :smile:', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stderr.should.not.contain('Enabling option emoji'); + proc.stdout.should.equal('

this is a :smile:

'); + }); + + it('should enable a showdown option', function () { + var proc = spawnCLI('makehtml', ['-c', 'emoji'], { + input: 'this is a :smile:', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stderr.should.contain('Enabling option emoji'); + proc.stdout.should.equal('

this is a 😄

'); + }); + + it('should ignore unrecognized options', function () { + var proc = spawnCLI('makehtml', ['-c', 'foobar'], { + input: 'foo', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stderr.should.contain('Enabling option foobar'); + proc.stdout.should.equal('

foo

'); + }); + + }); + + describe('makehtml -m', function () { + + it('should mute information', function () { + var proc = spawnCLI('makehtml', ['-m', '-i'], {input: '**foo**'}); + proc.status.should.equal(0); + expect(proc.output).to.be.null; // jshint ignore:line + proc.stdout.should.equal('

foo

'); + proc.stderr.should.equal(''); + }); + + it('should mute everything, even errors', function () { + var proc = spawnCLI('makehtml', ['-m', '-i']); + proc.status.should.equal(1); + expect(proc.output).to.be.null; // jshint ignore:line + proc.stdout.should.equal(''); + proc.stderr.should.equal(''); + }); + + it('should not mute parsed html', function () { + var proc = spawnCLI('makehtml', ['-m', '-i'], { + input: '**foo**', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stdout.should.equal('

foo

'); + proc.stderr.should.equal(''); + }); + }); + + describe('makehtml -q', function () { + + it('should not display information', function () { + var proc = spawnCLI('makehtml', ['-q', '-i'], {input: '**foo**'}); + proc.status.should.equal(0); + expect(proc.output).to.be.null; // jshint ignore:line + proc.stdout.should.equal('

foo

'); + proc.stderr.should.match(/^\s*DONE!\s*$/); + }); + + it('should display errors', function () { + var proc = spawnCLI('makehtml', ['-q', '-i']); + proc.status.should.equal(1); + expect(proc.output).to.be.null; // jshint ignore:line + proc.stdout.should.equal(''); + proc.stderr.should.match(/^ERROR:/); + }); + + it('should not mute parsed html', function () { + var proc = spawnCLI('makehtml', ['-q', '-i'], { + input: '**foo**', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stdout.should.equal('

foo

'); + proc.stderr.should.match(/^\s*DONE!\s*$/); + }); + }); + + describe('makehtml -i -o', function () { + it('should read from stdin and output to stdout', function () { + var proc = spawnCLI('makehtml', ['-i', '-o'], { + input: '**foo**', + encoding: 'utf-8' + }); + proc.status.should.equal(0); + proc.stdout.should.equal('

foo

'); + proc.stderr.should.not.equal(''); + }); + }); + + describe('makehtml -i -o', function () { + it('should read from a file and output to stdout', function () { + var expectedOtp = fs.readFileSync('test/cli/basic.html', 'utf8').toString().trim(), + proc = spawnCLI('makehtml', ['-i', 'test/cli/basic.md'], {encoding: 'utf-8'}); + + proc.status.should.equal(0); + proc.stdout.should.equal(expectedOtp); + proc.stderr.should.not.equal(''); + }); + }); + + describe('makehtml -i -o ', function () { + it('should read from stdin and output to a file', function () { + execSync(cmd + ' makehtml -m -i -o .build/io1.html', { + encoding: 'utf8', + input: '**foo**' + }); + var otp = fs.readFileSync('.build/io1.html', 'utf8').toString().trim(), + expectedOtp = '

foo

'; + + otp.trim().should.equal(expectedOtp); + }); + }); + + describe('makehtml -i -o ', function () { + it('should read from a file and output to a file', function () { + var expectedOtp = fs.readFileSync('test/cli/basic.html', 'utf8').toString().trim(), + proc = spawnCLI('makehtml', ['-i', 'test/cli/basic.md', '-o', '.build/io2.html'], {encoding: 'utf-8'}), + otp = fs.readFileSync('.build/io2.html', 'utf8').toString().trim(); + + otp.trim().should.equal(expectedOtp); + proc.stdout.should.not.equal(expectedOtp); + proc.stderr.should.equal(''); + proc.status.should.equal(0); + }); + }); + + describe('makehtml -a', function () { + it('should read from stdin and append to a file', function () { + fs.writeFileSync('.build/io3.html', '

foo

'); + + var expectedOtp = '

foo

foo

', + proc = spawnCLI('makehtml', ['-i', '-o', '.build/io3.html', '-a'], { + encoding: 'utf8', + input: '**foo**' + }), + otp = fs.readFileSync('.build/io3.html', 'utf8').toString().trim(); + + proc.status.should.equal(0); + otp.trim().should.equal(expectedOtp); + // since the output is to a file, messages are logged to stdout + proc.stdout.should.not.equal(expectedOtp); + // stderr should be empty + proc.stderr.should.equal(''); + }); + + it('should ignore -a flag if -o is missing', function () { + + var expectedOtp = '

foo

', + proc = spawnCLI('makehtml', ['-a'], {encoding: 'utf8', input: '**foo**'}); + proc.status.should.equal(0); + proc.stderr.should.not.equal(''); + proc.stdout.should.equal(expectedOtp); + }); + }); + + describe('makehtml -e', function () { + it('should load the extension', function () { + var expectedOtp = '

bar

', + extPath = path.resolve(__dirname + '/../mocks/mock-extension.js'), + proc = spawnCLI('makehtml', ['-i', '-o', '-e', extPath], { + encoding: 'utf8', + input: '**foo**' + }); + proc.status.should.equal(0, 'Process exited with error state'); + proc.stdout.trim().should.equal(expectedOtp); + }); + }); + + }); +}); diff --git a/test/node/showdown.Converter.js b/test/node/testsuite.showdown.Converter.js similarity index 100% rename from test/node/showdown.Converter.js rename to test/node/testsuite.showdown.Converter.js diff --git a/test/node/showdown.Converter.makeHtml.js b/test/node/testsuite.showdown.Converter.makeHtml.js similarity index 100% rename from test/node/showdown.Converter.makeHtml.js rename to test/node/testsuite.showdown.Converter.makeHtml.js diff --git a/test/node/showdown.Converter.makeMarkdown.js b/test/node/testsuite.showdown.Converter.makeMarkdown.js similarity index 100% rename from test/node/showdown.Converter.makeMarkdown.js rename to test/node/testsuite.showdown.Converter.makeMarkdown.js diff --git a/test/node/showdown.helpers.js b/test/node/testsuite.showdown.helpers.js similarity index 100% rename from test/node/showdown.helpers.js rename to test/node/testsuite.showdown.helpers.js diff --git a/test/node/showdown.js b/test/node/testsuite.showdown.js similarity index 77% rename from test/node/showdown.js rename to test/node/testsuite.showdown.js index c6e7002..3fa7b30 100644 --- a/test/node/showdown.js +++ b/test/node/testsuite.showdown.js @@ -3,6 +3,7 @@ require('chai').should(); var expect = require('chai').expect, showdown = require('../bootstrap').showdown; + describe('showdown.options', function () { 'use strict'; @@ -34,21 +35,37 @@ describe('showdown.extension()', function () { return extObjMock; }; - describe('should register', function () { - it('an extension object', function () { + describe('file loading', function () { + + beforeEach(function () { + this.extension = require('../mocks/mock-extension'); + }); + + it('should register an extension from a file', function () { + showdown.extension('mockextension').should.be.an('array'); + showdown.extension('mockextension').should.eql([this.extension]); + }); + + afterEach(function () { + showdown.resetExtensions(); + }); + + }); + + + describe('objects', function () { + it('should register an extension object', function () { showdown.extension('foo', extObjMock); showdown.extension('foo').should.eql([extObjMock]); - showdown.resetExtensions(); }); - it('an extension function', function () { - showdown.extension('foo', extObjFunc); - showdown.extension('foo').should.eql([extObjMock]); - showdown.resetExtensions(); + it('should register an extension function', function () { + showdown.extension('bar', extObjFunc); + showdown.extension('bar').should.eql([extObjMock]); }); - it('a listener extension', function () { - showdown.extension('foo', { + it('should register a listener extension', function () { + showdown.extension('baz', { type: 'listener', listeners: { foo: function (name, txt) { @@ -56,19 +73,16 @@ describe('showdown.extension()', function () { } } }); - showdown.resetExtensions(); }); - }); - describe('should refuse to register', function () { - it('a generic object', function () { + it('should refuse to register a generic object', function () { var fn = function () { showdown.extension('foo', {}); }; expect(fn).to.throw(); }); - it('an extension with invalid type', function () { + it('should refuse to register an extension with invalid type', function () { var fn = function () { showdown.extension('foo', { type: 'foo' @@ -77,7 +91,7 @@ describe('showdown.extension()', function () { expect(fn).to.throw(/type .+? is not recognized\. Valid values: "lang\/language", "output\/html" or "listener"/); }); - it('an extension without regex or filter', function () { + it('should refuse to register an extension without regex or filter', function () { var fn = function () { showdown.extension('foo', { type: 'lang' @@ -86,7 +100,7 @@ describe('showdown.extension()', function () { expect(fn).to.throw(/extensions must define either a "regex" property or a "filter" method/); }); - it('a listener extension without a listeners property', function () { + it('should refuse to register a listener extension without a listeners property', function () { var fn = function () { showdown.extension('foo', { type: 'listener' @@ -94,7 +108,13 @@ describe('showdown.extension()', function () { }; expect(fn).to.throw(/Extensions of type "listener" must have a property called "listeners"/); }); + + afterEach(function () { + showdown.resetExtensions(); + }); + }); + }); describe('showdown.getAllExtensions()', function () {