pax_global_header00006660000000000000000000000064142366651600014523gustar00rootroot0000000000000052 comment=f9fb9b0dc307db75eb494bc4d8aace47d38dc4c7 node-falafel-2.2.5/000077500000000000000000000000001423666516000140465ustar00rootroot00000000000000node-falafel-2.2.5/.github/000077500000000000000000000000001423666516000154065ustar00rootroot00000000000000node-falafel-2.2.5/.github/workflows/000077500000000000000000000000001423666516000174435ustar00rootroot00000000000000node-falafel-2.2.5/.github/workflows/ci.yml000066400000000000000000000016601423666516000205640ustar00rootroot00000000000000name: Node CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: - '0.8' - '0.10' - '0.12' - '4.x' - '6.x' - '8.x' - '10.x' - '12.x' - '14.x' - '16.x' - '17.x' - '18.x' steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: npm install if: matrix.node-version != '0.8' - name: Run npm install for Node.js 0.8 run: | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash . "$HOME/.nvm/nvm.sh" nvm install-latest-npm npm install env: NPM_CONFIG_STRICT_SSL: 'false' if: matrix.node-version == '0.8' - run: npm test node-falafel-2.2.5/.gitignore000066400000000000000000000000331423666516000160320ustar00rootroot00000000000000node_modules bundle* *.log node-falafel-2.2.5/.npmrc000066400000000000000000000000231423666516000151610ustar00rootroot00000000000000package-lock=false node-falafel-2.2.5/LICENSE000066400000000000000000000020571423666516000150570ustar00rootroot00000000000000MIT License Copyright (c) 2012 James Halliday Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node-falafel-2.2.5/example/000077500000000000000000000000001423666516000155015ustar00rootroot00000000000000node-falafel-2.2.5/example/array.js000066400000000000000000000005061423666516000171560ustar00rootroot00000000000000var falafel = require('../'); var src = '(' + function () { var xs = [ 1, 2, [ 3, 4 ] ]; var ys = [ 5, 6 ]; console.dir([ xs, ys ]); } + ')()'; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); console.log(output); node-falafel-2.2.5/example/keyword.js000066400000000000000000000006421423666516000175250ustar00rootroot00000000000000var falafel = require('../'); var src = 'console.log(beep "boop", "BOOP");'; function isKeyword (id) { if (id === 'beep') return true; } var output = falafel(src, { isKeyword: isKeyword }, function (node) { if (node.type === 'UnaryExpression' && node.operator === 'beep') { node.update( 'String(' + node.argument.source() + ').toUpperCase()' ); } }); console.log(output); node-falafel-2.2.5/example/prompt.js000066400000000000000000000023041423666516000173570ustar00rootroot00000000000000var falafel = require('../'); var vm = require('vm'); var termExps = [ 'Identifier', 'CallExpression', 'BinaryExpression', 'UpdateExpression', 'UnaryExpression' ].reduce(function (acc, key) { acc[key] = true; return acc }, {}); function terminated (node) { for (var p = node; p.parent; p = p.parent) { if (termExps[p.type]) return true; } return false; } var src = '{"a":[2,~9,prompt(":d")],"b":4,"c":prompt("beep"),"d":6}'; var offsets = []; var output = falafel('(' + src + ')', function (node) { var isLeaf = node.parent && !terminated(node.parent) && terminated(node) ; if (isLeaf) { var s = node.source(); var prompted = false; var res = vm.runInNewContext('(' + s + ')', { prompt : function (x) { setTimeout(function () { node.update(x.toUpperCase()); }, Math.random() * 50); prompted = true; } }); if (!prompted) { var s_ = JSON.stringify(res); node.update(s_); } } }); setTimeout(function () { console.log(src); console.log('---'); console.log(output); }, 200); node-falafel-2.2.5/falafel.png000066400000000000000000001407531423666516000161600ustar00rootroot00000000000000PNG  IHDR3<@csBIT|d pHYs``zxEtEXtSoftwarewww.inkscape.org< IDATxy|]gu}>Y$˖!qLM!&BPP(޶-m $e CB8dlv<Ďg˲YG:?d}&y}>óogZKɥpwx!P jnm6|.2.j`:#~9e\eTj%l;pwutqĥBfB;r'sq}fpЏ=qmnm~2.2*K2,pw|."G<9\8g;2x,@"cq﹞ӥzTi/nnm."F<q[&m>tnfuࢵY8&2κ O2.~l"h~6s0K%^@[C%lܬ.y%ΙEGfPW/=˸T^` #3oWhK w7ڋ8f-=_9spQ{Ѓͭͻf`˘a;VY <h^p}@S+=K 5A2י旋=!)2k'0@@ qǏh^Xe~i!AfO"O3Tz>"zט9"inmޜXx)d0 MI:{۴?PA`)PD]Ԙv{b@,c {[߷{ i}‡@߈1_qpQXfzUΎPknm~jg,xX]ҨArc<:W[g<&1)$i~t WU0gơol{`,C6!hįo~ д恲X}O<]/[OfLt?_inmNOlwxgkK0=ځy7pwӚ:'o|b"+e|C7͓;Ot6w,~ eHoRQ]3䶵iJc)u>w-@f]?[_~S j%=i/DI>#c~!Lrgol{K)4bUȐغ錕9i-TZ*BzDT3?%8\#⸜C,_A It|7{ j}g扅w|J:% wCDN.E~!7Ѳ|ix,E+0X.t2{ֹKp ˥K^j0 W61;m0 $4G<.>Y$D~L̊Mt;Gn:/sLJKҷA'nɴ i uU\1L#5X:o#%OUjЋr%rn1G8 4HEc 4STt/QqqL.4/&GكM G}K޾*'W)wLkBr č!OSrLŲ/Lp{Ĉ}P0ꥈ"|;sgLʍ.*\pw%su}!RekEG0b*o>$ zl-0U-M$n~xj޾V2*L{ǿyoW[>xi% bɍu+?'WK 2Fj~C78NԤg$2_'uJLs*E y$pwx09 yvKCeZ#;L'ғ@"_)U'/&aLO6ז}sjxR\D6oV4 1U[ߑS:iT5[-}3NBKE=m;#Hp**&i3TLKGJ"2QK"8R/KdQVК,vo"6cn8ch[ZS "KWt~voZ<ǖ3(90-2S,Sa@ρ9UwNL[f!{݉:zexcq}7"Cl/ƇǞ/\]_`8EeLc'^#Sy%W.P4EϕJT\UG}{w*\>W;:c%" Ѳ*Ef6)LCĆNv:h^Z2y}f8%=-n#Y3 OO:hq~y_X\h:).Vq( c%I04S#ZX柇iSz4T&.Xc|M)=X X}۩7JkjG`i -MXe6h^:8Keu>FKZYζ,K,V$7j2(0F%B52Rݖ{D׬/[քx`eAH8\ukR{ RH$xx ۽K}7͚yOt|3 =z5[RzC}hfEGvC^ aҹk}EI<n5wErdMT"YƘ@~6ʦ ;Asޑf9ହSV|жz"^C&TM?۽閾ݛfD:x@",L]%5z|rS8:H3ԴnwU Ik-$Axa hE`қ[8NTօԴTjNH$Gk&{5 M?`zXHNo{ucԷf ʾf-o/|9Զ}eL=B-*&_CMk(?Sa\(dwHd#=zJi?Ao ]5x#V !nDםY4Q⬺٫jY)_W y q:=v?>Ol” ~y۝4U/-=!ɍTyoU7)ٙ3<(!:_3af|t%\X ݱ!Fz/=\2qٳQ7&|d%I.I?co1:9lӐ0Hq;e\rnba0R 6THC[#ux>LDuLCBHIȹq챭}^zf=.F:r-m}~a,~5|epnat#1䫿`^\@}i5Q˩y9\οX1-^7oxHiKKC/9Ei#3ΑxYD&]^S.+: xi:jZ 5"&ȻH]^4>H6|-ն5Edy,fFz0e0pLpESTGV֗!_uZ|ǟE=ʺDdffiYb=$d\#/־)Kx-!I5PR!̿W>3YOr4PެJϝOԴ@M zjex_Q'뷖$"ѺD$SMke@f3*QJ.D{)gu &{9v(%$!x]2)V2K@oȏ7 5֔i(I/е,a֒V8WJCmو'5rU'z ׆d$}7~ӚUpڧq^ p 3+xĜ/KG6^m_oO8enʹ-$KHI3ed45~6<,Oa֊xoOiJ.pl*dO=ޖ^DHW5OxDW$4ݛOQBӚJS&3n* 1Rt (Q^!!h$}e%IPT&ƾ[;<ըq/(;lk]%[4!S(CГR쵭6oЏ촥ݛ^OE[O9۾pYQ~L kk!Kݒv\n#_(|oe0g"ݙ%$^eaM !#VA-ږm S8گp{JE KLd#}ᵵXs^31h_e+QM-Eujn:&dSAub,p!"#8PdxKc}t9@9-9Sd@}#s0|KU|$gbc]n[BuґSSKE+`sf9paY;cȬTq,4q LFz$SYt ~Tc#)0 @!F{kD Gf̹[. f,םR&#@WιZ+ۨ2]mpF|[R,X6dkVwdFR|l1.ŰAys w~x1yt:Xd!+W-cނTx 6XT"Eb,N" MKDg,K`эh[SUD"յgOS0%/&9St_M- f=\ ҥ ׌[q3RDƦJ1tl4A g6 ݹ3LKXrK/*H6uS3Q014A:ty=(ciK [>mmu>ir4YN <^v&R#G*:fbLX!/:!C0gHml@]D!ݛÙw*=KD`>ev2gB2z3/O6jm]wΒ HER Bx`6TM\u*F#c.m{ #Z8p2fErThOe^Lͺ>ϐ )5񧋾Ý.ԢkkAOEON1t)cGfgR 6pH:0I5p$U0;|["9_Uw7d׳;vzCNگiuE R"Ns0CQUjq?Ă%c2d]+Ij!6\_>ωmHEUN>Ȃ qIa҇}*N^I5 >6<9/T7TJ06XZP|^;«?{[nQ7wz K:]Nn-SCI]2V ZTiN6LàPSbUeLATYgOu!ݴ恼Չ 2 w@Ekܔ#UeK_0Moo_^U~YJ|$Aͬp`*4zjkЯ|BM;SQ4ʵ q3MadNΌDc$f@Unm)sĸp_6SpC, |!w?\%7*LJ1 -)_-@JLOce@m|d!NYy‚E;$v>Qr#DY}u;ё^bn[M:fjp2"2{el@Pz~'Xx_N'8_̶KO9dKy GObs0_z} IDAT /<5gA]]Mb L] d*8loyU f765po'TE~f'bMWQmXsxhIY-5oHfE_{*|:%<3Iv1tۃp";_|덄ND:gxd=5V܋2 Ci5B|.`2stAq&{rwvB>En6]{-Ah 2>pU H*ˍi}A, / Wh>-\Zy8G4SLͺ28;r1g-l4K`& AHb X4d2> =ځn] =,̨M> <~blBWCHqHd45R|f O%toL.嶙8{df>%Öи`651yCSi$Iߝ9}ye⑆ zݿóI-෰i##N'$#$ I1t=cCɧ/1V1/BR{л9s)KbnGp6E :vn#Bɼ59B,2+9#F)*gW6IVD"Q=&F|ҺU9,Q2`n,D`-'m.8e2sy٘S,Qڅ 7>\ ;kkPk X\L-3ƒ+o6t:8\N[&]ZN@O\.3"+&~O{ׇ=~['djilk (; ;=NZ )`8 U 2HmycSDniNuS^I3|+G(}˲: Gy ɮ.mEEOSIdҥ]Gtqf,eRsOQ-nA2đQdl铛 ^7?Ź2c<ݟ^$ЍYtlEI)}e6N?mޏtT> ($5ƮabAS,dNQC6м" 2ӓI9/9T^.4I)D&D6it?ïvZꫮ&ti^T!~`Y;<P9e"9 yPup \QKZZ>ZL!lѯTuJe5;ċXW/ hظoSFQ 4 K4҉RڥB}-׋btt%]Z?LDTڞ 4G fv A\Xa}̽jeڙm+3 !Dv!2dʄ\TeDv sKh*n~avh(3$DIDSxD#z,}f lhήP[~uwd S#S!_n]`PUmCS5RjٟeLڵeu_xAݮ w7=N_f#.^zԚ~#z-qaQz'-e)N%V3:EdB@ҳa\KPUiQ!~"N$@t*E2$Ngfݭ$`G%sp|~Զ*7r9Br \gBi.:_Iٓe6lzU >\3{wĮ*ܳ3rOt)'9ԕ{ӤphzTϸ.aYD*G; "фaaqkI'"JM&գExp{PHk^^6qn8E]S~U_w,yn7P~ƪYus.A\-愠nLdw~؂[n;v{zf[PM( rV,pwXet0H# -1Y*C$I.% 0MWGP%$Bp\Cpj4PH*u^feMDu~6VL2%[ T{gtX!LZ&D/}#ﵵ%{ώުsK.?Pz K,qjb+f]]@wb* /@*h̄{Q2se4-q1ۤr̔%1ӿ !4b/sk=N|.4#YH `;<\yU9v/?ܾkn[ǜܴY/BMTDXokC j! L&^&c?xpu }1rpWѧtrz\$E`QW]G=tvٟ*Κ,?>Y-]?y$Dg:l-2+ŷCls1u%i(tXWΒq:=WDcT*U F,U\g%C7x/swmn4UşomVZU?*brJkq$pFӷKz?J:hA׋$H2z}/}2_ mvleYS\tʮ5kOWZX_>8\~EV$U8A%ez`ڗ0Dr4Px<~?y~$!Ї EMYjzy}a?Շ4 ~I:RS]j1z-.gP}6 {ǘA/jl`㡺Y _גP!t]^6o%P_d@8C\4M;ꬪ"xI|Mz\qѼuJ Eʎ׾s?r$Itba""KeS f9VG00]{XֆJ$P@GgTLaPJ쨳n C KF h^?a*$JTW&m-WenKڄ_.ꢜ2+/M]4JNQVKN=vȄ|1P5d#)n) 2C6rB]*n@ȓH$_=N~9ە I0% 9/%'jH%ODlzl!Pu?=lXf%9=R~فqꮻ.nemv2j\HDl֒xC$g=A&-jiD):y_-ې}I/E]pR.E\"4bbteWPSwFmGJiZ$!yܿ"Z4$u")Ǝk T'թ{HΛʜ)*q~m翡Z , 'ua XrH>Á/}cw7?EL57%KwE]pg2+:IbF@‰,H8qb,(%Yof|gxۙKBKƩJYrX.$Iqɤ"Q˷D͇So ҶFt{*J4fBn|5;b/fD\$QJ}2mk34M==O'v8Ies!ӉWPZ--yԵڸ+g;| (|7u#ďfC Y;El؀!%) ;-5PU ss{I3SV2YXjxY,-G=Z׍@A :ӥg $ֈ) 6474pCCL\.T.Imw~nYcAG9(N'e$/77ޏ6i pyyΰ=3Ӎ4޾̐1L$Hvwѷe 72}iUOmSD,#E2u';N4,^բNK=$Ģ5$HTHdfS.$$D̄&q`O-&>òΕ@@ *4O˄/x\L3c !p 4_T\ қb+)Nfl$E ׿ZZ0tlX<~>7u~^44UE_n8Kd7;K^NDd2t㛾ESODtmaO@zuY|0,^T6ځPo:Rܲt*|gz_zތZfp5P^d"H'Byh^HH@+ [Ԇ,㾗9>7)Ec, з[gX/=Dcgn@06n`H7s`.D{p1z<!YuAq$4N<쇑64x"NU%Bb[2hJW^Hmem/iu6o2d1}+l9s+y̙ym|BLvCfi/SF HxHHWyP.4%cRYIj ͍bW!IlrYjQRb:$Մh7g3x0{=,lcV_4MeGχ=B]Mƭ\/>A~DнLǶՋm@IH'+9m"@?'i/5-TO#۷Vw74\G} SD&alyS@Df18SB8P.4ɥj(qɈX-=A5~7A J(Xv2bЈPh7ۨ7kyi!6;^W_{nwqi>My3K E|lQ~ǹho%wK8zpD}{3UV8*낆@O$8G*6ithzVędпee no[nwo4 =y92Jl+G) ::zϿ!1la;I3|5ɤ2uDmPa2ZwƇ͋:_!6Y>> IDAT݇y}_R@e)&XiT_f2@A%]qLAwKZ`DQ5k`P*;zɖR$js![UWSD h1c,_QwÍYgcS$p\͘6F%DM+}q/KYFv¡Ft| y]5Ʉ(U)@؁$⣹,ᐥJG]} DiI" ^6t@񚖤2+V.ƬXJw0:Q,_kçN 9d\`dD<#`OOwm[Z]@pc8C!?o& &MÖB.NmRGGv|ssN#?ȱ\5Y(Eo!eMv fre2 .In%8Uf0q4ܣIVk˔&#@CK]C}CS/{CCI0%e0MFb)nK,M1]͑˦Bns'6K-gpԸ>nZ W-']_FE.?M/;hw궊UlY{Ɣ`܀77M$!`H(clc ˖mն>msȘ.]Μ9v&|)N?xմqG!K%0w(sǎYW+hy툶bhGK+͖>΢ŢCnw^N,10VDC[yf\(2q[l =8Has}N(XNa '2t)wvQztжqyE}$KvY;. f(bwPNY%I Ci :Z_h\5:~7.f衯)mϘ~9kEr:lcy0u駞 zϺSA^t1g&ϝûi3NǏܗ<#D =/v/VWX=a62Kf$"Ys`X-͹ e4(]DS*rdt]7(.tn0 nw}y&QkZsD&OᮝdQĩ!3#ZDf owQZH0x'4]{C`&3=3 wރ`H?ӇLƻi3; 98\xM}{y3m@l^,% b"34`r0y B6%VQ^e Z [pcر @#)133ݴq'xt/\46yM tiȁzBJ|t<',4^s- W]c~n }ke7|~(4s9 Ѝ$F\}eteykFWV\˕0 5Zp$I*//R%j3{Uk4Q=TISR( ewkr/ o1lYRR*3Tv]D^Vr *YRd؝][0ͻmfd:I& zf)Iko.)D! N۾:;a&t=eP~=05MCSf ,?XY#zyUn3$j䝿fΞ +\:~D/$(Ժӱ$P:TbiGd2Ll6ZY(뜙b'EjL&C8em]Ȭ 3CL.}܈XOj4IΜWdMMlE^M:{} ҅>M>dwuD0dc (WTL_b`sj΢L4fERS?˕tU%$ %4o+Ph˷;+XulЇ8OYA;ʉ}%PXߺ=\]]U7#2=cD_:DbAhE5#sldXl*e5i]Z@:gNr X1a."ָ"30 :ͮnBR f&2VQYEk/%nOXL?]d^(풷v+23 Kqҵs@~L=U;|_p4ɏ"(5:]y_AG wOkifr mn̽txi0 M4r+5_᪟ ԺyedV337Gx[=fɂd_Fq˨yEhh_%3Ɍah-K"!d1HDzCml~(8#b'e$os/*KKo ѹm,{*d,P^ Ooi< ~wLDih-ŵZ4$oKvVF*3O~yHn'wqg{Yƚ/.-2SQ~cUA0ECY4OѸ.? -~ƞ){,M"ܭnLkW$vי݆iGqة+Lˎ/vQ(@*,f -wjR E׳"2;1d @54o&D_i©{//|/]PUEjeBt>s/_X4~V_km/Z= 6e@5 ,ܜ)C|MQW^*42w3OZ@pCAJ.]!+]VA]7dqp;pz8Nnׅr8iGqV5cbRv[d|V)bX0Pf#C dkA]A;0f9Mstgld#В^T eswۂxCuxp(Nv ZʾʕkpasGdfF C'gƈV#^TO}pvxH+5s_fΝa.N]9sK’lS) #/DЋyo:~/%r[Z\x|l 4| -^"y \y5" ݉@(0'lgZϲL\ b3 sͼ @62dw@]H10W3ӅչQ3ov7VFg-Ԯ/SK%8+mmйVo3e Λ^-9Cf)-kT\wʗ/Gۛ\`ŋ+̤MI*Mjbk̢8F  1t"%n]֟'oXjK0=6SSD&hljhIe)<=ecQ.մiϕh~&|דLpGk݆GFJ]/]6.9x׭c,;d1~1 ߳B,Vh۪nSZ^\Tۯk̖"6]ْA{ݱ`K6LFD.8%,Yϐ alXTZEfB6eն'2@UADDdَ,;P@^v;\{ xn:6)+ذ 3qRx$h#}#p~hdX_ Nd8?1EcSvFͤ>2;i{-{aOT_\Zmf&gnZS&2=nFqGA^;'>nvd:jPn˛msBzbnD]qx[::X̧1+ Gk+]9XFs^, 6 YUy.UJfn"afW-],Un5AFMV[*Eq`Sl.l 9_lάlzf ӴJ&inl˫KfEſ$M\I&:߳ٛA=sxrcKIY0#/YضO|} ّݵ۲{a+_qwM⩂RQs($I 6+w d&`,,=R*RJC(u"UW UMI܎i2B~R9tDA:"Hl郼h<kP_ E4y~ٙlǎD&:$:D?48*M 6g%P%Os б}dx] cAXs-勤x ކ#|_"DJ򆟤O0y7WO-Jʨ(]X%"3}Izd*Gd<~L27|sV IizṗPU R0v{{- CdcWL']S9wy׬Lڵ*"d'ȑ#ۿ̃/x\M7}G/D2m, =%D'>SO. {>_-wzr=H䠵@SPWҮT F\@λ* %ȬBCl1kgF:/e*ѹuZFVdvް'Wm}{燏x_un;\4 "Òs!o,?ٞrYoEIkf.GG>2u;vuϽHTݶmlЇg *#GSUL,)Psӌ71M/߇vdx`S~;tcW4g[;xZybɬu|Md3͇0 -&t5(@NT;h9 Qd@(PWZD$76Rl_m[g;FsKMT?:oe܋źBrz6vm,`hA"s\u_\UU1 KkLMcHDeּ( €i+=^ yE"hgERdnk%xQ`u ^ETLf{5br TbpDX顭4L2® aWG+^uiC1aCdC\')ȋ>1lvt*A[ȷ耛p]Ⱦ HbD<B[ Mc9kkIY{E8 ]S],5^\ 0uih'Ooh7܈s_2F I:+.IAZU|7咙$I7U_&?eLLGfz2Zе 2(#J2_x_V{d[FE>ӈ% Gz ~S0'*l/ND &? +7lut]C%vncmRk_&ׇM؛K紦¿({}Eۆ>~僤BQI{1+(W5 (|"Gsd><_0tcQߺ >,jxr{,mbQsY?.(, O_!"KG},7>KoU~w/YG]`BgP+/r#D 0Q3(iLQc:ԉ{]yԁi<~DI#kJG+f.V؃>A.SF=bYDݛkBd*,Ξ?ƺ.J ׃lo+< 6Zޞ\^MD]EMp0V4˃8::$$4DDbBER2A*F*jJKz~dSW3NdkHf44ΰm,U4SweZ*fpEQM6aϾ Qr xi+{9b'OdΞ u?sǧTsytaQmD2}$hg vǚj6&q]ChfYpndf&Q8&6уۨ+SAi]qyƵ4T*լEpn'd~ށEEɿ'5bmݰbf6k`o\z} ֶDžϞم{"/w'<3\]#kY*rȬj^DRцVG[55F+dֳ#);7lTEdjhuj𵍄mDJ踎Ep& sY=%%|ZKc;vWb։GnneSW(4=z5W Ά?#˃R4/~7+/lt}/}<eeQg+_"Gݼ9+y׻|'ՉrQ 7݇(=^zk l*hڔm#2Fe+ 35C-PIE@ lau m;N]]A&oid.Nؓ$iWezϣʫ861uЙyȑC9Zhݲ:PS8.[=6aSeU=c_1o|wƢE2= tsMϕ܍k4?{ַݍ#x1 N,e,'3CIEZh?gJEf&&Q뼚`S|KJwe뚜!v^7e eEQ457H]`F<6 M2H82$zMэEӇ:A]PeM> ZZq\+@TN"3c~+la*\Ԡ:tF\nOL&2@P{+=e{)nx ہF: 5G=֏i8!~KMmn5z(gShIVu;.!pi6sYwKqN-%zCr`S1 / o?,=$X #HɃ2XMpa3+Hl_FGM2>;[eVC0e)S~(HKɴPSSzd}YgϐF Q~D fg\Eˑ{Pʕ]|H5ȊPD2uvls2\iMt1%ShyT&&Ѳ,pBjI¡Nf/*&ۼmHY6VMz4 W_K'/d Tq{VbQ~XĻ-"HbAA .$ߊ4Mo|(`oPַӲk.6v1ctY7r9 I$UDId9c:5t|A@FCA@Q{fx<=K &BJ=.) UV=3 dATPdbo4 F0ou;Z(z2AY902>96{om6|]LpS~[ccEO&].z?gHB%7% 9*xzT &afbgKTűx dS-= KRS!?F Wtc 9[~"3> ބaxS] cY^lKmKF/%M&b*;kTQ@ҮJِ Oн6l.R3L|0,/2H'%r&~c'Oe`⇏7ޞGPV$8AչTX$YDM+Dق.Oˮf:%2bJ"jۜT )X"W_F y}ifhˉ4MCDe# ?O毎Jwʖ9U k.= a)KǓ=}%Lvlӟ~Ul9EԤr -v$&v}T Oʛ-MYrեԤ4n~ !edfBf`GYzVi??Dv‘[$24ԍŞfcfRtcQ^DIQd2 2jAT-I䚑s$8(ހ$W T,j:͹Nd d'?zvV³n=@}_Ѳ^(FD]ǎLz rLsQ8Cќ2OhZn^)GQQktFG8S-/KfCA=1A&v<~(wm+wbS_؋ PK"\ P$FȾ}&'FqTYGu4)Cd G;AusEX+J= p'3fǬVu50t߸3w.5Jl $TAje`0Q䤚b+(]{?I܂M̍D\ Aͤ{&s˭=sB wV|˭ qcaFFKmzj2UT:BЃxHIZQڃdi o&9wG&1Ф l*:hۺO{Jߕ@r:i&~%0hwy\I":N 7fD&gZy9P &h#%mr?Qhj݌W!odwzXbi˼魷aW_imoo_ӳyG3JY@sPֶդ+!<"`hjCWH^ExZOq[kVobg'WGK =n7"/"_.nvv) "=?k\*(BeQjRj; *5{T  L4]sUDvd[$8[aCok͈ 0LI J 03z%+k&×?zRTt܅\E &O |hl"wuWp_Wt,/?Sz(`4ua_z`6oI>)G ´3~؊! &'?J2m=tc%:TaJ|Ѳsf"ӹbZ/{OcSw-`yI =d[bUE{hV/C7K@E5ݶ5#3YHYσ_Zz-r$.]8WF&&䃹Dvŕ^0"p7L3itEt.}ɚ[7lV|Q"mh[Z1'~"Xm.j%D۲`b9 [{y#'<o݆M=B:cg\Rr̍0x); v6Ͽ.tv3AݥZWp;M7zꉂV"52B'>FގSp=ˢ [Չ PndV2|sd}x`&=IT-0 s/ٶ1疶$qoA) ndA }6үߊYXȒ M//aTUw{?4f =s~構9V%EPW+ⲉ򒣼(n6n#|[^wXH/(^NpNb/{5͓Luy1J,\J:~'"<=i۟Ey1(>R8j99ˡ8oZP+L1KyZ/Z;P<&:Be}K::r,r0/9\`ڢigQóN] iمA$wO_jI覮3#DOfh)e@(pA\!MD+1j9<ʼn-^|v)ҤU0YڥpUkb:kNd{d@x4tS7FANr_v݃{)n\ lK׶Po+A2GrߓZź?C_Sg00v]+~EQ 6/h({ `,-U)# RQ+XkR$TNωu>foYkmL"^lK`YmDFHkBF6Jl: )3"*V$Hs/ D >;Cvl Br:$@;4<2kYxQtuQLn$YVȞ9$Bj*NRE_~v'{tL<y?k6wݓVJHk?R+h eUhf5.au۹}HGJ t_2M2Jk-33rL{DU!bg'Cv^ m$01Y߷59yܖ-1Njp*{=~([z;>]$(Sb!0ٹͩӧܰJpK/?`.?*ڲu2ȍ#5!mD.jQTd:[z٫lz1?Sl^ɧȘߐbDX\,5}EE!w&4F**j^ޞo.d/3LKrXn$䮪aeY$btbaEᏳUx4w NRUX{VBt~媫&O6m.K,쥛>{{*&j(}ّ?N/X۶+^ !P|PR%iVxEWl^_Ќf3(OOA2a5lvIsm&K'={|1Y 11\<92"絷3"SPt 15z~ąȩHY~y^ I[^5I{dtwԹB'ņtg6r?TP[mpeG.wv C(~?@ y|}^03+W.mѴoIENbw-s< uQH b;,q&u6]U{1 <޶L&HQJE?1Qcv1>9L+8 =9zm`fk'Yw65K+됚hw12 ;z֛nfG?\'+XU62RX4`-@9LJ:'5>L]eLH=V{ckʿ/@*BbxU4ù !-ªڲ*~4;n%Pb̭I)8l'AdPƟkv2s v-Z_'*q%Ԏ";KwW:F&d}*㋽ܹIՋo` ⨲z87"Ѧ2uXM쪼6x>5e]u,4+hPQ;Q/ -R97#~rx W Jg!/BJ`&`ɆnPeFDoؘvz&A2u?2giEV.ɥK_}RQh[уIObnaT6ӻvVώfb{\G {C誟޶]ZV2Xd7RvlU-H1%Q]U!SS--rR.-"5?qahv".…g#m$.p )ii"brmڍLݱj CQw;}[1*Œ ,|Wh{J4bj|F3 `lF=]0IN}PN>S'^;?5I~bzG'Z[VSxX f0F]\ Y7(k[ >^C*pg&KQ<nTQe8_5*23o%S~ [_*^.]ʗfͪQV|&bW:˴(ZR5q?7..kdΝ׾RBJ I5X_D,^l aRz2Λ.LlpT 2i&O|-5TEWrW1[j|<- Z/^\3w !u !_~\Ds>#SGPYz+bsDz 7R]EoW79#ub=r)ٟڼ+!uD́%PBk,'lRd.2F;YV`93~8fhmkQKM)1̽J(>]Ul)eqiPCT_!0Z>誟kDȱs{E7:,JaLg~~7ܸcoS%K=[ ,(r鋩5\_iY9!%b.¹_Xyth8~FM2M.;{U|RɲD1ȖQ&^1CiaeHAWd3U*mVW&UY11z`+lS"d7;%>ʉYr!R _5eA8N -?YE(X1DZ`ڃ7nl!t\y{\(xOv.\';]Wyimض7BQ~·m0S'L Gh:ZnT:.9J<]z651nZQr g+aiy p9|ӧ[ޖiUev>lOf/&tlF/ϱ[c,tS"$Ztҫ$wK8ys*Yڀ*` Qw=NՏWac&bI e;\ VWbVsW\M/3أ l1iVEUζ,̋I27$13u\Ss/og<}۶u>6vBէu˶h{@w"{&ۢŅba̴,]2^7w.s*,|iXf9rz*٧ܹsu:W;ϲ Gnt$]ox\YjEc>kL < 83XZ"BёZ}] ^Q[Ȅe㙚w\_r?8٬'ozk Wn'_̌Qu\U֮ O+|6V︳aBVw*d/Huuu}7B:u|si\{ni{HO߉J1oNisZB`S{rsG__m 3ip>QԎiΐOzHgs:;=5c|P(@Ϫ*mf cArQdA!ӹ/ȸ8#Yuy3c !r7sW `LX6MN(,Eo.Ŧ-,Rz/gr+b4Om2;I!yѽ-ڱ92Nftc1W4Uxg&{kVho8&/%oAy݊ zh|/>S04tdB@C k1isc Ϲ(Ǻ~כVn9S=T IDAT5ֿmce3XٵCͷLG\6!m~э6G(ߵ/1EFrOazTe#BZK}{J3F'(=q;I4m'yXk^V+b>]9_Aw=(U|1iOՔ x=pir-fknx#X^$ y衲]}jW&tv&7puvYBV+=IXx+l6L?jK>R T/ P(d:YP6̺x `*!6C1+~/Qf%3SU4[|9[-NʤˮIEfUY_9ʭjP͜hzԲH843g0)5׼lA汖e1=5C2*+dpuMS%bbU66 uoe.s4XSV̂]`_m U;@M4K-f;I"鬅z׵л8T b$#ݙl]EW:Zpغ*cLQ`a]ɐH{X]Z,_f-Kwumoxnp^vBrGV\7[p|>\v9njbm;\MqFV!Mz΍؊R%xgΒ-,OY!mϭXD EC:Z /nfC+DQm?aN{Zv_ T?豅B&mM7}׾=V覨|4C.=<~ѫW<2@Zcuu3MNE1H RL9_IgM0`&?]{!xxo kX۶A0n13Ɵڍ3f0w !/eÅi>͹wcN][o[o;)-NKdΝ{]w 4OU4Zb7mHԶ[9&cLƘMbݠ(`P;@Ji&?EF1tneSmpgIgp^NZ ޺P{xQ5_ Ygr9|埙ڳj8wF[i0@b,.m1>xfd.g=hA օtO\$3r7R\FgR(\tжe1v(e|iZ*tlum\߰&U)|jv+֭ourM1Ӏ@]ͩm[xTKDJ4F_G `qsSc*>:[~k:n}3icR7GtmYoirl}RyY:+wx}'MVbM; OLٖy-D=yzl:ArƎH]Gx<؅v1љf=HQtcp^F,J΢l_Oma ^ KN1a ~e4t~硎Wb1V[8.f,|p{n3yt=ȱCBкK:ېzit4rY̹&'OmV\ujdi83`og؁F&Y3ޱҶdPF6_'~| L.$1YѻׂZv:Rbɥ7ci{H :صmΙ8}#?}BrZ/dՎ=Pqhe8|֭w_RMV71 L#]"e'K(m8Qf>zWWŢ9LxnPD:EA)~)h|9OnjbYس 1gL0lvOЏ]B*;^0!VD$[Ϊkɒq,ftb'"2olGk?8޻&Jt!ד'߆'6H:EN! !KfMN>_Ny2h{Ysg?(d=ף+k:HC*w" !dcЈ7mpܮ~#ցerVaT>aU3!{WU~GģoGZ@A+D\MtYMm/}4ĖƓSIIw5'y^ǏPȖNU]kZ= N_;Zԛ$!ĸⓖiy8^~lp\Y0+nRAHmA}fr:Yd|+Uy36w!s`gbz$}N~ :ާZ X3-:W8_/(-mUxihw][עpZoY)_~&+J=K_05p{r]$RGmwap%dSOgkҎT ~ BJ2 0 p0/Bd]{ eUU#\bl_O8^5WH oDaR#15khǵyRn17Kr_`-(Zxs3gf8Yڈ5 ۲MMd6TP~T|Y7HfWL&5d9AKrڬE-ʪ5Nx:Az'nLT&0!x1/l bNOZx9MP'˅@900_=)5ݰio!P!-kZîLS7޶w"KQSkR)BgDH~MFSעF0k-LQ먭Ho{=v'wMxS]StAbH]F봄VW=cjWB֠GsmuGeB1? ~#b|)d/lR[7RRLrQT47ȤZ9מږɿ{ġ2Yx[뮙K? (Rìa~i;Yy=Eޚǃ(V:̻ʄDŽ1"7ᖚ |'z(Nw4ib;3XyɔV"ш.p{'qls&xn*3\&1H*St\CwlGͺK'̌^w;je#EXmٮk-'6r; y]`A''#F Pi;zw:,0dW'?L9)f47AE^yd{# L0MB!&{ }M˴ uqK)oDW=x<|LqgsgE$Tgw;f S?3Q}#L_g<{VB l{ ދ?2̑>ȉ&FRe>2cP(ԞBV:[* BÞ`|CZF/CB#Cr:^n?OaæmPLRb&5#UH]I7S9^ R$S_/h۶1Bo2"wɋ]?L ?qRNwhm ˶3 ^[ߏcMB&By|or k^JT56WghȄSB+1oCVjj6ֵ\=ӹ GJ|x[_2u~wQy":Qu?;0ZWASlSG8g7TT6}Dz7u4RB\aD vmM^4\̂]O% xWcul4XvL!i0m6IϞ_,[M̴T. 2w MJBj:*M@Ullll9V @(*^^"}[UWM%T uEr( jPt]69\uF)ftYxv|ȏ5{53/hCGQG][#25XCats=m:v,{/3"FWw&YN13\b|\hI0(}Kl+ CȎ0Gm=pzIMq_0qY`,}>߶l :)G׮md&f/@gOSH7l%$_ eЯJ-!s(j!"b}5x(͹}9ģXs"}t=(QdJ) !n2";&M*bvsr3gɧu#ũ5ls1Su?B:r>Z1 ,~}CX{]5]2SwR1݉MTgSFg6AH\by^ت/Hӵک^l%HIxou&d͍o$fc !ni5Yu~*<-Ў'HSPE(Զ5<,JX˖}ٖM!WGlȿ G=M!k\Dׁ=IFR%;yu_ȪtGDv 51 G>S|FXV]s7ϝR.Ƅ4"F듛4qJ׾1Hf؂nKCj^,h/gGl$!3=Ejr81ғͫll lvuis=ZӅ"nHxf4n̒zϷXu+G:9I:1XԁmL;ɣ&'LM%Wu`KQav1w&MJFf*0 4?O0gN}!H8mt?׎j^K) EHqB/ҤIX11H #F^6s't*AH-T= $RQ} fz0u4p(\HU!\لR񰥔4"]_IƲbv'F_6ǏE=GэI B8jHOoH=.Dcu !B`-N4Y+-f:p:hka93g.8J(בQC092S`NTbiBBUTs`qM43`>.3f>M!=B!3Q:ْZۼY &b(nIv4,g9KOcVd{q^ XJ[q^/[HK}5yޱb˳r2S HI{1H +*XU8KM.=X^ZBF}؞uJ~tL4iXVҜqH}BC^Z8xv`5ɷ+}'ff+VLLcJX悀Ż㇖'lҤI-בKnn?:v{ 1ؿ ']W]=fZEwUiҤICy*`cg^4i:IENDB`node-falafel-2.2.5/index.js000066400000000000000000000045361423666516000155230ustar00rootroot00000000000000var acorn = require('acorn'); var isArray = require('isarray'); var util = require('util'); module.exports = function (src, opts, fn) { if (typeof opts === 'function') { fn = opts; opts = {}; } if (src && typeof src === 'object' && src.constructor.name === 'Buffer') { src = src.toString(); } else if (src && typeof src === 'object') { opts = src; src = opts.source; delete opts.source; } src = src === undefined ? opts.source : src; if (typeof src !== 'string') src = String(src); var parser = opts.parser || acorn; var ast = parser.parse(src, opts); var result = { chunks : src.split(''), toString : function () { return result.chunks.join('') }, inspect : function () { return result.toString() } }; if (util.inspect.custom) { result[util.inspect.custom] = result.toString; } var index = 0; (function walk (node, parent) { insertHelpers(node, parent, result.chunks); for (var key in node) { if (key === 'parent' || !Object.prototype.hasOwnProperty.call(node, key)) { continue; } var child = node[key]; if (isArray(child)) { for (var i = 0; i < child.length; i += 1) { if (child[i] && typeof child[i].type === 'string') { walk(child[i], node); } } } else if (child && typeof child.type === 'string') { walk(child, node); } } fn(node); })(ast, undefined); return result; }; function insertHelpers (node, parent, chunks) { node.parent = parent; node.source = function () { return chunks.slice(node.start, node.end).join(''); }; if (node.update && typeof node.update === 'object') { var prev = node.update; for (var key in prev) { if (Object.prototype.hasOwnProperty.call(prev, key)) { update[key] = prev[key]; } } node.update = update; } else { node.update = update; } function update (s) { chunks[node.start] = s; for (var i = node.start + 1; i < node.end; i++) { chunks[i] = ''; } } } node-falafel-2.2.5/package.json000066400000000000000000000023711423666516000163370ustar00rootroot00000000000000{ "name": "falafel", "description": "transform the ast on a recursive walk", "version": "2.2.5", "repository": { "type": "git", "url": "git://github.com/substack/node-falafel.git" }, "main": "index.js", "keywords": [ "ast", "burrito", "source", "syntax", "traversal", "tree" ], "directories": { "example": "example", "test": "test" }, "scripts": { "coverage": "covert test/*.js", "test": "node --harmony test/bin/run.js test/*.js" }, "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" }, "devDependencies": { "acorn-jsx": "^5.2.0", "covert": "^1.1.0", "glob": "^6.0.4", "safe-buffer": "^5.2.0", "semver": "^6.0.0", "tape": "^4.0.0" }, "engines": { "node": ">=0.4.0" }, "license": "MIT", "author": { "email": "mail@substack.net", "name": "James Halliday", "url": "http://substack.net" }, "testling": { "browsers": { "chrome": [ "20.0" ], "firefox": [ "10.0", "15.0" ], "iexplore": [ "6.0", "7.0", "8.0", "9.0" ], "opera": [ "12.0" ], "safari": [ "5.1" ] }, "files": "test/*.js" } } node-falafel-2.2.5/readme.markdown000066400000000000000000000056631423666516000170610ustar00rootroot00000000000000# falafel Transform the [ast](http://en.wikipedia.org/wiki/Abstract_syntax_tree) on a recursive walk. [![browser support](http://ci.testling.com/substack/node-falafel.png)](http://ci.testling.com/substack/node-falafel) [![build status](https://github.com/substack/node-falafel/workflows/Node%20CI/badge.svg?branch=master)](https://github.com/substack/node-falafel/actions) This modules uses [acorn](https://npmjs.org/package/acorn) to create an AST from source code. ![falafel döner](./falafel.png) # example ## array.js Put a function wrapper around all array literals. ``` js var falafel = require('falafel'); var src = '(' + function () { var xs = [ 1, 2, [ 3, 4 ] ]; var ys = [ 5, 6 ]; console.dir([ xs, ys ]); } + ')()'; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); console.log(output); ``` output: ``` (function () { var xs = fn([ 1, 2, fn([ 3, 4 ]) ]); var ys = fn([ 5, 6 ]); console.dir(fn([ xs, ys ])); })() ``` # methods ``` js var falafel = require('falafel') ``` ## falafel(src, opts={}, fn) Transform the string source `src` with the function `fn`, returning a string-like transformed output object. For every node in the ast, `fn(node)` fires. The recursive walk is a post-order traversal, so children get called before their parents. Performing a post-order traversal makes it easier to write nested transforms since transforming parents often requires transforming all its children first. The return value is string-like (it defines `.toString()` and `.inspect()`) so that you can call `node.update()` asynchronously after the function has returned and still capture the output. Instead of passing a `src` you can also use `opts.source`. All of the `opts` will be passed directly to [acorn](https://npmjs.org/package/acorn). ## custom parser You may pass in an instance of acorn to the opts as `opts.parser` to use that version instead of the version of acorn packaged with this library. ```js var acorn = require('acorn-jsx'); falafel(src, {parser: acorn, plugins: { jsx: true }}, function(node) { // this will parse jsx }); ``` # nodes Aside from the regular [acorn](https://npmjs.org/package/acorn) data, you can also call some inserted methods on nodes. Aside from updating the current node, you can also reach into sub-nodes to call update functions on children from parent nodes. ## node.source() Return the source for the given node, including any modifications made to children nodes. ## node.update(s) Transform the source for the present node to the string `s`. Note that in `'ForStatement'` node types, there is an existing subnode called `update`. For those nodes all the properties are copied over onto the `node.update()` function. ## node.parent Reference to the parent element or `null` at the root element. # install With [npm](http://npmjs.org) do: ``` npm install falafel ``` # license MIT node-falafel-2.2.5/test/000077500000000000000000000000001423666516000150255ustar00rootroot00000000000000node-falafel-2.2.5/test/array.js000066400000000000000000000014311423666516000165000ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); test('array', function (t) { t.plan(5); var src = '(' + function () { var xs = [ 1, 2, [ 3, 4 ] ]; var ys = [ 5, 6 ]; g([ xs, ys ]); } + ')()'; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); node-falafel-2.2.5/test/async.js000066400000000000000000000020141423666516000164750ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); test('async', function (t) { t.plan(5); var src = '(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'; var pending = 0; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { pending ++; setTimeout(function () { node.update('fn(' + node.source() + ')'); if (--pending === 0) check(); }, 50 * pending * 2); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; function check () { Function([ 'fn', 'g' ], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); } }); node-falafel-2.2.5/test/bin/000077500000000000000000000000001423666516000155755ustar00rootroot00000000000000node-falafel-2.2.5/test/bin/run.js000077500000000000000000000003701423666516000167420ustar00rootroot00000000000000var path = require('path'); var glob = require('glob'); for (var i = 2; i < process.argv.length; i++) { glob(process.argv[i], function (er, files) { files.forEach(function (file) { require(path.resolve(process.cwd(), file)); }); }); } node-falafel-2.2.5/test/custom-parser.js000066400000000000000000000022331423666516000201670ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); var semver = require('semver'); // acorn-jsx requires node 4 test('custom parser', { skip: semver.satisfies(process.version, '< 4.0.0') },function (t) { var acorn = require('acorn'); var jsx = require('acorn-jsx'); var acornWithJsx = acorn.Parser.extend(jsx()); var src = '(function() { var f = {a: "b"}; var a =
; })()'; var nodeTypes = [ 'Identifier', 'Identifier', 'Literal', 'Property', 'ObjectExpression', 'VariableDeclarator', 'VariableDeclaration', 'Identifier', 'Identifier', 'JSXSpreadAttribute', 'JSXIdentifier', 'Literal', 'JSXAttribute', 'JSXIdentifier', 'JSXOpeningElement', 'JSXIdentifier', 'JSXClosingElement', 'JSXElement', 'VariableDeclarator', 'VariableDeclaration', 'BlockStatement', 'FunctionExpression', 'CallExpression', 'ExpressionStatement', 'Program' ]; t.plan(nodeTypes.length); var output = falafel(src, {parser: acornWithJsx, ecmaVersion: 6, plugins: { jsx: true }}, function(node) { t.equal(node.type, nodeTypes.shift()); }); }); node-falafel-2.2.5/test/es6.js000066400000000000000000000010631423666516000160600ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); var semver = require('semver'); // it runs the generator so needs node 4+ test('generators', { skip: semver.satisfies(process.version, '< 4.0.0') }, function (t) { t.plan(1); var src = 'console.log((function * () { yield 3 })().next().value)'; var output = falafel(src, { ecmaVersion: 6 }, function (node) { if (node.type === 'Literal') { node.update('555'); } }); Function(['console'],output)({log:log}); function log (n) { t.equal(n, 555) } }); node-falafel-2.2.5/test/for.js000066400000000000000000000015061423666516000161530ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); test('for loop', function (t) { t.plan(7); var src = '(function () {' + 'var sum = 0;' + 'for (var i = 0; i < 10; i++)' + 'sum += i;' + 'if (true)' + 'for (var i = 0; i < 10; i++)' + 'sum += i;' + 'return sum;' + '})()'; var output = falafel(src, function (node) { if (node.type === 'ForStatement') { t.equal(node.update.source(), 'i++'); t.equal(node.update.type, "UpdateExpression"); node.update.update('i+=2'); } if (node.type === 'UpdateExpression') { t.equal(node.source(), 'i++'); } }); var res = Function('return ' + output)(); t.equal(res, 2 + 4 + 6 + 8 + 2 + 4 + 6 + 8); }); node-falafel-2.2.5/test/inspect.js000066400000000000000000000016471423666516000170400ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); var util = require('util'); test('inspect', function (t) { t.plan(7); var src = '(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); t.equal(output.inspect(), output.toString()); t.equal(util.inspect(output), output.toString()); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); node-falafel-2.2.5/test/opts.js000066400000000000000000000061571423666516000163610ustar00rootroot00000000000000var falafel = require('../'); var Buffer = require('safe-buffer').Buffer; var test = require('tape'); test('first opts arg', function (t) { t.plan(5); var src = '(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'; var output = falafel({ source: src }, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); test('opts.source', function (t) { t.plan(5); var src = '(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'; var output = falafel(undefined, { source: src }, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); test('Buffer opts.source', function (t) { t.plan(5); var src = Buffer.from('(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'); var output = falafel({ source: src }, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); test('Buffer source', function (t) { t.plan(5); var src = Buffer.from('(function () {' + 'var xs = [ 1, 2, [ 3, 4 ] ];' + 'var ys = [ 5, 6 ];' + 'g([ xs, ys ]);' + '})()'); var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { node.update('fn(' + node.source() + ')'); } }); var arrays = [ [ 3, 4 ], [ 1, 2, [ 3, 4 ] ], [ 5, 6 ], [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], ]; Function(['fn','g'], output)( function (xs) { t.same(arrays.shift(), xs); return xs; }, function (xs) { t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); } ); }); node-falafel-2.2.5/test/parent.js000066400000000000000000000016161423666516000166600ustar00rootroot00000000000000var falafel = require('../'); var test = require('tape'); test('parent', function (t) { t.plan(5); var src = '(function () {' + 'var xs = [ 1, 2, 3 ];' + 'fn(ys);' + '})()'; var output = falafel(src, function (node) { if (node.type === 'ArrayExpression') { t.equal(node.parent.type, 'VariableDeclarator'); t.equal( ffBracket(node.parent.source()), 'xs = [ 1, 2, 3 ]' ); t.equal(node.parent.parent.type, 'VariableDeclaration'); t.equal( ffBracket(node.parent.parent.source()), 'var xs = [ 1, 2, 3 ];' ); node.parent.update('ys = 4;'); } }); Function(['fn'], output)(function (x) { t.equal(x, 4) }); }); function ffBracket (s) { return s.replace(/\[\s*/, '[ ').replace(/\s*\]/, ' ]'); }