build.js 1.7 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197
  1. window["simulate"] =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = 59);
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ([
  89. /* 0 */
  90. /***/ (function(module, exports, __webpack_require__) {
  91. module.exports = __webpack_require__(99);
  92. /***/ }),
  93. /* 1 */
  94. /***/ (function(module, exports, __webpack_require__) {
  95. "use strict";
  96. module.exports = __webpack_require__(97);
  97. /***/ }),
  98. /* 2 */
  99. /***/ (function(module, exports) {
  100. var g;
  101. // This works in non-strict mode
  102. g = (function() {
  103. return this;
  104. })();
  105. try {
  106. // This works if eval is allowed (see CSP)
  107. g = g || new Function("return this")();
  108. } catch (e) {
  109. // This works if the window reference is available
  110. if (typeof window === "object") g = window;
  111. }
  112. // g can still be undefined, but nothing to do about it...
  113. // We return undefined, instead of nothing here, so it's
  114. // easier to handle this case. if(!global) { ...}
  115. module.exports = g;
  116. /***/ }),
  117. /* 3 */
  118. /***/ (function(module, exports) {
  119. // .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
  120. // backported and transplited with Babel, with backwards-compat fixes
  121. // Copyright Joyent, Inc. and other Node contributors.
  122. //
  123. // Permission is hereby granted, free of charge, to any person obtaining a
  124. // copy of this software and associated documentation files (the
  125. // "Software"), to deal in the Software without restriction, including
  126. // without limitation the rights to use, copy, modify, merge, publish,
  127. // distribute, sublicense, and/or sell copies of the Software, and to permit
  128. // persons to whom the Software is furnished to do so, subject to the
  129. // following conditions:
  130. //
  131. // The above copyright notice and this permission notice shall be included
  132. // in all copies or substantial portions of the Software.
  133. //
  134. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  135. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  136. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  137. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  138. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  139. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  140. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  141. // resolves . and .. elements in a path array with directory names there
  142. // must be no slashes, empty elements, or device names (c:\) in the array
  143. // (so also no leading and trailing slashes - it does not distinguish
  144. // relative and absolute paths)
  145. function normalizeArray(parts, allowAboveRoot) {
  146. // if the path tries to go above the root, `up` ends up > 0
  147. var up = 0;
  148. for (var i = parts.length - 1; i >= 0; i--) {
  149. var last = parts[i];
  150. if (last === '.') {
  151. parts.splice(i, 1);
  152. } else if (last === '..') {
  153. parts.splice(i, 1);
  154. up++;
  155. } else if (up) {
  156. parts.splice(i, 1);
  157. up--;
  158. }
  159. }
  160. // if the path is allowed to go above the root, restore leading ..s
  161. if (allowAboveRoot) {
  162. for (; up--; up) {
  163. parts.unshift('..');
  164. }
  165. }
  166. return parts;
  167. }
  168. // path.resolve([from ...], to)
  169. // posix version
  170. exports.resolve = function() {
  171. var resolvedPath = '',
  172. resolvedAbsolute = false;
  173. for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
  174. var path = (i >= 0) ? arguments[i] : process.cwd();
  175. // Skip empty and invalid entries
  176. if (typeof path !== 'string') {
  177. throw new TypeError('Arguments to path.resolve must be strings');
  178. } else if (!path) {
  179. continue;
  180. }
  181. resolvedPath = path + '/' + resolvedPath;
  182. resolvedAbsolute = path.charAt(0) === '/';
  183. }
  184. // At this point the path should be resolved to a full absolute path, but
  185. // handle relative paths to be safe (might happen when process.cwd() fails)
  186. // Normalize the path
  187. resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
  188. return !!p;
  189. }), !resolvedAbsolute).join('/');
  190. return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
  191. };
  192. // path.normalize(path)
  193. // posix version
  194. exports.normalize = function(path) {
  195. var isAbsolute = exports.isAbsolute(path),
  196. trailingSlash = substr(path, -1) === '/';
  197. // Normalize the path
  198. path = normalizeArray(filter(path.split('/'), function(p) {
  199. return !!p;
  200. }), !isAbsolute).join('/');
  201. if (!path && !isAbsolute) {
  202. path = '.';
  203. }
  204. if (path && trailingSlash) {
  205. path += '/';
  206. }
  207. return (isAbsolute ? '/' : '') + path;
  208. };
  209. // posix version
  210. exports.isAbsolute = function(path) {
  211. return path.charAt(0) === '/';
  212. };
  213. // posix version
  214. exports.join = function() {
  215. var paths = Array.prototype.slice.call(arguments, 0);
  216. return exports.normalize(filter(paths, function(p, index) {
  217. if (typeof p !== 'string') {
  218. throw new TypeError('Arguments to path.join must be strings');
  219. }
  220. return p;
  221. }).join('/'));
  222. };
  223. // path.relative(from, to)
  224. // posix version
  225. exports.relative = function(from, to) {
  226. from = exports.resolve(from).substr(1);
  227. to = exports.resolve(to).substr(1);
  228. function trim(arr) {
  229. var start = 0;
  230. for (; start < arr.length; start++) {
  231. if (arr[start] !== '') break;
  232. }
  233. var end = arr.length - 1;
  234. for (; end >= 0; end--) {
  235. if (arr[end] !== '') break;
  236. }
  237. if (start > end) return [];
  238. return arr.slice(start, end - start + 1);
  239. }
  240. var fromParts = trim(from.split('/'));
  241. var toParts = trim(to.split('/'));
  242. var length = Math.min(fromParts.length, toParts.length);
  243. var samePartsLength = length;
  244. for (var i = 0; i < length; i++) {
  245. if (fromParts[i] !== toParts[i]) {
  246. samePartsLength = i;
  247. break;
  248. }
  249. }
  250. var outputParts = [];
  251. for (var i = samePartsLength; i < fromParts.length; i++) {
  252. outputParts.push('..');
  253. }
  254. outputParts = outputParts.concat(toParts.slice(samePartsLength));
  255. return outputParts.join('/');
  256. };
  257. exports.sep = '/';
  258. exports.delimiter = ':';
  259. exports.dirname = function (path) {
  260. if (typeof path !== 'string') path = path + '';
  261. if (path.length === 0) return '.';
  262. var code = path.charCodeAt(0);
  263. var hasRoot = code === 47 /*/*/;
  264. var end = -1;
  265. var matchedSlash = true;
  266. for (var i = path.length - 1; i >= 1; --i) {
  267. code = path.charCodeAt(i);
  268. if (code === 47 /*/*/) {
  269. if (!matchedSlash) {
  270. end = i;
  271. break;
  272. }
  273. } else {
  274. // We saw the first non-path separator
  275. matchedSlash = false;
  276. }
  277. }
  278. if (end === -1) return hasRoot ? '/' : '.';
  279. if (hasRoot && end === 1) {
  280. // return '//';
  281. // Backwards-compat fix:
  282. return '/';
  283. }
  284. return path.slice(0, end);
  285. };
  286. function basename(path) {
  287. if (typeof path !== 'string') path = path + '';
  288. var start = 0;
  289. var end = -1;
  290. var matchedSlash = true;
  291. var i;
  292. for (i = path.length - 1; i >= 0; --i) {
  293. if (path.charCodeAt(i) === 47 /*/*/) {
  294. // If we reached a path separator that was not part of a set of path
  295. // separators at the end of the string, stop now
  296. if (!matchedSlash) {
  297. start = i + 1;
  298. break;
  299. }
  300. } else if (end === -1) {
  301. // We saw the first non-path separator, mark this as the end of our
  302. // path component
  303. matchedSlash = false;
  304. end = i + 1;
  305. }
  306. }
  307. if (end === -1) return '';
  308. return path.slice(start, end);
  309. }
  310. // Uses a mixed approach for backwards-compatibility, as ext behavior changed
  311. // in new Node.js versions, so only basename() above is backported here
  312. exports.basename = function (path, ext) {
  313. var f = basename(path);
  314. if (ext && f.substr(-1 * ext.length) === ext) {
  315. f = f.substr(0, f.length - ext.length);
  316. }
  317. return f;
  318. };
  319. exports.extname = function (path) {
  320. if (typeof path !== 'string') path = path + '';
  321. var startDot = -1;
  322. var startPart = 0;
  323. var end = -1;
  324. var matchedSlash = true;
  325. // Track the state of characters (if any) we see before our first dot and
  326. // after any path separator we find
  327. var preDotState = 0;
  328. for (var i = path.length - 1; i >= 0; --i) {
  329. var code = path.charCodeAt(i);
  330. if (code === 47 /*/*/) {
  331. // If we reached a path separator that was not part of a set of path
  332. // separators at the end of the string, stop now
  333. if (!matchedSlash) {
  334. startPart = i + 1;
  335. break;
  336. }
  337. continue;
  338. }
  339. if (end === -1) {
  340. // We saw the first non-path separator, mark this as the end of our
  341. // extension
  342. matchedSlash = false;
  343. end = i + 1;
  344. }
  345. if (code === 46 /*.*/) {
  346. // If this is our first dot, mark it as the start of our extension
  347. if (startDot === -1)
  348. startDot = i;
  349. else if (preDotState !== 1)
  350. preDotState = 1;
  351. } else if (startDot !== -1) {
  352. // We saw a non-dot and non-path separator before our dot, so we should
  353. // have a good chance at having a non-empty extension
  354. preDotState = -1;
  355. }
  356. }
  357. if (startDot === -1 || end === -1 ||
  358. // We saw a non-dot character immediately before the dot
  359. preDotState === 0 ||
  360. // The (right-most) trimmed path component is exactly '..'
  361. preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
  362. return '';
  363. }
  364. return path.slice(startDot, end);
  365. };
  366. function filter (xs, f) {
  367. if (xs.filter) return xs.filter(f);
  368. var res = [];
  369. for (var i = 0; i < xs.length; i++) {
  370. if (f(xs[i], i, xs)) res.push(xs[i]);
  371. }
  372. return res;
  373. }
  374. // String.prototype.substr - negative index don't work in IE8
  375. var substr = 'ab'.substr(-1) === 'b'
  376. ? function (str, start, len) { return str.substr(start, len) }
  377. : function (str, start, len) {
  378. if (start < 0) start = str.length + start;
  379. return str.substr(start, len);
  380. }
  381. ;
  382. /***/ }),
  383. /* 4 */
  384. /***/ (function(module, exports) {
  385. module.exports=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=r(1),o=r(3),i=r(5),a=r(6),l=r(7),s=r(8),_=r(9),c=r(15),u=r(12),d=r(17),f=r(18),p=r(19),h=r(16),v=r(10),m=r(20),b=r(14),g=r(4),w=r(13),y=r(21);t.FreeTmpl=y,t.precompileTemplate=y.precompiler?y.precompiler.compile:null,t.precompiler=y.precompiler?y.precompiler:null,t.HtmlLLParser=y.htmlParser?y.htmlParser:null,t.LLParser=n,t.dataPath=l,t.dataUtils=i,t.Event=a,t.Element=_,t.TextNode=u,t.NativeNode=d,t.VirtualNode=f,t.ShadowRoot=p,t.Behavior=s,t.Component=c,t.Observer=v,t.DataGroup=h,t.ElementIterator=m,t.FakeDomElement=b,t.registerBehavior=s.create,t.registerElement=c.register,t.createElement=c.create,t.createTextNode=u.create,t.createVirtualNode=f.create,t.appendChild=_.appendChild,t.insertBefore=_.insertBefore,t.removeChild=_.removeChild,t.replaceChild=_.replaceChild,t.addListenerToElement=a.addListenerToElement,t.removeListenerFromElement=a.removeListenerFromElement,t.triggerEvent=a.triggerEvent,t.safeCallback=o.safeCallback,t.addGlobalErrorListener=o.addGlobalErrorListener,t.removeGlobalErrorListener=o.removeGlobalErrorListener,t.globalOptions=g,t.globalState=w,c._setDefaultTemplateEngine(y);var x=t.updateDefaultComponent=function(){delete c._list[""],c.register({is:"",options:{writeOnly:!0,allowInWriteOnly:!0,lazyRegistration:!1,classPrefix:"",addGlobalClass:!1,templateEngine:null,renderingMode:"full",multipleSlots:!1,reflectToAttributes:!1}})};x();var C=function(e){var t="";if(e instanceof exparser.Element&&(e.id&&(t+=' id="'+e.id+'"'),e.slot&&(t+=' slot="'+e.slot+'"'),e.__slotName&&(t+=' name="'+e.__slotName+'"'),e.classList&&(t+=' class="'+e.class+'"'),e.$$&&e.$$.getAttribute("style")&&(t+=' style="'+e.$$.getAttribute("style")+'"')),e instanceof exparser.VirtualNode)return t;if(e instanceof exparser.Component)return c.listPublicProperties(e).forEach(function(r){t+=" "+r+"="+JSON.stringify(e[r])}),t;for(var r=e.attributes,n=0;n<r.length;n++)t+=" "+r[n].name+'="'+r[n].value+'"';return t},E=t.dumpElementToString=function(e,t,r){var n=null;g.hasDOMBackend&&(n=window);var o=0;r=r||0;var i="";for(o=r;o;o--)i+=" ";var a="";if(e instanceof exparser.Element)a+=i+"<"+(e.$$?e.$$.tagName.toLowerCase()+":":"")+e.is+C(e)+">",a+=e instanceof exparser.VirtualNode?" [Exp-Virtual]":e instanceof exparser.NativeNode?" [Exp-Native]":" [Exp-Component]",a+="\n"+E(t?e.__wxSlotChildren:e.childNodes,t,r+1);else if(e instanceof exparser.TextNode)a+=i+e.textContent+" [Exp-Text]\n";else if(n&&n.HTMLElement&&e instanceof n.HTMLElement)a+=i+"<"+e.tagName.toLowerCase()+C(e)+"> [DOM-Element]",a+="\n"+E(t?e.__wxSlotChildren||e.childNodes:e.childNodes,t,r+1);else if(n&&n.Text&&e instanceof n.Text)a+=i+e.textContent+" [DOM-Text]\n";else if(void 0!==e.length)for(o=0;o<e.length;o++)a+=E(e[o],t,r);else a=i+"[unknown node]\n";return a};t.dumpElement=function(e,t){console.log(E(e,t))}},function(e,t,r){var n=null,o=16384,i=128,a=128,l=0,s=1,_=65536,c=function(){},u=c.stats={all:0,copyIn:0,parse:0,constructOut:0},d=function(e){var t=n.llparser_create_descriptor(e,1);return t},f=function(e,t){var r=n.llparser_create_descriptor(e,0),o=!1;"^"===t[0]&&(o=!0);for(var i=o?1:0;i<t.length;i++){var a=t.charCodeAt(i);if("-"===t[i+1]){var l=t.charCodeAt(i+2);a<=l?(n.llparser_descriptor_add_range(r,a,l),i+=2):n.llparser_descriptor_add_char(r,a)}else n.llparser_descriptor_add_char(r,a)}return o&&n.llparser_descriptor_revert(r),r};c.create=function(e,t,u){n||(n=r(2));var p=new c;u=u||o;var h=p._llp=n.llparser_create(u,i,a),v={},m={},b="";v.ALL=n.llparser_create_descriptor(h,0),n.llparser_descriptor_set_all(v.ALL),v.NULL=n.llparser_create_descriptor(h,0),n.llparser_descriptor_set_nil(v.NULL);for(b in e)v[b]=d(h);for(b in e)for(var g=e[b],w=v[b],y=0;y<g.length;y++){for(var x=g[y].id,C=g[y].states,E=[],S=0;S<C.length;S++){var O=C[S];v[O]||(v[O]=f(h,O)),E.push(v[O])}var N=l;"_raw"===x?N=s:"_jump"===x?N=_+0:"_blank"===x&&(N=_+1);var k=n.llparser_add_rule(h,N,w,E.length,E[0],E[1],E[2],E[3],E[4],E[5],E[6],E[7]);N===l&&(m[k]=t[x])}return n.llparser_prepare(h),p._inputPtr=n.llparser_get_input_buffer(h),p._resultPtr=n.llparser_get_result(h),p._stateIdMap=v,p._ruleCbMap=m,p._charCountLimit=u,p};var p=function(e,t,r,n,o){for(var i=[],a={i:0,r:0,n:!1,cc:-1,c:[]},l=a,s=o.pos,_=!1,c=!1,u=!1;;){var d=t[s],f=t[s+1];if(f<0?(c=!0,f=-f-1):c=!1,d>=0){u=!0;var p=r.slice(d,f);l.c.push(p),_=c}else{if(d===-1&&0===f)break;u=!1;var h=-d,v=f,m={i:l.c.length-(_?1:0),r:h,n:c,cc:v,c:[]};if(_){var b=l.c.length-1,g=l.c[b];m.c.push(g),l.c[b]=m}else l.c.push(m);i.push(l),l=m,_=!1}if(!u||!_)for(;l.c.length===l.cc;){_=l.n;var w=i.pop();if(w.c[l.i]=n[l.r].call(e,l.c),l=w,_)break}s+=2}return a.c[0]},h=function(e,t,r,n){for(var o=n>e.length?e.length:n,i=0;i<o;i++)t[r+i]=e.charCodeAt(i);t[r+o]=0};c.prototype.parse=function(e,t){var r=Date.now();h(t,new Uint16Array(n.memory.buffer),this._inputPtr>>1,this._charCountLimit),u.copyIn=u.copyIn+Date.now()-r,r=Date.now();var o=n.llparser_parse(this._llp,this._stateIdMap[e]);if(u.parse=u.parse+Date.now()-r,r=Date.now(),o)throw new Error("Parsing failed at character position "+(o-1)+' near "'+t.slice(o-20,o)+'"');var i=p(this,new Int32Array(n.memory.buffer),t,this._ruleCbMap,{pos:this._resultPtr>>2});return u.constructOut=u.constructOut+Date.now()-r,i},c.prototype.destroy=function(){n.llparser_destroy(this._llp)},e.exports=c},function(e,t){e.exports=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(t){return e[t]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,r){"use strict";function n(e,t,r){return m.llparser_create(e,t,r)}function o(e){m.llparser_destroy(e)}function i(e,t){return m.llparser_create_descriptor(e,t)}function a(e){m.llparser_descriptor_set_all(e)}function l(e){m.llparser_descriptor_set_nil(e)}function s(e,t){m.llparser_descriptor_add_char(e,t)}function _(e,t,r){m.llparser_descriptor_add_range(e,t,r)}function c(e){m.llparser_descriptor_revert(e)}function u(e,t,r,n,o,i,a,l,s,_,c,u){return m.llparser_add_rule(e,t,r,n,o,i,a,l,s,_,c,u)}function d(e){m.llparser_prepare(e)}function f(e,t){return m.llparser_parse(e,t)}function p(e){return m.llparser_get_input_buffer(e)}function h(e){return m.llparser_get_result(e)}function v(){m.wasm_main()}r.r(t),r.d(t,"llparser_create",function(){return n}),r.d(t,"llparser_destroy",function(){return o}),r.d(t,"llparser_create_descriptor",function(){return i}),r.d(t,"llparser_descriptor_set_all",function(){return a}),r.d(t,"llparser_descriptor_set_nil",function(){return l}),r.d(t,"llparser_descriptor_add_char",function(){return s}),r.d(t,"llparser_descriptor_add_range",function(){return _}),r.d(t,"llparser_descriptor_revert",function(){return c}),r.d(t,"llparser_add_rule",function(){return u}),r.d(t,"llparser_prepare",function(){return d}),r.d(t,"llparser_parse",function(){return f}),r.d(t,"llparser_get_input_buffer",function(){return p}),r.d(t,"llparser_get_result",function(){return h}),r.d(t,"wasm_main",function(){return v}),r.d(t,"memory",function(){return b});var m=r(1),b=m.memory;m.__wbindgen_start()},function(e,t,r){"use strict";r.r(t),r.d(t,"memory",function(){return i}),r.d(t,"rust_calloc",function(){return a}),r.d(t,"rust_free",function(){return l}),r.d(t,"llparser_create",function(){return s}),r.d(t,"llparser_destroy",function(){return _}),r.d(t,"llparser_create_descriptor",function(){return c}),r.d(t,"llparser_descriptor_set_all",function(){return u}),r.d(t,"llparser_descriptor_set_nil",function(){return d}),r.d(t,"llparser_descriptor_add_char",function(){return f}),r.d(t,"llparser_descriptor_add_range",function(){return p}),r.d(t,"llparser_descriptor_revert",function(){return h}),r.d(t,"llparser_add_rule",function(){return v}),r.d(t,"llparser_prepare",function(){return m}),r.d(t,"llparser_parse",function(){return b}),r.d(t,"llparser_get_input_buffer",function(){return g}),r.d(t,"llparser_get_result",function(){return w}),r.d(t,"wasm_main",function(){return y}),r.d(t,"__wbindgen_start",function(){return x});var n=new ArrayBuffer(1114112),o=function(e,t,r){function n(e){var t=0,r=0,n=0,o=0,i=0,a=0,_=0;r=(t=e+-8|0)+(e=-8&(o=m[e+-4>>2]))|0;e:{t:{r:{n:{o:if(!(1&o)){if(!(3&o))break n;if(e=(o=m[t>>2])+e|0,(0|(t=t-o|0))==m[262246]){if(3!=(3&m[r+4>>2]))break o;return m[262244]=e,m[r+4>>2]=-2&m[r+4>>2],m[t+4>>2]=1|e,void(m[e+t>>2]=e)}o>>>0>=256?s(t):(0|(n=m[t+8>>2]))==(0|(i=m[t+12>>2]))?(a=1048576,_=m[262144]&p(o>>>3),m[a>>2]=_):(m[n+12>>2]=i,m[i+8>>2]=n)}if(2&(o=m[r+4>>2]))m[r+4>>2]=-2&o,m[t+4>>2]=1|e,m[e+t>>2]=e;else{o:{if(m[262247]!=(0|r)){if((0|r)!=m[262246])break o;return m[262246]=t,e=m[262244]+e|0,m[262244]=e,m[t+4>>2]=1|e,void(m[e+t>>2]=e)}if(m[262247]=t,e=m[262245]+e|0,m[262245]=e,m[t+4>>2]=1|e,(0|t)==m[262246]&&(m[262244]=0,m[262246]=0),(r=m[262254])>>>0>=e>>>0)break n;if(!(e=m[262247]))break n;i:if(!((o=m[262245])>>>0<41))for(t=1049e3;;){if((n=m[t>>2])+m[t+4>>2]>>>0>e>>>0&&n>>>0<=e>>>0)break i;if(!(t=m[t+8>>2]))break}if(n=4095,e=m[262252]){for(t=0;t=t+1|0,e=m[e+8>>2];);n=t>>>0>4095?t:4095}if(m[262256]=n,o>>>0<=r>>>0)break n;return void(m[262254]=-1)}if(e=(n=-8&o)+e|0,n>>>0>=256?s(r):(0|(n=m[r+12>>2]))==(0|(r=m[r+8>>2]))?(a=1048576,_=m[262144]&p(o>>>3),m[a>>2]=_):(m[r+12>>2]=n,m[n+8>>2]=r),m[t+4>>2]=1|e,m[e+t>>2]=e,m[262246]==(0|t)){m[262244]=e;break n}}if(e>>>0<256)break r;if(l(t,e),e=m[262256]+-1|0,m[262256]=e,!e){if(e=m[262252])break t;e=4095;break e}}return}return e=1048584+((r=e>>>3)<<3)|0,o=m[262144],r=1<<(31&r),n=m[e+8>>2],o&r||(m[262144]=r|o,n=e),r=n,m[e+8>>2]=t,m[r+12>>2]=t,m[t+12>>2]=e,void(m[t+8>>2]=r)}for(t=0;t=t+1|0,e=m[e+8>>2];);e=t>>>0>4095?t:4095}m[262256]=e}function o(e,t,r,n,o,i,a,l,s,_,c,u){var d;return C=d=C+-64|0,m[d+60>>2]=e,m[d+56>>2]=t,m[d+52>>2]=r,m[d+48>>2]=n,m[d+44>>2]=o,m[d+40>>2]=i,m[d+36>>2]=a,m[d+32>>2]=l,m[d+28>>2]=s,m[d+24>>2]=_,m[d+20>>2]=c,m[d+16>>2]=u,t=m[m[d+60>>2]+28>>2],r=m[d+60>>2],e=m[r>>2],m[r>>2]=e+1,m[d+12>>2]=t+y(e,44),m[m[d+12>>2]>>2]=m[d+52>>2],m[m[d+12>>2]+4>>2]=m[d+48>>2],m[d+48>>2]>0&&(m[m[d+12>>2]+8>>2]=m[d+44>>2]),m[d+48>>2]>1&&(m[m[d+12>>2]+12>>2]=m[d+40>>2]),m[d+48>>2]>2&&(m[m[d+12>>2]+16>>2]=m[d+36>>2]),m[d+48>>2]>3&&(m[m[d+12>>2]+20>>2]=m[d+32>>2]),m[d+48>>2]>4&&(m[m[d+12>>2]+24>>2]=m[d+28>>2]),m[d+48>>2]>5&&(m[m[d+12>>2]+28>>2]=m[d+24>>2]),m[d+48>>2]>6&&(m[m[d+12>>2]+32>>2]=m[d+20>>2]),m[d+48>>2]>7&&(m[m[d+12>>2]+36>>2]=m[d+16>>2]),m[m[d+12>>2]+40>>2]=m[d+56>>2],m[d+48>>2]>0&&function(e,t,r){var n=0;m[28+(n=C-32|0)>>2]=e,m[n+24>>2]=t,m[n+20>>2]=r,m[n+16>>2]=(m[n+20>>2]-m[m[n+28>>2]+24>>2]|0)/140,1==m[m[n+20>>2]+4>>2]&&(t=m[m[n+28>>2]+40>>2],r=m[n+28>>2],e=m[r+8>>2],m[r+8>>2]=e+1,m[n+12>>2]=t+(e<<3),m[m[n+12>>2]>>2]=m[n+24>>2],m[m[n+12>>2]+4>>2]=m[m[n+20>>2]+136>>2],m[m[n+20>>2]+136>>2]=m[n+12>>2])}(m[d+60>>2],m[d+12>>2],m[d+52>>2]),C=d- -64|0,m[d+12>>2]}function i(e,t,r,n,o){var a;if(C=a=C-48|0,m[a+44>>2]=e,m[a+40>>2]=t,m[a+36>>2]=r,m[a+32>>2]=n,m[a+28>>2]=o,m[m[a+40>>2]>>2]!=m[a+36>>2])for(m[m[a+40>>2]>>2]=m[a+36>>2],m[a+24>>2]=m[m[a+40>>2]+136>>2],m[a+20>>2]=1&(0!=m[a+28>>2]^-1^-1);m[a+24>>2];){for(m[a+20>>2]||(m[a+28>>2]=m[a+24>>2]),m[a+16>>2]=m[m[m[a+24>>2]>>2]+8>>2],1==m[m[a+16>>2]+4>>2]&&i(m[a+44>>2],m[a+16>>2],m[a+36>>2],m[a+32>>2],m[a+28>>2]),m[a+12>>2]=0;!(m[a+12>>2]>=128);)b[m[a+12>>2]+(m[a+16>>2]+8|0)|0]&&(w[m[a+28>>2]>>2]>=w[m[a+32>>2]+(m[a+12>>2]<<2)>>2]&&m[m[a+32>>2]+(m[a+12>>2]<<2)>>2]||(m[m[a+32>>2]+(m[a+12>>2]<<2)>>2]=m[m[a+28>>2]>>2])),m[a+12>>2]=m[a+12>>2]+1;m[a+24>>2]=m[m[a+24>>2]+4>>2]}C=a+48|0}function a(e,t,r,n){var o;for(m[44+(o=C-48|0)>>2]=e,m[o+40>>2]=t,m[o+36>>2]=r,m[o+32>>2]=n,m[o+28>>2]=m[m[o+40>>2]+136>>2];m[o+28>>2];){if(m[o+24>>2]=m[m[m[o+28>>2]>>2]+8>>2],m[o+24>>2]==m[o+40>>2])for(m[o+20>>2]=m[m[m[o+28>>2]>>2]+12>>2],m[o+16>>2]=0;!(m[o+16>>2]>=128);){e:{if(1!=m[m[o+20>>2]+4>>2]){if(!b[m[o+16>>2]+(m[o+20>>2]+8|0)|0])break e}else if(m[o+12>>2]=m[m[o+44>>2]+32>>2]+((m[o+20>>2]-m[m[o+44>>2]+24>>2]|0)/140<<9),!m[m[o+12>>2]+(m[o+16>>2]<<2)>>2])break e;w[m[o+28>>2]>>2]>=w[m[o+32>>2]+(m[o+16>>2]<<2)>>2]&&m[m[o+32>>2]+(m[o+16>>2]<<2)>>2]||(m[m[o+32>>2]+(m[o+16>>2]<<2)>>2]=m[m[o+28>>2]>>2])}m[o+16>>2]=m[o+16>>2]+1}m[o+28>>2]=m[m[o+28>>2]+4>>2]}}function l(e,t){var r=0,n=0,o=0,i=0;m[e+16>>2]=0,m[e+20>>2]=0,o=e,r=0,(n=t>>>8)&&(r=31,t>>>0>16777215||(r=62+((t>>>(6-(n=x(n))&31)&1)-(n<<1)|0)|0)),m[o+28>>2]=r,o=1048848+(r<<2)|0;e:{t:{r:{n:{if((i=m[262145])&(n=1<<(31&r))){if(n=m[o>>2],(-8&m[n+4>>2])!=(0|t))break n;r=n;break r}m[262145]=n|i,m[o>>2]=e,m[e+24>>2]=o;break e}for(o=t<<(31==(0|r)?0:25-(r>>>1)&31);;){if(!(r=m[(i=16+((o>>>29&4)+n|0)|0)>>2]))break t;if(o<<=1,n=r,(-8&m[r+4>>2])==(0|t))break}}return t=m[r+8>>2],m[t+12>>2]=e,m[r+8>>2]=e,m[e+24>>2]=0,m[e+12>>2]=r,void(m[e+8>>2]=t)}m[i>>2]=e,m[e+24>>2]=n}m[e+12>>2]=e,m[e+8>>2]=e}function s(e){var t,r=0,n=0,o=0,i=0,a=0,l=0;t=m[e+24>>2];e:{t:{if((0|e)==(0|(r=m[e+12>>2]))){if(o=m[(r=e+20|0)>>2],n=m[(o?20:16)+e>>2])break t;r=0;break e}n=m[e+8>>2],m[n+12>>2]=r,m[r+8>>2]=n;break e}for(o=o?r:e+16|0;i=o,(n=m[(o=(r=n)+20|0)>>2])||(o=r+16|0,n=m[r+16>>2]),n;);m[i>>2]=0}e:if(t){n=1048848+(m[e+28>>2]<<2)|0;t:{if((0|e)==m[n>>2]){if(m[n>>2]=r,r)break t;return a=1048580,l=m[262145]&p(m[e+28>>2]),void(m[a>>2]=l)}if(m[(m[t+16>>2]==(0|e)?16:20)+t>>2]=r,!r)break e}m[r+24>>2]=t,(n=m[e+16>>2])&&(m[r+16>>2]=n,m[n+24>>2]=r),(e=m[e+20>>2])&&(m[r+20>>2]=e,m[e+24>>2]=r)}}function _(e,t){var r,n,o;return C=r=C-32|0,m[r+24>>2]=e,m[r+20>>2]=t,m[r+16>>2]=0,m[r+12>>2]=0,n=r,o=function e(t,r,n,o,i,a,l){var s,_=0,c=0;C=s=C-96|0,m[s+88>>2]=t,m[s+84>>2]=r,m[s+80>>2]=n,m[s+76>>2]=o,m[s+72>>2]=i,m[s+68>>2]=a,m[s+64>>2]=l,m[s+60>>2]=g[m[s+80>>2]+(m[m[s+76>>2]>>2]<<1)>>1],w[s+60>>2]>=128&&(m[s+60>>2]=1);e:if(m[m[s+72>>2]>>2]>(m[s+64>>2]-4|0))m[s+92>>2]=-1;else if(1==m[m[s+84>>2]+4>>2])if(m[s+56>>2]=m[m[s+76>>2]>>2],m[s+52>>2]=m[m[s+72>>2]>>2],m[s+48>>2]=0,m[s+44>>2]=0,m[s+40>>2]=m[m[s+88>>2]+32>>2]+((m[s+84>>2]-m[m[s+88>>2]+24>>2]|0)/140<<9),m[s+36>>2]=0,!m[m[s+40>>2]+(m[s+60>>2]<<2)>>2]|w[s+60>>2]<=0|w[s+60>>2]>=127?!m[s+60>>2]|!m[m[s+40>>2]+508>>2]?m[m[s+40>>2]>>2]&&(m[s+36>>2]=m[m[s+40>>2]>>2]):m[s+36>>2]=m[m[s+40>>2]+508>>2]:m[s+36>>2]=m[m[s+40>>2]+(m[s+60>>2]<<2)>>2],m[s+36>>2]){for(m[s+68>>2]||m[m[s+36>>2]+40>>2]||(m[s+48>>2]=m[m[s+72>>2]>>2],t=m[s+72>>2],m[t>>2]=m[t>>2]+2),m[s+32>>2]=0;m[s+32>>2]<m[m[s+36>>2]+4>>2];){if(m[s+28>>2]=m[s+68>>2],m[s+68>>2]||!m[m[s+36>>2]+40>>2]|m[m[s+36>>2]+40>>2]==(m[s+32>>2]+65536|0)||(m[s+28>>2]=1),_=s,c=e(m[s+88>>2],m[(m[s+36>>2]+8|0)+(m[s+32>>2]<<2)>>2],m[s+80>>2],m[s+76>>2],m[s+72>>2],m[s+28>>2],m[s+64>>2]),m[_+24>>2]=c,m[s+24>>2]<0){m[s+92>>2]=-1;break e}m[s+68>>2]|m[m[s+36>>2]+40>>2]!=(m[s+32>>2]+65536|0)||(m[s+44>>2]=m[s+24>>2]),m[s+32>>2]=m[s+32>>2]+1}for(m[s+68>>2]||(m[m[s+36>>2]+40>>2]?1==m[m[s+36>>2]+40>>2]&&(r=m[s+56>>2],n=m[m[s+88>>2]+48>>2],o=m[s+72>>2],t=m[o>>2],m[o>>2]=t+1,m[n+(t<<2)>>2]=r,m[s+44>>2]=m[m[s+72>>2]>>2],r=m[m[s+76>>2]>>2],n=m[m[s+88>>2]+48>>2],o=m[s+72>>2],t=m[o>>2],m[o>>2]=t+1,m[n+(t<<2)>>2]=r):(m[m[m[s+88>>2]+48>>2]+(m[s+48>>2]<<2)>>2]=0-m[s+36>>2],m[m[m[s+88>>2]+48>>2]+(m[s+48>>2]+1<<2)>>2]=m[m[s+36>>2]+4>>2],m[s+44>>2]=m[s+48>>2]+1));;){if(m[m[s+72>>2]>>2]>(m[s+64>>2]-4|0)){m[s+92>>2]=-1;break e}if(m[s+20>>2]=m[m[s+88>>2]+36>>2]+((m[s+84>>2]-m[m[s+88>>2]+24>>2]|0)/140<<9),m[s+16>>2]=0,m[s+60>>2]=g[m[s+80>>2]+(m[m[s+76>>2]>>2]<<1)>>1],w[s+60>>2]>=128&&(m[s+60>>2]=1),!m[m[s+20>>2]+(m[s+60>>2]<<2)>>2]|w[s+60>>2]<=0|w[s+60>>2]>=127?!m[s+60>>2]|!m[m[s+20>>2]+508>>2]||(m[s+16>>2]=m[m[s+20>>2]+508>>2]):m[s+16>>2]=m[m[s+20>>2]+(m[s+60>>2]<<2)>>2],!m[s+16>>2])break;for(m[s+68>>2]||(m[m[s+16>>2]+40>>2]?65536!=m[m[s+16>>2]+40>>2]&&(m[m[s+72>>2]>>2]=m[s+52>>2]):(m[m[m[s+88>>2]+48>>2]+(m[s+44>>2]<<2)>>2]=(0-m[m[m[s+88>>2]+48>>2]+(m[s+44>>2]<<2)>>2]|0)-1,m[s+48>>2]=m[m[s+72>>2]>>2],t=m[s+72>>2],m[t>>2]=m[t>>2]+2)),m[s+12>>2]=1;m[s+12>>2]<m[m[s+16>>2]+4>>2];){if(m[s+8>>2]=m[s+68>>2],m[s+68>>2]||!m[m[s+16>>2]+40>>2]|m[m[s+16>>2]+40>>2]==(m[s+12>>2]+65536|0)||(m[s+8>>2]=1),_=s,c=e(m[s+88>>2],m[(m[s+16>>2]+8|0)+(m[s+12>>2]<<2)>>2],m[s+80>>2],m[s+76>>2],m[s+72>>2],m[s+8>>2],m[s+64>>2]),m[_+4>>2]=c,m[s+4>>2]<0){m[s+92>>2]=-1;break e}m[s+68>>2]|m[m[s+16>>2]+40>>2]!=(m[s+12>>2]+65536|0)||(m[s+44>>2]=m[s+4>>2]),m[s+12>>2]=m[s+12>>2]+1}m[s+68>>2]||(m[m[s+16>>2]+40>>2]?1==m[m[s+16>>2]+40>>2]&&(r=m[s+56>>2],n=m[m[s+88>>2]+48>>2],o=m[s+72>>2],t=m[o>>2],m[o>>2]=t+1,m[n+(t<<2)>>2]=r,m[s+44>>2]=m[m[s+72>>2]>>2],r=m[m[s+76>>2]>>2],n=m[m[s+88>>2]+48>>2],o=m[s+72>>2],t=m[o>>2],m[o>>2]=t+1,m[n+(t<<2)>>2]=r):(m[m[m[s+88>>2]+48>>2]+(m[s+48>>2]<<2)>>2]=0-m[s+16>>2],m[m[m[s+88>>2]+48>>2]+(m[s+48>>2]+1<<2)>>2]=m[m[s+16>>2]+4>>2],m[s+44>>2]=m[s+48>>2]+1))}m[s+92>>2]=m[s+44>>2]}else m[s+92>>2]=-1;else{if(m[s+60>>2]&&(-1==m[m[s+84>>2]+4>>2]&&(t=m[s+76>>2],m[t>>2]=m[t>>2]+1),!m[m[s+84>>2]+4>>2])){if(!b[m[s+60>>2]+(m[s+84>>2]+8|0)|0]){m[s+92>>2]=-1;break e}t=m[s+76>>2],m[t>>2]=m[t>>2]+1}m[s+68>>2]||(r=m[m[s+76>>2]>>2],n=m[m[s+84>>2]+4>>2],o=m[m[s+88>>2]+48>>2],i=m[s+72>>2],t=m[i>>2],m[i>>2]=t+1,m[o+(t<<2)>>2]=r-(-2==(0|n)?0:1),r=m[m[s+76>>2]>>2],n=m[m[s+88>>2]+48>>2],o=m[s+72>>2],t=m[o>>2],m[o>>2]=t+1,m[n+(t<<2)>>2]=r),m[s+92>>2]=m[m[s+72>>2]>>2]-1}return C=s+96|0,m[s+92>>2]}(m[r+24>>2],m[r+20>>2],m[m[r+24>>2]+44>>2],r+12|0,r+16|0,0,m[m[r+24>>2]+12>>2]<<1),m[n+8>>2]=o,e=m[m[r+24>>2]+48>>2],t=m[r+16>>2],m[r+16>>2]=t+1,m[e+(t<<2)>>2]=-1,e=m[m[r+24>>2]+48>>2],t=m[r+16>>2],m[r+16>>2]=t+1,m[e+(t<<2)>>2]=0,g[m[m[r+24>>2]+44>>2]+(m[r+12>>2]<<1)>>1]|m[r+8>>2]<0?m[r+28>>2]=m[r+12>>2]+1:m[r+28>>2]=0,C=r+32|0,m[r+28>>2]}function c(e){var t;return!(t=function(e){var t=0,r=0,n=0,o=0,i=0,a=0,_=0,c=0,u=0,d=0,v=0;e:{t:{r:{if(e>>>0>=245){if(e>>>0>=4294901709)break t;if(o=-8&(e=e+11|0),!(c=m[262145]))break r;r=0-o|0,_=0,(e>>>=8)&&(_=31,o>>>0>16777215||(_=62+((o>>>(6-(e=x(e))&31)&1)-(e<<1)|0)|0));n:{o:{if(e=m[1048848+(_<<2)>>2]){for(i=o<<(31==(0|_)?0:25-(_>>>1)&31);;){if(!((a=-8&m[e+4>>2])>>>0<o>>>0||(a=a-o|0)>>>0>=r>>>0||(n=e,r=a))){r=0;break o}if(a=m[e+20>>2],e=m[16+((i>>>29&4)+e|0)>>2],t=a&&(0|a)!=(0|e)?a:t,i<<=1,!e)break}if(t){e=t;break o}if(n)break n}if(n=0,!(e=(0-(e=2<<(31&_))|e)&c))break r;if(!(e=m[1048848+(f(e&0-e)<<2)>>2]))break r}for(;n=(a=(i=(t=-8&m[e+4>>2])-o|0)>>>0<r>>>0&t>>>0>=o>>>0)?e:n,r=a?i:r,e=(t=m[e+16>>2])||m[e+20>>2];);if(!n)break r}if(r>>>0>=(e=m[262244])-o>>>0&&e>>>0>=o>>>0)break r;s(n);n:if(r>>>0>=16){if(m[n+4>>2]=3|o,m[4+(t=n+o|0)>>2]=1|r,m[t+r>>2]=r,r>>>0>=256){l(t,r);break n}e=1048584+((r>>>=3)<<3)|0,i=m[262144],r=1<<(31&r),_=m[e+8>>2],i&r||(m[262144]=r|i,_=e),r=_,m[e+8>>2]=t,m[r+12>>2]=t,m[t+12>>2]=e,m[t+8>>2]=r}else e=r+o|0,m[n+4>>2]=3|e,m[4+(e=e+n|0)>>2]=1|m[e+4>>2];return n+8|0}n:{o:{if(!(3&(e=(t=m[262144])>>>(n=31&(r=(o=e>>>0<11?16:e+11&-8)>>>3))))){if(o>>>0<=w[262244])break r;if(e)break o;if(!(e=m[262145]))break r;for(t=m[1048848+(f(e&0-e)<<2)>>2],r=(-8&m[t+4>>2])-o|0,i=t;;){if(!(e=m[t+16>>2])&&!(e=m[t+20>>2]))break n;r=(t=(n=(-8&m[e+4>>2])-o|0)>>>0<r>>>0)?n:r,i=t?e:i,t=e}}r=(e=m[1048592+(a=(n=r+(1&(-1^e))|0)<<3)>>2])+8|0,(0|(i=m[e+8>>2]))==(0|(a=a+1048584|0))?(d=1048576,v=p(n)&t,m[d>>2]=v):(m[i+12>>2]=a,m[a+8>>2]=i),t=n<<3,m[e+4>>2]=3|t,m[4+(e=e+t|0)>>2]=1|m[e+4>>2];break t}return n=f(0-(e=(r=e<<n)&(0-(e=2<<n)|e))&e),e=m[1048592+(i=n<<3)>>2],(0|(r=m[e+8>>2]))==(0|(i=i+1048584|0))?(d=1048576,v=p(n)&t,m[d>>2]=v):(m[r+12>>2]=i,m[i+8>>2]=r),i=e+8|0,m[e+4>>2]=3|o,r=(t=n<<3)-o|0,m[4+(a=e+o|0)>>2]=1|r,m[e+t>>2]=r,(e=m[262244])&&(e=1048584+((n=e>>>3)<<3)|0,t=m[262246],o=m[262144],n=1<<(31&n),_=m[e+8>>2],o&n||(m[262144]=n|o,_=e),n=_,m[e+8>>2]=t,m[n+12>>2]=t,m[t+12>>2]=e,m[t+8>>2]=n),m[262246]=a,m[262244]=r,i}return s(i),r>>>0>=16?(m[i+4>>2]=3|o,m[4+(a=o+i|0)>>2]=1|r,m[r+a>>2]=r,(e=m[262244])&&(e=1048584+((n=e>>>3)<<3)|0,t=m[262246],o=m[262144],n=1<<(31&n),_=m[e+8>>2],o&n||(m[262144]=n|o,_=e),n=_,m[e+8>>2]=t,m[n+12>>2]=t,m[t+12>>2]=e,m[t+8>>2]=n),m[262246]=a,m[262244]=r):(e=r+o|0,m[i+4>>2]=3|e,m[4+(e=e+i|0)>>2]=1|m[e+4>>2]),i+8|0}r:{n:{o:{i:{if((t=m[262244])>>>0<o>>>0){if((e=m[262245])>>>0>o>>>0)break e;if(r=0,-1==(0|(t=h((e=o+65583|0)>>>16))))break t;if(!(n=t<<16))break t;if(e=(i=-65536&e)+m[262248]|0,m[262248]=e,t=m[262249],m[262249]=t>>>0>e>>>0?t:e,!(r=m[262247]))break i;for(e=1049e3;;){if((0|n)==((t=m[e>>2])+(a=m[e+4>>2])|0))break o;if(!(e=m[e+8>>2]))break}break n}return e=m[262246],(n=t-o|0)>>>0<=15?(m[262246]=0,m[262244]=0,m[e+4>>2]=3|t,o=4+(t=e+t|0)|0,r=1|m[t+4>>2]):(m[262244]=n,r=e+o|0,m[262246]=r,m[r+4>>2]=1|n,m[e+t>>2]=n,r=3|o,o=e+4|0),m[o>>2]=r,e+8|0}for((e=m[262255])>>>0<=n>>>0&&e||(m[262255]=n),e=0,m[262256]=4095,m[262251]=i,m[262250]=n,m[262253]=0;t=e+1048584|0,m[e+1048592>>2]=t,m[e+1048596>>2]=t,256!=(0|(e=e+8|0)););m[262247]=n,e=i+-40|0,m[262245]=e,m[n+4>>2]=1|e,m[4+(e+n|0)>>2]=40,m[262254]=2097152;break r}if(!(m[e+12>>2]|n>>>0<=r>>>0|t>>>0>r>>>0)){m[e+4>>2]=i+a,t=(e=m[262247])+15&-8,m[262247]=t+-8,r=8+((n=i+m[262245]|0)+(e-t|0)|0)|0,m[262245]=r,m[t+-4>>2]=1|r,m[4+(e+n|0)>>2]=40,m[262254]=2097152;break r}}e=m[262255],m[262255]=e>>>0<n>>>0?e:n,t=n+i|0,e=1049e3;n:{for(;;){if((0|t)!=m[e>>2]){if(e=m[e+8>>2])continue;break n}break}if(!m[e+12>>2]){m[e>>2]=n,m[e+4>>2]=i+m[e+4>>2],m[n+4>>2]=3|o,i=n+o|0,o=(t-n|0)-o|0;o:{i:{if((0|t)!=m[262247]){if(m[262246]==(0|t))break i;if(1==(3&(e=m[t+4>>2]))&&((r=-8&e)>>>0>=256?s(t):(0|(a=m[t+12>>2]))==(0|(_=m[t+8>>2]))?(d=1048576,v=m[262144]&p(e>>>3),m[d>>2]=v):(m[_+12>>2]=a,m[a+8>>2]=_),o=r+o|0,t=t+r|0),m[t+4>>2]=-2&m[t+4>>2],m[i+4>>2]=1|o,m[o+i>>2]=o,o>>>0>=256){l(i,o);break o}e=1048584+((t=o>>>3)<<3)|0,r=m[262144],t=1<<(31&t),_=m[e+8>>2],r&t||(m[262144]=t|r,_=e),r=_,m[e+8>>2]=i,m[r+12>>2]=i,m[i+12>>2]=e,m[i+8>>2]=r;break o}m[262247]=i,e=m[262245]+o|0,m[262245]=e,m[i+4>>2]=1|e;break o}m[262246]=i,e=m[262244]+o|0,m[262244]=e,m[i+4>>2]=1|e,m[e+i>>2]=e}return n+8|0}}for(e=1049e3;!((t=m[e>>2])>>>0<=r>>>0&&(a=t+m[e+4>>2]|0)>>>0>r>>>0);)e=m[e+8>>2];for(m[262247]=n,e=i+-40|0,m[262245]=e,m[n+4>>2]=1|e,m[4+(e+n|0)>>2]=40,m[262254]=2097152,m[(t=(e=(a+-32&-8)-8|0)>>>0<r+16>>>0?r:e)+4>>2]=27,e=m[262250],_=m[262251],u=m[262253],m[(c=t+16|0)>>2]=m[262252],m[c+4>>2]=u,m[t+8>>2]=e,m[t+12>>2]=_,m[262251]=i,m[262250]=n,m[262252]=t+8,m[262253]=0,e=t+28|0;m[e>>2]=7,a>>>0>(e=e+4|0)>>>0;);(0|t)!=(0|r)&&(m[t+4>>2]=-2&m[t+4>>2],e=t-r|0,m[r+4>>2]=1|e,m[t>>2]=e,e>>>0>=256?l(r,e):(e=1048584+((t=e>>>3)<<3)|0,n=m[262144],t=1<<(31&t),_=m[e+8>>2],n&t||(m[262144]=t|n,_=e),t=_,m[e+8>>2]=r,m[t+12>>2]=r,m[r+12>>2]=e,m[r+8>>2]=t))}if(r=0,!((e=m[262245])>>>0<=o>>>0))break e}return r}return t=e-o|0,m[262245]=t,n=(e=m[262247])+o|0,m[262247]=n,m[n+4>>2]=1|t,m[e+4>>2]=3|o,e+8|0}(e))|!(3&b[t+-4|0])||function(e,t){if(t)for(;v[0|e]=0,e=e+1|0,t=t+-1|0;);}(t,e),t}function u(e,t){return 0|c(y(e|=0,t|=0))}function d(){}function f(e){return e?31-x(e+-1^e)|0:32}function p(e){var t;return(-1>>>(t=31&e)&-2)<<t|(-1<<(e=0-e&31)&-2)>>>e}function h(t){t|=0;var n=0|r.byteLength/65536,o=n+t|0;if(n<o&&o<65536){var i=new ArrayBuffer(y(o,65536)),a=new e.Int8Array(i);a.set(v),v=a,v=new e.Int8Array(i),new e.Int16Array(i),m=new e.Int32Array(i),b=new e.Uint8Array(i),g=new e.Uint16Array(i),w=new e.Uint32Array(i),new e.Float32Array(i),new e.Float64Array(i),r=i}return n}var v=new e.Int8Array(r),m=(new e.Int16Array(r),new e.Int32Array(r)),b=new e.Uint8Array(r),g=new e.Uint16Array(r),w=new e.Uint32Array(r),y=(new e.Float32Array(r),new e.Float64Array(r),e.Math.imul),x=(e.Math.fround,e.Math.abs,e.Math.clz32),C=(e.Math.min,e.Math.max,e.Math.floor,e.Math.ceil,e.Math.sqrt,t.abort,e.NaN,e.Infinity,1048576);return{memory:Object.create(Object.prototype,{grow:{value:h},buffer:{get:function(){return r}}}),rust_calloc:u,rust_free:function(e){n(e|=0)},llparser_create:function(e,t,r){return 0|function(e,t,r){var n,o,i;return C=n=C-32|0,m[n+28>>2]=e,m[n+24>>2]=t,m[n+20>>2]=r,e=n,t=m[n+28>>2]?m[n+28>>2]:256,m[e+28>>2]=t,e=n,t=m[n+24>>2]?m[n+24>>2]:256,m[e+24>>2]=t,e=n,t=m[n+20>>2]?m[n+20>>2]:256,m[e+20>>2]=t,o=n,i=u(((((((y(m[n+24>>2],140)+52|0)+y(m[n+20>>2],44)|0)+(m[n+24>>2]<<9)|0)+(m[n+24>>2]<<9)|0)+y(m[n+20>>2],m[n+24>>2]<<3)|0)+(m[n+28>>2]<<1)|0)+(m[n+28>>2]<<3)|0,1),m[o+16>>2]=i,m[m[n+16>>2]+12>>2]=m[n+28>>2],m[m[n+16>>2]+16>>2]=m[n+24>>2],m[m[n+16>>2]+20>>2]=m[n+20>>2],m[m[n+16>>2]+4>>2]=0,m[m[n+16>>2]>>2]=0,m[m[n+16>>2]+8>>2]=0,m[n+12>>2]=m[n+16>>2]+52,m[m[n+16>>2]+24>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+y(m[n+24>>2],140),m[m[n+16>>2]+28>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+y(m[n+20>>2],44),m[m[n+16>>2]+32>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+(m[n+24>>2]<<9),m[m[n+16>>2]+36>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+(m[n+24>>2]<<9),m[m[n+16>>2]+40>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+y(m[n+20>>2],m[n+24>>2]<<3),m[m[n+16>>2]+44>>2]=m[n+12>>2],m[n+12>>2]=m[n+12>>2]+(m[n+28>>2]<<1),m[m[n+16>>2]+48>>2]=m[n+12>>2],C=n+32|0,m[n+16>>2]}(e|=0,t|=0,r|=0)},llparser_destroy:function(e){!function(e){var t;C=t=C-16|0,m[t+12>>2]=e,n(m[t+12>>2]),C=t+16|0}(e|=0)},llparser_create_descriptor:function(e,t){return 0|function(e,t){var r,n;return m[12+(r=C-16|0)>>2]=e,m[r+8>>2]=t,t=m[m[r+12>>2]+24>>2],n=m[r+12>>2],e=m[n+4>>2],m[n+4>>2]=e+1,m[r+4>>2]=t+y(e,140),m[m[r+4>>2]+4>>2]=m[r+8>>2]?1:0,m[r+4>>2]}(e|=0,t|=0)},llparser_descriptor_set_all:function(e){var t;e|=0,m[12+(t=C-16|0)>>2]=e,m[m[t+12>>2]+4>>2]=-1,v[m[t+12>>2]+135|0]=1},llparser_descriptor_set_nil:function(e){var t;e|=0,m[12+(t=C-16|0)>>2]=e,m[m[t+12>>2]+4>>2]=-2,v[m[t+12>>2]+8|0]=1},llparser_descriptor_add_char:function(e,t){!function(e,t){var r;m[12+(r=C-16|0)>>2]=e,m[r+8>>2]=t,v[m[r+8>>2]+(m[r+12>>2]+8|0)|0]=1}(e|=0,t|=0)},llparser_descriptor_add_range:function(e,t,r){!function(e,t,r){var n;for(m[12+(n=C-16|0)>>2]=e,m[n+8>>2]=t,m[n+4>>2]=r,m[n>>2]=m[n+8>>2];!(m[n>>2]>m[n+4>>2]);)v[m[n>>2]+(m[n+12>>2]+8|0)|0]=1,m[n>>2]=m[n>>2]+1}(e|=0,t|=0,r|=0)},llparser_descriptor_revert:function(e){!function(e){var t;for(m[12+(t=C-16|0)>>2]=e,m[t+8>>2]=1;!(m[t+8>>2]>=127);)v[m[t+8>>2]+(m[t+12>>2]+8|0)|0]=1&(0!=b[m[t+8>>2]+(m[t+12>>2]+8|0)|0]^-1),m[t+8>>2]=m[t+8>>2]+1}(e|=0)},llparser_add_rule:function(e,t,r,n,i,a,l,s,_,c,u,d){return 0|o(e|=0,t|=0,r|=0,n|=0,i|=0,a|=0,l|=0,s|=0,_|=0,c|=0,u|=0,d|=0)},llparser_prepare:function(e){!function(e){var t;for(C=t=C-32|0,m[t+28>>2]=e,m[t+24>>2]=0;!(m[t+24>>2]>=m[m[t+28>>2]+4>>2]);)m[t+20>>2]=m[m[t+28>>2]+24>>2]+y(m[t+24>>2],140),1==m[m[t+20>>2]+4>>2]&&i(m[t+28>>2],m[t+20>>2],m[t+20>>2],m[m[t+28>>2]+32>>2]+(m[t+24>>2]<<9)|0,0),m[t+24>>2]=m[t+24>>2]+1;for(m[t+16>>2]=0;!(m[t+16>>2]>=m[m[t+28>>2]+4>>2]);)m[t+12>>2]=m[m[t+28>>2]+24>>2]+y(m[t+16>>2],140),1==m[m[t+12>>2]+4>>2]&&(m[m[t+12>>2]>>2]=0,a(m[t+28>>2],m[t+12>>2],m[t+12>>2],m[m[t+28>>2]+36>>2]+(m[t+16>>2]<<9)|0)),m[t+16>>2]=m[t+16>>2]+1;C=t+32|0}(e|=0)},llparser_parse:function(e,t){return 0|_(e|=0,t|=0)},llparser_get_input_buffer:function(e){var t;return e|=0,m[12+(t=C-16|0)>>2]=e,m[m[t+12>>2]+44>>2]},llparser_get_result:function(e){var t;return e|=0,m[12+(t=C-16|0)>>2]=e,m[m[t+12>>2]+48>>2]},wasm_main:d,__wbindgen_start:d}}({Math:Math,Int8Array:Int8Array,Uint8Array:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},{abort:function(){throw new Error("abort")}},n),i=o.memory,a=o.rust_calloc,l=o.rust_free,s=o.llparser_create,_=o.llparser_destroy,c=o.llparser_create_descriptor,u=o.llparser_descriptor_set_all,d=o.llparser_descriptor_set_nil,f=o.llparser_descriptor_add_char,p=o.llparser_descriptor_add_range,h=o.llparser_descriptor_revert,v=o.llparser_add_rule,m=o.llparser_prepare,b=o.llparser_parse,g=o.llparser_get_input_buffer,w=o.llparser_get_result,y=o.wasm_main,x=o.__wbindgen_start}])},function(e,t,r){var n=r(4),o=function(e){this.empty=!0,this._type=e,this._arr=[],this._index=0};o.create=function(e){return new o(e)},o.prototype.add=function(e){var t=this._index++;return this._arr.push({id:t,func:e}),this.empty=!1,t},o.prototype.remove=function(e){var t=this._arr,r=0;if("function"==typeof e)for(r=0;r<t.length;r++){var n=t[r].func;if(n===e)return t.splice(r,1),this.empty=!t.length,n}else for(r=0;r<t.length;r++)if(t[r].id===e){var o=t[r].func;return t.splice(r,1),this.empty=!t.length,o}return null},o.prototype.call=function(e,t,r){for(var n=this._arr,o=!1,i=0;i<n.length;i++){var l=a(this._type,n[i].func,e,t,r);l===!1&&(o=!0)}if(o)return!1};var i=function(e,t){if(!t.type||l.call(null,[e,t])!==!1){if(n.throwGlobalError)throw e;console.error(e.stack)}},a=o.safeCallback=function(e,t,r,n,o){try{return t.apply(r,n)}catch(l){var a="[Exparser] [Error] [Component] "+(e||"Error Listener")+" Error @ ";r&&r.is&&(a+=r.is),a+="#"+(t.name||"(anonymous)"),o&&o.triggerLifeTime("error",[l]),i(l,{message:a,type:e,element:r,method:t,args:n})}},l=o.create();o.addGlobalErrorListener=function(e){return l.add(e)},o.removeGlobalErrorListener=function(e){return l.remove(e)},e.exports=o},function(e,t){var r={lazyRegistration:!0,publicProperties:!1,availability:null,domain:"",writeOnly:!1,allowInWriteOnly:!1,classPrefix:null,addGlobalClass:!1,templateEngine:null,renderingMode:"full",multipleSlots:!1,reflectToAttributes:!1,writeFieldsToNode:!0,writeIdToDOM:!1,separateInnerData:!0,innerDataExclude:null,listenerChangeLifeTimes:!1,randomizeTagName:!1,virtualHost:!1,throwGlobalError:!1,writeExtraInfoToAttr:!1,documentBackend:"undefined"!=typeof window&&"undefined"!=typeof document?"dom":"none",hasDOMBackend:!("undefined"==typeof window||"undefined"==typeof document)};e.exports=r},function(e,t){var r=Object.prototype.hasOwnProperty,n=function(e,t){var o=typeof e;if("object"===o&&null!==e){var i=t?t.get(e):void 0;if(void 0!==i)return i;if(e instanceof Array){i=[],t&&t.set(e,i);for(var a=0;a<e.length;a++)i[a]=n(e[a],t)}else{i={},t&&t.set(e,i);for(var l in e)r.call(e,l)&&(i[l]=n(e[l],t))}return i}if("symbol"!==o)return e};t.deepCopy=function(e,t){var r=t&&"undefined"!=typeof WeakMap?new WeakMap:null;return n(e,r)}},function(e,t,r){var n=r(3),o=(Object.prototype.hasOwnProperty,function(){});o.prototype=Object.create(Object.prototype,{constructor:{value:o,writable:!0,configurable:!0}});var i=null;o._setElementSystem=function(e){i=e,o._setElementSystem=null};var a=null;o._setComponent=function(e){a=e,o._setComponent=null};var l=Date.now();o.setInitTimeStamp=function(e){return l=void 0===e?Date.now():e},o.getInitTimeStamp=function(e){return l},o.create=function(e,t,r){r=r||{};var n=r.originalEvent,i=r.extraFields||{},a=Date.now()-l,s=new o;s.currentTarget=null,s.type=e,s.timeStamp=a,s.mark=null,s.detail=t,s.bubbles=!!r.bubbles,s.composed=!!r.composed,s.__originalEvent=n,s.__hasCapture=!!r.capturePhase,s.__stopped=!1,s.__dispatched=!1;for(var _ in i)s[_]=i[_];return s},o.prototype.preventDefault=function(){this.__originalEvent&&this.__originalEvent.preventDefault()},o.prototype.stopPropagation=function(){this.__stopped=!0},o.prototype.isStopped=function(){return!!this.__stopped};o.prototype.markMutated=function(){this.__mutatedMarked=!0},o.prototype.mutatedMarked=function(){return!!this.__mutatedMarked};var s=function(e,t,r,n){for(var o=e,a=e instanceof i?e.collectMarks():{},l=[],s=[],_=e;_;){if(o!==_&&(l.push(e),e=_,s.push(a),a=e instanceof i?e.collectMarks():{}),o=_.parentNode,n(_,e,a)===!1)return;if(_.__wxHost){if(r)break;e=l.pop()||_.__wxHost,a=s.pop()||(e instanceof i?e.collectMarks():{}),_=_.__wxHost,o=_}else{var c=!0;_ instanceof i&&(c=!1),_=c||r?_.parentNode:_.__wxSlotParent;
  386. }}};o.dispatchEvent=function(e,t){if(!t.__dispatched){t.__dispatched=!0,e.__wxElement&&e.__wxHost!==e.__wxElement&&(e=e.__wxElement,e.shadowRoot instanceof i&&(e=e.shadowRoot)),t.target=e instanceof i?e.__methodCaller:e;var r=function(e,r,n){if(!(r&&r.length&&t.mutatedMarked())){var o=t.currentTarget=n instanceof i?n.__methodCaller:n,l=e.call(o,[t],n instanceof a?n:void 0);r&&r.length&&t.markMutated(),l===!1&&(t.__originalEvent&&t.__originalEvent.preventDefault(),t.__stopped=!0)}},n=t.type,o=!t.composed;if(t.__hasCapture){var l=[];s(e,n,o,function(e,t,r){return e.__wxCaptureEvents&&e.__wxCaptureEvents[n]&&l.push([e,t,r]),!0});for(var _=l.length-1;_>=0;_--){var c=l[_],u=c[0],d=c[1];t.target=d instanceof i?d.__methodCaller:d,t.mark=c[2];var f=u.__wxCaptureMutated&&u.__wxCaptureMutated[n];if(r(u.__wxCaptureEvents[n],f,u),t.__stopped)break}}if(t.target=e instanceof i?e.__methodCaller:e,!t.__stopped){var p=!t.bubbles;s(e,n,o,function(e,o,a){t.target=o instanceof i?o.__methodCaller:o,t.mark=a;var l=e.__wxMutated&&e.__wxMutated[n];return e.__wxEvents&&e.__wxEvents[n]&&r(e.__wxEvents[n],l,e),!p&&!t.__stopped})}}},o.triggerEvent=function(e,t,r,n){var i=o.create(t,r,n);o.dispatchEvent(e,i)},o.addListenerToElement=function(e,t,r,o){var i=o&&o.mutated;if(i){var l=r;r=function(e){if(!e.mutatedMarked()){var t=Array.prototype.slice.call(arguments);return l.apply(this,t)}}}var s=void 0;return o&&(o.useCapture||o.capture)?(e.__wxCaptureEvents||(e.__wxCaptureEvents=Object.create(null)),e.__wxCaptureEvents[t]||(e.__wxCaptureEvents[t]=n.create("Event Listener")),s=e.__wxCaptureEvents[t].add(r),i&&(e.__wxCaptureMutated||(e.__wxCaptureMutated=Object.create(null)),e.__wxCaptureMutated[t]||(e.__wxCaptureMutated[t]=[]),e.__wxCaptureMutated[t].push(s))):(e.__wxEvents||(e.__wxEvents=Object.create(null)),e.__wxEvents[t]||(e.__wxEvents[t]=n.create("Event Listener")),s=e.__wxEvents[t].add(r),i&&(e.__wxMutated||(e.__wxMutated=Object.create(null)),e.__wxMutated[t]||(e.__wxMutated[t]=[]),e.__wxMutated[t].push(s))),e instanceof a&&e.__componentOptions.listenerChangeLifeTimes&&e.triggerLifeTime("listenerChanged",[!0,t,r,o]),s},o.removeListenerFromElement=function(e,t,r,n){var o=null;if(n&&(n.useCapture||n.capture)){if(e.__wxCaptureEvents&&e.__wxCaptureEvents[t]&&(o=e.__wxCaptureEvents[t].remove(r)),e.__wxCaptureMutated&&e.__wxCaptureMutated[t]){var i=e.__wxCaptureMutated[t].indexOf(r);i!==-1&&e.__wxCaptureMutated[t].splice(i,1)}}else if(e.__wxEvents&&e.__wxEvents[t]&&(o=e.__wxEvents[t].remove(r)),e.__wxMutated&&e.__wxMutated[t]){var i=e.__wxMutated[t].indexOf(r);i!==-1&&e.__wxMutated[t].splice(i,1)}o&&e instanceof a&&e.__componentOptions.listenerChangeLifeTimes&&e.triggerLifeTime("listenerChanged",[!1,t,o,n])},e.exports=o},function(e,t,r){var n=r(1),o=" \n\r\t\f",i=null,a=function(){i=n.create({MULTIPLE_PATHS:[{id:"arrayConcat",states:["MULTIPLE_PATHS",",","SINGLE_PATH"]},{id:"array",states:["SINGLE_PATH"]}],SINGLE_PATH:[{id:"arrayConcat",states:["SINGLE_PATH",".","VAR_NAME"]},{id:"arrayConcat",states:["SINGLE_PATH","[","INT","]"]},{id:"array",states:["VAR_NAME"]},{id:"_jump",states:["SINGLE_PATH",o]}],VAR_NAME:[{id:"_blank",states:[o,"VAR_NAME"]},{id:"_jump",states:["VAR_NAME",o]},{id:"_raw",states:["*","*"]},{id:"_raw",states:["_a-zA-Z$","VAR_NAME_AFTER"]}],VAR_NAME_AFTER:[{id:"_raw",states:["_a-zA-Z0-9$","VAR_NAME_AFTER"]},{id:"_raw",states:["NULL"]}],INT:[{id:"_blank",states:[o,"INT"]},{id:"_jump",states:["INT",o]},{id:"toNumber",states:["0-9","INT_AFTER"]}],INT_AFTER:[{id:"_raw",states:["0-9","INT_AFTER"]},{id:"_raw",states:["NULL"]}]},{arrayConcat:function(e){return e[0].push(e[2]),e[0]},array:function(e){return e},toNumber:function(e){return parseInt(e[0]+e[1],10)}})};t.parseMultiPaths=function(e){return i||a(),i.parse("MULTIPLE_PATHS",e)},t.parseSinglePath=function(e){for(var t=e.length,r=[],n="",o=0,i=!1,a=!1,l=0;l<t;l++){var s=e[l];if("\\"===s)l+1<t&&("."===e[l+1]||"["===e[l+1]||"]"===e[l+1]||"\\"===e[l+1])?(n+=e[l+1],l++):n+="\\";else if("."===s)n&&(r.push(n),n="");else if("["===s){if(n&&(r.push(n),n=""),0===r.length)throw new Error("The path string should not start with []: "+e);a=!0,i=!1}else if("]"===s){if(!i)throw new Error("There should be digits inside [] in the path string: "+e);a=!1,r.push(o),o=0}else if(a){if(s<"0"||s>"9")throw new Error("Only digits (0-9) can be put inside [] in the path string: "+e);i=!0,o=10*o+s.charCodeAt(0)-48}else n+=s}if(n&&r.push(n),0===t)throw new Error("The path string should not be empty");return r}},function(e,t,r){var n=r(3),o=r(4),i=r(7),a=["created","ready","cacheAttached","attached","moved","detached","saved","restored","error","listenerChanged","performanceData"],l=[String,Number,Boolean,Object,Array,null],s=function(){},_=i.parseMultiPaths,c=function(){},u=(c.matchTypeWithValue=function(e,t){if(e===String){if("string"!=typeof t)return!1}else if(e===Number){if(!Number.isFinite(t))return!1}else if(e===Boolean){if("boolean"!=typeof t)return!1}else if(e===Object){if(null===t||t.constructor!==Object)return!1}else if(e===Array){if(t.constructor!==Array)return!1}else if(void 0===t)return!1;return!0},function(e){for(var t=[],r=0;r<e.length;r++)t[r]=e[r];return t}),d=function(e){var t={};for(var r in e)t[r]=e[r];return t},f=function(e,t){for(var r in t)hasOwnProperty.call(e,r)?"object"!=typeof e[r]||"object"!=typeof t[r]||null===t[r]||t[r]instanceof Array?e[r]=t[r]:(e[r]instanceof Array?e[r]=u(e[r]):e[r]=d(e[r]),f(e[r],t[r])):e[r]=t[r]};c.create=function(e){var t=new c;return t.is=e.is||"",t.using=e.using||{},t.generics=e.generics||{},t.template=e.template,t.externalClasses=e.externalClasses||[],t.data="object"==typeof e.data?{}:null,t.properties=Object.create(null),t.methods=Object.create(null),t.listeners=Object.create(null),t.relations=Object.create(null),t.ancestors=[],t.initiator=e.initiator,t.lifetimes=Object.create(null),t.pageLifetimes=Object.create(null),t.observers=[],t.options={publicProperties:!!(e.options&&void 0!==e.options.publicProperties?e.options.publicProperties:o.publicProperties)},t.definitionFilter=e.definitionFilter,t._unprepared=e,(e.options&&void 0!==e.options.lazyRegistration?e.options.lazyRegistration:o.lazyRegistration)||c.prepare(t),e.is&&(c._list[e.is]=t),t},c.prepare=function(e){var t=e._unprepared;if(t){e._unprepared=null;var r=e.ancestors,n="",o=0;for(o=0;o<(t.behaviors||[]).length;o++){var i=t.behaviors[o],u=i;"string"==typeof u&&(u=c._list[i]),u._unprepared&&c.prepare(u),"object"==typeof u.data&&(null===e.data?e.data=u.data:f(e.data,u.data));for(n in u.generics){var d=u.generics[n];"object"!=typeof d&&(d={}),e.generics[n]={default:d.default}}for(n in u.properties)e.properties[n]=u.properties[n];for(n in u.relations)e.relations[n]=u.relations[n];for(n in u.methods)e.methods[n]=u.methods[n];for(var p=0;p<u.ancestors.length;p++)r.indexOf(u.ancestors[p])<0&&r.push(u.ancestors[p])}"object"==typeof t.data&&(null===e.data?e.data=t.data:f(e.data,t.data));for(n in t.properties){var h=t.properties[n];l.indexOf(h)>=0?h={type:h}:l.indexOf(h.type)<0&&h.optionalTypes&&h.optionalTypes.length>0&&(h.type=h.optionalTypes[0]),void 0===h.value&&(h.type===String?h.value="":h.type===Number?h.value=0:h.type===Boolean?h.value=!1:h.type===Array?h.value=[]:h.value=null),e.properties[n]={type:h.type,optionalTypes:h.optionalTypes,value:h.value,filter:h.filter,observer:h.observer,public:!!(void 0===h.public?e.options.publicProperties:h.public),availability:h.availability,observeAssignments:!!h.observeAssignments}}if(t.lifetimes&&"object"==typeof t.lifetimes)for(n in t.lifetimes)e.lifetimes[n]=t.lifetimes[n];for(o=0;o<a.length;o++)void 0===e.lifetimes[a[o]]&&(e.lifetimes[a[o]]=t[a[o]]);for(n in t.listeners)e.listeners[n]=t.listeners[n];var v=t.observers;if(v instanceof Array)for(o=0;o<v.length;o++){var m=v[o];e.observers.push({paths:_(m.fields||"**"),observer:m.observer})}else for(n in v)e.observers.push({paths:_(n),observer:v[n]});if(t.pageLifetimes&&"object"==typeof t.pageLifetimes)for(n in t.pageLifetimes)e.pageLifetimes[n]=t.pageLifetimes[n];for(n in t.relations){var b=t.relations[n];e.relations[n]={target:b.target||n,type:b.type,linked:b.linked||s,linkChanged:b.linkChanged||s,unlinked:b.unlinked||s,linkFailed:b.linkFailed||s}}for(n in t.methods)"function"==typeof t.methods[n]&&(e.methods[n]=t.methods[n]);r.push(e)}},c._list=Object.create(null),c.prototype.hasBehavior=function(e){this._unprepared&&c.prepare(this);for(var t=0;t<this.ancestors.length;t++)if(e instanceof c){if(this.ancestors[t]===e)return!0}else if(this.ancestors[t]===c._list[e])return!0;return!1},c.prototype._getAllListeners=function(){for(var e={},t=this.ancestors,r=0;r<t.length;r++){var n=this.ancestors[r];for(var o in n.listeners)Object.prototype.hasOwnProperty.call(e,o)?e[o].push(n.listeners[o]):e[o]=[n.listeners[o]]}return e},c.prototype._addObserversToDataProxy=function(e){for(var t=this.ancestors,r=0;r<t.length;r++)for(var n=this.ancestors[r].observers,o=0;o<n.length;o++){var i=n[o];e.addObserver(i.observer,i.paths)}},c.prototype._getAllLifeTimeFuncs=function(){var e={},t=this.ancestors;a.forEach(function(t){e[t]=n.create("Lifetime Method")});for(var r=0;r<t.length;r++){var o=t[r];for(var i in o.lifetimes)o.lifetimes[i]&&(e[i]||(e[i]=n.create("Lifetime Method")),e[i].add(o.lifetimes[i]))}return e},c.prototype._getAllPageLifeTimeFuncs=function(){for(var e={},t=this.ancestors,r=0;r<t.length;r++){var o=t[r];for(var i in o.pageLifetimes)o.pageLifetimes[i]&&(e[i]||(e[i]=n.create("Page Lifetime Method")),e[i].add(o.pageLifetimes[i]))}return e},c.callDefinitionFilter=function(e){var t=e.definitionFilter,r=[];return e.behaviors instanceof Array&&e.behaviors.forEach(function(t){t="string"==typeof t?c._list[t]:t,t&&t.definitionFilter&&(r.push(t.definitionFilter),t.definitionFilter.call(null,e))}),"function"==typeof t?function(e){t(e,r)}:null},e.exports=c},function(e,t,r){var n=r(6),o=r(10),i=r(11),a=r(12),l=r(14),s=r(4),_=r(13),c=function(e){u(this,e||null)};c.prototype=Object.create(Object.prototype,{constructor:{value:c,writable:!0,configurable:!0},id:{get:function(){return this.__id},set:function(e){var t=String(e);if(this.__id!==t){if(this.__id=t,this.ownerShadowRoot){var r=this.ownerShadowRoot.__wxHost;r.__idCacheDirty=!0,this.__domElement&&r.__componentOptions.writeIdToDOM&&(this.__domElement.id=t)}s.writeExtraInfoToAttr&&this.__domElement&&this.__domElement.setAttribute("exparser:info-attr-id",t),(this.__propObservers&&!this.__propObservers.empty||this.__subtreeObserversCount)&&o._callObservers(this,"__propObservers",{type:"properties",target:this,propertyName:"id"})}},configurable:!0},slot:{get:function(){return this.__slot},set:function(e){e=String(e),this.__slot!==e&&(this.__inheritSlots||(this.__slot=e,w(this),(this.__propObservers&&!this.__propObservers.empty||this.__subtreeObserversCount)&&o._callObservers(this,"__propObservers",{type:"properties",target:this,propertyName:"slot"})))},configurable:!0},attributes:{get:function(){var e=[];if(!this.__attributes)return e;for(var t in this.__attributes)e.push({name:t,value:this.__attributes[t]});return e},set:function(){},configurable:!0},class:{get:function(){return this.classList.getClassNames()},set:function(e){this.classList&&this.classList.setClassNames(e),(this.__propObservers&&!this.__propObservers.empty||this.__subtreeObserversCount)&&o._callObservers(this,"__propObservers",{type:"properties",target:this,propertyName:"class"})},configurable:!0},style:{get:function(){return this.__domElement?this.__domElement.style:null},set:function(e){return P.call(this,e)},configurable:!0}}),n._setElementSystem(c),i._setElementSystem(c);var u=c.initialize=function(e,t,r){e.__id="",e.__slot="",e.__virtual=!1,e.__inheritSlots=!1,e.__attributes=null,e.__marks=null,e.__attached=!1,e.parentNode=null,e.childNodes=[],e.ownerShadowRoot=r,e.__wxSlotParent=null,e.__wxSlotChildren=e.childNodes,e.__subtreeObserversCount=0,e.classList=null,e.__styleSegments=[],e.__methodCaller=e,e.__relationHandler=null,e.__backendExtracted=_.backendExtractedDefault,e.__domElement=t,e.$$=t,t&&(t.__wxElement=e)};c._clone=function(e,t,r,n){if(e.__id=t.__id,e.__slot=t.__slot,e.__virtual=t.__virtual,e.__inheritSlots=t.__inheritSlots,e.__marks=t.__marks?{}:null,t.__marks)for(var o in t.__marks)e.__marks[o]=t.__marks[o];e.__attributes=Object.create(null);for(var i in t.__attributes)e.__attributes[i]=t.__attributes[i];e.__attached=!1,e.parentNode=null,e.childNodes=[],e.ownerShadowRoot=n,e.__wxSlotParent=null,e.__wxSlotChildren=e.childNodes,e.__subtreeObserversCount=0,e.classList=null,e.__styleSegments=[],e.__methodCaller=e,e.__relationHandler=null,e.__backendExtracted=_.backendExtractedDefault,e.__domElement=r,e.$$=r,r&&(r.__wxElement=e)};var d=function(e){if(!e.parentNode||e.parentNode.__attached){var t=function(e){if(e instanceof c){e.__attached=!0,e.__lifeTimeFuncs&&e.__lifeTimeFuncs.attached.call(e.__methodCaller,[],e),e.__relationHandler&&e.__relationHandler("attached"),e.__attachedObservers&&!e.__attachedObservers.empty&&o._callSingleObserver(e,"__attachedObservers",{type:"attachStatus",target:e,status:"attached"}),e.shadowRoot instanceof c&&t(e.shadowRoot);for(var r=e.childNodes,n=0;n<r.length;n++)t(r[n])}};t(e)}},f=function(e){if(e.__attached){var t=function(e){if(e instanceof c){for(var r=e.childNodes,n=0;n<r.length;n++)t(r[n]);e.shadowRoot instanceof c&&t(e.shadowRoot),e.__attached=!1,e.__lifeTimeFuncs&&e.__lifeTimeFuncs.detached.call(e.__methodCaller,[],e),e.__relationHandler&&e.__relationHandler("detached"),e.__attachedObservers&&!e.__attachedObservers.empty&&o._callSingleObserver(e,"__attachedObservers",{type:"attachStatus",target:e,status:"detached"})}};t(e)}},p=function(e){if(!e.__attached)return d(e);var t=function(e){if(e instanceof c){for(var r=e.childNodes,n=0;n<r.length;n++)t(r[n]);e.shadowRoot instanceof c&&t(e.shadowRoot),e.__lifeTimeFuncs&&e.__lifeTimeFuncs.moved.call(e.__methodCaller,[],e),e.__relationHandler&&e.__relationHandler("moved")}};t(e)},h=function(e,t,r){if(e.__childObservers&&!e.__childObservers.empty||e.__subtreeObserversCount){var n=null,i=[r];n="add"===t?{type:"childList",target:e,addedNodes:i}:"remove"===t?{type:"childList",target:e,removedNodes:i}:{type:"childList",target:e,addedNodes:i,removedNodes:i},o._callObservers(e,"__childObservers",n)}},v=function(e,t){if(e instanceof c&&(!t.__wxHost.__idCacheDirty||!t.__slotCacheDirty)){var r=function(e){e.__id&&(t.__wxHost.__idCacheDirty=!0),void 0!==e.__slotName&&(t.__slotCacheDirty=!0);for(var n=e.childNodes,o=0;o<n.length;o++){var i=n[o];i instanceof c&&r(i)}};r(e)}};c._updateIdMap=function(e){var t=e.shadowRoot;if(e.__idCacheDirty){e.__idCacheDirty=!1;var r=e.__idCache=Object.create(null),n=function(e){e.__id&&(r[e.__id]||(r[e.__id]=e));for(var t=e.childNodes,o=0;o<t.length;o++)t[o]instanceof c&&n(t[o])};n(t)}};var m=function(e){if(e.__hostAssociated&&e.__slotCacheDirty){e.__slotCacheDirty=!1;var t=e.__wxHost,r=null,n=Object.create(null);r=void 0!==t.__singleSlot?{"":t.__singleSlot}:t.__slots;var o=function(e){void 0!==e.__slotName&&(n[e.__slotName]||(n[e.__slotName]=e));for(var t=e.childNodes,r=0;r<t.length;r++)t[r]instanceof c&&o(t[r])};o(e),void 0!==t.__singleSlot?t.__singleSlot!==n[""]&&(n[""]&&(n[""].__wxSlotChildren=t.childNodes),b(t,n,r,!0),t.__singleSlot&&(t.__singleSlot.__wxSlotChildren=[]),t.__singleSlot=n[""]||null):(b(t,n,r,!1),t.__slots=n)}},b=function(e,t,r,n){var o=e.childNodes,i=0;if(n){var a=t[""];if(a)for(;i<o.length;i++)x(a,o[i],null,!1,!1,!1,-1);else if(a=r[""])for(;i<o.length;i++)x(a,null,o[i],!0,!1,!1,i)}else{var l=function(e){for(var n=0;n<e.length;n++){var o=e[n],i=o.__slot||"",a=t[i];a?x(a,o,null,!1,!0,!0):(a=r[i],a&&x(a,null,o,!0,!0,!0)),o.__inheritSlots&&l(o.childNodes)}};l(o)}},g=function(e,t,r,n){for(var o=function(e,t,n){var i=e.childNodes,a=0;for(t&&(a=i.indexOf(t)+(n?0:1));a<i.length;a++){var l=i[a];if(l.__slot===r)return l;if(l.__inheritSlots){var s=o(l,null,!1);if(s)return s}}return null};t!==e;t=t.parentNode){var i=o(t.parentNode,t,n);if(i)return i;n=!1}return null},w=function(e){for(var t=e.parentNode;t&&t.__inheritSlots;)t=t.parentNode;if(t&&void 0===t.__singleSlot){var r=e.__slot||"",n=t.__slots[r];if(n){var o=g(t,e,r,!1);x(n,e,o,!1,!0,!0)}else n=e.__wxSlotParent,n&&x(n,null,e,!0,!0,!0)}},y=function(e,t,r,n,o){var i=e;if(i instanceof c){for(;i.__virtual;){var a=i.__wxSlotParent;if(!a){i=null;break}if(t&&!r){var l=a.__wxSlotChildren.indexOf(i);r=a.__wxSlotChildren[l+1]}i=a}i instanceof c&&(i=i.__domElement)}if(i){var s=n,_=null,u=null;if(t)if(t.__virtual){var d=document.createDocumentFragment(),f=function(e){for(var t=0;t<e.__wxSlotChildren.length;t++){var r=e.__wxSlotChildren[t];r.__virtual?f(r):d.appendChild(r.__domElement)}};f(t),_=d}else _=t.__domElement;if(r)if(r.__virtual){var p=e,h=0;if(n){var v=function(e){for(var t=0;t<e.__wxSlotChildren.length;t++){var r=e.__wxSlotChildren[t];r.__virtual?v(r):i.removeChild(r.__domElement)}};v(r),s=!1,h=o+1}else p=r.__wxSlotParent,h=r===t?o:p.__wxSlotChildren.indexOf(r);if(t){var m=function(e,t){for(;t<e.__wxSlotChildren.length;t++){var r=e.__wxSlotChildren[t];if(!r.__virtual)return r;var n=m(r,0);if(n)return n}};r=null;for(var b=p;r=m(b,h),!r&&b.__virtual;b=b.__wxSlotParent)h=b.__wxSlotParent.__wxSlotChildren.indexOf(b)+1;r&&(u=r.__domElement)}}else u=r.__domElement;s?_?i.replaceChild(_,u):i.removeChild(u):_&&(u?i.insertBefore(_,u):i.appendChild(_))}else if(t&&t.__wxSlotParent){var g=function(e){if(e.__virtual)for(var t=0;t<e.__wxSlotChildren.length;t++)g(e.__wxSlotChildren[t]);else{var r=e.__domElement;r&&r.parentNode&&r.parentNode.removeChild(r)}};g(t)}},x=function(e,t,r,n,o,i,a){if(n&&(r.__wxSlotParent=null),o&&(a=e.__wxSlotChildren.indexOf(r)),t){var l=t.__wxSlotParent;if(t.__wxSlotParent=e,l&&i){var _=l.__wxSlotChildren.indexOf(t);l.__wxSlotChildren.splice(_,1),l===e&&_<a&&a--}}var u=!1;t&&t.__backendExtracted?u=!0:r&&r.__backendExtracted&&(u=!0),u||y(e,t,r,n,a),s.writeExtraInfoToAttr&&(n&&r instanceof c&&r.__domElement&&r.__domElement.removeAttribute("exparser:info-in-slot-of"),t instanceof c&&t.__domElement&&(void 0!==e.__slotName&&e.ownerShadowRoot?t.__domElement.setAttribute("exparser:info-in-slot-of",e.ownerShadowRoot.__wxHost.__componentInstanceId):t.__domElement.removeAttribute("exparser:info-in-slot-of"))),o&&(a===-1&&(a=e.__wxSlotChildren.length),t?e.__wxSlotChildren.splice(a,n?1:0,t):e.__wxSlotChildren.splice(a,n?1:0))},C=function(e,t){for(var r=e.childNodes,n=0;n<r.length;n++){var o=r[n];t(e,o),o.__inheritSlots&&C(o,t)}},E=c.insertChildToElement=function(e,t,r,n){if(void 0!==e.__slotName)return!1;var i=r>=0?e.childNodes[r]:null;n&&t===i&&(n=!1);var a=null,l=e,s=e;if(t){a=t.parentNode,t.parentNode=e;var _=e.__subtreeObserversCount;if(a){var c=a.childNodes.indexOf(t);a.childNodes.splice(c,1),a===e&&c<r&&r--,_-=a.__subtreeObserversCount}_&&o._updateSubtreeCaches(t,_)}for(var u=e;u&&u.__inheritSlots;)u=u.parentNode;for(var b=!u||!u.__slots,w=!b||e.__inheritSlots,y=a;y&&y.__inheritSlots;)y=y.parentNode;var E=!y||!y.__slots,S=!E||a&&a.__inheritSlots;if(b)void 0!==e.__singleSlot&&(l=s=e.__singleSlot),l?x(l,t,i,n,w,S,r):t.__wxSlotParent&&x(t.__wxSlotParent,null,t,!0,S,!1),t&&!E&&t.__inheritSlots&&C(t,function(e,t){x(e,t,null,!1,!0,!0,-1)});else{var O="";if(t&&(O=t.__slot||"",l=u.__slots[O]||null),i&&(s=u.__slots[i.__slot||""]||null),i&&s&&n&&x(s,null,i,n,!0,!1),t)if(l){var N=i?g(u,i,O,!n):g(u,e,O,!1);x(l,t,N,!1,!0,S)}else t.__wxSlotParent&&x(t.__wxSlotParent,null,t,!0,S,!1);i&&n&&i.__inheritSlots&&C(i,function(e,t){x(e,t,null,!1,!0,!0,-1)}),t&&t.__inheritSlots&&C(t,function(t,r){var o=r.__slot||"",a=u.__slots[o]||null;if(a){var l=i?g(u,i,o,!n):g(u,e,o,!1);x(a,r,l,!1,!0,!0)}else r.__wxSlotParent&&x(r.__wxSlotParent,null,r,!0,!0,!1)})}return n&&(e.__subtreeObserversCount&&o._updateSubtreeCaches(i,-e.__subtreeObserversCount),i.parentNode=null),r===-1&&(r=e.childNodes.length),t?e.childNodes.splice(r,n?1:0,t):e.childNodes.splice(r,n?1:0),e.ownerShadowRoot&&(n&&v(i,e.ownerShadowRoot),t&&v(t,e.ownerShadowRoot),m(e.ownerShadowRoot)),n&&(f(i),h(e,"remove",i)),t&&(a?p(t):d(t),a===e?h(e,"move",t):(a&&h(a,"remove",t),h(e,"add",t))),!0},S=function(e,t,r,n){if(t&&e.ownerShadowRoot!==t.ownerShadowRoot)throw new Error("Cannot move the node from one shadow tree to another shadow tree.");var o=n?r:t,i=-1;if(r&&(i=e.childNodes.indexOf(r),i<0))return null;var a=E(e,t,i,n);return a?o:null};c._attachShadowRoot=function(e){var t=e.__wxHost;t.__wxSlotChildren=[e],x(t,e,null,!1,!1,0),e.__hostAssociated=!0,m(e)},c.appendChild=function(e,t){return S(e,t,null,!1)},c.insertBefore=function(e,t,r){return S(e,t,r,!1)},c.removeChild=function(e,t){return S(e,null,t,!0)},c.replaceChild=function(e,t,r){return S(e,t,r,!0)},c.prototype.appendChild=function(e){return S(this,e,null,!1)},c.prototype.insertBefore=function(e,t){return S(this,e,t,!1)},c.prototype.removeChild=function(e){return S(this,null,e,!0)},c.prototype.replaceChild=function(e,t){return S(this,e,t,!0)};var O=function(e){var t=!0,r=!0;if(e instanceof c?(e.__backendExtracted=!0,e.$$=e.__domElement=null,r=!1):e instanceof a&&(e.__backendExtracted=!0,e.$$=e.__domElement=null,t=!1,r=!1),t&&e.__wxSlotChildren)for(var n=0;n<e.__wxSlotChildren.length;n++){var o=e.__wxSlotChildren[n];O(o)}else if(r&&e.childNodes)for(var i=0;i<e.childNodes.length;i++)O(e.childNodes[i])};c.extractBackend=function(e){if(e.__backendExtracted)return null;var t=e.__domElement;return O(e),t};var N=function(e,t){if(!t){var r=l.toElement(e.__domElement);return e.$$=e.__domElement=r,r}if(e.__domElement.tagName.toUpperCase()===t.tagName)e.$$=e.__domElement=t;else{var n=l.toElement(e.__domElement);e.$$=e.__domElement=n,t.parentNode.replaceChild(n,t)}return null},k=function(e,t){if(!t){var r=document.createTextNode(e.textContent);return e.$$=e.__domElement=r,r}if("undefined"!=typeof t.textContent)t.textContent=e.textContent,e.$$=e.__domElement=t;else{var n=document.createTextNode(e.textContent);e.$$=e.__domElement=n,t.parentNode.replaceChild(n,t)}return null},T=function(e,t){if(!t)return e;for(;e.childNodes&&t.childNodes&&t.childNodes.length;)e.appendChild(t.childNodes[0]);return t.parentNode.replaceChild(e,t),null},A=function(e,t,r){var n=e instanceof c&&e.__virtual,o=t?t.childNodes[r]:void 0,i=!0,l=!0,s=null;if(e instanceof c)e.__backendExtracted=!1,n||(s=N(e,o)),l=!1;else if(e instanceof a)e.__backendExtracted=!1,s=k(e,o),i=!1,l=!1;else{var _=document.createDocumentFragment();if(_.__wxSlotChildren=e.__wxSlotChildren,o&&o.childNodes)for(;o.childNodes.length;)_.appendChild(o.childNodes[0]);s=T(e,o),e=_}s?(t.appendChild(s),o=s):o=t?t.childNodes[r]:void 0;var u=0;if(i&&e.__wxSlotChildren)for(var d=0;d<e.__wxSlotChildren.length;d++){var f=e.__wxSlotChildren[d];if(n)r=A(f,t,r);else if(f.asShadowRoot){for(var p=0;p<f.asShadowRoot.childNodes.length;p++)u=A(f.asShadowRoot.childNodes[p],o,u);e.shadowRoot=o,o.__wxHost=e,e.__wxSlotChildren[0]=o,o.__wxSlotParent=e,e.__singleSlot===f&&(e.__singleSlot=o)}else u=A(f,o,u)}else if(l&&e.childNodes)for(var h=0;h<e.childNodes.length;h++)u=A(e.childNodes[h],o,u);if(n)return r;for(;o.childNodes.length>u;)o.removeChild(o.childNodes[u]);return r+1};c.injectBackend=function(e,t){if(e.__backendExtracted){var r=document.createDocumentFragment();r.appendChild(t),A(e,r,0)}},c.prototype.triggerEvent=function(e,t,r){n.triggerEvent(this,e,t,r)},c.prototype.dispatchEvent=function(e){n.dispatchEvent(this,e)},c.prototype.addListener=function(e,t,r){n.addListenerToElement(this,e,t,r)},c.prototype.removeListener=function(e,t,r){n.removeListenerFromElement(this,e,t,r)},c.setMethodCaller=function(e,t){e.__methodCaller=t},c.getMethodCaller=function(e){return e.__methodCaller},c.prototype.getAttribute=function(e){if(!this.__attributes)return null;var t=this.__attributes[e];return void 0===t?null:t},c.prototype.setAttribute=function(e,t){this.__attributes||(this.__attributes=Object.create(null)),t=String(t),this.__attributes[e]=t,this.__domElement&&this.__domElement.setAttribute(e,t)},c.prototype.removeAttribute=function(e){this.__attributes&&(delete this.__attributes[e],this.__domElement&&this.__domElement.removeAttribute(e))},c.prototype.setMark=function(e,t){this.__marks||(this.__marks={}),this.__marks[e]=t},c.prototype.collectMarks=function(){for(var e={},t=this;t;t=t.parentNode)if(t.__marks)for(var r in t.__marks)hasOwnProperty.call(e,r)||(e[r]=t.__marks[r]);return e};var P=c.prototype.setNodeStyle=function(e,t){this.__styleSegments[t||0]=e;var r=this.__styleSegments.join(";");if(this.__domElement&&this.ownerShadowRoot&&this.ownerShadowRoot.__childrenPropsFilter){var n=this.ownerShadowRoot.__childrenPropsFilter,i=n.style;if("function"==typeof i)return void this.__domElement.setAttribute("style",i.call(this,r))}this.__domElement&&this.__domElement.setAttribute("style",r),(this.__propObservers&&!this.__propObservers.empty||this.__subtreeObserversCount)&&o._callObservers(this,"__propObservers",{type:"properties",target:this,propertyName:"style"})};c.replaceDocumentElement=function(e,t){e.__attached||(t.parentNode.replaceChild(e.__domElement,t),d(e))},c.pretendAttached=function(e){e.__attached||d(e)},c.pretendDetached=function(e){e.__attached&&f(e)},c.isAttached=function(e){return e.__attached},c.setSlotName=function(e,t){if(t=null==t?"":String(t),void 0===e.__slotName){if(0!==e.childNodes.length||0!==e.__wxSlotChildren.length)return;e.__wxSlotChildren=[]}e.__slotName=t,e.ownerShadowRoot&&(e.ownerShadowRoot.__slotCacheDirty=!0,m(e.ownerShadowRoot))},c.setInheritSlots=function(e){e.__singleSlot||e.__slots||e.__wxSlotChildren.length||(e.__wxSlotChildren=[],e.__inheritSlots=!0)},c.getInheritSlots=function(e){return e.__inheritSlots};var L=function(e,t){var r=e.match(/^(#[_a-zA-Z][-_a-zA-Z0-9:]*|)((?:\.-?[_a-zA-Z][-_a-zA-Z0-9]*)+|)$/);if(!r)return null;var n=r[1].slice(1),o=r[2].split(".");return o.shift(),n||o.length?{id:n,classes:o,relation:t||""}:null},M=c.parseSelector=function(e){for(var t=String(e||"").split(","),r=[],n=!1,o=0;o<t.length;o++){for(var i=t[o].split(/( |\t|>+)/g),a=[],l="",s=0;s<i.length;s++){var _=i[s];if(_&&" "!==_&&"\t"!==_)if(">"!==_[0]){var c=L(_,l);if(l="",!c)break;a.push(c)}else{if(""!==l)break;l=_,">>>"===_&&(n=!0)}}s===i.length&&a.length&&r.push(a)}return r.length?{crossShadow:n,union:r}:null},R=function(e,t,r,n,o){if(t===e)return!1;var i=r[n],a=!0;i.id&&i.id!==t.__id&&(a=!1);for(var l=i.classes,s=0;a&&s<l.length;s++)t.classList.contains(l[s])||(a=!1);if(!a&&">"===o)return!1;var _=t;if(a&&0===n){if(null===e)return!0;for(_=_.parentNode;_;_=_.parentNode)if(_===e)return!0;if(">>>"!==o)return!1;_=t,a=!1}var c=a?i.relation:o;do _.parentNode?_=_.parentNode:">>>"===c?_=_.__wxHost:">>>"===o?(a=!1,_=_.__wxHost):_=null,_===e&&(_=null);while(_&&_.__virtual);if(!_)return!1;if(a){var u=R(e,_,r,n-1,c);if(u)return!0;if(">>>"!==o)return!1}return R(e,_,r,n,o)},I=function(e,t,r){if(r.__virtual)return!1;for(var n=e.union,o=0;o<n.length;o++){var i=n[o];if(R(t,r,i,i.length-1,">"))return!0}return!1},D=function(e,t,r,n,o){if(I(t,r,n)&&(e.push(n),o))return!0;if(n.shadowRoot&&t.crossShadow){var i=n.ownerShadowRoot?n.ownerShadowRoot.__wxHost.__componentOptions.domain:s.domain,a=n.__componentOptions.domain;if(i===a&&D(e,t,r,n.shadowRoot,o)&&o)return!0}for(var l=n.childNodes,_=0;_<l.length;_++)if(l[_]instanceof c&&D(e,t,r,l[_],o)&&o)return!0;return!1};c.prototype.querySelector=function(e){var t="object"==typeof e?e:M(e);if(!t)return null;var r=[];return D(r,t,this,this,!0),r[0]||null},c.prototype.querySelectorAll=function(e){var t="object"==typeof e?e:M(e),r=[];return t?(D(r,t,this,this,!1),r):[]},c.matchSelector=function(e,t){var r="object"==typeof e?e:M(e);return!!r&&I(r,null,t)},c.prototype.matchSelector=function(e,t){var r="object"==typeof e?e:M(e);return!!r&&I(r,this,t)},e.exports=c},function(e,t,r){var n=r(3),o=function(){};o.prototype=Object.create(Object.prototype,{constructor:{value:o,writable:!0,configurable:!0}}),o.create=function(e){var t=new o;return t._cb=e,t._noSubtreeCb=function(t){t.target===this&&e.call(this,t)},t._binded=[],t},o.prototype.observe=function(e,t){t=t||{};var r=0,o=t.subtree?this._cb:this._noSubtreeCb;t.properties&&(e.__propObservers||(e.__propObservers=n.create("Observer Callback")),this._binded.push({funcArr:e.__propObservers,id:e.__propObservers.add(o),subtree:t.subtree?e:null}),r++),t.childList&&(e.__childObservers||(e.__childObservers=n.create("Observer Callback")),this._binded.push({funcArr:e.__childObservers,id:e.__childObservers.add(o),subtree:t.subtree?e:null}),r++),t.characterData&&(e.__textObservers||(e.__textObservers=n.create("Observer Callback")),this._binded.push({funcArr:e.__textObservers,id:e.__textObservers.add(o),subtree:t.subtree?e:null}),r++),t.subtree&&i(e,r),t.attachStatus&&(e.__attachedObservers||(e.__attachedObservers=n.create("Observer Callback")),this._binded.push({funcArr:e.__attachedObservers,id:e.__attachedObservers.add(o),subtree:null}))},o.prototype.disconnect=function(){for(var e=this._binded,t=0;t<e.length;t++){var r=e[t];r.funcArr.remove(r.id),r.subtree&&i(r.subtree,-1)}this._binded=[]};var i=o._updateSubtreeCaches=function(e,t){e.__subtreeObserversCount+=t;var r=e.childNodes;if(r)for(var n=0;n<r.length;n++)i(r[n],t)};o._callObservers=function(e,t,r){do e[t]&&e[t].call(e,[r]),e=e.parentNode;while(e&&e.__subtreeObserversCount)},o._callSingleObserver=function(e,t,r){e[t]&&e[t].call(e,[r])},e.exports=o},function(e,t){var r=function(){},n=/(~|\^+)?-?[_0-9a-z][-_0-9a-z]*/gi,o=null;r._setElementSystem=function(e){o=e,r._setElementSystem=null};var i=Object.prototype.hasOwnProperty;r.create=function(e,t){var n=new r;n._prefix="",n._addOriginalClass=!1,n._alias=t,n._resolvedAlias={};for(var o in t)n._resolvedAlias[o]="";return n._rawNames=[],n._elem=e,n._owner=null,n};var a=function(e){var t="",r=e._rawNames,n=e._prefix,o=e._owner?e._owner._resolvedAlias:null,a=e._addOriginalClass;n&&(n+="--");for(var l=0;l<r.length;l++){var s=r[l];if(l&&(t+=" "),o&&i.call(o,s))t+=o[s];else if("~"===s[0])t+=s.slice(1);else if("^"===s[0]){s=s.slice(1);for(var _=e._owner||null;"^"===s[0];)s=s.slice(1),_=_?_._owner:null;var c=_?_._prefix:"";c&&(c+="--"),t+=c+s}else a&&(t+=s+" "),t+=n+s}return t},l=function(e){var t=e._elem.__domElement;if(t){var r=a(e);r?t.setAttribute("class",r):t.removeAttribute("class")}},s=function(e){var t=e.classList;t instanceof r&&(t._alias&&_(t),l(t));for(var n=e.childNodes,i=0;i<n.length;i++)n[i]instanceof o&&s(n[i])},_=function(e){var t=e._owner;if(!t)return!1;var r=!1;for(var n in e._alias){var a=e._alias[n],l=[];if(a)for(var _=0;_<a.length;_++){var c=a[_];if(i.call(t._alias,c)){var u=t._resolvedAlias[c];l.push(u)}else{var d=e._prefix&&c?e._prefix+"--"+c:c;l.push(d)}}var f=l.join(" ");e._resolvedAlias[n]!==f&&(r=!0,e._resolvedAlias[n]=f)}r&&e._elem.shadowRoot instanceof o&&s(e._elem.shadowRoot)};r.prototype.toggle=function(e,t){var r=this._rawNames.indexOf(e);void 0===t&&(t=r<0),t?r<0&&(this._rawNames.push(e),l(this)):r>=0&&(this._rawNames.splice(r,1),l(this))},r.prototype.contains=function(e){for(var t=this._rawNames,r=0;r<t.length;r++){var n=t[r];if("~"===n[0]){if(n.slice(1)===e)return!0}else if("^"===n[0]){for(var o=1;"^"===n[o];)o++;if(n.slice(o)===e)return!0}else if(n===e)return!0}return!1},r.prototype._setOwnerOptions=function(e,t,r){var n=this._prefix;this._prefix=t,n!==t&&(this._addOriginalClass=r,this._owner=e,this._alias&&_(this),l(this))},r.prototype._setAlias=function(e,t){var r=this._owner,o=String(t).match(n);this._alias[e]=o;var a=[];if(o)for(var l=0;l<o.length;l++){var _=o[l];r&&i.call(r._alias,_)?a.push(r._resolvedAlias[_]):a.push(this._prefix?this._prefix+"--"+_:_)}this._resolvedAlias[e]=a.join(" "),s(this._elem.shadowRoot)},r.prototype.setClassNames=function(e){e=void 0===e||null===e?"":String(e),this._rawNames=e.match(n)||[],l(this)},r.prototype.getClassNames=function(){return a(this)},r.prototype.getPrefix=function(){return this._prefix},r.prototype.getAddOriginalClass=function(){return this._addOriginalClass},e.exports=r},function(e,t,r){var n=r(10),o=r(4),i=r(13),a=function(){};a.prototype=Object.create(Object.prototype,{constructor:{
  387. value:a,writable:!0,configurable:!0}});var l=a._advancedCreate=function(e,t){var r=new a;r.__slot="";var n=null;return i.backendExtractedDefault||"dom"!==o.documentBackend?r.__textContent=e:(n=document.createTextNode(e||""),n.__wxElement=r),r.$$=r.__domElement=n,r.__backendExtracted=i.backendExtractedDefault,r.__subtreeObserversCount=0,r.parentNode=null,r.ownerShadowRoot=t,r};a.create=function(e){return l(e,null)},Object.defineProperty(a.prototype,"textContent",{get:function(){return this.__domElement?this.__domElement.textContent:this.__textContent},set:function(e){this.__domElement?this.__domElement.textContent=e:this.__textContent=String(e),(this.__textObservers&&!this.__textObservers.empty||this.__subtreeObserversCount)&&n._callObservers(this,"__textObservers",{type:"characterData",target:this})}}),e.exports=a},function(e,t){t.backendExtractedDefault=!1,t.enableBackendExtractedDefault=function(){t.backendExtractedDefault=!0},t.disableBackendExtractedDefault=function(){t.backendExtractedDefault=!1}},function(e,t){var r=function(e){this.tagName=e,this.id="",this.attrs={}};r.toElement=function(e){var t=document.createElement(e.tagName);e.id&&(t.id=e.id);for(var r in e.attrs)t.setAttribute(r,e.attrs[r]);return t},r.fromElement=function(e){var t=new r(e.tagName);t.id=e.id;for(var n=e.attributes,o=0;o<n.length;o++)t.attrs[n[o].name]=n[o].value;return t},r.prototype.cloneNode=function(){var e=new r;e.id=this.id;for(var t in this.attrs)e.attrs[t]=this.attrs[t];return e},r.prototype.removeAttribute=function(e,t){delete this.attrs[e]},r.prototype.setAttribute=function(e,t){this.attrs[e]=t},r.prototype.getAttribute=function(e){return this.attrs[e]},e.exports=r},function(e,t,r){var n=r(3),o=r(5),i=r(16),a=r(6),l=r(8),s=r(9),_=r(17),c=r(10),u=r(11),d=r(14),f=r(4),p=r(13),h=r(7),v=a.addListenerToElement,m=h.parseSinglePath,b=o.deepCopy,g=function(){};g.prototype=Object.create(s.prototype,{constructor:{value:g,writable:!0,configurable:!0},data:{get:function(){return this.__dataProxy._data},set:function(e){var t=this.__dataProxy;for(var r in e)t.scheduleReplace([r],e[r]);t.doUpdates()},configurable:!0},$:{get:function(){return s._updateIdMap(this),this.__idCache},set:function(){}}});var w=function(){};w.prototype=Object.create(Object.prototype),a._setComponent(g);var y=null;g._setDefaultTemplateEngine=function(e){y=e,g._setDefaultTemplateEngine=null};var x=function(e,t,r){if(r)for(var n=0;n<r.length;n++)if(l.matchTypeWithValue(r[n],e))return e;return t===String?null===e||void 0===e?"":String(e):t===Number?isFinite(e)?Number(e):0:t===Boolean?!!e:t===Array?e instanceof Array?e:[]:t===Object?"object"==typeof e?e:null:void 0===e?null:e},C=function(e,t,r){var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()}),o=typeof r;"boolean"===o?r?e.__domElement.setAttribute(n,""):e.__domElement.removeAttribute(n):"object"===o?e.__domElement.setAttribute(n,JSON.stringify(r)):e.__domElement.setAttribute(n,r)},E=function(e,t,r){var o=[t?t.__wxHost.__componentOptions.domain:void 0],i=n.safeCallback("Availablity Controller",r,e,o);return!!i},S=function(e,t,r,o){var i=[e.ownerShadowRoot?e.ownerShadowRoot.__wxHost.__componentOptions.domain:void 0,o?void 0:r],a=n.safeCallback("Availablity Controller",t,e.__methodCaller,i,e);return!!a};i.setPropUpdater(function(e,t,r,o){var i=e[0],a=this.__propData[i];r=x(r,t.type,t.optionalTypes);var l=!t.availability||S(this,t.availability,r,o);if(!l)return a;if(t.filter){var s=n.safeCallback("Property Filter",t.filter,this.__methodCaller,o?[]:[r,a,e],this);void 0!==s&&(r=s)}return this.__domElement&&this.__componentOptions.reflectToAttributes&&this.__propPublic[i]&&C(this,i,r),r}),i.setPropObserver(function(e,t,r,o,i,a){if(o.observeAssignments||e!==t){var l=r[0];this.__propertyChangeListeners&&this.__propertyChangeListeners[l]&&!a&&n.safeCallback("Property Observer",this.__propertyChangeListeners[l],this.__methodCaller,[e],this),o.observer&&n.safeCallback("Property Observer",o.observer,this.__methodCaller,i?[]:[e,t,r],this),o.public&&(this.__propObservers&&!this.__propObservers.empty||this.__subtreeObserversCount)&&c._callObservers(this,"__propObservers",{type:"properties",target:this,propertyName:l})}});var O=function(e,t,r){t.__relationLinks||(t.__relationLinks={});for(var n=t.__relationLinks[r]=[],o=0;o<e.length;o++)n.push(null)},N=function(e,t,r,o,i){for(var a=g.prototype.hasBehavior,s="parent"===o,_="shadowHost"===o,c=0;c<e.length;c++){var u=e[c],d=null;if(d="object"!=typeof u.target?l._list[u.target]:u.target){var f=t[c],p=null;if(!i)for(var h=_?r.ownerShadowRoot&&r.ownerShadowRoot.__wxHost:r.parentNode;h;h=_?h.ownerShadowRoot&&h.ownerShadowRoot.__wxHost:h.parentNode)if(!h.__virtual){if(a.call(h,d)){var v=null;v=s?h.__relationMap.child:_?h.__relationMap.shadowContent:h.__relationMap.descendant;for(var m=0;m<v.length;m++){var b=v[m],w=null;if(w="object"!=typeof b.target?l._list[b.target]:b.target,w&&a.call(r,w)){p={parent:h,relation:b};break}}}if(s||p)break}t[c]=p,!f||p&&f.parent===p.parent||(n.safeCallback("Relation Unlinked Callback",f.relation.unlinked,f.parent.__methodCaller,[r.__methodCaller],f.parent),n.safeCallback("Relation Unlinked Callback",u.unlinked,r.__methodCaller,[f.parent.__methodCaller],r)),!p||f&&f.parent===p.parent||(n.safeCallback("Relation Linked Callback",p.relation.linked,p.parent.__methodCaller,[r.__methodCaller],p.parent),n.safeCallback("Relation Linked Callback",u.linked,r.__methodCaller,[p.parent.__methodCaller],r)),f&&p&&f.parent===p.parent&&(n.safeCallback("Relation Link Changed Callback",p.relation.linkChanged,p.parent.__methodCaller,[r.__methodCaller],p.parent),n.safeCallback("Relation Link Changed Callback",u.linkChanged,r.__methodCaller,[p.parent.__methodCaller],r)),i||p||n.safeCallback("Relation Link Failed Callback",u.linkFailed,r.__methodCaller,[],r)}}},k=function(e,t){var r=[],n=t.type,o="child"===n,i="shadowContent"===n,a=function(n){for(var l=n.childNodes,_=0;_<l.length;_++){var c=l[_];if(c instanceof s)if(c.__virtual)a(c);else{if(c.__relationLinks){var u=null;if(u=o?c.__relationLinks.parent:i?c.__relationLinks.shadowHost:c.__relationLinks.ancestor)for(var d=0;d<u.length;d++){var f=u[d];if(f&&f.parent===e&&f.relation===t){r.push(c);break}}}i&&c instanceof g&&a(c.shadowRoot),o||a(c)}}};return a(i?e.shadowRoot:e),r},T=function(e,t,r){if(e instanceof s){var n=0,o=null;if(e instanceof g){for(e.__pageLifeTimeFuncs[t]&&e.__pageLifeTimeFuncs[t].call(e.__methodCaller,r||[]),o=e.childNodes,n=0;n<o.length;n++)T(o[n],t,r);e=e.shadowRoot}for(o=e.childNodes,n=0;n<o.length;n++)T(o[n],t,r)}};g._list={},g.register=function(e){var t=e.options||{},r=l.create(e),n=void 0!==t.classPrefix?t.classPrefix:f.classPrefix;null!==n&&void 0!==n||(n=r.is||"");var o=new w;return o._unprepared=r,o.is=e.is||"",o.behavior=r,o.protoFunc=null,o.props=null,o.template=null,o.innerEvents=null,o.generics=r.generics,o.initiator=r.initiator||null,o.options={availability:t.availability||f.availability,domain:t.domain||f.domain,writeOnly:!!(void 0!==t.writeOnly?t.writeOnly:f.writeOnly),allowInWriteOnly:!!(void 0!==t.allowInWriteOnly?t.allowInWriteOnly:f.allowInWriteOnly),classPrefix:n,addGlobalClass:!!(void 0!==t.addGlobalClass?t.addGlobalClass:f.addGlobalClass),templateEngine:t.templateEngine||f.templateEngine||y,renderingMode:t.renderingMode||f.renderingMode,multipleSlots:!!(void 0!==t.multipleSlots?t.multipleSlots:f.multipleSlots),reflectToAttributes:!!(void 0!==t.reflectToAttributes?t.reflectToAttributes:f.reflectToAttributes),writeFieldsToNode:!!(void 0!==t.writeFieldsToNode?t.writeFieldsToNode:f.writeFieldsToNode),writeIdToDOM:!!(void 0!==t.writeIdToDOM?t.writeIdToDOM:f.writeIdToDOM),separateInnerData:!!(void 0!==t.separateInnerData?t.separateInnerData:f.separateInnerData),innerDataExclude:t.innerDataExclude||f.innerDataExclude,listenerChangeLifeTimes:!!(void 0!==t.listenerChangeLifeTimes?t.listenerChangeLifeTimes:f.listenerChangeLifeTimes),randomizeTagName:!!(void 0!==t.randomizeTagName?t.randomizeTagName:f.randomizeTagName),virtualHost:!!(void 0!==t.virtualHost?t.virtualHost:f.virtualHost)},r._unprepared||g.prepare(o),void 0!==e.is&&(g._list[r.is]=o),o},g.isPrepared=function(e){return!e._unprepared},g.prepare=function(e){var t=e._unprepared;if(t){e._unprepared=null;var r=e.options,n={};t._unprepared&&l.prepare(t),r.writeOnly&&(n.data={value:null});var o=e.props={};Object.keys(t.properties).forEach(function(e){var i=t.properties[e];o[e]={type:i.type,optionalTypes:i.optionalTypes,value:i.value,filter:"function"==typeof i.filter?i.filter:null==i.filter?null:t.methods[i.filter],observer:"function"==typeof i.observer?i.observer:null==i.observer?null:t.methods[i.observer],public:i.public,availability:i.availability,observeAssignments:i.observeAssignments},r.writeFieldsToNode&&(n[e]={enumerable:!0,get:function(){return this.__propData[e]},set:function(t){var r=this.__dataProxy;r.scheduleReplace([e],t),r.doUpdates()}})});var a=function(){};e.protoFunc=a;var s=a.prototype=Object.create(g.prototype,n);if(s.is=e.is,s.__componentOptions=r,s.__using=t.using,e.dataGroupObserverTree=i._createObserverTree(o),t._addObserversToDataProxy(e.dataGroupObserverTree),s.__behavior=t,r.writeFieldsToNode)for(var _ in t.methods)s[_]=t.methods[_];s.__lifeTimeFuncs=t._getAllLifeTimeFuncs(),s.__pageLifeTimeFuncs=t._getAllPageLifeTimeFuncs();var c=t.relations,u=s.__relationMap={};for(var d in c){var f=c[d],p=f.type;u[p]?u[p].push(f):u[p]=[f]}var h=[];u.parent&&h.push(function(e){N(this.__relationMap.parent,this.__relationLinks.parent,this,"parent","detached"===e)}),u.ancestor&&h.push(function(e){N(this.__relationMap.ancestor,this.__relationLinks.ancestor,this,"ancestor","detached"===e)}),u.shadowHost&&h.push(function(e){N(this.__relationMap.shadowHost,this.__relationLinks.shadowHost,this,"shadowHost","detached"===e)}),e.relationHandler=function(e){for(var t=0;t<h.length;t++)h[t].call(this,e)};var v={},m={},b=t.data,w="";for(w in b)m[w]=b[w];for(w in o){var y=o[w];m[w]=y.value,v[w]=y.public}var x=m,C=r.separateInnerData,E=r.innerDataExclude;if(E){x={};for(var S in m)E.test(S)||(x[S]=m[S]);C||(m=x)}var O=r.templateEngine;e.template=O.create(t,m,x,r),s.__propPublic=v;var k=t._getAllListeners(),T=e.innerEvents=[];for(var A in k){for(var P=k[A],L=A.indexOf("."),M=A.slice(L+1),R=L<1?"":A.slice(0,L),I=[],D=0;D<P.length;D++){var j=P[D];"function"!=typeof j&&(j=null==j?null:t.methods[j]),I.push(j)}T.push({id:R,name:M,funcs:I})}}};var A=1,P=Object.prototype.hasOwnProperty,L=function(e,t){return function(r){return e.call(t.__methodCaller,r,t)}},M=function(e,t,r){var n={};for(var o in e){var i=e[o],a=t[o];"object"!=typeof a&&(a=g._list[a]),"object"!=typeof a&&null!=i.default&&(a=g._list[i.default]),a&&(n[o]=a)}return n},R=g._advancedCreate=function(e,t,r,o,a){var l=t;l._unprepared&&g.prepare(l);var _=l.options,c=!_.availability||E(l,r,_.availability);c||(l=g._list[""]);var h=l.protoFunc,m=new h,w=l.generics;w?m.__generics=M(w,o||{},_):m.__generics={};var y=null,x=f.documentBackend;if(_.virtualHost){var y=null;"dom"===f.documentBackend&&(y=void 0),s.initialize(m,y,r),m.__virtual=!0}else"dom"===x?(y=p.backendExtractedDefault?new d(e):document.createElement(e),s.initialize(m,y,r)):s.initialize(m,null,r);var C=0,S=m.__externalClassAlias={};if(l.behavior.externalClasses){var N=l.behavior.externalClasses;for(C=0;C<N.length;C++)S[N[C]]=null}if(m.classList=u.create(m,S),r){var k=r.__wxHost;m.classList._setOwnerOptions(k.classList,k.__componentOptions.classPrefix,k.__componentOptions.addGlobalClass),f.writeExtraInfoToAttr&&y&&y.setAttribute("exparser:info-class-prefix",k.__componentOptions.classPrefix&&k.__componentOptions.classPrefix+"--")}f.writeExtraInfoToAttr&&y&&(m.__componentInstanceId=A++,y.setAttribute("exparser:info-component-id",m.__componentInstanceId));var T=m.__templateInstance=l.template.createInstance(m,a);m.__propData=T.data;var P=_.separateInnerData;m.__innerData=P?b(m.__propData):null;var R=_.innerDataExclude;if(P&&R){var I={};for(var D in m.__innerData)R.test(D)||(I[D]=m.__innerData[D]);m.__innerData=I}m.__dataProxy=i._advancedCreate(m,m.__propData,m.__innerData,R,l.dataGroupObserverTree,function(e,t,r,n){m.__templateInstance.updateValues(m,P?m.__innerData:m.__propData,e,t,r,n)}),T.beforeMergeValues&&m.__dataProxy.setBeforeMergeCb(function(e,t,r){m.__templateInstance.beforeMergeValues(e,t,r)}),T.beforeUpdateValues&&m.__dataProxy.setBeforeUpdateCb(function(e){m.__templateInstance.beforeUpdateValues(m,P?m.__innerData:m.__propData,e)}),_.writeOnly&&m.__dataProxy.setHidingValue(!0),m.__idCacheDirty=!1,m.__idCache=T.idMap,null===T.slots[""]&&(T.slots[""]=y),l.options.multipleSlots?m.__slots=T.slots:(m.__singleSlot=T.slots[""]||null,m.__singleSlot&&(m.__singleSlot.__wxSlotChildren=m.childNodes)),T.shadowRoot instanceof s?(m.shadowRoot=T.shadowRoot,s._attachShadowRoot(T.shadowRoot)):y instanceof d?(m.shadowRoot=y,y.__wxHost=m,m.__domElement.asShadowRoot=T.shadowRoot,m.__wxSlotChildren=[y],y.__wxSlotParent=m):(m.shadowRoot=y,y.__wxHost=m,m.__domElement.appendChild(T.shadowRoot),m.__wxSlotChildren=[y],y.__wxSlotParent=m);for(var j=T.listeners,F=0;F<j.length;F++){var H=j[F];v(H.target,H.name,L(H.func,m))}var B=l.innerEvents;for(C=0;C<B.length;C++){var U=B[C],V=U.id?"this"===U.id?m:m.__idCache[U.id]:m.shadowRoot;if(V)for(var $=U.name,G=U.funcs,z=0;z<G.length;z++)v(V,$,L(G[z],m))}var W=m.__relationMap;return W.parent&&(O(W.parent,m,"parent"),m.__relationHandler=l.relationHandler),W.ancestor&&(O(W.ancestor,m,"ancestor"),m.__relationHandler=l.relationHandler),W.shadowHost&&(O(W.shadowHost,m,"shadowHost"),m.__relationHandler=l.relationHandler),m.__propertyChangeListeners=null,l.initiator&&n.safeCallback("Component Initiator",l.initiator,m.__methodCaller,[],m),m.__lifeTimeFuncs.created.call(m.__methodCaller,[],m),m};g.createWithGenerics=function(e,t,r,n){return"object"==typeof e?R(e.is,e,null,r,n):e?e.indexOf("-")<0&&!t?_.create(e):R(e.toLowerCase(),t||P.call(g._list,e)&&g._list[e]||g._list[""],null,r,n):R("virtual",g._list[""],null,r,n)},g.create=function(e,t,r){return g.createWithGenerics(e,t,null,r)},g.listProperties=function(e){var t=[];for(var r in e.__propPublic)void 0!==e.__propPublic[r]&&t.push(r);return t},g.listPublicProperties=function(e){var t=[];for(var r in e.__propPublic)e.__propPublic[r]===!0&&t.push(r);return t},g.hasProperty=function(e,t){return void 0!==e.__propPublic[t]},g.hasPublicProperty=function(e,t){return e.__propPublic[t]===!0},g.getMethodsFromDef=function(e){return e.behavior._unprepared&&l.prepare(e.behavior),e.behavior.methods},g.getMethod=function(e,t){return e.__behavior.methods[t]},g.getComponentOptions=function(e){return e.__componentOptions},g.prototype.triggerLifeTime=function(e,t){this.__lifeTimeFuncs[e].call(this.__methodCaller,t||[])},g.prototype.triggerPageLifeTime=function(e,t){T(this,e,t)},g.prototype.hasBehavior=function(e){return"object"!=typeof e&&Object.prototype.hasOwnProperty.call(this.__using,e)&&(e=this.__using[e]),!!this.__behavior&&this.__behavior.hasBehavior(e)},g.prototype.getRootBehavior=function(){return this.__behavior},g.prototype.getRelationNodes=function(e){var t=this.__behavior.relations[e];if(!t)return null;if("parent"===t.type||"ancestor"===t.type||"shadowHost"===t.type){for(var r=this.__relationMap[t.type],n=0;n<r.length&&r[n]!==t;n++);return this.__relationLinks[t.type][n]?[this.__relationLinks[t.type][n].parent]:[]}return k(this,t)},g.prototype.hasExternalClass=function(e){return P.call(this.__externalClassAlias,e)},g.prototype.setExternalClass=function(e,t){this.classList._setAlias(e,t)},g.prototype.setPropertyChangeListener=function(e,t){this.__propertyChangeListeners||(this.__propertyChangeListeners={}),this.__propertyChangeListeners[e]=t},g.prototype.replaceDataOnPath=function(e,t){this.__dataProxy.scheduleReplace(e,t)},g.prototype.isInnerDataExcluded=function(e){var t=this.__componentOptions.innerDataExclude;return!!t&&t.test(e)},g.getInnerData=function(e){return e.__innerData},g.getDataProxy=function(e){return e.__dataProxy},g.replaceWholeData=function(e,t,r){e.__propData=t,e.__dataProxy.replaceWholeData(t,r)},g.prototype.applyDataUpdates=function(){this.__dataProxy.doUpdates()},g.prototype.setData=function(e){var t=this.__dataProxy;for(var r in e)t.scheduleReplace(m(r),e[r]);t.doUpdates()},e.exports=g},function(e,t,r){var n=r(3),o=r(5),i=null,a=null,l=Object.prototype.hasOwnProperty,s=o.deepCopy,_=function(e,t,r,n,o,i){this._data=t,this._innerData=r,this._innerDataExclude=n,this._comp=e,this._updateCb=i,this._beforeMergeCb=null,this._beforeUpdateCb=null,this._hidingValue=!1,this._changes=[],this._doingUpdates=null,this._propFields=o._propFields,this._observers=o._observers,this._observerTree=o._observerTree,this._relatedObserverTreeObj=o,this._observerStatus=[]};_._advancedCreate=function(e,t,r,n,o,i){return new _(e,t,r,n,o,i)};var c=function(e){this._propFields=e,this._observerIdInc=0,this._observers=[],this._observerTree={}};_._createObserverTree=function(e){return new c(e)},_.create=function(e,t,r){var n=new c({});return new _({__methodCaller:e},t,null,null,n,r)},_.setPropUpdater=function(e){i=e},_.setPropObserver=function(e){a=e},_.prototype.replaceWholeData=function(e,t){this._data=e},_.prototype.setHidingValue=function(e){this._hidingValue=!!e},_.prototype.setBeforeMergeCb=function(e){this._beforeMergeCb=e},_.prototype.setBeforeUpdateCb=function(e){this._beforeUpdateCb=e};var u=function(e,t,r){for(var n=e,o=0;o<t.length;o++){var i=t[o];if("**"===i)return n["**"]||(n["**"]=[]),void n["**"].push(r);n[i]||(n[i]={}),n=n[i]}n["~"]||(n["~"]=[]),n["~"].push(r)},d=function(e,t,r){for(var n=0;n<t.length;n++)u(e,t[n],r)},f=function(e,t,r){for(var n=e,o=0,i="";o<t.length&&(i=t[o],"**"!==i);o++){if(!n)return;n=n[i]}var a="**"===i?n["**"]:n["~"];if(a)for(o=0;o<a.length;o++)if(a[o]===r){a.splice(o,1);break}},p=function(e,t,r){for(var n=0;n<t.length;n++)f(e,t[n],r)};c.prototype.addObserver=function(e,t){var r=this._observerIdInc++;return this._observers[r]={pathObj:t,func:e},d(this._observerTree,t,r),r},c.prototype.removeObserver=function(e){var t=this._observers[e];p(this._observerTree,t.pathObj,e),this._observers[e]=null},c.prototype.moveObserver=function(e,t){var r=this._observers[e];p(this._observerTree,r.pathObj,e),r.pathObj=t,d(this._observerTree,t,e)},_.prototype.getObserverTree=function(){return this._relatedObserverTreeObj};var h=function(e,t,r){for(var o=[],i=r.pathObj,a=0;a<i.length;a++){for(var l=i[a],s=t,_=0;_<l.length;_++){var c=l[_];if("**"===c)break;if("object"!=typeof s){s=void 0;break}s=s[c]}o[a]=s}n.safeCallback("Data Observer",r.func,e.__methodCaller,o,e)},v=function(e,t){var r=null,n=0,o=-1;for(var i in e)if("~"!==i)if("**"!==i)v(e[i],t);else for(r=e["**"],n=0;n<r.length;n++)o=r[n],t[o]=!0;else for(r=e["~"],n=0;n<r.length;n++)o=r[n],t[o]=!0},m=function(e,t,r){for(var n=e,o=0;o<r.length;o++){if(n["**"])for(var i=n["**"],a=0;a<i.length;a++){var s=i[a];t[s]=!0}var _=r[o];if("number"==typeof _){if(!l.call(n,_)){n=null;break}}else if(!/^[_a-zA-Z]/.test(_)||!l.call(n,_)){n=null;break}n=n[_]}n&&v(n,t)},b=function(e,t,r,n,o){for(var i=0;i<e.length;i++){var a=e[i],l=t[i];l&&l&&(t[i]=!1,h(r,o?void 0:n,a))}};_.prototype.scheduleReplace=function(e,t,r){this._changes.push([e,t,r])},_.prototype.setChanges=function(e){this._changes=e},_.prototype.getChanges=function(){return this._changes},_.prototype.doUpdates=function(e,t){var r=this._propFields,n=this._comp,o=this._hidingValue,_=this._innerDataExclude,c=!!this._doingUpdates,u=this._relatedObserverTreeObj._observerIdInc,d=null,f=null,p=null;u?(c||(this._doingUpdates={changedPaths:[],changedValues:[],combinedChanges:[],changesTotal:0}),d=this._doingUpdates.changedPaths,f=this._doingUpdates.changedValues,p=this._doingUpdates.combinedChanges):(d=[],f=[],p=[]);var h=this._changes;this._changes=[];var v=[];this._beforeMergeCb&&this._beforeMergeCb(h,v,e);for(var g=0;g<h.length;g++){var w=h[g],y=w[0],x=w[1],C=x,E=void 0,S=y[0],O=!!_&&_.test(S),N=r[S];if(N&&1===y.length)E=this._data[S],x=i.call(this._comp,y,N,x,this._hidingValue),O||(this._innerData?(C=s(x),v[g]||(this._innerData[S]=C)):C=x,w[1]=C),O&&!this._innerData||(this._data[S]=x);else{var k=this._data,T=S,A=null,P=1;if(!O||this._innerData){for(;P<y.length;P++)A=y[P],"number"==typeof A&&isFinite(A)?l.call(k,T)&&k[T]instanceof Array||(k[T]=[]):(!l.call(k,T)||null===k[T]||"object"!=typeof k[T]||k[T]instanceof Array)&&(k[T]={}),k=k[T],T=A;k[T]=x}if(this._innerData&&(k=this._innerData,T=S,!O)){for(P=1;P<y.length;P++)A=y[P],"number"==typeof A&&isFinite(A)?l.call(k,T)&&k[T]instanceof Array||(k[T]=[]):(!l.call(k,T)||null===k[T]||"object"!=typeof k[T]||k[T]instanceof Array)&&(k[T]={}),k=k[T],T=A;C=s(x),v[g]||(k[T]=C),w[1]=C}}m(this._observerTree,this._observerStatus,y),O||(d.push(y),f.push([C,E,x]),p.push(w)),u&&(this._doingUpdates.changesTotal+=1)}if(!c){if(this._beforeUpdateCb&&this._beforeUpdateCb(e),u){var L=0;do L=this._doingUpdates.changesTotal,b(this._observers,this._observerStatus,n,this._data,o);while(L!==this._doingUpdates.changesTotal);this._doingUpdates=null}this._updateCb(d,f,p,e);for(var M=0;M<f.length;M++){var R=f[M];if(R){var I=d[M],D=I[0],j=r[D];j&&a.call(n,R[2],R[1],I,j,o,t)}}}},e.exports=_},function(e,t,r){var n=r(9),o=r(11),i=r(14),a=r(4),l=r(13),s=function(){};s.prototype=Object.create(n.prototype,{constructor:{value:s,writable:!0,configurable:!0}});var _=s._advancedCreate=function(e,t){var r=new s;r.is=e.toLowerCase();var _=null;if("dom"===a.documentBackend&&(_=l.backendExtractedDefault?new i(e):document.createElement(e)),n.initialize(r,_,t),r.classList=o.create(r,null),t){var c=t.__wxHost;r.classList._setOwnerOptions(c.classList,c.__componentOptions.classPrefix,c.__componentOptions.addGlobalClass),a.writeExtraInfoToAttr&&_&&_.setAttribute("exparser:info-class-prefix",c.__componentOptions.classPrefix&&c.__componentOptions.classPrefix+"--")}return r};s.create=function(e){return _(e,null)};var c=s._advancedClone=function(e,t){var r=new s;r.is=e.is;var _=null;if(e.__domElement&&(_=e.__domElement instanceof i?l.backendExtractedDefault?e.__domElement.cloneNode():i.toElement(e.__domElement):l.backendExtractedDefault?i.fromElement(e.__domElement):document.importNode?document.importNode(e.__domElement,!1):e.__domElement.cloneNode(!1)),n._clone(r,e,_,t),r.classList=o.create(r,null),t){var c=t.__wxHost;r.classList._setOwnerOptions(c.classList,c.__componentOptions.classPrefix,c.__componentOptions.addGlobalClass),a.writeExtraInfoToAttr&&_&&_.setAttribute("exparser:info-class-prefix",c.__componentOptions.classPrefix&&c.__componentOptions.classPrefix+"--")}return r};s.cloneNode=function(e){return c(e,null)},e.exports=s},function(e,t,r){var n=r(9),o=r(4),i=function(e,t){a(this,e,t)};i.prototype=Object.create(n.prototype);var a=i.initialize=function(e,t,r){e.is=t||"";var i=null;"dom"===o.documentBackend&&(i=void 0),n.initialize(e,i,r),e.__virtual=!0};i._advancedCreate=function(e,t){return new i(e,t)},i.create=function(e){return new i(e,null)},e.exports=i},function(e,t,r){var n=r(9),o=r(15),i=r(18),a=r(17),l=r(12),s=Object.prototype.hasOwnProperty,_=function(e){i.initialize(this,"shadow",this),this.__hostAssociated=!1,this.__wxHost=e,this.__childrenPropsFilter=null,this.__slotCacheDirty=!1};_.prototype=Object.create(i.prototype),_.create=function(e){var t=new _(e);if(e.ownerShadowRoot&&e.ownerShadowRoot.__childrenPropsFilter)if(t.__childrenPropsFilter)for(var r in e.ownerShadowRoot.__childrenPropsFilter)t.__childrenPropsFilter[r]||(t.__childrenPropsFilter[r]=e.ownerShadowRoot.__childrenPropsFilter[r]);else t.__childrenPropsFilter=e.ownerShadowRoot.__childrenPropsFilter;return t};var c=function(e,t){var r={};for(var n in e){var i=e[n];"object"!=typeof i&&(s.call(t.__using,i)?i=t.__using[i]:s.call(t.__generics,i)&&(i=t.__generics[i]||o._list[""]),r[n]=i)}return r},u="abcdefghijklmnopqrstuvwxyz",d=function(){for(var e=Date.now(),t="exparser-",r=0;r<8;r++){var n=(e+Math.floor(26*Math.random()))%26;e=Math.floor(e/26),t+=u[n]}return t};_.prototype.createTextNode=function(e){return l._advancedCreate(e,this)},_.prototype.createNativeNode=function(e){return a._advancedCreate(e,this)},_.prototype.cloneNativeNode=function(e){return a._advancedClone(e,this)},_.prototype.createVirtualNode=function(e){return i._advancedCreate(e,this)},_.prototype.createComponent=function(e,t,r,n){var i=null;i=void 0===t?e:t;var a=this.__wxHost;return"object"!=typeof i&&(s.call(a.__using,i)?i=a.__using[i]:s.call(a.__generics,i)&&(i=a.__generics[i]),"object"!=typeof i&&(i=o._list[i]||o._list[""])),r&&(r=c(r,a)),"object"==typeof e&&(e=i.is),a.__componentOptions.randomizeTagName&&(e=d()),a.__componentOptions.writeOnly&&!i.options.allowInWriteOnly&&(i=o._list[""]),o._advancedCreate(e,i,this,r,n)},_.prototype.tagNameUsed=function(e){var t=this.__wxHost;return!!s.call(t.__using,e)||!!s.call(t.__generics,e)},_.prototype.getHostNode=function(){return this.__wxHost},_.prototype.getElementById=function(e){return n._updateIdMap(this.__wxHost),this.__wxHost.__idCache[e]},e.exports=_},function(e,t,r){var n=r(9),o=r(12),i=function(){};i.create=function(e,t,r){var a=new i;if(!(e instanceof n||e instanceof o))throw new Error("ElementIterator can only be used for exparser.Element or exparser.TextNode");a._elem=e,a._elemTypeLimit=r||n;var l=t.split("-");if("shadow"===l[0])a._composed=!1;else{if("composed"!==l[0])throw new Error("Unrecognized iterator type: "+t);a._composed=!0}if("ancestors"===l[1])a._relation="ancestors",a._order=0;else{if("descendants"!==l[1])throw new Error("Unrecognized iterator type: "+t);if(a._relation="descendants","root"!==l[2])throw new Error("Unrecognized iterator type: "+t);if("first"===l[3])a._order=-1;else{if("last"!==l[3])throw new Error("Unrecognized iterator type: "+t);a._order=1}}return a};var a=function(e,t,r,n){for(;e;e=r?e.__wxSlotParent||e.__wxHost||e.parentNode:e.parentNode)if(e instanceof t&&n(e)===!1)return!1;return!0},l=function(e,t,r,n,o){if(n<0&&e instanceof t&&o(e)===!1)return!1;var i=r?e.__wxSlotChildren||e.childNodes:e.childNodes;if(i)for(var a=0;a<i.length;a++)if(l(i[a],t,r,n,o)===!1)return!1;return!(n>0&&e instanceof t&&o(e)===!1)};i.prototype.forEach=function(e){return"ancestors"===this._relation?a(this._elem,this._elemTypeLimit,this._composed,e):l(this._elem,this._elemTypeLimit,this._composed,this._order,e)},e.exports=i},function(e,t,r){(function(t){var n=r(4),o=r(3),i=r(9),a=r(17),l=r(12),s=r(19),_=r(15),c=r(23),u=r(24),d=function(){};d.prototype=Object.create(Object.prototype,{constructor:{value:d,writable:!0,configurable:!0}});var f=function(){};f.prototype=Object.create(Object.prototype,{constructor:{value:f,writable:!0,configurable:!0}});var p=null,h=null;d.precompiler=h,d.htmlParser=p;var v=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},m=Object.prototype.hasOwnProperty,b=function(e,t){if(null!==e&&"object"==typeof e&&m.call(e,t))return e[t]},g=function(e,t,r,n){if(m.call(t,r)){var i=t[r];if("function"==typeof i)return o.safeCallback("Template Method",i,e,n)}},w=function(e,t){return[{t:1,n:"slot",a:[],c:[],p:null}]},y={t:1,n:'"slot"',v:!0,sn:"",a:[],c:[],p:null},x=function(e,t,r){e.classList.toggle(t,!!r)},C=function(e,t,r){e[t]=r},E=function(e,t,r){var n=e.__dataProxy;n.scheduleReplace([t],r),n.doUpdates()},S=function(e,t,r){e.class=r},O=function(e,t,r){e.setAttribute("style",r)},N=function(e,t,r){e.setAttribute("class",r)},k=function(e,t,r){e.textContent=r},T=function(e,t,r){e.dataset||(e.dataset={}),e.dataset[t]=r},A={$:function(e,t,r){r===!0?e.setAttribute(t,""):r===!1||void 0===r||null===r?e.removeAttribute(t):e.setAttribute(t,r)},":":C,c:x,s:function(e,t,r){var n=e.style;n&&(n[t]=r)},d:T},P=function(e,t,r){return[{t:1,n:"slot",v:!0,sn:"",a:[],c:[]}]};d.create=function(e,r,n,o){var i=void 0===e.template?P:e.template,a=i;if("function"!=typeof i)if(h&&"undefined"!=typeof window&&"undefined"!=typeof document){var l="__exparserFreeTmpl",s=h.compile(i),_=document.createElement("script");_.type="text/javascript",_.innerHTML="window."+l+"="+s,document.head.appendChild(_),document.head.removeChild(_),a=window[l],window[l]=null}else a="undefined"!=typeof t&&"undefined"!=typeof t.versions&&"undefined"!=typeof t.versions.node?d.precompileAndGetCreator(i):w;var c=Object.create(d.prototype);return c._initValuesJSON=JSON.stringify(n),r!==n?c._dataJSON=JSON.stringify(r):c._dataJSON=null,c._tagTreeRoot=L(a,n,e.methods,o),c._renderingMode=o.renderingMode,c};var L=function(e,t,r,o){var i=o.renderingMode,l="native"===i,s=l,_=!1,c=Object.create(null);l&&!n.hasDOMBackend&&(e=w);var d={},f=e(b,g,r),p=function(e){for(var r=0;r<e.length;r++){var n=e[r];if(3!==n.t){var o=n.n,i=!(l||"string"==typeof o&&o.indexOf("-")<0);"slot"===o&&""===n.sn&&(_=!0),n.n=o;var c=n.st;c&&c.e&&(c.o=O,s&&(c.v=c.e(t,d,null)));var f=n.cl;f&&f.e&&(f.o=l?N:S,s&&(f.v=f.e(t,d,null)));var h=null;i||(n.p=h=l?document.createElement(n.n):a.create(n.n),c&&void 0!==c.v&&h.setAttribute("style",c.v),l&&f&&void 0!==f.v&&h.setAttribute("class",f.v));for(var m=n.a,b=0;b<m.length;b++){var g=m[b];if(g.d)l||u[g.n].register(g.n,g,n);else{l||("bind"===g.n.slice(0,4)?(g.evCatch=!1,g.ev=v(g.n.slice(4)),":"===g.ev[0]&&(g.ev=g.ev.slice(1))):"catch"===g.n.slice(0,5)&&(g.evCatch=!0,g.ev=v(g.n.slice(5)),":"===g.ev[0]&&(g.ev=g.ev.slice(1))));var w=g.o;if(i)w?"&"===w?g.o=A[":"]:g.o=A[w]:(g.o=A[":"],g.n=v(g.n)),g.o===C&&(g.o=E),s&&g.e&&(g.v=g.e(t,d,null));else if(!g.ev){var y=A;w?"&"===w?g.o=y[":"]:g.o=y[w]:g.o=y.$,s?(g.e&&(g.v=g.e(t,d,null)),(g.o!==x||l)&&g.o(h,g.n,g.v)):g.e||g.o(h,g.n,g.v)}}}p(n.c),l&&(1!==n.c.length||void 0===n.c[0].sn||n.c[0].compressed||(n.sn=n.c[0].sn,n.compressed=!0,n.c.pop()))}else n.e&&(n.o=k,n.c=s?n.e(t,d,null):"")}};return p(f,c,!0),l&&(_||f.push(y),1!==f.length||""!==f[0].sn||f[0].compressed||f.pop()),f},M=function(e,t){return function(r){if(this[e](r),t)return!1}},R=function(e,t,r,n,o,a,l,s){for(var d=null,f=0,p=null,h=0;h<e.length;h++){var v=l,m=e[h];if(3===m.t)d=m.e?t.createTextNode(m.e(n,o,null)):t.createTextNode(m.c),m.e&&c.addBindings(a,v,m.b,d,m),i.appendChild(r,d);else{var b=m.cl,g=m.st,w=m.a,y=!1;for(f=0;f<w.length;f++)if(p=w[f],p.d){var S=u[p.n].create(p.n,p,m,n,o,a,v,s,t,R,r);if(u[p.n].requireBlock){d=S,i.appendChild(r,d),y=!0;break}}if(y)continue;if(m.v)d=t.createVirtualNode(m.n);else if(m.p){for(d=t.cloneNativeNode(m.p),f=0;f<w.length;f++)p=w[f],p.d||(p.ev?s(d,p.ev,p.v,p.evCatch):p.o===C?d.__domElement&&(p.o(d.__domElement,p.n,p.e(n,o,null)),c.addBindings(a,v,p.b,d.__domElement,p)):(p.e&&p.o(d,p.n,p.e(n,o,null)),(p.e||p.o===x||p.o===T)&&c.addBindings(a,v,p.b,d,p)));g&&g.e&&(d.setAttribute("style",g.e(n,o,null)),c.addBindings(a,v,g.b,d,g))}else{if(m.cpf){var O={},N=t.__wxHost;for(var k in m.cpf)!function(e){var t=m.cpf[e];O[e]=N.__behavior.methods[t]}(k);t.__childrenPropsFilter=O}for(d=t.createComponent(m.n,void 0,m.g,void 0),f=0;f<w.length;f++)if(p=w[f],!p.d){var A=p.v;p.o===E&&_.hasPublicProperty(d,p.n)?(p.e&&(A=p.e(n,o,null),c.addBindings(a,v,p.b,d,p)),p.e?E(d,p.n,A):d.__behavior.properties[p.n].type===Boolean?E(d,p.n,!0):E(d,p.n,A)):p.ev?s(d,p.ev,A,p.evCatch):p.o!==E&&(p.e&&(A=p.e(n,o,null),c.addBindings(a,v,p.b,d,p)),p.o(d,p.n,A))}g&&(g.e?(d.__domElement.setAttribute("style",g.e(n,o,null)),c.addBindings(a,v,g.b,d.__domElement,g)):d.__domElement.setAttribute("style",g.v))}m.id&&(d.id=m.id),b&&(b.e?d.class=b.e(n,o,null):d.class=b.v,b.o&&c.addBindings(a,v,b.b,d,b)),m.sl&&(d.slot=m.sl),void 0!==m.sn&&i.setSlotName(d,m.sn),i.appendChild(r,d),R(m.c,t,d,n,o,a,v,s)}}},I=function(e,t,r){for(var n=e.childNodes,o=0;o<n.length;o++){var i=n[o];i instanceof l||(i.__id&&(t[i.__id]=i),void 0!==i.__slotName&&(r[i.__slotName]=i),I(i,t,r))}},D=function(e,t,r,n,o,i){for(var a=null,l=0,s=null,_=0;_<e.length;_++){var u=e[_];if(void 0===u.n)a=document.createTextNode(u.c),u.e&&c.addBindings(o,i,u.b,a,u),t.appendChild(a);else{var d=u.cl,f=u.st,p=u.a;for(a=u.v?document.createElement("virtual"):document.importNode?document.importNode(u.p,!1):u.p.cloneNode(!1),l=0;l<p.length;l++)s=p[l],s.e&&c.addBindings(o,i,s.b,a,s);t.appendChild(a),u.id&&(r[u.id]=a),d&&d.e&&c.addBindings(o,i,d.b,a,d),
  388. f&&f.e&&c.addBindings(o,i,f.b,a,f),void 0!==u.sn&&(n[u.sn]=a),D(u.c,a,r,n,o,i)}}};d.prototype.createInstance=function(e){var t=Object.create(f.prototype),r=JSON.parse(this._initValuesJSON),o=null===this._dataJSON?r:JSON.parse(this._dataJSON),i=Object.create(null),a=Object.create(null),l=[],_=c.create("",null,null,null,null,[],function(e,t){}),u=null;if("native"===this._renderingMode)"dom"===n.documentBackend&&(u=document.createDocumentFragment()),D(this._tagTreeRoot,u,i,a,_,{}),a[""]||(a[""]=null);else{var d=function(e,t,r,n){u.__wxHost?e.addListener(t,M(r,n).bind(u.__wxHost)):l.push({target:e,name:t,func:M(r,n)})};if(u=s.create(e),e.ownerShadowRoot&&e.ownerShadowRoot.__childrenPropsFilter)if(u.__childrenPropsFilter)for(var p in e.ownerShadowRoot.__childrenPropsFilter)u.__childrenPropsFilter[p]||(u.__childrenPropsFilter[p]=e.ownerShadowRoot.__childrenPropsFilter[p]);else u.__childrenPropsFilter=e.ownerShadowRoot.__childrenPropsFilter;R(this._tagTreeRoot,u,u,r,{},_,{},d),I(u,i,a)}return t.data=o,t.shadowRoot=u,t.idMap=i,t.slots=a,t.listeners=l,t._topScope=_,t},f.prototype.updateValues=function(e,t,r){for(var n=i.getMethodCaller(e),o=0;o<r.length;o++){var a=r[o];c.updateBinding(this._topScope,a,t,{},n)}},e.exports=d}).call(t,r(22))},function(e,t){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function o(e){if(c===setTimeout)return setTimeout(e,0);if((c===r||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(e){if(u===clearTimeout)return clearTimeout(e);if((u===n||!u)&&clearTimeout)return u=clearTimeout,clearTimeout(e);try{return u(e)}catch(t){try{return u.call(null,e)}catch(t){return u.call(this,e)}}}function a(){h&&f&&(h=!1,f.length?p=f.concat(p):v=-1,p.length&&l())}function l(){if(!h){var e=o(a);h=!0;for(var t=p.length;t;){for(f=p,p=[];++v<t;)f&&f[v].run();v=-1,t=p.length}f=null,h=!1,i(e)}}function s(e,t){this.fun=e,this.array=t}function _(){}var c,u,d=e.exports={};!function(){try{c="function"==typeof setTimeout?setTimeout:r}catch(e){c=r}try{u="function"==typeof clearTimeout?clearTimeout:n}catch(e){u=n}}();var f,p=[],h=!1,v=-1;d.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];p.push(new s(e,t)),1!==p.length||h||o(l)},s.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=_,d.addListener=_,d.once=_,d.off=_,d.removeListener=_,d.removeAllListeners=_,d.emit=_,d.prependListener=_,d.prependOnceListener=_,d.listeners=function(e){return[]},d.binding=function(e){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(e){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(e,t){var r={};r.create=function(e,t,r,o,i,a,l){for(var s={inc:1,name:e,exp:o,lp:i,scopes:{},targets:{},children:null,lu:l,__scopeBinded:[]},_=0;_<a.length;_++){var c=a[_];null===c[0]?n(t,c,null,s):n(r[c[0]],c,null,s)}return s},r.proxyTopScope=function(e){var t={inc:1,linked:e,scopes:{},targets:{},children:null,__scopeBinded:[]};return n(e,[null],null,t),t},r.proxySubScopes=function(e){var t={};for(var r in e)t[r]={inc:1,linked:e[r],scopes:{},targets:{},children:null,__scopeBinded:[]},n(e[r],[null],null,t[r]);return t};var n=r.addBinding=function(e,t,r,n){for(var o=e,i=1;i<t.length;i++){var a=t[i];o.children||(o.children=Object.create(null));var l=o.children;l[a]||(l[a]={scopes:{},targets:{},children:null}),o=l[a]}var s=e.inc++;return r?o.targets[s]=[r,n]:(o.scopes[s]=n,n.__scopeBinded.push([o,s])),s};r.addBindings=function(e,t,r,o,i){for(var a=0;a<r.length;a++){var l=r[a];l[0]?n(t[l[0]],l,o,i):n(e,l,o,i)}},r.updateLvaluePath=function(e,t){e.lp=t},r.removeBindingsForScope=function(e){for(var t=e.__scopeBinded,r=0;r<t.length;r++){var n=t[r];delete n[0].scopes[n[1]]}};var o=function(e,t,r,n,o){if(e.linked)return void i(e,t,r,n,o);var a=n[e.name];n[e.name]=e.exp(r,n,o),i(e,t,r,n,o),n[e.name]=a},i=r.updateBinding=function(e,t,r,n,i){for(var a=e,l=0,s=0;s<t.length;s++){for(l in a.scopes)o(a.scopes[l],t,r,n,i);var _=t[s];if(!a.children)return;var c=a.children;if(!c[_])return;a=c[_]}var u=function(e){for(l in e.targets){var t=e.targets[l],a=t[1];a.o(t[0],a.n,a.e(r,n,i))}for(l in e.scopes)o(e.scopes[l],[],r,n,i);for(l in e.children)u(e.children[l])};u(a)};e.exports=r},function(e,t,r){e.exports={if:r(25),elif:r(25),else:r(25),for:r(27),key:r(28),"for-index":r(29),"for-item":r(30),alias:r(31)}},function(e,t,r){var n=r(23),o=r(26).RUNTIME_NAMES;o.TOP_SCOPE+","+o.SUB_SCOPE+","+o.CALLER;e.exports={requireBlock:!0,register:function(e,t,r){},create:function(e,t,r,o,i,a,l,s,_,c,u){var d=_.createVirtualNode("wx:"+e);d.__wxIfCondValue=!0,d.__wxIfNextNode=null,d.__wxIfHasTrueCond=!0;var f=null;"if"!==e&&(f=u.childNodes[u.childNodes.length-1],"wx:if"!==f.is&&"wx:elif"!==f.is?f=null:f.__wxIfNextNode=d),r.id&&(d.id=r.id);var p=d.__wxIfUpdateNode=function(){var e=d.__wxIfCondValue;if(f&&f.__wxIfHasTrueCond&&(e=!1),e&&!d.childNodes.length){var t=n.proxyTopScope(a),u=n.proxySubScopes(l);d.__wxTopScope=t,d.__wxSubScopes=u,c(r.c,_,d,o,i,t,u,s)}else if(!e&&d.childNodes.length){n.removeBindingsForScope(d.__wxTopScope);for(var p in d.__wxSubScopes)n.removeBindingsForScope(d.__wxSubScopes[p]);for(;d.childNodes.length;)d.removeChild(d.childNodes[0])}d.__wxIfNextNode&&d.__wxIfNextNode.__wxIfUpdateNode()},h=function(e){d.__wxIfCondValue=!!e,d.__wxIfHasTrueCond=d.__wxIfCondValue||f&&f.__wxIfHasTrueCond,p()};return"else"===e?h(!0):(n.addBindings(a,l,t.b,d,{e:t.d,o:function(e,t,r){h(r)}}),h(t.d(o,i,null))),d}}},function(e,t){t.TAG_TYPES={TAG_START:1,TAG_END:-1,TEXT:3,COMMENT:8},t.RUNTIME_NAMES={MEMBER:"m",CALL:"f",METHODS:"e",CALLER:"c",TOP_SCOPE:"t",SUB_SCOPE:"s"};var r=t.STRING_UNESCAPE_MAP={n:"\n",r:"\r",b:"\b",f:"\f",t:"\t",v:"\v",'"':'"',"'":"'","\\":"\\","\r":"\r","\n":"\n"},n=t.STRING_ESCAPE_MAP={},o="";for(var i in r)n[r[i]]=i,o+=r[i];t.STRING_ESCAPE_REGEXP=new RegExp("["+o+"]","g")},function(e,t,r){var n=(r(18),r(23)),o=r(26).RUNTIME_NAMES;o.TOP_SCOPE+","+o.SUB_SCOPE+","+o.CALLER;e.exports={requireBlock:!0,addDefaultAttrs:[{n:"wx:for-index",v:"index"},{n:"wx:for-item",v:"item"}],register:function(e,t,r){},create:function(e,t,r,o,i,a,l,s,_,c){var u=r._wxForIndex||"index",d=r._wxForItem||"item",f=r._wxKey,p=_.createVirtualNode("wx:for:list");r.id&&(p.id=r.id),n.create("",a,l,function(e,r,n){var o=t.d(e,r,null);return g(o,e,r,n),o},t.l,t.b);var h=function(e,t,o,i,f){var h=_.createVirtualNode("wx:for:item"),v=n.proxyTopScope(a),m=n.proxySubScopes(l);h.__wxTopScope=v,h.__wxSubScopes=m,h.__wxForToRemove=!1,h.__wxForKeyStr="";var b=n.create(u,v,m,null,null,[]),g=n.create(d,v,m,null,[o],[]);return m[u]=b,m[d]=g,t[u]=o,t[d]=i,c(r.c,_,h,e,t,v,m,s),void 0===f?p.appendChild(h):p.insertBefore(h,f),h},v=function(e,t,r,i,a,l){var s=e.__wxSubScopes[d];n.updateLvaluePath(s,[i]),a&&(l?p.insertBefore(e,l):p.appendChild(e));var _=e.__wxSubScopes[u];r[u]=i,n.updateBinding(_,[],o,r,t)},m=function(e,t,r,o,i,a){o[d]=i,n.updateBinding(e.__wxSubScopes[d],t,r,o,a)},b=function(e){n.removeBindingsForScope(e.__wxTopScope);for(var t in p.__wxSubScopes)n.removeBindingsForScope(e.__wxSubScopes[t]);p.removeChild(e)},g=function(e,t,r,n){var o="",i=e;"object"==typeof e&&null!==e||(i=[]);var a={};for(o in r)a[o]=r[o];var l=0;if(f){var s=[],_=e instanceof Array,c=[];if(!_){var u=i;i=[];for(o in u)i.push(u[o]),c.push(o)}for(l=0;l<i.length;l++)s.push(String(i[l][f]));if(0===i.length)for(;p.childNodes.length;)b(p.childNodes[0]);else{var d=Object.create(null),g=Object.create(null),w=p.childNodes,y=null,x="";for(l=0;l<w.length;l++)y=w[l],x=y.__wxForKeyStr,d[x]>=0?(b(y),l--):(d[x]=l,g[x]=y,y.__wxForToRemove=!0);var C=-1,E=0,S=1,O=[];for(E=d[i[0][f]],E>=0||(E=-1),w[E]&&(w[E].__wxForToRemove=!1),l=1;l<i.length;l++)S=d[i[l][f]],S>=0&&(C<E&&(E<S||C>S)&&(O.push(w[E]),C=E),E=S,w[E]&&(w[E].__wxForToRemove=!1));for(C<E&&O.push(w[E]),l=0;l<w.length;l++)y=w[l],y.__wxForToRemove&&(b(y),l--);var N=O.shift(),k=0;for(l=0;l<i.length;l++){var T=i[l],A=g[T[f]];if(g[T[f]]=null,A){var P=!0;if(A===N){for(;w[k]!==N;)k++;k++,N=O.shift(),P=!1}y=A,v(y,n,a,_?l:c[l],P,w[k]),P&&w[k]===y&&k++,m(y,[],t,a,i[l],n)}else y=h(t,a,_?l:c[l],i[l],w[k]),k++,y.__wxForKeyStr=String(T[f])}}}else{for(;p.childNodes.length;)b(p.childNodes[0]);if(e instanceof Array)for(l=0;l<i.length;l++)h(t,a,l,i[l]);else for(o in i)h(t,a,o,i[o])}};return g(t.d(o,i,null),o,i,null),p}}},function(e,t){e.exports={attachedToBlock:!0,register:function(e,t,r){r._wxKey=t.d},create:function(){}}},function(e,t){e.exports={attachedToBlock:"for",register:function(e,t,r){r._wxForIndex=t.d},create:function(){}}},function(e,t){e.exports={attachedToBlock:"for",register:function(e,t,r){r._wxForItem=t.d},create:function(){}}},function(e,t,r){var n=r(23),o=r(26).RUNTIME_NAMES;o.TOP_SCOPE+","+o.SUB_SCOPE+","+o.CALLER;e.exports={requireBlock:!0,register:function(e,t,r){},create:function(e,t,r,o,i,a,l,s,_,c){var u=t.s[0],d=n.create(u,a,l,t.d,t.l,t.b),f={},p="";for(p in l)f[p]=l[p];f[u]=d;var h={};for(p in i)h[p]=i[p];h[u]=t.d(o,i,null);var v=_.createVirtualNode("wx:alias");return r.id&&(v.id=r.id),c(r.c,_,v,o,h,a,f,s),v}}}]);
  389. /***/ }),
  390. /* 5 */
  391. /***/ (function(module, exports) {
  392. /**
  393. * 获取随机 id,生成 15 位
  394. */
  395. let seed = 1e14 + Math.floor(Math.random() * 9e14)
  396. const charString = 'abcdefghij'
  397. function getId(notNumber) {
  398. const id = ++seed
  399. return notNumber ? id.toString().split('').map(item => charString[+item]).join('') : id
  400. }
  401. /**
  402. * 复制对象
  403. */
  404. function copy(src) {
  405. if (typeof src === 'object' && src !== null) {
  406. let dest
  407. if (Array.isArray(src)) {
  408. dest = src.map(item => copy(item))
  409. } else {
  410. dest = {}
  411. Object.keys(src).forEach(key => dest[key] = copy(src[key]))
  412. }
  413. return dest
  414. }
  415. if (typeof src === 'symbol') return undefined
  416. return src
  417. }
  418. /**
  419. * 判断是否是 html 标签
  420. */
  421. const tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'dfn', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr']
  422. function isHtmlTag(tagName) {
  423. return tags.indexOf(tagName) >= 0
  424. }
  425. /**
  426. * 判断是否是小程序内置组件
  427. */
  428. const officialTags = [
  429. 'view', 'scroll-view', 'swiper', 'movable-view', 'cover-view', 'cover-view',
  430. 'icon', 'text', 'rich-text', 'progress',
  431. 'button', 'checkbox', 'form', 'input', 'label', 'picker', 'picker', 'picker-view', 'radio', 'slider', 'switch', 'textarea',
  432. 'navigator', 'function-page-navigator',
  433. 'audio', 'image', 'video', 'camera', 'live-player', 'live-pusher',
  434. 'map',
  435. 'canvas',
  436. 'open-data', 'web-view', 'ad'
  437. ]
  438. function isOfficialTag(tagName) {
  439. return officialTags.indexOf(tagName) >= 0 || officialTags.indexOf(`wx-${tagName}`) >= 0
  440. }
  441. /**
  442. * 转换 rpx 单位为 px 单位
  443. */
  444. function transformRpx(style) {
  445. return style.replace(/(\d+)rpx/ig, '$1px')
  446. }
  447. /**
  448. * 转换连字符为驼峰
  449. */
  450. function dashToCamelCase(dash) {
  451. return dash.replace(/-[a-z]/g, s => s[1].toUpperCase())
  452. }
  453. /**
  454. * 转换驼峰为连字符
  455. */
  456. function camelToDashCase(camel) {
  457. return camel.replace(/([A-Z])/g, '-$1').toLowerCase()
  458. }
  459. /**
  460. * 转换动画对象为样式
  461. */
  462. function animationToStyle({animates, option = {}}) {
  463. const {transformOrigin, transition} = option
  464. if (transition === undefined || animates === undefined) {
  465. return {
  466. transformOrigin: '',
  467. transform: '',
  468. transition: '',
  469. }
  470. }
  471. const addPx = value => (typeof value === 'number' ? value + 'px' : value)
  472. const transform = animates.filter(({type}) => type !== 'style').map(({type, args}) => {
  473. switch (type) {
  474. case 'matrix':
  475. return `matrix(${args.join(',')})`
  476. case 'matrix3d':
  477. return `matrix3d(${args.join(',')})`
  478. case 'rotate':
  479. return `rotate(${args[0]}deg)`
  480. case 'rotate3d':
  481. args[3] += 'deg'
  482. return `rotate3d(${args.join(',')})`
  483. case 'rotateX':
  484. return `rotateX(${args[0]}deg)`
  485. case 'rotateY':
  486. return `rotateY(${args[0]}deg)`
  487. case 'rotateZ':
  488. return `rotateZ(${args[0]}deg)`
  489. case 'scale':
  490. return `scale(${args.join(',')})`
  491. case 'scale3d':
  492. return `scale3d(${args.join(',')})`
  493. case 'scaleX':
  494. return `scaleX(${args[0]})`
  495. case 'scaleY':
  496. return `scaleY(${args[0]})`
  497. case 'scaleZ':
  498. return `scaleZ(${args[0]})`
  499. case 'translate':
  500. return `translate(${args.map(addPx).join(',')})`
  501. case 'translate3d':
  502. return `translate3d(${args.map(addPx).join(',')})`
  503. case 'translateX':
  504. return `translateX(${addPx(args[0])})`
  505. case 'translateY':
  506. return `translateY(${addPx(args[0])})`
  507. case 'translateZ':
  508. return `translateZ(${addPx(args[0])})`
  509. case 'skew':
  510. return `skew(${args.map(value => value + 'deg').join(',')})`
  511. case 'skewX':
  512. return `skewX(${args[0]}deg)`
  513. case 'skewY':
  514. return `skewY(${args[0]}deg)`
  515. default:
  516. return ''
  517. }
  518. }).join(' ')
  519. const style = animates.filter(({type}) => type === 'style').reduce((previous, current) => {
  520. previous[current.args[0]] = current.args[1]
  521. return previous
  522. }, {})
  523. return {
  524. style,
  525. transformOrigin,
  526. transform,
  527. transitionProperty: ['transform', ...Object.keys(style)].join(','),
  528. transition: `${transition.duration}ms ${transition.timingFunction} ${transition.delay}ms`,
  529. }
  530. }
  531. /**
  532. * 调整 exparser 的定义对象
  533. */
  534. function adjustExparserDefinition(definition) {
  535. // 调整 properties
  536. const properties = definition.properties || {}
  537. Object.keys(properties).forEach(key => {
  538. const value = properties[key]
  539. if (value === null) {
  540. properties[key] = {type: null}
  541. } else if (value === Number || value === String || value === Boolean || value === Object || value === Array) {
  542. properties[key] = {type: value}
  543. } else if (value.public === undefined || value.public) {
  544. properties[key] = {
  545. type: value.type === null ? null : value.type,
  546. value: value.value,
  547. observer: value.observer,
  548. }
  549. }
  550. })
  551. return definition
  552. }
  553. /**
  554. * 存入标签名
  555. */
  556. const idTagNameMap = {}
  557. function setTagName(id, tagName) {
  558. idTagNameMap[id] = tagName
  559. }
  560. /**
  561. * 根据 id 获取标签名
  562. */
  563. function getTagName(id) {
  564. return idTagNameMap[id]
  565. }
  566. /**
  567. * 缓存 componentManager 实例
  568. */
  569. const CACHE = {}
  570. function cache(id, instance) {
  571. if (instance) {
  572. // 存入缓存
  573. CACHE[id] = instance
  574. } else {
  575. // 取缓存
  576. return CACHE[id]
  577. }
  578. }
  579. /**
  580. * 解析事件语法
  581. */
  582. function parseEvent(name, value) {
  583. const res = /^(capture-)?(mut-)?(bind|catch|)(?::)?(.*)$/ig.exec(name)
  584. if (res[3] && res[4]) {
  585. // 事件绑定
  586. const isCapture = !!res[1]
  587. const isMutated = !!res[2]
  588. const isCatch = res[3] === 'catch'
  589. const eventName = res[4]
  590. return {
  591. name: eventName,
  592. isMutated,
  593. isCapture,
  594. isCatch,
  595. handler: value,
  596. }
  597. }
  598. }
  599. /**
  600. * 标准化文件绝对路径
  601. */
  602. function normalizeAbsolute(absolutePath) {
  603. if (!absolutePath) return null
  604. absolutePath = absolutePath.replace(/\\/g, '/')
  605. return absolutePath.split('/').filter(item => !!item).join('/')
  606. }
  607. /**
  608. * 文件相对路径转绝对路径,其中 basePath 路径必须是文件路径
  609. */
  610. function relativeToAbsolute(basePath, relativePath) {
  611. let baseDirPath = normalizeAbsolute(basePath).split('/')
  612. baseDirPath.pop()
  613. baseDirPath = baseDirPath.join('/')
  614. const pathList = []
  615. normalizeAbsolute(`${baseDirPath}/${relativePath}`).split('/').forEach(item => {
  616. if (item === '..') {
  617. pathList.pop()
  618. } else if (item !== '.') {
  619. pathList.push(item)
  620. }
  621. })
  622. return pathList.join('/')
  623. }
  624. /**
  625. * 获取 exparser 节点对应的 dom 节点
  626. */
  627. function getDom(exparserNode) {
  628. let dom = exparserNode.$$
  629. if (!dom) {
  630. dom = document.createElement('virtual')
  631. const fragment = document.createDocumentFragment()
  632. const shadowRoot = exparserNode.shadowRoot
  633. const childNodes = shadowRoot && shadowRoot.childNodes
  634. if (childNodes && childNodes.length) {
  635. childNodes.forEach(child => fragment.appendChild(getDom(child)))
  636. }
  637. dom.appendChild(fragment)
  638. }
  639. return dom
  640. }
  641. module.exports = {
  642. getId,
  643. copy,
  644. isHtmlTag,
  645. isOfficialTag,
  646. transformRpx,
  647. dashToCamelCase,
  648. camelToDashCase,
  649. animationToStyle,
  650. adjustExparserDefinition,
  651. setTagName,
  652. getTagName,
  653. cache,
  654. parseEvent,
  655. normalizeAbsolute,
  656. relativeToAbsolute,
  657. getDom,
  658. }
  659. /***/ }),
  660. /* 6 */
  661. /***/ (function(module, exports) {
  662. module.exports = {
  663. // 节点类型
  664. TYPE_ROOT: 10,
  665. TYPE_SLOT: 11,
  666. TYPE_TEMPLATE: 12,
  667. TYPE_BLOCK: 13,
  668. TYPE_IMPORT: 14,
  669. TYPE_INCLUDE: 15,
  670. TYPE_WXS: 16,
  671. TYPE_COMPONENT: 17,
  672. TYPE_TEXT: 18,
  673. TYPE_IF: 19,
  674. TYPE_FOR: 20,
  675. TYPE_FORITEM: 21,
  676. TYPE_NATIVE: 22,
  677. }
  678. /***/ }),
  679. /* 7 */
  680. /***/ (function(module, exports, __webpack_require__) {
  681. "use strict";
  682. //
  683. // item item item item
  684. // /------\ /------\ /------\ /------\
  685. // | data | | data | | data | | data |
  686. // null <--+-prev |<---+-prev |<---+-prev |<---+-prev |
  687. // | next-+--->| next-+--->| next-+--->| next-+--> null
  688. // \------/ \------/ \------/ \------/
  689. // ^ ^
  690. // | list |
  691. // | /------\ |
  692. // \--------------+-head | |
  693. // | tail-+--------------/
  694. // \------/
  695. //
  696. function createItem(data) {
  697. return {
  698. prev: null,
  699. next: null,
  700. data: data
  701. };
  702. }
  703. function allocateCursor(node, prev, next) {
  704. var cursor;
  705. if (cursors !== null) {
  706. cursor = cursors;
  707. cursors = cursors.cursor;
  708. cursor.prev = prev;
  709. cursor.next = next;
  710. cursor.cursor = node.cursor;
  711. } else {
  712. cursor = {
  713. prev: prev,
  714. next: next,
  715. cursor: node.cursor
  716. };
  717. }
  718. node.cursor = cursor;
  719. return cursor;
  720. }
  721. function releaseCursor(node) {
  722. var cursor = node.cursor;
  723. node.cursor = cursor.cursor;
  724. cursor.prev = null;
  725. cursor.next = null;
  726. cursor.cursor = cursors;
  727. cursors = cursor;
  728. }
  729. var cursors = null;
  730. var List = function() {
  731. this.cursor = null;
  732. this.head = null;
  733. this.tail = null;
  734. };
  735. List.createItem = createItem;
  736. List.prototype.createItem = createItem;
  737. List.prototype.updateCursors = function(prevOld, prevNew, nextOld, nextNew) {
  738. var cursor = this.cursor;
  739. while (cursor !== null) {
  740. if (cursor.prev === prevOld) {
  741. cursor.prev = prevNew;
  742. }
  743. if (cursor.next === nextOld) {
  744. cursor.next = nextNew;
  745. }
  746. cursor = cursor.cursor;
  747. }
  748. };
  749. List.prototype.getSize = function() {
  750. var size = 0;
  751. var cursor = this.head;
  752. while (cursor) {
  753. size++;
  754. cursor = cursor.next;
  755. }
  756. return size;
  757. };
  758. List.prototype.fromArray = function(array) {
  759. var cursor = null;
  760. this.head = null;
  761. for (var i = 0; i < array.length; i++) {
  762. var item = createItem(array[i]);
  763. if (cursor !== null) {
  764. cursor.next = item;
  765. } else {
  766. this.head = item;
  767. }
  768. item.prev = cursor;
  769. cursor = item;
  770. }
  771. this.tail = cursor;
  772. return this;
  773. };
  774. List.prototype.toArray = function() {
  775. var cursor = this.head;
  776. var result = [];
  777. while (cursor) {
  778. result.push(cursor.data);
  779. cursor = cursor.next;
  780. }
  781. return result;
  782. };
  783. List.prototype.toJSON = List.prototype.toArray;
  784. List.prototype.isEmpty = function() {
  785. return this.head === null;
  786. };
  787. List.prototype.first = function() {
  788. return this.head && this.head.data;
  789. };
  790. List.prototype.last = function() {
  791. return this.tail && this.tail.data;
  792. };
  793. List.prototype.each = function(fn, context) {
  794. var item;
  795. if (context === undefined) {
  796. context = this;
  797. }
  798. // push cursor
  799. var cursor = allocateCursor(this, null, this.head);
  800. while (cursor.next !== null) {
  801. item = cursor.next;
  802. cursor.next = item.next;
  803. fn.call(context, item.data, item, this);
  804. }
  805. // pop cursor
  806. releaseCursor(this);
  807. };
  808. List.prototype.forEach = List.prototype.each;
  809. List.prototype.eachRight = function(fn, context) {
  810. var item;
  811. if (context === undefined) {
  812. context = this;
  813. }
  814. // push cursor
  815. var cursor = allocateCursor(this, this.tail, null);
  816. while (cursor.prev !== null) {
  817. item = cursor.prev;
  818. cursor.prev = item.prev;
  819. fn.call(context, item.data, item, this);
  820. }
  821. // pop cursor
  822. releaseCursor(this);
  823. };
  824. List.prototype.forEachRight = List.prototype.eachRight;
  825. List.prototype.nextUntil = function(start, fn, context) {
  826. if (start === null) {
  827. return;
  828. }
  829. var item;
  830. if (context === undefined) {
  831. context = this;
  832. }
  833. // push cursor
  834. var cursor = allocateCursor(this, null, start);
  835. while (cursor.next !== null) {
  836. item = cursor.next;
  837. cursor.next = item.next;
  838. if (fn.call(context, item.data, item, this)) {
  839. break;
  840. }
  841. }
  842. // pop cursor
  843. releaseCursor(this);
  844. };
  845. List.prototype.prevUntil = function(start, fn, context) {
  846. if (start === null) {
  847. return;
  848. }
  849. var item;
  850. if (context === undefined) {
  851. context = this;
  852. }
  853. // push cursor
  854. var cursor = allocateCursor(this, start, null);
  855. while (cursor.prev !== null) {
  856. item = cursor.prev;
  857. cursor.prev = item.prev;
  858. if (fn.call(context, item.data, item, this)) {
  859. break;
  860. }
  861. }
  862. // pop cursor
  863. releaseCursor(this);
  864. };
  865. List.prototype.some = function(fn, context) {
  866. var cursor = this.head;
  867. if (context === undefined) {
  868. context = this;
  869. }
  870. while (cursor !== null) {
  871. if (fn.call(context, cursor.data, cursor, this)) {
  872. return true;
  873. }
  874. cursor = cursor.next;
  875. }
  876. return false;
  877. };
  878. List.prototype.map = function(fn, context) {
  879. var result = new List();
  880. var cursor = this.head;
  881. if (context === undefined) {
  882. context = this;
  883. }
  884. while (cursor !== null) {
  885. result.appendData(fn.call(context, cursor.data, cursor, this));
  886. cursor = cursor.next;
  887. }
  888. return result;
  889. };
  890. List.prototype.filter = function(fn, context) {
  891. var result = new List();
  892. var cursor = this.head;
  893. if (context === undefined) {
  894. context = this;
  895. }
  896. while (cursor !== null) {
  897. if (fn.call(context, cursor.data, cursor, this)) {
  898. result.appendData(cursor.data);
  899. }
  900. cursor = cursor.next;
  901. }
  902. return result;
  903. };
  904. List.prototype.clear = function() {
  905. this.head = null;
  906. this.tail = null;
  907. };
  908. List.prototype.copy = function() {
  909. var result = new List();
  910. var cursor = this.head;
  911. while (cursor !== null) {
  912. result.insert(createItem(cursor.data));
  913. cursor = cursor.next;
  914. }
  915. return result;
  916. };
  917. List.prototype.prepend = function(item) {
  918. // head
  919. // ^
  920. // item
  921. this.updateCursors(null, item, this.head, item);
  922. // insert to the beginning of the list
  923. if (this.head !== null) {
  924. // new item <- first item
  925. this.head.prev = item;
  926. // new item -> first item
  927. item.next = this.head;
  928. } else {
  929. // if list has no head, then it also has no tail
  930. // in this case tail points to the new item
  931. this.tail = item;
  932. }
  933. // head always points to new item
  934. this.head = item;
  935. return this;
  936. };
  937. List.prototype.prependData = function(data) {
  938. return this.prepend(createItem(data));
  939. };
  940. List.prototype.append = function(item) {
  941. return this.insert(item);
  942. };
  943. List.prototype.appendData = function(data) {
  944. return this.insert(createItem(data));
  945. };
  946. List.prototype.insert = function(item, before) {
  947. if (before !== undefined && before !== null) {
  948. // prev before
  949. // ^
  950. // item
  951. this.updateCursors(before.prev, item, before, item);
  952. if (before.prev === null) {
  953. // insert to the beginning of list
  954. if (this.head !== before) {
  955. throw new Error('before doesn\'t belong to list');
  956. }
  957. // since head points to before therefore list doesn't empty
  958. // no need to check tail
  959. this.head = item;
  960. before.prev = item;
  961. item.next = before;
  962. this.updateCursors(null, item);
  963. } else {
  964. // insert between two items
  965. before.prev.next = item;
  966. item.prev = before.prev;
  967. before.prev = item;
  968. item.next = before;
  969. }
  970. } else {
  971. // tail
  972. // ^
  973. // item
  974. this.updateCursors(this.tail, item, null, item);
  975. // insert to the ending of the list
  976. if (this.tail !== null) {
  977. // last item -> new item
  978. this.tail.next = item;
  979. // last item <- new item
  980. item.prev = this.tail;
  981. } else {
  982. // if list has no tail, then it also has no head
  983. // in this case head points to new item
  984. this.head = item;
  985. }
  986. // tail always points to new item
  987. this.tail = item;
  988. }
  989. return this;
  990. };
  991. List.prototype.insertData = function(data, before) {
  992. return this.insert(createItem(data), before);
  993. };
  994. List.prototype.remove = function(item) {
  995. // item
  996. // ^
  997. // prev next
  998. this.updateCursors(item, item.prev, item, item.next);
  999. if (item.prev !== null) {
  1000. item.prev.next = item.next;
  1001. } else {
  1002. if (this.head !== item) {
  1003. throw new Error('item doesn\'t belong to list');
  1004. }
  1005. this.head = item.next;
  1006. }
  1007. if (item.next !== null) {
  1008. item.next.prev = item.prev;
  1009. } else {
  1010. if (this.tail !== item) {
  1011. throw new Error('item doesn\'t belong to list');
  1012. }
  1013. this.tail = item.prev;
  1014. }
  1015. item.prev = null;
  1016. item.next = null;
  1017. return item;
  1018. };
  1019. List.prototype.push = function(data) {
  1020. this.insert(createItem(data));
  1021. };
  1022. List.prototype.pop = function() {
  1023. if (this.tail !== null) {
  1024. return this.remove(this.tail);
  1025. }
  1026. };
  1027. List.prototype.unshift = function(data) {
  1028. this.prepend(createItem(data));
  1029. };
  1030. List.prototype.shift = function() {
  1031. if (this.head !== null) {
  1032. return this.remove(this.head);
  1033. }
  1034. };
  1035. List.prototype.prependList = function(list) {
  1036. return this.insertList(list, this.head);
  1037. };
  1038. List.prototype.appendList = function(list) {
  1039. return this.insertList(list);
  1040. };
  1041. List.prototype.insertList = function(list, before) {
  1042. // ignore empty lists
  1043. if (list.head === null) {
  1044. return this;
  1045. }
  1046. if (before !== undefined && before !== null) {
  1047. this.updateCursors(before.prev, list.tail, before, list.head);
  1048. // insert in the middle of dist list
  1049. if (before.prev !== null) {
  1050. // before.prev <-> list.head
  1051. before.prev.next = list.head;
  1052. list.head.prev = before.prev;
  1053. } else {
  1054. this.head = list.head;
  1055. }
  1056. before.prev = list.tail;
  1057. list.tail.next = before;
  1058. } else {
  1059. this.updateCursors(this.tail, list.tail, null, list.head);
  1060. // insert to end of the list
  1061. if (this.tail !== null) {
  1062. // if destination list has a tail, then it also has a head,
  1063. // but head doesn't change
  1064. // dest tail -> source head
  1065. this.tail.next = list.head;
  1066. // dest tail <- source head
  1067. list.head.prev = this.tail;
  1068. } else {
  1069. // if list has no a tail, then it also has no a head
  1070. // in this case points head to new item
  1071. this.head = list.head;
  1072. }
  1073. // tail always start point to new item
  1074. this.tail = list.tail;
  1075. }
  1076. list.head = null;
  1077. list.tail = null;
  1078. return this;
  1079. };
  1080. List.prototype.replace = function(oldItem, newItemOrList) {
  1081. if ('head' in newItemOrList) {
  1082. this.insertList(newItemOrList, oldItem);
  1083. } else {
  1084. this.insert(newItemOrList, oldItem);
  1085. }
  1086. this.remove(oldItem);
  1087. };
  1088. module.exports = List;
  1089. /***/ }),
  1090. /* 8 */
  1091. /***/ (function(module, exports) {
  1092. /* -*- Mode: js; js-indent-level: 2; -*- */
  1093. /*
  1094. * Copyright 2011 Mozilla Foundation and contributors
  1095. * Licensed under the New BSD license. See LICENSE or:
  1096. * http://opensource.org/licenses/BSD-3-Clause
  1097. */
  1098. /**
  1099. * This is a helper function for getting values from parameter/options
  1100. * objects.
  1101. *
  1102. * @param args The object we are extracting values from
  1103. * @param name The name of the property we are getting.
  1104. * @param defaultValue An optional value to return if the property is missing
  1105. * from the object. If this is not specified and the property is missing, an
  1106. * error will be thrown.
  1107. */
  1108. function getArg(aArgs, aName, aDefaultValue) {
  1109. if (aName in aArgs) {
  1110. return aArgs[aName];
  1111. } else if (arguments.length === 3) {
  1112. return aDefaultValue;
  1113. } else {
  1114. throw new Error('"' + aName + '" is a required argument.');
  1115. }
  1116. }
  1117. exports.getArg = getArg;
  1118. var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
  1119. var dataUrlRegexp = /^data:.+\,.+$/;
  1120. function urlParse(aUrl) {
  1121. var match = aUrl.match(urlRegexp);
  1122. if (!match) {
  1123. return null;
  1124. }
  1125. return {
  1126. scheme: match[1],
  1127. auth: match[2],
  1128. host: match[3],
  1129. port: match[4],
  1130. path: match[5]
  1131. };
  1132. }
  1133. exports.urlParse = urlParse;
  1134. function urlGenerate(aParsedUrl) {
  1135. var url = '';
  1136. if (aParsedUrl.scheme) {
  1137. url += aParsedUrl.scheme + ':';
  1138. }
  1139. url += '//';
  1140. if (aParsedUrl.auth) {
  1141. url += aParsedUrl.auth + '@';
  1142. }
  1143. if (aParsedUrl.host) {
  1144. url += aParsedUrl.host;
  1145. }
  1146. if (aParsedUrl.port) {
  1147. url += ":" + aParsedUrl.port
  1148. }
  1149. if (aParsedUrl.path) {
  1150. url += aParsedUrl.path;
  1151. }
  1152. return url;
  1153. }
  1154. exports.urlGenerate = urlGenerate;
  1155. /**
  1156. * Normalizes a path, or the path portion of a URL:
  1157. *
  1158. * - Replaces consecutive slashes with one slash.
  1159. * - Removes unnecessary '.' parts.
  1160. * - Removes unnecessary '<dir>/..' parts.
  1161. *
  1162. * Based on code in the Node.js 'path' core module.
  1163. *
  1164. * @param aPath The path or url to normalize.
  1165. */
  1166. function normalize(aPath) {
  1167. var path = aPath;
  1168. var url = urlParse(aPath);
  1169. if (url) {
  1170. if (!url.path) {
  1171. return aPath;
  1172. }
  1173. path = url.path;
  1174. }
  1175. var isAbsolute = exports.isAbsolute(path);
  1176. var parts = path.split(/\/+/);
  1177. for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
  1178. part = parts[i];
  1179. if (part === '.') {
  1180. parts.splice(i, 1);
  1181. } else if (part === '..') {
  1182. up++;
  1183. } else if (up > 0) {
  1184. if (part === '') {
  1185. // The first part is blank if the path is absolute. Trying to go
  1186. // above the root is a no-op. Therefore we can remove all '..' parts
  1187. // directly after the root.
  1188. parts.splice(i + 1, up);
  1189. up = 0;
  1190. } else {
  1191. parts.splice(i, 2);
  1192. up--;
  1193. }
  1194. }
  1195. }
  1196. path = parts.join('/');
  1197. if (path === '') {
  1198. path = isAbsolute ? '/' : '.';
  1199. }
  1200. if (url) {
  1201. url.path = path;
  1202. return urlGenerate(url);
  1203. }
  1204. return path;
  1205. }
  1206. exports.normalize = normalize;
  1207. /**
  1208. * Joins two paths/URLs.
  1209. *
  1210. * @param aRoot The root path or URL.
  1211. * @param aPath The path or URL to be joined with the root.
  1212. *
  1213. * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
  1214. * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
  1215. * first.
  1216. * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
  1217. * is updated with the result and aRoot is returned. Otherwise the result
  1218. * is returned.
  1219. * - If aPath is absolute, the result is aPath.
  1220. * - Otherwise the two paths are joined with a slash.
  1221. * - Joining for example 'http://' and 'www.example.com' is also supported.
  1222. */
  1223. function join(aRoot, aPath) {
  1224. if (aRoot === "") {
  1225. aRoot = ".";
  1226. }
  1227. if (aPath === "") {
  1228. aPath = ".";
  1229. }
  1230. var aPathUrl = urlParse(aPath);
  1231. var aRootUrl = urlParse(aRoot);
  1232. if (aRootUrl) {
  1233. aRoot = aRootUrl.path || '/';
  1234. }
  1235. // `join(foo, '//www.example.org')`
  1236. if (aPathUrl && !aPathUrl.scheme) {
  1237. if (aRootUrl) {
  1238. aPathUrl.scheme = aRootUrl.scheme;
  1239. }
  1240. return urlGenerate(aPathUrl);
  1241. }
  1242. if (aPathUrl || aPath.match(dataUrlRegexp)) {
  1243. return aPath;
  1244. }
  1245. // `join('http://', 'www.example.com')`
  1246. if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
  1247. aRootUrl.host = aPath;
  1248. return urlGenerate(aRootUrl);
  1249. }
  1250. var joined = aPath.charAt(0) === '/'
  1251. ? aPath
  1252. : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
  1253. if (aRootUrl) {
  1254. aRootUrl.path = joined;
  1255. return urlGenerate(aRootUrl);
  1256. }
  1257. return joined;
  1258. }
  1259. exports.join = join;
  1260. exports.isAbsolute = function (aPath) {
  1261. return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
  1262. };
  1263. /**
  1264. * Make a path relative to a URL or another path.
  1265. *
  1266. * @param aRoot The root path or URL.
  1267. * @param aPath The path or URL to be made relative to aRoot.
  1268. */
  1269. function relative(aRoot, aPath) {
  1270. if (aRoot === "") {
  1271. aRoot = ".";
  1272. }
  1273. aRoot = aRoot.replace(/\/$/, '');
  1274. // It is possible for the path to be above the root. In this case, simply
  1275. // checking whether the root is a prefix of the path won't work. Instead, we
  1276. // need to remove components from the root one by one, until either we find
  1277. // a prefix that fits, or we run out of components to remove.
  1278. var level = 0;
  1279. while (aPath.indexOf(aRoot + '/') !== 0) {
  1280. var index = aRoot.lastIndexOf("/");
  1281. if (index < 0) {
  1282. return aPath;
  1283. }
  1284. // If the only part of the root that is left is the scheme (i.e. http://,
  1285. // file:///, etc.), one or more slashes (/), or simply nothing at all, we
  1286. // have exhausted all components, so the path is not relative to the root.
  1287. aRoot = aRoot.slice(0, index);
  1288. if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
  1289. return aPath;
  1290. }
  1291. ++level;
  1292. }
  1293. // Make sure we add a "../" for each component we removed from the root.
  1294. return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
  1295. }
  1296. exports.relative = relative;
  1297. var supportsNullProto = (function () {
  1298. var obj = Object.create(null);
  1299. return !('__proto__' in obj);
  1300. }());
  1301. function identity (s) {
  1302. return s;
  1303. }
  1304. /**
  1305. * Because behavior goes wacky when you set `__proto__` on objects, we
  1306. * have to prefix all the strings in our set with an arbitrary character.
  1307. *
  1308. * See https://github.com/mozilla/source-map/pull/31 and
  1309. * https://github.com/mozilla/source-map/issues/30
  1310. *
  1311. * @param String aStr
  1312. */
  1313. function toSetString(aStr) {
  1314. if (isProtoString(aStr)) {
  1315. return '$' + aStr;
  1316. }
  1317. return aStr;
  1318. }
  1319. exports.toSetString = supportsNullProto ? identity : toSetString;
  1320. function fromSetString(aStr) {
  1321. if (isProtoString(aStr)) {
  1322. return aStr.slice(1);
  1323. }
  1324. return aStr;
  1325. }
  1326. exports.fromSetString = supportsNullProto ? identity : fromSetString;
  1327. function isProtoString(s) {
  1328. if (!s) {
  1329. return false;
  1330. }
  1331. var length = s.length;
  1332. if (length < 9 /* "__proto__".length */) {
  1333. return false;
  1334. }
  1335. if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
  1336. s.charCodeAt(length - 2) !== 95 /* '_' */ ||
  1337. s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
  1338. s.charCodeAt(length - 4) !== 116 /* 't' */ ||
  1339. s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
  1340. s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
  1341. s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
  1342. s.charCodeAt(length - 8) !== 95 /* '_' */ ||
  1343. s.charCodeAt(length - 9) !== 95 /* '_' */) {
  1344. return false;
  1345. }
  1346. for (var i = length - 10; i >= 0; i--) {
  1347. if (s.charCodeAt(i) !== 36 /* '$' */) {
  1348. return false;
  1349. }
  1350. }
  1351. return true;
  1352. }
  1353. /**
  1354. * Comparator between two mappings where the original positions are compared.
  1355. *
  1356. * Optionally pass in `true` as `onlyCompareGenerated` to consider two
  1357. * mappings with the same original source/line/column, but different generated
  1358. * line and column the same. Useful when searching for a mapping with a
  1359. * stubbed out mapping.
  1360. */
  1361. function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  1362. var cmp = strcmp(mappingA.source, mappingB.source);
  1363. if (cmp !== 0) {
  1364. return cmp;
  1365. }
  1366. cmp = mappingA.originalLine - mappingB.originalLine;
  1367. if (cmp !== 0) {
  1368. return cmp;
  1369. }
  1370. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1371. if (cmp !== 0 || onlyCompareOriginal) {
  1372. return cmp;
  1373. }
  1374. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1375. if (cmp !== 0) {
  1376. return cmp;
  1377. }
  1378. cmp = mappingA.generatedLine - mappingB.generatedLine;
  1379. if (cmp !== 0) {
  1380. return cmp;
  1381. }
  1382. return strcmp(mappingA.name, mappingB.name);
  1383. }
  1384. exports.compareByOriginalPositions = compareByOriginalPositions;
  1385. /**
  1386. * Comparator between two mappings with deflated source and name indices where
  1387. * the generated positions are compared.
  1388. *
  1389. * Optionally pass in `true` as `onlyCompareGenerated` to consider two
  1390. * mappings with the same generated line and column, but different
  1391. * source/name/original line and column the same. Useful when searching for a
  1392. * mapping with a stubbed out mapping.
  1393. */
  1394. function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
  1395. var cmp = mappingA.generatedLine - mappingB.generatedLine;
  1396. if (cmp !== 0) {
  1397. return cmp;
  1398. }
  1399. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1400. if (cmp !== 0 || onlyCompareGenerated) {
  1401. return cmp;
  1402. }
  1403. cmp = strcmp(mappingA.source, mappingB.source);
  1404. if (cmp !== 0) {
  1405. return cmp;
  1406. }
  1407. cmp = mappingA.originalLine - mappingB.originalLine;
  1408. if (cmp !== 0) {
  1409. return cmp;
  1410. }
  1411. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1412. if (cmp !== 0) {
  1413. return cmp;
  1414. }
  1415. return strcmp(mappingA.name, mappingB.name);
  1416. }
  1417. exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
  1418. function strcmp(aStr1, aStr2) {
  1419. if (aStr1 === aStr2) {
  1420. return 0;
  1421. }
  1422. if (aStr1 === null) {
  1423. return 1; // aStr2 !== null
  1424. }
  1425. if (aStr2 === null) {
  1426. return -1; // aStr1 !== null
  1427. }
  1428. if (aStr1 > aStr2) {
  1429. return 1;
  1430. }
  1431. return -1;
  1432. }
  1433. /**
  1434. * Comparator between two mappings with inflated source and name strings where
  1435. * the generated positions are compared.
  1436. */
  1437. function compareByGeneratedPositionsInflated(mappingA, mappingB) {
  1438. var cmp = mappingA.generatedLine - mappingB.generatedLine;
  1439. if (cmp !== 0) {
  1440. return cmp;
  1441. }
  1442. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1443. if (cmp !== 0) {
  1444. return cmp;
  1445. }
  1446. cmp = strcmp(mappingA.source, mappingB.source);
  1447. if (cmp !== 0) {
  1448. return cmp;
  1449. }
  1450. cmp = mappingA.originalLine - mappingB.originalLine;
  1451. if (cmp !== 0) {
  1452. return cmp;
  1453. }
  1454. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1455. if (cmp !== 0) {
  1456. return cmp;
  1457. }
  1458. return strcmp(mappingA.name, mappingB.name);
  1459. }
  1460. exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
  1461. /**
  1462. * Strip any JSON XSSI avoidance prefix from the string (as documented
  1463. * in the source maps specification), and then parse the string as
  1464. * JSON.
  1465. */
  1466. function parseSourceMapInput(str) {
  1467. return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
  1468. }
  1469. exports.parseSourceMapInput = parseSourceMapInput;
  1470. /**
  1471. * Compute the URL of a source given the the source root, the source's
  1472. * URL, and the source map's URL.
  1473. */
  1474. function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
  1475. sourceURL = sourceURL || '';
  1476. if (sourceRoot) {
  1477. // This follows what Chrome does.
  1478. if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
  1479. sourceRoot += '/';
  1480. }
  1481. // The spec says:
  1482. // Line 4: An optional source root, useful for relocating source
  1483. // files on a server or removing repeated values in the
  1484. // “sources” entry. This value is prepended to the individual
  1485. // entries in the “source” field.
  1486. sourceURL = sourceRoot + sourceURL;
  1487. }
  1488. // Historically, SourceMapConsumer did not take the sourceMapURL as
  1489. // a parameter. This mode is still somewhat supported, which is why
  1490. // this code block is conditional. However, it's preferable to pass
  1491. // the source map URL to SourceMapConsumer, so that this function
  1492. // can implement the source URL resolution algorithm as outlined in
  1493. // the spec. This block is basically the equivalent of:
  1494. // new URL(sourceURL, sourceMapURL).toString()
  1495. // ... except it avoids using URL, which wasn't available in the
  1496. // older releases of node still supported by this library.
  1497. //
  1498. // The spec says:
  1499. // If the sources are not absolute URLs after prepending of the
  1500. // “sourceRoot”, the sources are resolved relative to the
  1501. // SourceMap (like resolving script src in a html document).
  1502. if (sourceMapURL) {
  1503. var parsed = urlParse(sourceMapURL);
  1504. if (!parsed) {
  1505. throw new Error("sourceMapURL could not be parsed");
  1506. }
  1507. if (parsed.path) {
  1508. // Strip the last path component, but keep the "/".
  1509. var index = parsed.path.lastIndexOf('/');
  1510. if (index >= 0) {
  1511. parsed.path = parsed.path.substring(0, index + 1);
  1512. }
  1513. }
  1514. sourceURL = join(urlGenerate(parsed), sourceURL);
  1515. }
  1516. return normalize(sourceURL);
  1517. }
  1518. exports.computeSourceURL = computeSourceURL;
  1519. /***/ }),
  1520. /* 9 */
  1521. /***/ (function(module, exports) {
  1522. /* -*- Mode: js; js-indent-level: 2; -*- */
  1523. /*
  1524. * Copyright 2011 Mozilla Foundation and contributors
  1525. * Licensed under the New BSD license. See LICENSE or:
  1526. * http://opensource.org/licenses/BSD-3-Clause
  1527. */
  1528. /**
  1529. * This is a helper function for getting values from parameter/options
  1530. * objects.
  1531. *
  1532. * @param args The object we are extracting values from
  1533. * @param name The name of the property we are getting.
  1534. * @param defaultValue An optional value to return if the property is missing
  1535. * from the object. If this is not specified and the property is missing, an
  1536. * error will be thrown.
  1537. */
  1538. function getArg(aArgs, aName, aDefaultValue) {
  1539. if (aName in aArgs) {
  1540. return aArgs[aName];
  1541. } else if (arguments.length === 3) {
  1542. return aDefaultValue;
  1543. } else {
  1544. throw new Error('"' + aName + '" is a required argument.');
  1545. }
  1546. }
  1547. exports.getArg = getArg;
  1548. var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
  1549. var dataUrlRegexp = /^data:.+\,.+$/;
  1550. function urlParse(aUrl) {
  1551. var match = aUrl.match(urlRegexp);
  1552. if (!match) {
  1553. return null;
  1554. }
  1555. return {
  1556. scheme: match[1],
  1557. auth: match[2],
  1558. host: match[3],
  1559. port: match[4],
  1560. path: match[5]
  1561. };
  1562. }
  1563. exports.urlParse = urlParse;
  1564. function urlGenerate(aParsedUrl) {
  1565. var url = '';
  1566. if (aParsedUrl.scheme) {
  1567. url += aParsedUrl.scheme + ':';
  1568. }
  1569. url += '//';
  1570. if (aParsedUrl.auth) {
  1571. url += aParsedUrl.auth + '@';
  1572. }
  1573. if (aParsedUrl.host) {
  1574. url += aParsedUrl.host;
  1575. }
  1576. if (aParsedUrl.port) {
  1577. url += ":" + aParsedUrl.port
  1578. }
  1579. if (aParsedUrl.path) {
  1580. url += aParsedUrl.path;
  1581. }
  1582. return url;
  1583. }
  1584. exports.urlGenerate = urlGenerate;
  1585. /**
  1586. * Normalizes a path, or the path portion of a URL:
  1587. *
  1588. * - Replaces consecutive slashes with one slash.
  1589. * - Removes unnecessary '.' parts.
  1590. * - Removes unnecessary '<dir>/..' parts.
  1591. *
  1592. * Based on code in the Node.js 'path' core module.
  1593. *
  1594. * @param aPath The path or url to normalize.
  1595. */
  1596. function normalize(aPath) {
  1597. var path = aPath;
  1598. var url = urlParse(aPath);
  1599. if (url) {
  1600. if (!url.path) {
  1601. return aPath;
  1602. }
  1603. path = url.path;
  1604. }
  1605. var isAbsolute = exports.isAbsolute(path);
  1606. var parts = path.split(/\/+/);
  1607. for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
  1608. part = parts[i];
  1609. if (part === '.') {
  1610. parts.splice(i, 1);
  1611. } else if (part === '..') {
  1612. up++;
  1613. } else if (up > 0) {
  1614. if (part === '') {
  1615. // The first part is blank if the path is absolute. Trying to go
  1616. // above the root is a no-op. Therefore we can remove all '..' parts
  1617. // directly after the root.
  1618. parts.splice(i + 1, up);
  1619. up = 0;
  1620. } else {
  1621. parts.splice(i, 2);
  1622. up--;
  1623. }
  1624. }
  1625. }
  1626. path = parts.join('/');
  1627. if (path === '') {
  1628. path = isAbsolute ? '/' : '.';
  1629. }
  1630. if (url) {
  1631. url.path = path;
  1632. return urlGenerate(url);
  1633. }
  1634. return path;
  1635. }
  1636. exports.normalize = normalize;
  1637. /**
  1638. * Joins two paths/URLs.
  1639. *
  1640. * @param aRoot The root path or URL.
  1641. * @param aPath The path or URL to be joined with the root.
  1642. *
  1643. * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
  1644. * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
  1645. * first.
  1646. * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
  1647. * is updated with the result and aRoot is returned. Otherwise the result
  1648. * is returned.
  1649. * - If aPath is absolute, the result is aPath.
  1650. * - Otherwise the two paths are joined with a slash.
  1651. * - Joining for example 'http://' and 'www.example.com' is also supported.
  1652. */
  1653. function join(aRoot, aPath) {
  1654. if (aRoot === "") {
  1655. aRoot = ".";
  1656. }
  1657. if (aPath === "") {
  1658. aPath = ".";
  1659. }
  1660. var aPathUrl = urlParse(aPath);
  1661. var aRootUrl = urlParse(aRoot);
  1662. if (aRootUrl) {
  1663. aRoot = aRootUrl.path || '/';
  1664. }
  1665. // `join(foo, '//www.example.org')`
  1666. if (aPathUrl && !aPathUrl.scheme) {
  1667. if (aRootUrl) {
  1668. aPathUrl.scheme = aRootUrl.scheme;
  1669. }
  1670. return urlGenerate(aPathUrl);
  1671. }
  1672. if (aPathUrl || aPath.match(dataUrlRegexp)) {
  1673. return aPath;
  1674. }
  1675. // `join('http://', 'www.example.com')`
  1676. if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
  1677. aRootUrl.host = aPath;
  1678. return urlGenerate(aRootUrl);
  1679. }
  1680. var joined = aPath.charAt(0) === '/'
  1681. ? aPath
  1682. : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
  1683. if (aRootUrl) {
  1684. aRootUrl.path = joined;
  1685. return urlGenerate(aRootUrl);
  1686. }
  1687. return joined;
  1688. }
  1689. exports.join = join;
  1690. exports.isAbsolute = function (aPath) {
  1691. return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
  1692. };
  1693. /**
  1694. * Make a path relative to a URL or another path.
  1695. *
  1696. * @param aRoot The root path or URL.
  1697. * @param aPath The path or URL to be made relative to aRoot.
  1698. */
  1699. function relative(aRoot, aPath) {
  1700. if (aRoot === "") {
  1701. aRoot = ".";
  1702. }
  1703. aRoot = aRoot.replace(/\/$/, '');
  1704. // It is possible for the path to be above the root. In this case, simply
  1705. // checking whether the root is a prefix of the path won't work. Instead, we
  1706. // need to remove components from the root one by one, until either we find
  1707. // a prefix that fits, or we run out of components to remove.
  1708. var level = 0;
  1709. while (aPath.indexOf(aRoot + '/') !== 0) {
  1710. var index = aRoot.lastIndexOf("/");
  1711. if (index < 0) {
  1712. return aPath;
  1713. }
  1714. // If the only part of the root that is left is the scheme (i.e. http://,
  1715. // file:///, etc.), one or more slashes (/), or simply nothing at all, we
  1716. // have exhausted all components, so the path is not relative to the root.
  1717. aRoot = aRoot.slice(0, index);
  1718. if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
  1719. return aPath;
  1720. }
  1721. ++level;
  1722. }
  1723. // Make sure we add a "../" for each component we removed from the root.
  1724. return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
  1725. }
  1726. exports.relative = relative;
  1727. var supportsNullProto = (function () {
  1728. var obj = Object.create(null);
  1729. return !('__proto__' in obj);
  1730. }());
  1731. function identity (s) {
  1732. return s;
  1733. }
  1734. /**
  1735. * Because behavior goes wacky when you set `__proto__` on objects, we
  1736. * have to prefix all the strings in our set with an arbitrary character.
  1737. *
  1738. * See https://github.com/mozilla/source-map/pull/31 and
  1739. * https://github.com/mozilla/source-map/issues/30
  1740. *
  1741. * @param String aStr
  1742. */
  1743. function toSetString(aStr) {
  1744. if (isProtoString(aStr)) {
  1745. return '$' + aStr;
  1746. }
  1747. return aStr;
  1748. }
  1749. exports.toSetString = supportsNullProto ? identity : toSetString;
  1750. function fromSetString(aStr) {
  1751. if (isProtoString(aStr)) {
  1752. return aStr.slice(1);
  1753. }
  1754. return aStr;
  1755. }
  1756. exports.fromSetString = supportsNullProto ? identity : fromSetString;
  1757. function isProtoString(s) {
  1758. if (!s) {
  1759. return false;
  1760. }
  1761. var length = s.length;
  1762. if (length < 9 /* "__proto__".length */) {
  1763. return false;
  1764. }
  1765. if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
  1766. s.charCodeAt(length - 2) !== 95 /* '_' */ ||
  1767. s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
  1768. s.charCodeAt(length - 4) !== 116 /* 't' */ ||
  1769. s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
  1770. s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
  1771. s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
  1772. s.charCodeAt(length - 8) !== 95 /* '_' */ ||
  1773. s.charCodeAt(length - 9) !== 95 /* '_' */) {
  1774. return false;
  1775. }
  1776. for (var i = length - 10; i >= 0; i--) {
  1777. if (s.charCodeAt(i) !== 36 /* '$' */) {
  1778. return false;
  1779. }
  1780. }
  1781. return true;
  1782. }
  1783. /**
  1784. * Comparator between two mappings where the original positions are compared.
  1785. *
  1786. * Optionally pass in `true` as `onlyCompareGenerated` to consider two
  1787. * mappings with the same original source/line/column, but different generated
  1788. * line and column the same. Useful when searching for a mapping with a
  1789. * stubbed out mapping.
  1790. */
  1791. function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  1792. var cmp = mappingA.source - mappingB.source;
  1793. if (cmp !== 0) {
  1794. return cmp;
  1795. }
  1796. cmp = mappingA.originalLine - mappingB.originalLine;
  1797. if (cmp !== 0) {
  1798. return cmp;
  1799. }
  1800. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1801. if (cmp !== 0 || onlyCompareOriginal) {
  1802. return cmp;
  1803. }
  1804. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1805. if (cmp !== 0) {
  1806. return cmp;
  1807. }
  1808. cmp = mappingA.generatedLine - mappingB.generatedLine;
  1809. if (cmp !== 0) {
  1810. return cmp;
  1811. }
  1812. return mappingA.name - mappingB.name;
  1813. }
  1814. exports.compareByOriginalPositions = compareByOriginalPositions;
  1815. /**
  1816. * Comparator between two mappings with deflated source and name indices where
  1817. * the generated positions are compared.
  1818. *
  1819. * Optionally pass in `true` as `onlyCompareGenerated` to consider two
  1820. * mappings with the same generated line and column, but different
  1821. * source/name/original line and column the same. Useful when searching for a
  1822. * mapping with a stubbed out mapping.
  1823. */
  1824. function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
  1825. var cmp = mappingA.generatedLine - mappingB.generatedLine;
  1826. if (cmp !== 0) {
  1827. return cmp;
  1828. }
  1829. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1830. if (cmp !== 0 || onlyCompareGenerated) {
  1831. return cmp;
  1832. }
  1833. cmp = mappingA.source - mappingB.source;
  1834. if (cmp !== 0) {
  1835. return cmp;
  1836. }
  1837. cmp = mappingA.originalLine - mappingB.originalLine;
  1838. if (cmp !== 0) {
  1839. return cmp;
  1840. }
  1841. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1842. if (cmp !== 0) {
  1843. return cmp;
  1844. }
  1845. return mappingA.name - mappingB.name;
  1846. }
  1847. exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
  1848. function strcmp(aStr1, aStr2) {
  1849. if (aStr1 === aStr2) {
  1850. return 0;
  1851. }
  1852. if (aStr1 > aStr2) {
  1853. return 1;
  1854. }
  1855. return -1;
  1856. }
  1857. /**
  1858. * Comparator between two mappings with inflated source and name strings where
  1859. * the generated positions are compared.
  1860. */
  1861. function compareByGeneratedPositionsInflated(mappingA, mappingB) {
  1862. var cmp = mappingA.generatedLine - mappingB.generatedLine;
  1863. if (cmp !== 0) {
  1864. return cmp;
  1865. }
  1866. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  1867. if (cmp !== 0) {
  1868. return cmp;
  1869. }
  1870. cmp = strcmp(mappingA.source, mappingB.source);
  1871. if (cmp !== 0) {
  1872. return cmp;
  1873. }
  1874. cmp = mappingA.originalLine - mappingB.originalLine;
  1875. if (cmp !== 0) {
  1876. return cmp;
  1877. }
  1878. cmp = mappingA.originalColumn - mappingB.originalColumn;
  1879. if (cmp !== 0) {
  1880. return cmp;
  1881. }
  1882. return strcmp(mappingA.name, mappingB.name);
  1883. }
  1884. exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
  1885. /***/ }),
  1886. /* 10 */
  1887. /***/ (function(module, exports, __webpack_require__) {
  1888. /* WEBPACK VAR INJECTION */(function(global) {const path = __webpack_require__(3)
  1889. const compilerName = 'miniprogram-compiler' // 为了在 webpack 构建打包时不被分析出此依赖
  1890. let env = 'nodejs'
  1891. let fs = null
  1892. let compiler = null
  1893. let runJs = null // 执行 js
  1894. /**
  1895. * 获取当前环境
  1896. */
  1897. function getEnv() {
  1898. return env
  1899. }
  1900. /**
  1901. * 设置 nodejs 环境
  1902. */
  1903. function setNodeJsEnv() {
  1904. env = 'nodejs'
  1905. fs = __webpack_require__(71)
  1906. // eslint-disable-next-line import/no-dynamic-require
  1907. compiler = __webpack_require__(14)(compilerName)
  1908. runJs = filePath => {
  1909. // eslint-disable-next-line import/no-dynamic-require
  1910. __webpack_require__(14)(filePath)
  1911. delete __webpack_require__.c[/*require.resolve*/(__webpack_require__(14).resolve(filePath))]
  1912. }
  1913. }
  1914. /**
  1915. * 设置浏览器环境
  1916. */
  1917. function setBrowserEnv() {
  1918. env = 'browser'
  1919. fs = {
  1920. readFileSync(filePath) {
  1921. const fileMap = window.__FILE_MAP__ || {}
  1922. if (fileMap[filePath]) {
  1923. return fileMap[filePath]
  1924. } else if (filePath[0] === '/') {
  1925. // path.resolve 可能会加上 /,在 windows 下会有问题
  1926. return fileMap[filePath.substr(1)] || null
  1927. }
  1928. return null
  1929. }
  1930. }
  1931. window.require = runJs = filePath => {
  1932. const content = fs.readFileSync(filePath + '.js')
  1933. if (content) {
  1934. // eslint-disable-next-line no-new-func
  1935. const func = new Function('require', 'module', content)
  1936. const mod = {exports: {}} // modules
  1937. func.call(null, relativePath => {
  1938. const realPath = path.join(path.dirname(filePath), relativePath)
  1939. return window.require(realPath)
  1940. }, mod)
  1941. return mod.exports
  1942. }
  1943. return null
  1944. }
  1945. }
  1946. try {
  1947. if (typeof global === 'object' && typeof process === 'object') {
  1948. // nodejs
  1949. setNodeJsEnv()
  1950. } else {
  1951. // 浏览器
  1952. setBrowserEnv()
  1953. }
  1954. } catch (err) {
  1955. // 浏览器
  1956. setBrowserEnv()
  1957. }
  1958. /**
  1959. * 读取文件
  1960. */
  1961. function readFile(filePath) {
  1962. try {
  1963. return fs.readFileSync(filePath, 'utf8')
  1964. } catch (err) {
  1965. return null
  1966. }
  1967. }
  1968. /**
  1969. * 读取 json
  1970. */
  1971. function readJson(filePath) {
  1972. try {
  1973. const content = readFile(filePath)
  1974. return JSON.parse(content)
  1975. } catch (err) {
  1976. return null
  1977. }
  1978. }
  1979. /**
  1980. * 转换 rpx 单位为 px 单位
  1981. */
  1982. function transformRpx(style) {
  1983. return style.replace(/(\d+)rpx/ig, '$1px')
  1984. }
  1985. /**
  1986. * 获取 wxml、wxss 编译器
  1987. */
  1988. function getCompiler() {
  1989. return compiler
  1990. }
  1991. /**
  1992. * 获取随机 id
  1993. */
  1994. let seed = +new Date()
  1995. const charString = 'abcdefghij'
  1996. function getId() {
  1997. const id = ++seed
  1998. return id.toString().split('').map(item => charString[+item]).join('')
  1999. }
  2000. /**
  2001. * 判断是否是绝对路径
  2002. */
  2003. function isAbsolute(input) {
  2004. if (typeof input !== 'string') return false
  2005. if (!input.length) return false
  2006. return /^(\/|\\|([a-zA-Z]:[/\\]))/.test(input)
  2007. }
  2008. module.exports = {
  2009. getEnv,
  2010. setNodeJsEnv,
  2011. setBrowserEnv,
  2012. runJs,
  2013. readFile,
  2014. readJson,
  2015. transformRpx,
  2016. getCompiler,
  2017. getId,
  2018. isAbsolute,
  2019. }
  2020. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  2021. /***/ }),
  2022. /* 11 */
  2023. /***/ (function(module, exports) {
  2024. var OMIT_PLUSSIGN = /^(?:\+|(-))?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
  2025. var KEEP_PLUSSIGN = /^([\+\-])?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
  2026. var unsafeToRemovePlusSignAfter = {
  2027. Dimension: true,
  2028. HexColor: true,
  2029. Identifier: true,
  2030. Number: true,
  2031. Raw: true,
  2032. UnicodeRange: true
  2033. };
  2034. function packNumber(value, item) {
  2035. // omit plus sign only if no prev or prev is safe type
  2036. var regexp = item && item.prev !== null && unsafeToRemovePlusSignAfter.hasOwnProperty(item.prev.data.type)
  2037. ? KEEP_PLUSSIGN
  2038. : OMIT_PLUSSIGN;
  2039. // 100 -> '100'
  2040. // 00100 -> '100'
  2041. // +100 -> '100' (only when safe, e.g. omitting plus sign for 1px+1px leads to single dimension instead of two)
  2042. // -100 -> '-100'
  2043. // 0.123 -> '.123'
  2044. // 0.12300 -> '.123'
  2045. // 0.0 -> ''
  2046. // 0 -> ''
  2047. // -0 -> '-'
  2048. value = String(value).replace(regexp, '$1$2$3');
  2049. if (value === '' || value === '-') {
  2050. value = '0';
  2051. }
  2052. return value;
  2053. }
  2054. module.exports = function(node, item) {
  2055. node.value = packNumber(node.value, item);
  2056. };
  2057. module.exports.pack = packNumber;
  2058. /***/ }),
  2059. /* 12 */
  2060. /***/ (function(module, exports) {
  2061. /**
  2062. * 异步方法通用部分
  2063. */
  2064. function runInAsync(options, res) {
  2065. setTimeout(() => {
  2066. if (res.errMsg.indexOf(':ok') >= 0 && typeof options.success === 'function') options.success(res)
  2067. if (res.errMsg.indexOf(':fail') >= 0 && typeof options.fail === 'function') options.fail(res)
  2068. if (typeof options.complete === 'function') options.complete(res)
  2069. }, 0)
  2070. }
  2071. /**
  2072. * 计算字符串字节数
  2073. */
  2074. function getSize(string) {
  2075. let total = 0
  2076. for (let i = 0, len = string.length; i < len; i++) {
  2077. const charCode = string.charCodeAt(i)
  2078. if (charCode <= 0x007f) {
  2079. total += 1
  2080. } else if (charCode <= 0x07ff) {
  2081. total += 2
  2082. } else if (charCode <= 0xffff) {
  2083. total += 3
  2084. } else {
  2085. total += 4
  2086. }
  2087. }
  2088. return total
  2089. }
  2090. /**
  2091. * 快速模拟同步接口
  2092. */
  2093. function mockSync(ret) {
  2094. return () => ret
  2095. }
  2096. /**
  2097. * 快速模拟异步接口
  2098. */
  2099. function mockAsync(name) {
  2100. return (options = {}) => {
  2101. const res = {
  2102. errMsg: `${name}:ok`,
  2103. }
  2104. runInAsync(options, res)
  2105. }
  2106. }
  2107. module.exports = {
  2108. runInAsync,
  2109. getSize,
  2110. mockSync,
  2111. mockAsync,
  2112. }
  2113. /***/ }),
  2114. /* 13 */
  2115. /***/ (function(module, exports, __webpack_require__) {
  2116. const exparser = __webpack_require__(4)
  2117. const CONSTANT = __webpack_require__(6)
  2118. const _ = __webpack_require__(5)
  2119. const transitionKeys = ['transition', 'transitionProperty', 'transform', 'transformOrigin', 'webkitTransition', 'webkitTransitionProperty', 'webkitTransform', 'webkitTransformOrigin']
  2120. /**
  2121. * 更新 exparser 节点的属性
  2122. */
  2123. function updateAttrs(exparserNode, attrs) {
  2124. const isComponentNode = exparserNode instanceof exparser.Component
  2125. const dataProxy = exparser.Component.getDataProxy(exparserNode)
  2126. let needDoUpdate = false
  2127. exparserNode.dataset = exparserNode.dataset || {}
  2128. for (const {name, value} of attrs) {
  2129. if (name === 'id' || name === 'slot' || (isComponentNode && name === 'class')) {
  2130. // 普通属性
  2131. exparserNode[name] = value || ''
  2132. } else if (isComponentNode && name === 'style' && exparserNode.$$) {
  2133. // style
  2134. let animationStyle = exparserNode.__animationStyle || {}
  2135. animationStyle = transitionKeys.map(key => {
  2136. const styleValue = animationStyle[key.replace('webkitT', 't')]
  2137. return styleValue !== undefined ? `${_.camelToDashCase(key)}:${styleValue}` : ''
  2138. }).filter(item => !!item.trim()).join(';')
  2139. exparserNode.setNodeStyle(_.transformRpx(value || '', true) + animationStyle)
  2140. } else if (isComponentNode && exparser.Component.hasPublicProperty(exparserNode, _.dashToCamelCase(name))) {
  2141. // public 属性,延迟处理
  2142. dataProxy.scheduleReplace([_.dashToCamelCase(name)], value)
  2143. needDoUpdate = true
  2144. } else if (/^data-/.test(name)) {
  2145. // dataset
  2146. exparserNode.dataset[_.dashToCamelCase(name.slice(5).toLowerCase())] = value
  2147. exparserNode.setAttribute(name, value)
  2148. } else if (isComponentNode && name === 'animation') {
  2149. // 动画
  2150. if (exparserNode.$$ && value && value.actions && value.actions.length > 0) {
  2151. let index = 0
  2152. const actions = value.actions
  2153. const length = actions.length
  2154. const step = function () {
  2155. if (index < length) {
  2156. const styleObject = _.animationToStyle(actions[index])
  2157. const extraStyle = styleObject.style
  2158. transitionKeys.forEach(key => {
  2159. exparserNode.$$.style[key] = styleObject[key.replace('webkitT', 't')]
  2160. })
  2161. Object.keys(extraStyle).forEach(key => {
  2162. exparserNode.$$.style[key] = _.transformRpx(extraStyle[key])
  2163. })
  2164. exparserNode.__animationStyle = styleObject
  2165. }
  2166. }
  2167. exparserNode.addListener('transitionend', () => {
  2168. index += 1
  2169. step()
  2170. })
  2171. step()
  2172. }
  2173. } else if (isComponentNode && exparserNode.hasExternalClass(_.camelToDashCase(name))) {
  2174. // 外部样式类
  2175. exparserNode.setExternalClass(_.camelToDashCase(name), value)
  2176. }
  2177. }
  2178. if (needDoUpdate) dataProxy.doUpdates(true)
  2179. }
  2180. /**
  2181. * 更新 exparser 节点的事件监听
  2182. */
  2183. function updateEvent(exparserNode, event) {
  2184. const convertEventTarget = (target, currentTarget) => {
  2185. if (currentTarget && (target instanceof exparser.VirtualNode) && !target.id && !Object.keys(target.dataset).length) {
  2186. // 如果 target 是 slot 且 slot 未设置 id 和 dataset,则兼容以前的逻辑:target === currentTarget
  2187. target = currentTarget
  2188. }
  2189. return {
  2190. id: target.id,
  2191. offsetLeft: target.$$ && target.$$.offsetLeft || 0,
  2192. offsetTop: target.$$ && target.$$.offsetTop || 0,
  2193. dataset: target.dataset,
  2194. }
  2195. }
  2196. Object.keys(event).forEach(key => {
  2197. const {
  2198. name, isCapture, isMutated, isCatch, handler
  2199. } = event[key]
  2200. if (!handler) return
  2201. event[key].id = exparser.addListenerToElement(exparserNode, name, function (evt) {
  2202. const shadowRoot = exparserNode.ownerShadowRoot
  2203. const mutatedMarked = evt.mutatedMarked()
  2204. if (isMutated && evt.mutatedMarked()) return // 已经被标记为互斥的事件,不再触发 mut- 绑定的事件回调
  2205. if (isMutated) evt.markMutated()
  2206. if (shadowRoot) {
  2207. const host = shadowRoot.getHostNode()
  2208. const writeOnly = exparser.Component.getComponentOptions(host).writeOnly
  2209. if (!writeOnly) {
  2210. const caller = exparser.Element.getMethodCaller(host)
  2211. if (typeof caller[handler] === 'function') {
  2212. caller[handler]({
  2213. type: evt.type,
  2214. timeStamp: evt.timeStamp,
  2215. target: convertEventTarget(evt.target, this),
  2216. currentTarget: convertEventTarget(this, null),
  2217. detail: evt.detail,
  2218. touches: evt.touches,
  2219. changedTouches: evt.changedTouches,
  2220. mut: mutatedMarked,
  2221. })
  2222. }
  2223. }
  2224. }
  2225. if (isCatch) return false
  2226. }, {capture: isCapture})
  2227. })
  2228. }
  2229. /**
  2230. * 渲染成 exparser 节点
  2231. */
  2232. function renderExparserNode(options, shadowRootHost, shadowRoot) {
  2233. const type = options.type
  2234. const tagName = options.tagName
  2235. const componentId = options.componentId
  2236. let exparserNode
  2237. if (type === CONSTANT.TYPE_TEXT) {
  2238. exparserNode = shadowRoot.createTextNode(options.content) // save exparser node
  2239. } else {
  2240. if (type === CONSTANT.TYPE_ROOT) {
  2241. shadowRoot = exparser.ShadowRoot.create(shadowRootHost)
  2242. exparserNode = shadowRoot
  2243. } else if (type === CONSTANT.TYPE_SLOT) {
  2244. exparserNode = shadowRoot.createVirtualNode(tagName)
  2245. exparser.Element.setSlotName(exparserNode, options.slotName)
  2246. } else if (type === CONSTANT.TYPE_TEMPLATE || type === CONSTANT.TYPE_IF || type === CONSTANT.TYPE_FOR || type === CONSTANT.TYPE_FORITEM) {
  2247. exparserNode = shadowRoot.createVirtualNode(tagName)
  2248. exparser.Element.setInheritSlots(exparserNode)
  2249. } else {
  2250. const componentTagName = _.getTagName(componentId || tagName) || tagName
  2251. const componentName = componentId || tagName
  2252. exparserNode = shadowRoot.createComponent(componentTagName, componentName, options.generics)
  2253. }
  2254. updateAttrs(exparserNode, options.attrs)
  2255. updateEvent(exparserNode, options.event)
  2256. // children
  2257. options.children.forEach(vt => {
  2258. const childExparserNode = renderExparserNode(vt, null, shadowRoot)
  2259. exparserNode.appendChild(childExparserNode)
  2260. })
  2261. }
  2262. options.exparserNode = exparserNode // 保存 exparser node
  2263. exparserNode._vt = options
  2264. return exparserNode
  2265. }
  2266. module.exports = {
  2267. updateAttrs,
  2268. updateEvent,
  2269. renderExparserNode,
  2270. }
  2271. /***/ }),
  2272. /* 14 */
  2273. /***/ (function(module, exports) {
  2274. function webpackEmptyContext(req) {
  2275. var e = new Error("Cannot find module '" + req + "'");
  2276. e.code = 'MODULE_NOT_FOUND';
  2277. throw e;
  2278. }
  2279. webpackEmptyContext.keys = function() { return []; };
  2280. webpackEmptyContext.resolve = webpackEmptyContext;
  2281. module.exports = webpackEmptyContext;
  2282. webpackEmptyContext.id = 14;
  2283. /***/ }),
  2284. /* 15 */
  2285. /***/ (function(module, exports, __webpack_require__) {
  2286. "use strict";
  2287. exports.__esModule = true;
  2288. exports.default = void 0;
  2289. var _node = _interopRequireDefault(__webpack_require__(16));
  2290. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2291. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  2292. /**
  2293. * Represents a CSS declaration.
  2294. *
  2295. * @extends Node
  2296. *
  2297. * @example
  2298. * const root = postcss.parse('a { color: black }')
  2299. * const decl = root.first.first
  2300. * decl.type //=> 'decl'
  2301. * decl.toString() //=> ' color: black'
  2302. */
  2303. var Declaration = /*#__PURE__*/function (_Node) {
  2304. _inheritsLoose(Declaration, _Node);
  2305. function Declaration(defaults) {
  2306. var _this;
  2307. _this = _Node.call(this, defaults) || this;
  2308. _this.type = 'decl';
  2309. return _this;
  2310. }
  2311. /**
  2312. * @memberof Declaration#
  2313. * @member {string} prop The declaration’s property name.
  2314. *
  2315. * @example
  2316. * const root = postcss.parse('a { color: black }')
  2317. * const decl = root.first.first
  2318. * decl.prop //=> 'color'
  2319. */
  2320. /**
  2321. * @memberof Declaration#
  2322. * @member {string} value The declaration’s value.
  2323. *
  2324. * @example
  2325. * const root = postcss.parse('a { color: black }')
  2326. * const decl = root.first.first
  2327. * decl.value //=> 'black'
  2328. */
  2329. /**
  2330. * @memberof Declaration#
  2331. * @member {boolean} important `true` if the declaration
  2332. * has an !important annotation.
  2333. *
  2334. * @example
  2335. * const root = postcss.parse('a { color: black !important; color: red }')
  2336. * root.first.first.important //=> true
  2337. * root.first.last.important //=> undefined
  2338. */
  2339. /**
  2340. * @memberof Declaration#
  2341. * @member {object} raws Information to generate byte-to-byte equal
  2342. * node string as it was in the origin input.
  2343. *
  2344. * Every parser saves its own properties,
  2345. * but the default CSS parser uses:
  2346. *
  2347. * * `before`: the space symbols before the node. It also stores `*`
  2348. * and `_` symbols before the declaration (IE hack).
  2349. * * `between`: the symbols between the property and value
  2350. * for declarations.
  2351. * * `important`: the content of the important statement,
  2352. * if it is not just `!important`.
  2353. *
  2354. * PostCSS cleans declaration from comments and extra spaces,
  2355. * but it stores origin content in raws properties.
  2356. * As such, if you don’t change a declaration’s value,
  2357. * PostCSS will use the raw value with comments.
  2358. *
  2359. * @example
  2360. * const root = postcss.parse('a {\n color:black\n}')
  2361. * root.first.first.raws //=> { before: '\n ', between: ':' }
  2362. */
  2363. return Declaration;
  2364. }(_node.default);
  2365. var _default = Declaration;
  2366. exports.default = _default;
  2367. module.exports = exports.default;
  2368. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlY2xhcmF0aW9uLmVzNiJdLCJuYW1lcyI6WyJEZWNsYXJhdGlvbiIsImRlZmF1bHRzIiwidHlwZSIsIk5vZGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7OztBQUVBOzs7Ozs7Ozs7OztJQVdNQSxXOzs7QUFDSix1QkFBYUMsUUFBYixFQUF1QjtBQUFBOztBQUNyQiw2QkFBTUEsUUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxNQUFaO0FBRnFCO0FBR3RCO0FBRUQ7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7OztBQVdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFyQ3dCQyxhOztlQStEWEgsVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBOb2RlIGZyb20gJy4vbm9kZSdcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ1NTIGRlY2xhcmF0aW9uLlxuICpcbiAqIEBleHRlbmRzIE5vZGVcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2EgeyBjb2xvcjogYmxhY2sgfScpXG4gKiBjb25zdCBkZWNsID0gcm9vdC5maXJzdC5maXJzdFxuICogZGVjbC50eXBlICAgICAgIC8vPT4gJ2RlY2wnXG4gKiBkZWNsLnRvU3RyaW5nKCkgLy89PiAnIGNvbG9yOiBibGFjaydcbiAqL1xuY2xhc3MgRGVjbGFyYXRpb24gZXh0ZW5kcyBOb2RlIHtcbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ2RlY2wnXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgKiBAbWVtYmVyIHtzdHJpbmd9IHByb3AgVGhlIGRlY2xhcmF0aW9u4oCZcyBwcm9wZXJ0eSBuYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjayB9JylcbiAgICogY29uc3QgZGVjbCA9IHJvb3QuZmlyc3QuZmlyc3RcbiAgICogZGVjbC5wcm9wIC8vPT4gJ2NvbG9yJ1xuICAgKi9cblxuICAvKipcbiAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgKiBAbWVtYmVyIHtzdHJpbmd9IHZhbHVlIFRoZSBkZWNsYXJhdGlvbuKAmXMgdmFsdWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhIHsgY29sb3I6IGJsYWNrIH0nKVxuICAgKiBjb25zdCBkZWNsID0gcm9vdC5maXJzdC5maXJzdFxuICAgKiBkZWNsLnZhbHVlIC8vPT4gJ2JsYWNrJ1xuICAgKi9cblxuICAvKipcbiAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgKiBAbWVtYmVyIHtib29sZWFufSBpbXBvcnRhbnQgYHRydWVgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGFuICFpbXBvcnRhbnQgYW5ub3RhdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2EgeyBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgY29sb3I6IHJlZCB9JylcbiAgICogcm9vdC5maXJzdC5maXJzdC5pbXBvcnRhbnQgLy89PiB0cnVlXG4gICAqIHJvb3QuZmlyc3QubGFzdC5pbXBvcnRhbnQgIC8vPT4gdW5kZWZpbmVkXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgRGVjbGFyYXRpb24jXG4gICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgKlxuICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgKlxuICAgKiAqIGBiZWZvcmVgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZWZvcmUgdGhlIG5vZGUuIEl0IGFsc28gc3RvcmVzIGAqYFxuICAgKiAgIGFuZCBgX2Agc3ltYm9scyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIChJRSBoYWNrKS5cbiAgICogKiBgYmV0d2VlbmA6IHRoZSBzeW1ib2xzIGJldHdlZW4gdGhlIHByb3BlcnR5IGFuZCB2YWx1ZVxuICAgKiAgIGZvciBkZWNsYXJhdGlvbnMuXG4gICAqICogYGltcG9ydGFudGA6IHRoZSBjb250ZW50IG9mIHRoZSBpbXBvcnRhbnQgc3RhdGVtZW50LFxuICAgKiAgIGlmIGl0IGlzIG5vdCBqdXN0IGAhaW1wb3J0YW50YC5cbiAgICpcbiAgICogUG9zdENTUyBjbGVhbnMgZGVjbGFyYXRpb24gZnJvbSBjb21tZW50cyBhbmQgZXh0cmEgc3BhY2VzLFxuICAgKiBidXQgaXQgc3RvcmVzIG9yaWdpbiBjb250ZW50IGluIHJhd3MgcHJvcGVydGllcy5cbiAgICogQXMgc3VjaCwgaWYgeW91IGRvbuKAmXQgY2hhbmdlIGEgZGVjbGFyYXRpb27igJlzIHZhbHVlLFxuICAgKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSByYXcgdmFsdWUgd2l0aCBjb21tZW50cy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2Ege1xcbiAgY29sb3I6YmxhY2tcXG59JylcbiAgICogcm9vdC5maXJzdC5maXJzdC5yYXdzIC8vPT4geyBiZWZvcmU6ICdcXG4gICcsIGJldHdlZW46ICc6JyB9XG4gICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBEZWNsYXJhdGlvblxuIl0sImZpbGUiOiJkZWNsYXJhdGlvbi5qcyJ9
  2369. /***/ }),
  2370. /* 16 */
  2371. /***/ (function(module, exports, __webpack_require__) {
  2372. "use strict";
  2373. exports.__esModule = true;
  2374. exports.default = void 0;
  2375. var _cssSyntaxError = _interopRequireDefault(__webpack_require__(34));
  2376. var _stringifier = _interopRequireDefault(__webpack_require__(35));
  2377. var _stringify = _interopRequireDefault(__webpack_require__(17));
  2378. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2379. function cloneNode(obj, parent) {
  2380. var cloned = new obj.constructor();
  2381. for (var i in obj) {
  2382. if (!obj.hasOwnProperty(i)) continue;
  2383. var value = obj[i];
  2384. var type = typeof value;
  2385. if (i === 'parent' && type === 'object') {
  2386. if (parent) cloned[i] = parent;
  2387. } else if (i === 'source') {
  2388. cloned[i] = value;
  2389. } else if (value instanceof Array) {
  2390. cloned[i] = value.map(function (j) {
  2391. return cloneNode(j, cloned);
  2392. });
  2393. } else {
  2394. if (type === 'object' && value !== null) value = cloneNode(value);
  2395. cloned[i] = value;
  2396. }
  2397. }
  2398. return cloned;
  2399. }
  2400. /**
  2401. * All node classes inherit the following common methods.
  2402. *
  2403. * @abstract
  2404. */
  2405. var Node = /*#__PURE__*/function () {
  2406. /**
  2407. * @param {object} [defaults] Value for node properties.
  2408. */
  2409. function Node(defaults) {
  2410. if (defaults === void 0) {
  2411. defaults = {};
  2412. }
  2413. this.raws = {};
  2414. if (false) {}
  2415. for (var name in defaults) {
  2416. this[name] = defaults[name];
  2417. }
  2418. }
  2419. /**
  2420. * Returns a `CssSyntaxError` instance containing the original position
  2421. * of the node in the source, showing line and column numbers and also
  2422. * a small excerpt to facilitate debugging.
  2423. *
  2424. * If present, an input source map will be used to get the original position
  2425. * of the source, even from a previous compilation step
  2426. * (e.g., from Sass compilation).
  2427. *
  2428. * This method produces very useful error messages.
  2429. *
  2430. * @param {string} message Error description.
  2431. * @param {object} [opts] Options.
  2432. * @param {string} opts.plugin Plugin name that created this error.
  2433. * PostCSS will set it automatically.
  2434. * @param {string} opts.word A word inside a node’s string that should
  2435. * be highlighted as the source of the error.
  2436. * @param {number} opts.index An index inside a node’s string that should
  2437. * be highlighted as the source of the error.
  2438. *
  2439. * @return {CssSyntaxError} Error object to throw it.
  2440. *
  2441. * @example
  2442. * if (!variables[name]) {
  2443. * throw decl.error('Unknown variable ' + name, { word: name })
  2444. * // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black
  2445. * // color: $black
  2446. * // a
  2447. * // ^
  2448. * // background: white
  2449. * }
  2450. */
  2451. var _proto = Node.prototype;
  2452. _proto.error = function error(message, opts) {
  2453. if (opts === void 0) {
  2454. opts = {};
  2455. }
  2456. if (this.source) {
  2457. var pos = this.positionBy(opts);
  2458. return this.source.input.error(message, pos.line, pos.column, opts);
  2459. }
  2460. return new _cssSyntaxError.default(message);
  2461. }
  2462. /**
  2463. * This method is provided as a convenience wrapper for {@link Result#warn}.
  2464. *
  2465. * @param {Result} result The {@link Result} instance
  2466. * that will receive the warning.
  2467. * @param {string} text Warning message.
  2468. * @param {object} [opts] Options
  2469. * @param {string} opts.plugin Plugin name that created this warning.
  2470. * PostCSS will set it automatically.
  2471. * @param {string} opts.word A word inside a node’s string that should
  2472. * be highlighted as the source of the warning.
  2473. * @param {number} opts.index An index inside a node’s string that should
  2474. * be highlighted as the source of the warning.
  2475. *
  2476. * @return {Warning} Created warning object.
  2477. *
  2478. * @example
  2479. * const plugin = postcss.plugin('postcss-deprecated', () => {
  2480. * return (root, result) => {
  2481. * root.walkDecls('bad', decl => {
  2482. * decl.warn(result, 'Deprecated property bad')
  2483. * })
  2484. * }
  2485. * })
  2486. */
  2487. ;
  2488. _proto.warn = function warn(result, text, opts) {
  2489. var data = {
  2490. node: this
  2491. };
  2492. for (var i in opts) {
  2493. data[i] = opts[i];
  2494. }
  2495. return result.warn(text, data);
  2496. }
  2497. /**
  2498. * Removes the node from its parent and cleans the parent properties
  2499. * from the node and its children.
  2500. *
  2501. * @example
  2502. * if (decl.prop.match(/^-webkit-/)) {
  2503. * decl.remove()
  2504. * }
  2505. *
  2506. * @return {Node} Node to make calls chain.
  2507. */
  2508. ;
  2509. _proto.remove = function remove() {
  2510. if (this.parent) {
  2511. this.parent.removeChild(this);
  2512. }
  2513. this.parent = undefined;
  2514. return this;
  2515. }
  2516. /**
  2517. * Returns a CSS string representing the node.
  2518. *
  2519. * @param {stringifier|syntax} [stringifier] A syntax to use
  2520. * in string generation.
  2521. *
  2522. * @return {string} CSS string of this node.
  2523. *
  2524. * @example
  2525. * postcss.rule({ selector: 'a' }).toString() //=> "a {}"
  2526. */
  2527. ;
  2528. _proto.toString = function toString(stringifier) {
  2529. if (stringifier === void 0) {
  2530. stringifier = _stringify.default;
  2531. }
  2532. if (stringifier.stringify) stringifier = stringifier.stringify;
  2533. var result = '';
  2534. stringifier(this, function (i) {
  2535. result += i;
  2536. });
  2537. return result;
  2538. }
  2539. /**
  2540. * Returns an exact clone of the node.
  2541. *
  2542. * The resulting cloned node and its (cloned) children will retain
  2543. * code style properties.
  2544. *
  2545. * @param {object} [overrides] New properties to override in the clone.
  2546. *
  2547. * @example
  2548. * decl.raws.before //=> "\n "
  2549. * const cloned = decl.clone({ prop: '-moz-' + decl.prop })
  2550. * cloned.raws.before //=> "\n "
  2551. * cloned.toString() //=> -moz-transform: scale(0)
  2552. *
  2553. * @return {Node} Clone of the node.
  2554. */
  2555. ;
  2556. _proto.clone = function clone(overrides) {
  2557. if (overrides === void 0) {
  2558. overrides = {};
  2559. }
  2560. var cloned = cloneNode(this);
  2561. for (var name in overrides) {
  2562. cloned[name] = overrides[name];
  2563. }
  2564. return cloned;
  2565. }
  2566. /**
  2567. * Shortcut to clone the node and insert the resulting cloned node
  2568. * before the current node.
  2569. *
  2570. * @param {object} [overrides] Mew properties to override in the clone.
  2571. *
  2572. * @example
  2573. * decl.cloneBefore({ prop: '-moz-' + decl.prop })
  2574. *
  2575. * @return {Node} New node
  2576. */
  2577. ;
  2578. _proto.cloneBefore = function cloneBefore(overrides) {
  2579. if (overrides === void 0) {
  2580. overrides = {};
  2581. }
  2582. var cloned = this.clone(overrides);
  2583. this.parent.insertBefore(this, cloned);
  2584. return cloned;
  2585. }
  2586. /**
  2587. * Shortcut to clone the node and insert the resulting cloned node
  2588. * after the current node.
  2589. *
  2590. * @param {object} [overrides] New properties to override in the clone.
  2591. *
  2592. * @return {Node} New node.
  2593. */
  2594. ;
  2595. _proto.cloneAfter = function cloneAfter(overrides) {
  2596. if (overrides === void 0) {
  2597. overrides = {};
  2598. }
  2599. var cloned = this.clone(overrides);
  2600. this.parent.insertAfter(this, cloned);
  2601. return cloned;
  2602. }
  2603. /**
  2604. * Inserts node(s) before the current node and removes the current node.
  2605. *
  2606. * @param {...Node} nodes Mode(s) to replace current one.
  2607. *
  2608. * @example
  2609. * if (atrule.name === 'mixin') {
  2610. * atrule.replaceWith(mixinRules[atrule.params])
  2611. * }
  2612. *
  2613. * @return {Node} Current node to methods chain.
  2614. */
  2615. ;
  2616. _proto.replaceWith = function replaceWith() {
  2617. if (this.parent) {
  2618. for (var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++) {
  2619. nodes[_key] = arguments[_key];
  2620. }
  2621. for (var _i = 0, _nodes = nodes; _i < _nodes.length; _i++) {
  2622. var node = _nodes[_i];
  2623. this.parent.insertBefore(this, node);
  2624. }
  2625. this.remove();
  2626. }
  2627. return this;
  2628. }
  2629. /**
  2630. * Returns the next child of the node’s parent.
  2631. * Returns `undefined` if the current node is the last child.
  2632. *
  2633. * @return {Node|undefined} Next node.
  2634. *
  2635. * @example
  2636. * if (comment.text === 'delete next') {
  2637. * const next = comment.next()
  2638. * if (next) {
  2639. * next.remove()
  2640. * }
  2641. * }
  2642. */
  2643. ;
  2644. _proto.next = function next() {
  2645. if (!this.parent) return undefined;
  2646. var index = this.parent.index(this);
  2647. return this.parent.nodes[index + 1];
  2648. }
  2649. /**
  2650. * Returns the previous child of the node’s parent.
  2651. * Returns `undefined` if the current node is the first child.
  2652. *
  2653. * @return {Node|undefined} Previous node.
  2654. *
  2655. * @example
  2656. * const annotation = decl.prev()
  2657. * if (annotation.type === 'comment') {
  2658. * readAnnotation(annotation.text)
  2659. * }
  2660. */
  2661. ;
  2662. _proto.prev = function prev() {
  2663. if (!this.parent) return undefined;
  2664. var index = this.parent.index(this);
  2665. return this.parent.nodes[index - 1];
  2666. }
  2667. /**
  2668. * Insert new node before current node to current node’s parent.
  2669. *
  2670. * Just alias for `node.parent.insertBefore(node, add)`.
  2671. *
  2672. * @param {Node|object|string|Node[]} add New node.
  2673. *
  2674. * @return {Node} This node for methods chain.
  2675. *
  2676. * @example
  2677. * decl.before('content: ""')
  2678. */
  2679. ;
  2680. _proto.before = function before(add) {
  2681. this.parent.insertBefore(this, add);
  2682. return this;
  2683. }
  2684. /**
  2685. * Insert new node after current node to current node’s parent.
  2686. *
  2687. * Just alias for `node.parent.insertAfter(node, add)`.
  2688. *
  2689. * @param {Node|object|string|Node[]} add New node.
  2690. *
  2691. * @return {Node} This node for methods chain.
  2692. *
  2693. * @example
  2694. * decl.after('color: black')
  2695. */
  2696. ;
  2697. _proto.after = function after(add) {
  2698. this.parent.insertAfter(this, add);
  2699. return this;
  2700. };
  2701. _proto.toJSON = function toJSON() {
  2702. var fixed = {};
  2703. for (var name in this) {
  2704. if (!this.hasOwnProperty(name)) continue;
  2705. if (name === 'parent') continue;
  2706. var value = this[name];
  2707. if (value instanceof Array) {
  2708. fixed[name] = value.map(function (i) {
  2709. if (typeof i === 'object' && i.toJSON) {
  2710. return i.toJSON();
  2711. } else {
  2712. return i;
  2713. }
  2714. });
  2715. } else if (typeof value === 'object' && value.toJSON) {
  2716. fixed[name] = value.toJSON();
  2717. } else {
  2718. fixed[name] = value;
  2719. }
  2720. }
  2721. return fixed;
  2722. }
  2723. /**
  2724. * Returns a {@link Node#raws} value. If the node is missing
  2725. * the code style property (because the node was manually built or cloned),
  2726. * PostCSS will try to autodetect the code style property by looking
  2727. * at other nodes in the tree.
  2728. *
  2729. * @param {string} prop Name of code style property.
  2730. * @param {string} [defaultType] Name of default value, it can be missed
  2731. * if the value is the same as prop.
  2732. *
  2733. * @example
  2734. * const root = postcss.parse('a { background: white }')
  2735. * root.nodes[0].append({ prop: 'color', value: 'black' })
  2736. * root.nodes[0].nodes[1].raws.before //=> undefined
  2737. * root.nodes[0].nodes[1].raw('before') //=> ' '
  2738. *
  2739. * @return {string} Code style value.
  2740. */
  2741. ;
  2742. _proto.raw = function raw(prop, defaultType) {
  2743. var str = new _stringifier.default();
  2744. return str.raw(this, prop, defaultType);
  2745. }
  2746. /**
  2747. * Finds the Root instance of the node’s tree.
  2748. *
  2749. * @example
  2750. * root.nodes[0].nodes[0].root() === root
  2751. *
  2752. * @return {Root} Root parent.
  2753. */
  2754. ;
  2755. _proto.root = function root() {
  2756. var result = this;
  2757. while (result.parent) {
  2758. result = result.parent;
  2759. }
  2760. return result;
  2761. }
  2762. /**
  2763. * Clear the code style properties for the node and its children.
  2764. *
  2765. * @param {boolean} [keepBetween] Keep the raws.between symbols.
  2766. *
  2767. * @return {undefined}
  2768. *
  2769. * @example
  2770. * node.raws.before //=> ' '
  2771. * node.cleanRaws()
  2772. * node.raws.before //=> undefined
  2773. */
  2774. ;
  2775. _proto.cleanRaws = function cleanRaws(keepBetween) {
  2776. delete this.raws.before;
  2777. delete this.raws.after;
  2778. if (!keepBetween) delete this.raws.between;
  2779. };
  2780. _proto.positionInside = function positionInside(index) {
  2781. var string = this.toString();
  2782. var column = this.source.start.column;
  2783. var line = this.source.start.line;
  2784. for (var i = 0; i < index; i++) {
  2785. if (string[i] === '\n') {
  2786. column = 1;
  2787. line += 1;
  2788. } else {
  2789. column += 1;
  2790. }
  2791. }
  2792. return {
  2793. line: line,
  2794. column: column
  2795. };
  2796. };
  2797. _proto.positionBy = function positionBy(opts) {
  2798. var pos = this.source.start;
  2799. if (opts.index) {
  2800. pos = this.positionInside(opts.index);
  2801. } else if (opts.word) {
  2802. var index = this.toString().indexOf(opts.word);
  2803. if (index !== -1) pos = this.positionInside(index);
  2804. }
  2805. return pos;
  2806. }
  2807. /**
  2808. * @memberof Node#
  2809. * @member {string} type String representing the node’s type.
  2810. * Possible values are `root`, `atrule`, `rule`,
  2811. * `decl`, or `comment`.
  2812. *
  2813. * @example
  2814. * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'
  2815. */
  2816. /**
  2817. * @memberof Node#
  2818. * @member {Container} parent The node’s parent node.
  2819. *
  2820. * @example
  2821. * root.nodes[0].parent === root
  2822. */
  2823. /**
  2824. * @memberof Node#
  2825. * @member {source} source The input source of the node.
  2826. *
  2827. * The property is used in source map generation.
  2828. *
  2829. * If you create a node manually (e.g., with `postcss.decl()`),
  2830. * that node will not have a `source` property and will be absent
  2831. * from the source map. For this reason, the plugin developer should
  2832. * consider cloning nodes to create new ones (in which case the new node’s
  2833. * source will reference the original, cloned node) or setting
  2834. * the `source` property manually.
  2835. *
  2836. * ```js
  2837. * // Bad
  2838. * const prefixed = postcss.decl({
  2839. * prop: '-moz-' + decl.prop,
  2840. * value: decl.value
  2841. * })
  2842. *
  2843. * // Good
  2844. * const prefixed = decl.clone({ prop: '-moz-' + decl.prop })
  2845. * ```
  2846. *
  2847. * ```js
  2848. * if (atrule.name === 'add-link') {
  2849. * const rule = postcss.rule({ selector: 'a', source: atrule.source })
  2850. * atrule.parent.insertBefore(atrule, rule)
  2851. * }
  2852. * ```
  2853. *
  2854. * @example
  2855. * decl.source.input.from //=> '/home/ai/a.sass'
  2856. * decl.source.start //=> { line: 10, column: 2 }
  2857. * decl.source.end //=> { line: 10, column: 12 }
  2858. */
  2859. /**
  2860. * @memberof Node#
  2861. * @member {object} raws Information to generate byte-to-byte equal
  2862. * node string as it was in the origin input.
  2863. *
  2864. * Every parser saves its own properties,
  2865. * but the default CSS parser uses:
  2866. *
  2867. * * `before`: the space symbols before the node. It also stores `*`
  2868. * and `_` symbols before the declaration (IE hack).
  2869. * * `after`: the space symbols after the last child of the node
  2870. * to the end of the node.
  2871. * * `between`: the symbols between the property and value
  2872. * for declarations, selector and `{` for rules, or last parameter
  2873. * and `{` for at-rules.
  2874. * * `semicolon`: contains true if the last child has
  2875. * an (optional) semicolon.
  2876. * * `afterName`: the space between the at-rule name and its parameters.
  2877. * * `left`: the space symbols between `/*` and the comment’s text.
  2878. * * `right`: the space symbols between the comment’s text
  2879. * and <code>*&#47;</code>.
  2880. * * `important`: the content of the important statement,
  2881. * if it is not just `!important`.
  2882. *
  2883. * PostCSS cleans selectors, declaration values and at-rule parameters
  2884. * from comments and extra spaces, but it stores origin content in raws
  2885. * properties. As such, if you don’t change a declaration’s value,
  2886. * PostCSS will use the raw value with comments.
  2887. *
  2888. * @example
  2889. * const root = postcss.parse('a {\n color:black\n}')
  2890. * root.first.first.raws //=> { before: '\n ', between: ':' }
  2891. */
  2892. ;
  2893. return Node;
  2894. }();
  2895. var _default = Node;
  2896. /**
  2897. * @typedef {object} position
  2898. * @property {number} line Source line in file.
  2899. * @property {number} column Source column in file.
  2900. */
  2901. /**
  2902. * @typedef {object} source
  2903. * @property {Input} input {@link Input} with input file
  2904. * @property {position} start The starting position of the node’s source.
  2905. * @property {position} end The ending position of the node’s source.
  2906. */
  2907. exports.default = _default;
  2908. module.exports = exports.default;
  2909. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuZXM2Il0sIm5hbWVzIjpbImNsb25lTm9kZSIsIm9iaiIsInBhcmVudCIsImNsb25lZCIsImNvbnN0cnVjdG9yIiwiaSIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJ0eXBlIiwiQXJyYXkiLCJtYXAiLCJqIiwiTm9kZSIsImRlZmF1bHRzIiwicmF3cyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcHRzIiwic291cmNlIiwicG9zIiwicG9zaXRpb25CeSIsImlucHV0IiwibGluZSIsImNvbHVtbiIsIkNzc1N5bnRheEVycm9yIiwid2FybiIsInJlc3VsdCIsInRleHQiLCJkYXRhIiwibm9kZSIsInJlbW92ZSIsInJlbW92ZUNoaWxkIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJzdHJpbmdpZmllciIsImNsb25lIiwib3ZlcnJpZGVzIiwiY2xvbmVCZWZvcmUiLCJpbnNlcnRCZWZvcmUiLCJjbG9uZUFmdGVyIiwiaW5zZXJ0QWZ0ZXIiLCJyZXBsYWNlV2l0aCIsIm5vZGVzIiwibmV4dCIsImluZGV4IiwicHJldiIsImJlZm9yZSIsImFkZCIsImFmdGVyIiwidG9KU09OIiwiZml4ZWQiLCJyYXciLCJwcm9wIiwiZGVmYXVsdFR5cGUiLCJzdHIiLCJTdHJpbmdpZmllciIsInJvb3QiLCJjbGVhblJhd3MiLCJrZWVwQmV0d2VlbiIsImJldHdlZW4iLCJwb3NpdGlvbkluc2lkZSIsInN0cmluZyIsInN0YXJ0Iiwid29yZCIsImluZGV4T2YiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxTQUFTQSxTQUFULENBQW9CQyxHQUFwQixFQUF5QkMsTUFBekIsRUFBaUM7QUFDL0IsTUFBSUMsTUFBTSxHQUFHLElBQUlGLEdBQUcsQ0FBQ0csV0FBUixFQUFiOztBQUVBLE9BQUssSUFBSUMsQ0FBVCxJQUFjSixHQUFkLEVBQW1C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Y3NzLXN5bnRheC1lcnJvcidcbmltcG9ydCBTdHJpbmdpZmllciBmcm9tICcuL3N0cmluZ2lmaWVyJ1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeSdcblxuZnVuY3Rpb24gY2xvbmVOb2RlIChvYmosIHBhcmVudCkge1xuICBsZXQgY2xvbmVkID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpXG5cbiAgZm9yIChsZXQgaSBpbiBvYmopIHtcbiAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShpKSkgY29udGludWVcbiAgICBsZXQgdmFsdWUgPSBvYmpbaV1cbiAgICBsZXQgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuXG4gICAgaWYgKGkgPT09ICdwYXJlbnQnICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocGFyZW50KSBjbG9uZWRbaV0gPSBwYXJlbnRcbiAgICB9IGVsc2UgaWYgKGkgPT09ICdzb3VyY2UnKSB7XG4gICAgICBjbG9uZWRbaV0gPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgY2xvbmVkW2ldID0gdmFsdWUubWFwKGogPT4gY2xvbmVOb2RlKGosIGNsb25lZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkgdmFsdWUgPSBjbG9uZU5vZGUodmFsdWUpXG4gICAgICBjbG9uZWRbaV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9uZWRcbn1cblxuLyoqXG4gKiBBbGwgbm9kZSBjbGFzc2VzIGluaGVyaXQgdGhlIGZvbGxvd2luZyBjb21tb24gbWV0aG9kcy5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuY2xhc3MgTm9kZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSBWYWx1ZSBmb3Igbm9kZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzID0geyB9KSB7XG4gICAgdGhpcy5yYXdzID0geyB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgIT09ICdvYmplY3QnICYmIHR5cGVvZiBkZWZhdWx0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdQb3N0Q1NTIG5vZGVzIGNvbnN0cnVjdG9yIGFjY2VwdHMgb2JqZWN0LCBub3QgJyArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZGVmYXVsdHMpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgbmFtZSBpbiBkZWZhdWx0cykge1xuICAgICAgdGhpc1tuYW1lXSA9IGRlZmF1bHRzW25hbWVdXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBgQ3NzU3ludGF4RXJyb3JgIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAqIG9mIHRoZSBub2RlIGluIHRoZSBzb3VyY2UsIHNob3dpbmcgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgYW5kIGFsc29cbiAgICogYSBzbWFsbCBleGNlcnB0IHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLlxuICAgKlxuICAgKiBJZiBwcmVzZW50LCBhbiBpbnB1dCBzb3VyY2UgbWFwIHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAqIG9mIHRoZSBzb3VyY2UsIGV2ZW4gZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uIHN0ZXBcbiAgICogKGUuZy4sIGZyb20gU2FzcyBjb21waWxhdGlvbikuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHByb2R1Y2VzIHZlcnkgdXNlZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAgICAgRXJyb3IgZGVzY3JpcHRpb24uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gICAgICBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5wbHVnaW4gUGx1Z2luIG5hbWUgdGhhdCBjcmVhdGVkIHRoaXMgZXJyb3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3N0Q1NTIHdpbGwgc2V0IGl0IGF1dG9tYXRpY2FsbHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndvcmQgICBBIHdvcmQgaW5zaWRlIGEgbm9kZeKAmXMgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuaW5kZXggIEFuIGluZGV4IGluc2lkZSBhIG5vZGXigJlzIHN0cmluZyB0aGF0IHNob3VsZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaGlnaGxpZ2h0ZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEByZXR1cm4ge0Nzc1N5bnRheEVycm9yfSBFcnJvciBvYmplY3QgdG8gdGhyb3cgaXQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGlmICghdmFyaWFibGVzW25hbWVdKSB7XG4gICAqICAgdGhyb3cgZGVjbC5lcnJvcignVW5rbm93biB2YXJpYWJsZSAnICsgbmFtZSwgeyB3b3JkOiBuYW1lIH0pXG4gICAqICAgLy8gQ3NzU3ludGF4RXJyb3I6IHBvc3Rjc3MtdmFyczphLnNhc3M6NDozOiBVbmtub3duIHZhcmlhYmxlICRibGFja1xuICAgKiAgIC8vICAgY29sb3I6ICRibGFja1xuICAgKiAgIC8vIGFcbiAgICogICAvLyAgICAgICAgICBeXG4gICAqICAgLy8gICBiYWNrZ3JvdW5kOiB3aGl0ZVxuICAgKiB9XG4gICAqL1xuICBlcnJvciAobWVzc2FnZSwgb3B0cyA9IHsgfSkge1xuICAgIGlmICh0aGlzLnNvdXJjZSkge1xuICAgICAgbGV0IHBvcyA9IHRoaXMucG9zaXRpb25CeShvcHRzKVxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlLmlucHV0LmVycm9yKG1lc3NhZ2UsIHBvcy5saW5lLCBwb3MuY29sdW1uLCBvcHRzKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IENzc1N5bnRheEVycm9yKG1lc3NhZ2UpXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciB7QGxpbmsgUmVzdWx0I3dhcm59LlxuICAgKlxuICAgKiBAcGFyYW0ge1Jlc3VsdH0gcmVzdWx0ICAgICAgVGhlIHtAbGluayBSZXN1bHR9IGluc3RhbmNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgICAgICAgIFdhcm5pbmcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRzXSAgICAgIE9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMucGx1Z2luIFBsdWdpbiBuYW1lIHRoYXQgY3JlYXRlZCB0aGlzIHdhcm5pbmcuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3N0Q1NTIHdpbGwgc2V0IGl0IGF1dG9tYXRpY2FsbHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndvcmQgICBBIHdvcmQgaW5zaWRlIGEgbm9kZeKAmXMgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc291cmNlIG9mIHRoZSB3YXJuaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5pbmRleCAgQW4gaW5kZXggaW5zaWRlIGEgbm9kZeKAmXMgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc291cmNlIG9mIHRoZSB3YXJuaW5nLlxuICAgKlxuICAgKiBAcmV0dXJuIHtXYXJuaW5nfSBDcmVhdGVkIHdhcm5pbmcgb2JqZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBwbHVnaW4gPSBwb3N0Y3NzLnBsdWdpbigncG9zdGNzcy1kZXByZWNhdGVkJywgKCkgPT4ge1xuICAgKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gICAqICAgICByb290LndhbGtEZWNscygnYmFkJywgZGVjbCA9PiB7XG4gICAqICAgICAgIGRlY2wud2FybihyZXN1bHQsICdEZXByZWNhdGVkIHByb3BlcnR5IGJhZCcpXG4gICAqICAgICB9KVxuICAgKiAgIH1cbiAgICogfSlcbiAgICovXG4gIHdhcm4gKHJlc3VsdCwgdGV4dCwgb3B0cykge1xuICAgIGxldCBkYXRhID0geyBub2RlOiB0aGlzIH1cbiAgICBmb3IgKGxldCBpIGluIG9wdHMpIGRhdGFbaV0gPSBvcHRzW2ldXG4gICAgcmV0dXJuIHJlc3VsdC53YXJuKHRleHQsIGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIGNsZWFucyB0aGUgcGFyZW50IHByb3BlcnRpZXNcbiAgICogZnJvbSB0aGUgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAoZGVjbC5wcm9wLm1hdGNoKC9eLXdlYmtpdC0vKSkge1xuICAgKiAgIGRlY2wucmVtb3ZlKClcbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBOb2RlIHRvIG1ha2UgY2FsbHMgY2hhaW4uXG4gICAqL1xuICByZW1vdmUgKCkge1xuICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcylcbiAgICB9XG4gICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBDU1Mgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdpZmllcnxzeW50YXh9IFtzdHJpbmdpZmllcl0gQSBzeW50YXggdG8gdXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHN0cmluZyBnZW5lcmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IENTUyBzdHJpbmcgb2YgdGhpcyBub2RlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwb3N0Y3NzLnJ1bGUoeyBzZWxlY3RvcjogJ2EnIH0pLnRvU3RyaW5nKCkgLy89PiBcImEge31cIlxuICAgKi9cbiAgdG9TdHJpbmcgKHN0cmluZ2lmaWVyID0gc3RyaW5naWZ5KSB7XG4gICAgaWYgKHN0cmluZ2lmaWVyLnN0cmluZ2lmeSkgc3RyaW5naWZpZXIgPSBzdHJpbmdpZmllci5zdHJpbmdpZnlcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBzdHJpbmdpZmllcih0aGlzLCBpID0+IHtcbiAgICAgIHJlc3VsdCArPSBpXG4gICAgfSlcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleGFjdCBjbG9uZSBvZiB0aGUgbm9kZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBjbG9uZWQgbm9kZSBhbmQgaXRzIChjbG9uZWQpIGNoaWxkcmVuIHdpbGwgcmV0YWluXG4gICAqIGNvZGUgc3R5bGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvdmVycmlkZXNdIE5ldyBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIGluIHRoZSBjbG9uZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZGVjbC5yYXdzLmJlZm9yZSAgICAvLz0+IFwiXFxuICBcIlxuICAgKiBjb25zdCBjbG9uZWQgPSBkZWNsLmNsb25lKHsgcHJvcDogJy1tb3otJyArIGRlY2wucHJvcCB9KVxuICAgKiBjbG9uZWQucmF3cy5iZWZvcmUgIC8vPT4gXCJcXG4gIFwiXG4gICAqIGNsb25lZC50b1N0cmluZygpICAgLy89PiAtbW96LXRyYW5zZm9ybTogc2NhbGUoMClcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gQ2xvbmUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBjbG9uZSAob3ZlcnJpZGVzID0geyB9KSB7XG4gICAgbGV0IGNsb25lZCA9IGNsb25lTm9kZSh0aGlzKVxuICAgIGZvciAobGV0IG5hbWUgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICBjbG9uZWRbbmFtZV0gPSBvdmVycmlkZXNbbmFtZV1cbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHRvIGNsb25lIHRoZSBub2RlIGFuZCBpbnNlcnQgdGhlIHJlc3VsdGluZyBjbG9uZWQgbm9kZVxuICAgKiBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvdmVycmlkZXNdIE1ldyBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIGluIHRoZSBjbG9uZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZGVjbC5jbG9uZUJlZm9yZSh7IHByb3A6ICctbW96LScgKyBkZWNsLnByb3AgfSlcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gTmV3IG5vZGVcbiAgICovXG4gIGNsb25lQmVmb3JlIChvdmVycmlkZXMgPSB7IH0pIHtcbiAgICBsZXQgY2xvbmVkID0gdGhpcy5jbG9uZShvdmVycmlkZXMpXG4gICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIGNsb25lZClcbiAgICByZXR1cm4gY2xvbmVkXG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgdG8gY2xvbmUgdGhlIG5vZGUgYW5kIGluc2VydCB0aGUgcmVzdWx0aW5nIGNsb25lZCBub2RlXG4gICAqIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3ZlcnJpZGVzXSBOZXcgcHJvcGVydGllcyB0byBvdmVycmlkZSBpbiB0aGUgY2xvbmUuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IE5ldyBub2RlLlxuICAgKi9cbiAgY2xvbmVBZnRlciAob3ZlcnJpZGVzID0geyB9KSB7XG4gICAgbGV0IGNsb25lZCA9IHRoaXMuY2xvbmUob3ZlcnJpZGVzKVxuICAgIHRoaXMucGFyZW50Lmluc2VydEFmdGVyKHRoaXMsIGNsb25lZClcbiAgICByZXR1cm4gY2xvbmVkXG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0cyBub2RlKHMpIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIGFuZCByZW1vdmVzIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uTm9kZX0gbm9kZXMgTW9kZShzKSB0byByZXBsYWNlIGN1cnJlbnQgb25lLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAoYXRydWxlLm5hbWUgPT09ICdtaXhpbicpIHtcbiAgICogICBhdHJ1bGUucmVwbGFjZVdpdGgobWl4aW5SdWxlc1thdHJ1bGUucGFyYW1zXSlcbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBDdXJyZW50IG5vZGUgdG8gbWV0aG9kcyBjaGFpbi5cbiAgICovXG4gIHJlcGxhY2VXaXRoICguLi5ub2Rlcykge1xuICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgZm9yIChsZXQgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICB0aGlzLnBhcmVudC5pbnNlcnRCZWZvcmUodGhpcywgbm9kZSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmV4dCBjaGlsZCBvZiB0aGUgbm9kZeKAmXMgcGFyZW50LlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV8dW5kZWZpbmVkfSBOZXh0IG5vZGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGlmIChjb21tZW50LnRleHQgPT09ICdkZWxldGUgbmV4dCcpIHtcbiAgICogICBjb25zdCBuZXh0ID0gY29tbWVudC5uZXh0KClcbiAgICogICBpZiAobmV4dCkge1xuICAgKiAgICAgbmV4dC5yZW1vdmUoKVxuICAgKiAgIH1cbiAgICogfVxuICAgKi9cbiAgbmV4dCAoKSB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50LmluZGV4KHRoaXMpXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4ICsgMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBjaGlsZCBvZiB0aGUgbm9kZeKAmXMgcGFyZW50LlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIGZpcnN0IGNoaWxkLlxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfHVuZGVmaW5lZH0gUHJldmlvdXMgbm9kZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgYW5ub3RhdGlvbiA9IGRlY2wucHJldigpXG4gICAqIGlmIChhbm5vdGF0aW9uLnR5cGUgPT09ICdjb21tZW50Jykge1xuICAgKiAgIHJlYWRBbm5vdGF0aW9uKGFubm90YXRpb24udGV4dClcbiAgICogfVxuICAgKi9cbiAgcHJldiAoKSB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50LmluZGV4KHRoaXMpXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4IC0gMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgbmV3IG5vZGUgYmVmb3JlIGN1cnJlbnQgbm9kZSB0byBjdXJyZW50IG5vZGXigJlzIHBhcmVudC5cbiAgICpcbiAgICogSnVzdCBhbGlhcyBmb3IgYG5vZGUucGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBhZGQpYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfG9iamVjdHxzdHJpbmd8Tm9kZVtdfSBhZGQgTmV3IG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZGVjbC5iZWZvcmUoJ2NvbnRlbnQ6IFwiXCInKVxuICAgKi9cbiAgYmVmb3JlIChhZGQpIHtcbiAgICB0aGlzLnBhcmVudC5pbnNlcnRCZWZvcmUodGhpcywgYWRkKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0IG5ldyBub2RlIGFmdGVyIGN1cnJlbnQgbm9kZSB0byBjdXJyZW50IG5vZGXigJlzIHBhcmVudC5cbiAgICpcbiAgICogSnVzdCBhbGlhcyBmb3IgYG5vZGUucGFyZW50Lmluc2VydEFmdGVyKG5vZGUsIGFkZClgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW119IGFkZCBOZXcgbm9kZS5cbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gVGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBkZWNsLmFmdGVyKCdjb2xvcjogYmxhY2snKVxuICAgKi9cbiAgYWZ0ZXIgKGFkZCkge1xuICAgIHRoaXMucGFyZW50Lmluc2VydEFmdGVyKHRoaXMsIGFkZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdG9KU09OICgpIHtcbiAgICBsZXQgZml4ZWQgPSB7IH1cblxuICAgIGZvciAobGV0IG5hbWUgaW4gdGhpcykge1xuICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KG5hbWUpKSBjb250aW51ZVxuICAgICAgaWYgKG5hbWUgPT09ICdwYXJlbnQnKSBjb250aW51ZVxuICAgICAgbGV0IHZhbHVlID0gdGhpc1tuYW1lXVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBmaXhlZFtuYW1lXSA9IHZhbHVlLm1hcChpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIGkudG9KU09OKSB7XG4gICAgICAgICAgICByZXR1cm4gaS50b0pTT04oKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS50b0pTT04pIHtcbiAgICAgICAgZml4ZWRbbmFtZV0gPSB2YWx1ZS50b0pTT04oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4ZWRbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaXhlZFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgTm9kZSNyYXdzfSB2YWx1ZS4gSWYgdGhlIG5vZGUgaXMgbWlzc2luZ1xuICAgKiB0aGUgY29kZSBzdHlsZSBwcm9wZXJ0eSAoYmVjYXVzZSB0aGUgbm9kZSB3YXMgbWFudWFsbHkgYnVpbHQgb3IgY2xvbmVkKSxcbiAgICogUG9zdENTUyB3aWxsIHRyeSB0byBhdXRvZGV0ZWN0IHRoZSBjb2RlIHN0eWxlIHByb3BlcnR5IGJ5IGxvb2tpbmdcbiAgICogYXQgb3RoZXIgbm9kZXMgaW4gdGhlIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wICAgICAgICAgIE5hbWUgb2YgY29kZSBzdHlsZSBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0VHlwZV0gTmFtZSBvZiBkZWZhdWx0IHZhbHVlLCBpdCBjYW4gYmUgbWlzc2VkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBwcm9wLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGJhY2tncm91bmQ6IHdoaXRlIH0nKVxuICAgKiByb290Lm5vZGVzWzBdLmFwcGVuZCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAnYmxhY2snIH0pXG4gICAqIHJvb3Qubm9kZXNbMF0ubm9kZXNbMV0ucmF3cy5iZWZvcmUgICAvLz0+IHVuZGVmaW5lZFxuICAgKiByb290Lm5vZGVzWzBdLm5vZGVzWzFdLnJhdygnYmVmb3JlJykgLy89PiAnICdcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBDb2RlIHN0eWxlIHZhbHVlLlxuICAgKi9cbiAgcmF3IChwcm9wLCBkZWZhdWx0VHlwZSkge1xuICAgIGxldCBzdHIgPSBuZXcgU3RyaW5naWZpZXIoKVxuICAgIHJldHVybiBzdHIucmF3KHRoaXMsIHByb3AsIGRlZmF1bHRUeXBlKVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBSb290IGluc3RhbmNlIG9mIHRoZSBub2Rl4oCZcyB0cmVlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByb290Lm5vZGVzWzBdLm5vZGVzWzBdLnJvb3QoKSA9PT0gcm9vdFxuICAgKlxuICAgKiBAcmV0dXJuIHtSb290fSBSb290IHBhcmVudC5cbiAgICovXG4gIHJvb3QgKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzXG4gICAgd2hpbGUgKHJlc3VsdC5wYXJlbnQpIHJlc3VsdCA9IHJlc3VsdC5wYXJlbnRcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGNvZGUgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIG5vZGUgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBba2VlcEJldHdlZW5dIEtlZXAgdGhlIHJhd3MuYmV0d2VlbiBzeW1ib2xzLlxuICAgKlxuICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5vZGUucmF3cy5iZWZvcmUgIC8vPT4gJyAnXG4gICAqIG5vZGUuY2xlYW5SYXdzKClcbiAgICogbm9kZS5yYXdzLmJlZm9yZSAgLy89PiB1bmRlZmluZWRcbiAgICovXG4gIGNsZWFuUmF3cyAoa2VlcEJldHdlZW4pIHtcbiAgICBkZWxldGUgdGhpcy5yYXdzLmJlZm9yZVxuICAgIGRlbGV0ZSB0aGlzLnJhd3MuYWZ0ZXJcbiAgICBpZiAoIWtlZXBCZXR3ZWVuKSBkZWxldGUgdGhpcy5yYXdzLmJldHdlZW5cbiAgfVxuXG4gIHBvc2l0aW9uSW5zaWRlIChpbmRleCkge1xuICAgIGxldCBzdHJpbmcgPSB0aGlzLnRvU3RyaW5nKClcbiAgICBsZXQgY29sdW1uID0gdGhpcy5zb3VyY2Uuc3RhcnQuY29sdW1uXG4gICAgbGV0IGxpbmUgPSB0aGlzLnNvdXJjZS5zdGFydC5saW5lXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgIGlmIChzdHJpbmdbaV0gPT09ICdcXG4nKSB7XG4gICAgICAgIGNvbHVtbiA9IDFcbiAgICAgICAgbGluZSArPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW4gKz0gMVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxpbmUsIGNvbHVtbiB9XG4gIH1cblxuICBwb3NpdGlvbkJ5IChvcHRzKSB7XG4gICAgbGV0IHBvcyA9IHRoaXMuc291cmNlLnN0YXJ0XG4gICAgaWYgKG9wdHMuaW5kZXgpIHtcbiAgICAgIHBvcyA9IHRoaXMucG9zaXRpb25JbnNpZGUob3B0cy5pbmRleClcbiAgICB9IGVsc2UgaWYgKG9wdHMud29yZCkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy50b1N0cmluZygpLmluZGV4T2Yob3B0cy53b3JkKVxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcG9zID0gdGhpcy5wb3NpdGlvbkluc2lkZShpbmRleClcbiAgICB9XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBOb2RlI1xuICAgKiBAbWVtYmVyIHtzdHJpbmd9IHR5cGUgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbm9kZeKAmXMgdHlwZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHJvb3RgLCBgYXRydWxlYCwgYHJ1bGVgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYGRlY2xgLCBvciBgY29tbWVudGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHBvc3Rjc3MuZGVjbCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAnYmxhY2snIH0pLnR5cGUgLy89PiAnZGVjbCdcbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBOb2RlI1xuICAgKiBAbWVtYmVyIHtDb250YWluZXJ9IHBhcmVudCBUaGUgbm9kZeKAmXMgcGFyZW50IG5vZGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJvb3Qubm9kZXNbMF0ucGFyZW50ID09PSByb290XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgTm9kZSNcbiAgICogQG1lbWJlciB7c291cmNlfSBzb3VyY2UgVGhlIGlucHV0IHNvdXJjZSBvZiB0aGUgbm9kZS5cbiAgICpcbiAgICogVGhlIHByb3BlcnR5IGlzIHVzZWQgaW4gc291cmNlIG1hcCBnZW5lcmF0aW9uLlxuICAgKlxuICAgKiBJZiB5b3UgY3JlYXRlIGEgbm9kZSBtYW51YWxseSAoZS5nLiwgd2l0aCBgcG9zdGNzcy5kZWNsKClgKSxcbiAgICogdGhhdCBub2RlIHdpbGwgbm90IGhhdmUgYSBgc291cmNlYCBwcm9wZXJ0eSBhbmQgd2lsbCBiZSBhYnNlbnRcbiAgICogZnJvbSB0aGUgc291cmNlIG1hcC4gRm9yIHRoaXMgcmVhc29uLCB0aGUgcGx1Z2luIGRldmVsb3BlciBzaG91bGRcbiAgICogY29uc2lkZXIgY2xvbmluZyBub2RlcyB0byBjcmVhdGUgbmV3IG9uZXMgKGluIHdoaWNoIGNhc2UgdGhlIG5ldyBub2Rl4oCZc1xuICAgKiBzb3VyY2Ugd2lsbCByZWZlcmVuY2UgdGhlIG9yaWdpbmFsLCBjbG9uZWQgbm9kZSkgb3Igc2V0dGluZ1xuICAgKiB0aGUgYHNvdXJjZWAgcHJvcGVydHkgbWFudWFsbHkuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIEJhZFxuICAgKiBjb25zdCBwcmVmaXhlZCA9IHBvc3Rjc3MuZGVjbCh7XG4gICAqICAgcHJvcDogJy1tb3otJyArIGRlY2wucHJvcCxcbiAgICogICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgKiB9KVxuICAgKlxuICAgKiAvLyBHb29kXG4gICAqIGNvbnN0IHByZWZpeGVkID0gZGVjbC5jbG9uZSh7IHByb3A6ICctbW96LScgKyBkZWNsLnByb3AgfSlcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGlmIChhdHJ1bGUubmFtZSA9PT0gJ2FkZC1saW5rJykge1xuICAgKiAgIGNvbnN0IHJ1bGUgPSBwb3N0Y3NzLnJ1bGUoeyBzZWxlY3RvcjogJ2EnLCBzb3VyY2U6IGF0cnVsZS5zb3VyY2UgfSlcbiAgICogICBhdHJ1bGUucGFyZW50Lmluc2VydEJlZm9yZShhdHJ1bGUsIHJ1bGUpXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGRlY2wuc291cmNlLmlucHV0LmZyb20gLy89PiAnL2hvbWUvYWkvYS5zYXNzJ1xuICAgKiBkZWNsLnNvdXJjZS5zdGFydCAgICAgIC8vPT4geyBsaW5lOiAxMCwgY29sdW1uOiAyIH1cbiAgICogZGVjbC5zb3VyY2UuZW5kICAgICAgICAvLz0+IHsgbGluZTogMTAsIGNvbHVtbjogMTIgfVxuICAgKi9cblxuICAvKipcbiAgICogQG1lbWJlcm9mIE5vZGUjXG4gICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgKlxuICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgKlxuICAgKiAqIGBiZWZvcmVgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZWZvcmUgdGhlIG5vZGUuIEl0IGFsc28gc3RvcmVzIGAqYFxuICAgKiAgIGFuZCBgX2Agc3ltYm9scyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIChJRSBoYWNrKS5cbiAgICogKiBgYWZ0ZXJgOiB0aGUgc3BhY2Ugc3ltYm9scyBhZnRlciB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgbm9kZVxuICAgKiAgIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGUuXG4gICAqICogYGJldHdlZW5gOiB0aGUgc3ltYm9scyBiZXR3ZWVuIHRoZSBwcm9wZXJ0eSBhbmQgdmFsdWVcbiAgICogICBmb3IgZGVjbGFyYXRpb25zLCBzZWxlY3RvciBhbmQgYHtgIGZvciBydWxlcywgb3IgbGFzdCBwYXJhbWV0ZXJcbiAgICogICBhbmQgYHtgIGZvciBhdC1ydWxlcy5cbiAgICogKiBgc2VtaWNvbG9uYDogY29udGFpbnMgdHJ1ZSBpZiB0aGUgbGFzdCBjaGlsZCBoYXNcbiAgICogICBhbiAob3B0aW9uYWwpIHNlbWljb2xvbi5cbiAgICogKiBgYWZ0ZXJOYW1lYDogdGhlIHNwYWNlIGJldHdlZW4gdGhlIGF0LXJ1bGUgbmFtZSBhbmQgaXRzIHBhcmFtZXRlcnMuXG4gICAqICogYGxlZnRgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZXR3ZWVuIGAvKmAgYW5kIHRoZSBjb21tZW504oCZcyB0ZXh0LlxuICAgKiAqIGByaWdodGA6IHRoZSBzcGFjZSBzeW1ib2xzIGJldHdlZW4gdGhlIGNvbW1lbnTigJlzIHRleHRcbiAgICogICBhbmQgPGNvZGU+KiYjNDc7PC9jb2RlPi5cbiAgICogKiBgaW1wb3J0YW50YDogdGhlIGNvbnRlbnQgb2YgdGhlIGltcG9ydGFudCBzdGF0ZW1lbnQsXG4gICAqICAgaWYgaXQgaXMgbm90IGp1c3QgYCFpbXBvcnRhbnRgLlxuICAgKlxuICAgKiBQb3N0Q1NTIGNsZWFucyBzZWxlY3RvcnMsIGRlY2xhcmF0aW9uIHZhbHVlcyBhbmQgYXQtcnVsZSBwYXJhbWV0ZXJzXG4gICAqIGZyb20gY29tbWVudHMgYW5kIGV4dHJhIHNwYWNlcywgYnV0IGl0IHN0b3JlcyBvcmlnaW4gY29udGVudCBpbiByYXdzXG4gICAqIHByb3BlcnRpZXMuIEFzIHN1Y2gsIGlmIHlvdSBkb27igJl0IGNoYW5nZSBhIGRlY2xhcmF0aW9u4oCZcyB2YWx1ZSxcbiAgICogUG9zdENTUyB3aWxsIHVzZSB0aGUgcmF3IHZhbHVlIHdpdGggY29tbWVudHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhIHtcXG4gIGNvbG9yOmJsYWNrXFxufScpXG4gICAqIHJvb3QuZmlyc3QuZmlyc3QucmF3cyAvLz0+IHsgYmVmb3JlOiAnXFxuICAnLCBiZXR3ZWVuOiAnOicgfVxuICAgKi9cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGluZSAgIFNvdXJjZSBsaW5lIGluIGZpbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sdW1uIFNvdXJjZSBjb2x1bW4gaW4gZmlsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHNvdXJjZVxuICogQHByb3BlcnR5IHtJbnB1dH0gaW5wdXQgICAge0BsaW5rIElucHV0fSB3aXRoIGlucHV0IGZpbGVcbiAqIEBwcm9wZXJ0eSB7cG9zaXRpb259IHN0YXJ0IFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbm9kZeKAmXMgc291cmNlLlxuICogQHByb3BlcnR5IHtwb3NpdGlvbn0gZW5kICAgVGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbm9kZeKAmXMgc291cmNlLlxuICovXG4iXSwiZmlsZSI6Im5vZGUuanMifQ==
  2910. /***/ }),
  2911. /* 17 */
  2912. /***/ (function(module, exports, __webpack_require__) {
  2913. "use strict";
  2914. exports.__esModule = true;
  2915. exports.default = void 0;
  2916. var _stringifier = _interopRequireDefault(__webpack_require__(35));
  2917. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2918. function stringify(node, builder) {
  2919. var str = new _stringifier.default(builder);
  2920. str.stringify(node);
  2921. }
  2922. var _default = stringify;
  2923. exports.default = _default;
  2924. module.exports = exports.default;
  2925. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmeS5lczYiXSwibmFtZXMiOlsic3RyaW5naWZ5Iiwibm9kZSIsImJ1aWxkZXIiLCJzdHIiLCJTdHJpbmdpZmllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7OztBQUVBLFNBQVNBLFNBQVQsQ0FBb0JDLElBQXBCLEVBQTBCQyxPQUExQixFQUFtQztBQUNqQyxNQUFJQyxHQUFHLEdBQUcsSUFBSUMsb0JBQUosQ0FBZ0JGLE9BQWhCLENBQVY7QUFDQUMsRUFBQUEsR0FBRyxDQUFDSCxTQUFKLENBQWNDLElBQWQ7QUFDRDs7ZUFFY0QsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdHJpbmdpZmllciBmcm9tICcuL3N0cmluZ2lmaWVyJ1xuXG5mdW5jdGlvbiBzdHJpbmdpZnkgKG5vZGUsIGJ1aWxkZXIpIHtcbiAgbGV0IHN0ciA9IG5ldyBTdHJpbmdpZmllcihidWlsZGVyKVxuICBzdHIuc3RyaW5naWZ5KG5vZGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeVxuIl0sImZpbGUiOiJzdHJpbmdpZnkuanMifQ==
  2926. /***/ }),
  2927. /* 18 */
  2928. /***/ (function(module, exports, __webpack_require__) {
  2929. "use strict";
  2930. exports.__esModule = true;
  2931. exports.default = void 0;
  2932. var _parser = _interopRequireDefault(__webpack_require__(89));
  2933. var _input = _interopRequireDefault(__webpack_require__(91));
  2934. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2935. function parse(css, opts) {
  2936. var input = new _input.default(css, opts);
  2937. var parser = new _parser.default(input);
  2938. try {
  2939. parser.parse();
  2940. } catch (e) {
  2941. if (false) {}
  2942. throw e;
  2943. }
  2944. return parser.root;
  2945. }
  2946. var _default = parse;
  2947. exports.default = _default;
  2948. module.exports = exports.default;
  2949. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlLmVzNiJdLCJuYW1lcyI6WyJwYXJzZSIsImNzcyIsIm9wdHMiLCJpbnB1dCIsIklucHV0IiwicGFyc2VyIiwiUGFyc2VyIiwiZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm1lc3NhZ2UiLCJyb290Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOzs7O0FBRUEsU0FBU0EsS0FBVCxDQUFnQkMsR0FBaEIsRUFBcUJDLElBQXJCLEVBQTJCO0FBQ3pCLE1BQUlDLEtBQUssR0FBRyxJQUFJQyxjQUFKLENBQVVILEdBQVYsRUFBZUMsSUFBZixDQUFaO0FBQ0EsTUFBSUcsTUFBTSxHQUFHLElBQUlDLGVBQUosQ0FBV0gsS0FBWCxDQUFiOztBQUNBLE1BQUk7QUFDRkUsSUFBQUEsTUFBTSxDQUFDTCxLQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9PLENBQVAsRUFBVTtBQUNWLFFBQUlDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLEtBQXlCLFlBQTdCLEVBQTJDO0FBQ3pDLFVBQUlILENBQUMsQ0FBQ0ksSUFBRixLQUFXLGdCQUFYLElBQStCVCxJQUEvQixJQUF1Q0EsSUFBSSxDQUFDVSxJQUFoRCxFQUFzRDtBQUNwRCxZQUFJLFdBQVdDLElBQVgsQ0FBZ0JYLElBQUksQ0FBQ1UsSUFBckIsQ0FBSixFQUFnQztBQUM5QkwsVUFBQUEsQ0FBQyxDQUFDTyxPQUFGLElBQWEsb0NBQ0EsMkJBREEsR0FFQSx3Q0FGYjtBQUdELFNBSkQsTUFJTyxJQUFJLFVBQVVELElBQVYsQ0FBZVgsSUFBSSxDQUFDVSxJQUFwQixDQUFKLEVBQStCO0FBQ3BDTCxVQUFBQSxDQUFDLENBQUNPLE9BQUYsSUFBYSxvQ0FDQSwyQkFEQSxHQUVBLHdDQUZiO0FBR0QsU0FKTSxNQUlBLElBQUksV0FBV0QsSUFBWCxDQUFnQlgsSUFBSSxDQUFDVSxJQUFyQixDQUFKLEVBQWdDO0FBQ3JDTCxVQUFBQSxDQUFDLENBQUNPLE9BQUYsSUFBYSxvQ0FDQSwyQkFEQSxHQUVBLHdDQUZiO0FBR0Q7QUFDRjtBQUNGOztBQUNELFVBQU1QLENBQU47QUFDRDs7QUFFRCxTQUFPRixNQUFNLENBQUNVLElBQWQ7QUFDRDs7ZUFFY2YsSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZXIgZnJvbSAnLi9wYXJzZXInXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi9pbnB1dCdcblxuZnVuY3Rpb24gcGFyc2UgKGNzcywgb3B0cykge1xuICBsZXQgaW5wdXQgPSBuZXcgSW5wdXQoY3NzLCBvcHRzKVxuICBsZXQgcGFyc2VyID0gbmV3IFBhcnNlcihpbnB1dClcbiAgdHJ5IHtcbiAgICBwYXJzZXIucGFyc2UoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlLm5hbWUgPT09ICdDc3NTeW50YXhFcnJvcicgJiYgb3B0cyAmJiBvcHRzLmZyb20pIHtcbiAgICAgICAgaWYgKC9cXC5zY3NzJC9pLnRlc3Qob3B0cy5mcm9tKSkge1xuICAgICAgICAgIGUubWVzc2FnZSArPSAnXFxuWW91IHRyaWVkIHRvIHBhcnNlIFNDU1Mgd2l0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBzdGFuZGFyZCBDU1MgcGFyc2VyOyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgJ3RyeSBhZ2FpbiB3aXRoIHRoZSBwb3N0Y3NzLXNjc3MgcGFyc2VyJ1xuICAgICAgICB9IGVsc2UgaWYgKC9cXC5zYXNzL2kudGVzdChvcHRzLmZyb20pKSB7XG4gICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5Zb3UgdHJpZWQgdG8gcGFyc2UgU2FzcyB3aXRoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAndHJ5IGFnYWluIHdpdGggdGhlIHBvc3Rjc3Mtc2FzcyBwYXJzZXInXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcLmxlc3MkL2kudGVzdChvcHRzLmZyb20pKSB7XG4gICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5Zb3UgdHJpZWQgdG8gcGFyc2UgTGVzcyB3aXRoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAndHJ5IGFnYWluIHdpdGggdGhlIHBvc3Rjc3MtbGVzcyBwYXJzZXInXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlci5yb290XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlXG4iXSwiZmlsZSI6InBhcnNlLmpzIn0=
  2950. /***/ }),
  2951. /* 19 */
  2952. /***/ (function(module, exports, __webpack_require__) {
  2953. "use strict";
  2954. exports.__esModule = true;
  2955. exports.default = void 0;
  2956. var _node = _interopRequireDefault(__webpack_require__(16));
  2957. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2958. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  2959. /**
  2960. * Represents a comment between declarations or statements (rule and at-rules).
  2961. *
  2962. * Comments inside selectors, at-rule parameters, or declaration values
  2963. * will be stored in the `raws` properties explained above.
  2964. *
  2965. * @extends Node
  2966. */
  2967. var Comment = /*#__PURE__*/function (_Node) {
  2968. _inheritsLoose(Comment, _Node);
  2969. function Comment(defaults) {
  2970. var _this;
  2971. _this = _Node.call(this, defaults) || this;
  2972. _this.type = 'comment';
  2973. return _this;
  2974. }
  2975. /**
  2976. * @memberof Comment#
  2977. * @member {string} text The comment’s text.
  2978. */
  2979. /**
  2980. * @memberof Comment#
  2981. * @member {object} raws Information to generate byte-to-byte equal
  2982. * node string as it was in the origin input.
  2983. *
  2984. * Every parser saves its own properties,
  2985. * but the default CSS parser uses:
  2986. *
  2987. * * `before`: the space symbols before the node.
  2988. * * `left`: the space symbols between `/*` and the comment’s text.
  2989. * * `right`: the space symbols between the comment’s text.
  2990. */
  2991. return Comment;
  2992. }(_node.default);
  2993. var _default = Comment;
  2994. exports.default = _default;
  2995. module.exports = exports.default;
  2996. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1lbnQuZXM2Il0sIm5hbWVzIjpbIkNvbW1lbnQiLCJkZWZhdWx0cyIsInR5cGUiLCJOb2RlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7SUFRTUEsTzs7O0FBQ0osbUJBQWFDLFFBQWIsRUFBdUI7QUFBQTs7QUFDckIsNkJBQU1BLFFBQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksU0FBWjtBQUZxQjtBQUd0QjtBQUVEOzs7OztBQUtBOzs7Ozs7Ozs7Ozs7Ozs7RUFYb0JDLGE7O2VBeUJQSCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJ1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb21tZW50IGJldHdlZW4gZGVjbGFyYXRpb25zIG9yIHN0YXRlbWVudHMgKHJ1bGUgYW5kIGF0LXJ1bGVzKS5cbiAqXG4gKiBDb21tZW50cyBpbnNpZGUgc2VsZWN0b3JzLCBhdC1ydWxlIHBhcmFtZXRlcnMsIG9yIGRlY2xhcmF0aW9uIHZhbHVlc1xuICogd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGByYXdzYCBwcm9wZXJ0aWVzIGV4cGxhaW5lZCBhYm92ZS5cbiAqXG4gKiBAZXh0ZW5kcyBOb2RlXG4gKi9cbmNsYXNzIENvbW1lbnQgZXh0ZW5kcyBOb2RlIHtcbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ2NvbW1lbnQnXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIENvbW1lbnQjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gdGV4dCBUaGUgY29tbWVudOKAmXMgdGV4dC5cbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBDb21tZW50I1xuICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICpcbiAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICpcbiAgICogKiBgYmVmb3JlYDogdGhlIHNwYWNlIHN5bWJvbHMgYmVmb3JlIHRoZSBub2RlLlxuICAgKiAqIGBsZWZ0YDogdGhlIHNwYWNlIHN5bWJvbHMgYmV0d2VlbiBgLypgIGFuZCB0aGUgY29tbWVudOKAmXMgdGV4dC5cbiAgICogKiBgcmlnaHRgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZXR3ZWVuIHRoZSBjb21tZW504oCZcyB0ZXh0LlxuICAgKi9cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVudFxuIl0sImZpbGUiOiJjb21tZW50LmpzIn0=
  2997. /***/ }),
  2998. /* 20 */
  2999. /***/ (function(module, exports, __webpack_require__) {
  3000. "use strict";
  3001. exports.__esModule = true;
  3002. exports.default = void 0;
  3003. var _container = _interopRequireDefault(__webpack_require__(21));
  3004. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  3005. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  3006. /**
  3007. * Represents an at-rule.
  3008. *
  3009. * If it’s followed in the CSS by a {} block, this node will have
  3010. * a nodes property representing its children.
  3011. *
  3012. * @extends Container
  3013. *
  3014. * @example
  3015. * const root = postcss.parse('@charset "UTF-8"; @media print {}')
  3016. *
  3017. * const charset = root.first
  3018. * charset.type //=> 'atrule'
  3019. * charset.nodes //=> undefined
  3020. *
  3021. * const media = root.last
  3022. * media.nodes //=> []
  3023. */
  3024. var AtRule = /*#__PURE__*/function (_Container) {
  3025. _inheritsLoose(AtRule, _Container);
  3026. function AtRule(defaults) {
  3027. var _this;
  3028. _this = _Container.call(this, defaults) || this;
  3029. _this.type = 'atrule';
  3030. return _this;
  3031. }
  3032. var _proto = AtRule.prototype;
  3033. _proto.append = function append() {
  3034. var _Container$prototype$;
  3035. if (!this.nodes) this.nodes = [];
  3036. for (var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++) {
  3037. children[_key] = arguments[_key];
  3038. }
  3039. return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children));
  3040. };
  3041. _proto.prepend = function prepend() {
  3042. var _Container$prototype$2;
  3043. if (!this.nodes) this.nodes = [];
  3044. for (var _len2 = arguments.length, children = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  3045. children[_key2] = arguments[_key2];
  3046. }
  3047. return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children));
  3048. }
  3049. /**
  3050. * @memberof AtRule#
  3051. * @member {string} name The at-rule’s name immediately follows the `@`.
  3052. *
  3053. * @example
  3054. * const root = postcss.parse('@media print {}')
  3055. * media.name //=> 'media'
  3056. * const media = root.first
  3057. */
  3058. /**
  3059. * @memberof AtRule#
  3060. * @member {string} params The at-rule’s parameters, the values
  3061. * that follow the at-rule’s name but precede
  3062. * any {} block.
  3063. *
  3064. * @example
  3065. * const root = postcss.parse('@media print, screen {}')
  3066. * const media = root.first
  3067. * media.params //=> 'print, screen'
  3068. */
  3069. /**
  3070. * @memberof AtRule#
  3071. * @member {object} raws Information to generate byte-to-byte equal
  3072. * node string as it was in the origin input.
  3073. *
  3074. * Every parser saves its own properties,
  3075. * but the default CSS parser uses:
  3076. *
  3077. * * `before`: the space symbols before the node. It also stores `*`
  3078. * and `_` symbols before the declaration (IE hack).
  3079. * * `after`: the space symbols after the last child of the node
  3080. * to the end of the node.
  3081. * * `between`: the symbols between the property and value
  3082. * for declarations, selector and `{` for rules, or last parameter
  3083. * and `{` for at-rules.
  3084. * * `semicolon`: contains true if the last child has
  3085. * an (optional) semicolon.
  3086. * * `afterName`: the space between the at-rule name and its parameters.
  3087. *
  3088. * PostCSS cleans at-rule parameters from comments and extra spaces,
  3089. * but it stores origin content in raws properties.
  3090. * As such, if you don’t change a declaration’s value,
  3091. * PostCSS will use the raw value with comments.
  3092. *
  3093. * @example
  3094. * const root = postcss.parse(' @media\nprint {\n}')
  3095. * root.first.first.raws //=> { before: ' ',
  3096. * // between: ' ',
  3097. * // afterName: '\n',
  3098. * // after: '\n' }
  3099. */
  3100. ;
  3101. return AtRule;
  3102. }(_container.default);
  3103. var _default = AtRule;
  3104. exports.default = _default;
  3105. module.exports = exports.default;
  3106. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0LXJ1bGUuZXM2Il0sIm5hbWVzIjpbIkF0UnVsZSIsImRlZmF1bHRzIiwidHlwZSIsImFwcGVuZCIsIm5vZGVzIiwiY2hpbGRyZW4iLCJwcmVwZW5kIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0JNQSxNOzs7QUFDSixrQkFBYUMsUUFBYixFQUF1QjtBQUFBOztBQUNyQixrQ0FBTUEsUUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxRQUFaO0FBRnFCO0FBR3RCOzs7O1NBRURDLE0sR0FBQSxrQkFBcUI7QUFBQTs7QUFDbkIsUUFBSSxDQUFDLEtBQUtDLEtBQVYsRUFBaUIsS0FBS0EsS0FBTCxHQUFhLEVBQWI7O0FBREUsc0NBQVZDLFFBQVU7QUFBVkEsTUFBQUEsUUFBVTtBQUFBOztBQUVuQix5REFBYUYsTUFBYixrREFBdUJFLFFBQXZCO0FBQ0QsRzs7U0FFREMsTyxHQUFBLG1CQUFzQjtBQUFBOztBQUNwQixRQUFJLENBQUMsS0FBS0YsS0FBVixFQUFpQixLQUFLQSxLQUFMLEdBQWEsRUFBYjs7QUFERyx1Q0FBVkMsUUFBVTtBQUFWQSxNQUFBQSxRQUFVO0FBQUE7O0FBRXBCLDBEQUFhQyxPQUFiLG1EQUF3QkQsUUFBeEI7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUE7Ozs7Ozs7Ozs7OztBQVlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdENtQkUsa0I7O2VBdUVOUCxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbnRhaW5lcidcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF0LXJ1bGUuXG4gKlxuICogSWYgaXTigJlzIGZvbGxvd2VkIGluIHRoZSBDU1MgYnkgYSB7fSBibG9jaywgdGhpcyBub2RlIHdpbGwgaGF2ZVxuICogYSBub2RlcyBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBleHRlbmRzIENvbnRhaW5lclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnQGNoYXJzZXQgXCJVVEYtOFwiOyBAbWVkaWEgcHJpbnQge30nKVxuICpcbiAqIGNvbnN0IGNoYXJzZXQgPSByb290LmZpcnN0XG4gKiBjaGFyc2V0LnR5cGUgIC8vPT4gJ2F0cnVsZSdcbiAqIGNoYXJzZXQubm9kZXMgLy89PiB1bmRlZmluZWRcbiAqXG4gKiBjb25zdCBtZWRpYSA9IHJvb3QubGFzdFxuICogbWVkaWEubm9kZXMgICAvLz0+IFtdXG4gKi9cbmNsYXNzIEF0UnVsZSBleHRlbmRzIENvbnRhaW5lciB7XG4gIGNvbnN0cnVjdG9yIChkZWZhdWx0cykge1xuICAgIHN1cGVyKGRlZmF1bHRzKVxuICAgIHRoaXMudHlwZSA9ICdhdHJ1bGUnXG4gIH1cblxuICBhcHBlbmQgKC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0aGlzLm5vZGVzKSB0aGlzLm5vZGVzID0gW11cbiAgICByZXR1cm4gc3VwZXIuYXBwZW5kKC4uLmNoaWxkcmVuKVxuICB9XG5cbiAgcHJlcGVuZCAoLi4uY2hpbGRyZW4pIHtcbiAgICBpZiAoIXRoaXMubm9kZXMpIHRoaXMubm9kZXMgPSBbXVxuICAgIHJldHVybiBzdXBlci5wcmVwZW5kKC4uLmNoaWxkcmVuKVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBBdFJ1bGUjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gbmFtZSBUaGUgYXQtcnVsZeKAmXMgbmFtZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBgQGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgID0gcG9zdGNzcy5wYXJzZSgnQG1lZGlhIHByaW50IHt9JylcbiAgICogbWVkaWEubmFtZSAvLz0+ICdtZWRpYSdcbiAgICogY29uc3QgbWVkaWEgPSByb290LmZpcnN0XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgKiBAbWVtYmVyIHtzdHJpbmd9IHBhcmFtcyBUaGUgYXQtcnVsZeKAmXMgcGFyYW1ldGVycywgdGhlIHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZvbGxvdyB0aGUgYXQtcnVsZeKAmXMgbmFtZSBidXQgcHJlY2VkZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbnkge30gYmxvY2suXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgID0gcG9zdGNzcy5wYXJzZSgnQG1lZGlhIHByaW50LCBzY3JlZW4ge30nKVxuICAgKiBjb25zdCBtZWRpYSA9IHJvb3QuZmlyc3RcbiAgICogbWVkaWEucGFyYW1zIC8vPT4gJ3ByaW50LCBzY3JlZW4nXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSBzdHJpbmcgYXMgaXQgd2FzIGluIHRoZSBvcmlnaW4gaW5wdXQuXG4gICAqXG4gICAqIEV2ZXJ5IHBhcnNlciBzYXZlcyBpdHMgb3duIHByb3BlcnRpZXMsXG4gICAqIGJ1dCB0aGUgZGVmYXVsdCBDU1MgcGFyc2VyIHVzZXM6XG4gICAqXG4gICAqICogYGJlZm9yZWA6IHRoZSBzcGFjZSBzeW1ib2xzIGJlZm9yZSB0aGUgbm9kZS4gSXQgYWxzbyBzdG9yZXMgYCpgXG4gICAqICAgYW5kIGBfYCBzeW1ib2xzIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gKElFIGhhY2spLlxuICAgKiAqIGBhZnRlcmA6IHRoZSBzcGFjZSBzeW1ib2xzIGFmdGVyIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBub2RlXG4gICAqICAgdG8gdGhlIGVuZCBvZiB0aGUgbm9kZS5cbiAgICogKiBgYmV0d2VlbmA6IHRoZSBzeW1ib2xzIGJldHdlZW4gdGhlIHByb3BlcnR5IGFuZCB2YWx1ZVxuICAgKiAgIGZvciBkZWNsYXJhdGlvbnMsIHNlbGVjdG9yIGFuZCBge2AgZm9yIHJ1bGVzLCBvciBsYXN0IHBhcmFtZXRlclxuICAgKiAgIGFuZCBge2AgZm9yIGF0LXJ1bGVzLlxuICAgKiAqIGBzZW1pY29sb25gOiBjb250YWlucyB0cnVlIGlmIHRoZSBsYXN0IGNoaWxkIGhhc1xuICAgKiAgIGFuIChvcHRpb25hbCkgc2VtaWNvbG9uLlxuICAgKiAqIGBhZnRlck5hbWVgOiB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYXQtcnVsZSBuYW1lIGFuZCBpdHMgcGFyYW1ldGVycy5cbiAgICpcbiAgICogUG9zdENTUyBjbGVhbnMgYXQtcnVsZSBwYXJhbWV0ZXJzIGZyb20gY29tbWVudHMgYW5kIGV4dHJhIHNwYWNlcyxcbiAgICogYnV0IGl0IHN0b3JlcyBvcmlnaW4gY29udGVudCBpbiByYXdzIHByb3BlcnRpZXMuXG4gICAqIEFzIHN1Y2gsIGlmIHlvdSBkb27igJl0IGNoYW5nZSBhIGRlY2xhcmF0aW9u4oCZcyB2YWx1ZSxcbiAgICogUG9zdENTUyB3aWxsIHVzZSB0aGUgcmF3IHZhbHVlIHdpdGggY29tbWVudHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCcgIEBtZWRpYVxcbnByaW50IHtcXG59JylcbiAgICogcm9vdC5maXJzdC5maXJzdC5yYXdzIC8vPT4geyBiZWZvcmU6ICcgICcsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYmV0d2VlbjogJyAnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFmdGVyTmFtZTogJ1xcbicsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWZ0ZXI6ICdcXG4nIH1cbiAgICovXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0UnVsZVxuIl0sImZpbGUiOiJhdC1ydWxlLmpzIn0=
  3107. /***/ }),
  3108. /* 21 */
  3109. /***/ (function(module, exports, __webpack_require__) {
  3110. "use strict";
  3111. exports.__esModule = true;
  3112. exports.default = void 0;
  3113. var _declaration = _interopRequireDefault(__webpack_require__(15));
  3114. var _comment = _interopRequireDefault(__webpack_require__(19));
  3115. var _node = _interopRequireDefault(__webpack_require__(16));
  3116. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  3117. function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
  3118. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  3119. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  3120. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  3121. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  3122. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  3123. function cleanSource(nodes) {
  3124. return nodes.map(function (i) {
  3125. if (i.nodes) i.nodes = cleanSource(i.nodes);
  3126. delete i.source;
  3127. return i;
  3128. });
  3129. }
  3130. /**
  3131. * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes
  3132. * inherit some common methods to help work with their children.
  3133. *
  3134. * Note that all containers can store any content. If you write a rule inside
  3135. * a rule, PostCSS will parse it.
  3136. *
  3137. * @extends Node
  3138. * @abstract
  3139. */
  3140. var Container = /*#__PURE__*/function (_Node) {
  3141. _inheritsLoose(Container, _Node);
  3142. function Container() {
  3143. return _Node.apply(this, arguments) || this;
  3144. }
  3145. var _proto = Container.prototype;
  3146. _proto.push = function push(child) {
  3147. child.parent = this;
  3148. this.nodes.push(child);
  3149. return this;
  3150. }
  3151. /**
  3152. * Iterates through the container’s immediate children,
  3153. * calling `callback` for each child.
  3154. *
  3155. * Returning `false` in the callback will break iteration.
  3156. *
  3157. * This method only iterates through the container’s immediate children.
  3158. * If you need to recursively iterate through all the container’s descendant
  3159. * nodes, use {@link Container#walk}.
  3160. *
  3161. * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe
  3162. * if you are mutating the array of child nodes during iteration.
  3163. * PostCSS will adjust the current index to match the mutations.
  3164. *
  3165. * @param {childIterator} callback Iterator receives each node and index.
  3166. *
  3167. * @return {false|undefined} Returns `false` if iteration was broke.
  3168. *
  3169. * @example
  3170. * const root = postcss.parse('a { color: black; z-index: 1 }')
  3171. * const rule = root.first
  3172. *
  3173. * for (const decl of rule.nodes) {
  3174. * decl.cloneBefore({ prop: '-webkit-' + decl.prop })
  3175. * // Cycle will be infinite, because cloneBefore moves the current node
  3176. * // to the next index
  3177. * }
  3178. *
  3179. * rule.each(decl => {
  3180. * decl.cloneBefore({ prop: '-webkit-' + decl.prop })
  3181. * // Will be executed only for color and z-index
  3182. * })
  3183. */
  3184. ;
  3185. _proto.each = function each(callback) {
  3186. if (!this.lastEach) this.lastEach = 0;
  3187. if (!this.indexes) this.indexes = {};
  3188. this.lastEach += 1;
  3189. var id = this.lastEach;
  3190. this.indexes[id] = 0;
  3191. if (!this.nodes) return undefined;
  3192. var index, result;
  3193. while (this.indexes[id] < this.nodes.length) {
  3194. index = this.indexes[id];
  3195. result = callback(this.nodes[index], index);
  3196. if (result === false) break;
  3197. this.indexes[id] += 1;
  3198. }
  3199. delete this.indexes[id];
  3200. return result;
  3201. }
  3202. /**
  3203. * Traverses the container’s descendant nodes, calling callback
  3204. * for each node.
  3205. *
  3206. * Like container.each(), this method is safe to use
  3207. * if you are mutating arrays during iteration.
  3208. *
  3209. * If you only need to iterate through the container’s immediate children,
  3210. * use {@link Container#each}.
  3211. *
  3212. * @param {childIterator} callback Iterator receives each node and index.
  3213. *
  3214. * @return {false|undefined} Returns `false` if iteration was broke.
  3215. *
  3216. * @example
  3217. * root.walk(node => {
  3218. * // Traverses all descendant nodes.
  3219. * })
  3220. */
  3221. ;
  3222. _proto.walk = function walk(callback) {
  3223. return this.each(function (child, i) {
  3224. var result;
  3225. try {
  3226. result = callback(child, i);
  3227. } catch (e) {
  3228. e.postcssNode = child;
  3229. if (e.stack && child.source && /\n\s{4}at /.test(e.stack)) {
  3230. var s = child.source;
  3231. e.stack = e.stack.replace(/\n\s{4}at /, "$&" + s.input.from + ":" + s.start.line + ":" + s.start.column + "$&");
  3232. }
  3233. throw e;
  3234. }
  3235. if (result !== false && child.walk) {
  3236. result = child.walk(callback);
  3237. }
  3238. return result;
  3239. });
  3240. }
  3241. /**
  3242. * Traverses the container’s descendant nodes, calling callback
  3243. * for each declaration node.
  3244. *
  3245. * If you pass a filter, iteration will only happen over declarations
  3246. * with matching properties.
  3247. *
  3248. * Like {@link Container#each}, this method is safe
  3249. * to use if you are mutating arrays during iteration.
  3250. *
  3251. * @param {string|RegExp} [prop] String or regular expression
  3252. * to filter declarations by property name.
  3253. * @param {childIterator} callback Iterator receives each node and index.
  3254. *
  3255. * @return {false|undefined} Returns `false` if iteration was broke.
  3256. *
  3257. * @example
  3258. * root.walkDecls(decl => {
  3259. * checkPropertySupport(decl.prop)
  3260. * })
  3261. *
  3262. * root.walkDecls('border-radius', decl => {
  3263. * decl.remove()
  3264. * })
  3265. *
  3266. * root.walkDecls(/^background/, decl => {
  3267. * decl.value = takeFirstColorFromGradient(decl.value)
  3268. * })
  3269. */
  3270. ;
  3271. _proto.walkDecls = function walkDecls(prop, callback) {
  3272. if (!callback) {
  3273. callback = prop;
  3274. return this.walk(function (child, i) {
  3275. if (child.type === 'decl') {
  3276. return callback(child, i);
  3277. }
  3278. });
  3279. }
  3280. if (prop instanceof RegExp) {
  3281. return this.walk(function (child, i) {
  3282. if (child.type === 'decl' && prop.test(child.prop)) {
  3283. return callback(child, i);
  3284. }
  3285. });
  3286. }
  3287. return this.walk(function (child, i) {
  3288. if (child.type === 'decl' && child.prop === prop) {
  3289. return callback(child, i);
  3290. }
  3291. });
  3292. }
  3293. /**
  3294. * Traverses the container’s descendant nodes, calling callback
  3295. * for each rule node.
  3296. *
  3297. * If you pass a filter, iteration will only happen over rules
  3298. * with matching selectors.
  3299. *
  3300. * Like {@link Container#each}, this method is safe
  3301. * to use if you are mutating arrays during iteration.
  3302. *
  3303. * @param {string|RegExp} [selector] String or regular expression
  3304. * to filter rules by selector.
  3305. * @param {childIterator} callback Iterator receives each node and index.
  3306. *
  3307. * @return {false|undefined} returns `false` if iteration was broke.
  3308. *
  3309. * @example
  3310. * const selectors = []
  3311. * root.walkRules(rule => {
  3312. * selectors.push(rule.selector)
  3313. * })
  3314. * console.log(`Your CSS uses ${ selectors.length } selectors`)
  3315. */
  3316. ;
  3317. _proto.walkRules = function walkRules(selector, callback) {
  3318. if (!callback) {
  3319. callback = selector;
  3320. return this.walk(function (child, i) {
  3321. if (child.type === 'rule') {
  3322. return callback(child, i);
  3323. }
  3324. });
  3325. }
  3326. if (selector instanceof RegExp) {
  3327. return this.walk(function (child, i) {
  3328. if (child.type === 'rule' && selector.test(child.selector)) {
  3329. return callback(child, i);
  3330. }
  3331. });
  3332. }
  3333. return this.walk(function (child, i) {
  3334. if (child.type === 'rule' && child.selector === selector) {
  3335. return callback(child, i);
  3336. }
  3337. });
  3338. }
  3339. /**
  3340. * Traverses the container’s descendant nodes, calling callback
  3341. * for each at-rule node.
  3342. *
  3343. * If you pass a filter, iteration will only happen over at-rules
  3344. * that have matching names.
  3345. *
  3346. * Like {@link Container#each}, this method is safe
  3347. * to use if you are mutating arrays during iteration.
  3348. *
  3349. * @param {string|RegExp} [name] String or regular expression
  3350. * to filter at-rules by name.
  3351. * @param {childIterator} callback Iterator receives each node and index.
  3352. *
  3353. * @return {false|undefined} Returns `false` if iteration was broke.
  3354. *
  3355. * @example
  3356. * root.walkAtRules(rule => {
  3357. * if (isOld(rule.name)) rule.remove()
  3358. * })
  3359. *
  3360. * let first = false
  3361. * root.walkAtRules('charset', rule => {
  3362. * if (!first) {
  3363. * first = true
  3364. * } else {
  3365. * rule.remove()
  3366. * }
  3367. * })
  3368. */
  3369. ;
  3370. _proto.walkAtRules = function walkAtRules(name, callback) {
  3371. if (!callback) {
  3372. callback = name;
  3373. return this.walk(function (child, i) {
  3374. if (child.type === 'atrule') {
  3375. return callback(child, i);
  3376. }
  3377. });
  3378. }
  3379. if (name instanceof RegExp) {
  3380. return this.walk(function (child, i) {
  3381. if (child.type === 'atrule' && name.test(child.name)) {
  3382. return callback(child, i);
  3383. }
  3384. });
  3385. }
  3386. return this.walk(function (child, i) {
  3387. if (child.type === 'atrule' && child.name === name) {
  3388. return callback(child, i);
  3389. }
  3390. });
  3391. }
  3392. /**
  3393. * Traverses the container’s descendant nodes, calling callback
  3394. * for each comment node.
  3395. *
  3396. * Like {@link Container#each}, this method is safe
  3397. * to use if you are mutating arrays during iteration.
  3398. *
  3399. * @param {childIterator} callback Iterator receives each node and index.
  3400. *
  3401. * @return {false|undefined} Returns `false` if iteration was broke.
  3402. *
  3403. * @example
  3404. * root.walkComments(comment => {
  3405. * comment.remove()
  3406. * })
  3407. */
  3408. ;
  3409. _proto.walkComments = function walkComments(callback) {
  3410. return this.walk(function (child, i) {
  3411. if (child.type === 'comment') {
  3412. return callback(child, i);
  3413. }
  3414. });
  3415. }
  3416. /**
  3417. * Inserts new nodes to the end of the container.
  3418. *
  3419. * @param {...(Node|object|string|Node[])} children New nodes.
  3420. *
  3421. * @return {Node} This node for methods chain.
  3422. *
  3423. * @example
  3424. * const decl1 = postcss.decl({ prop: 'color', value: 'black' })
  3425. * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' })
  3426. * rule.append(decl1, decl2)
  3427. *
  3428. * root.append({ name: 'charset', params: '"UTF-8"' }) // at-rule
  3429. * root.append({ selector: 'a' }) // rule
  3430. * rule.append({ prop: 'color', value: 'black' }) // declaration
  3431. * rule.append({ text: 'Comment' }) // comment
  3432. *
  3433. * root.append('a {}')
  3434. * root.first.append('color: black; z-index: 1')
  3435. */
  3436. ;
  3437. _proto.append = function append() {
  3438. for (var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++) {
  3439. children[_key] = arguments[_key];
  3440. }
  3441. for (var _i = 0, _children = children; _i < _children.length; _i++) {
  3442. var child = _children[_i];
  3443. var nodes = this.normalize(child, this.last);
  3444. for (var _iterator = _createForOfIteratorHelperLoose(nodes), _step; !(_step = _iterator()).done;) {
  3445. var node = _step.value;
  3446. this.nodes.push(node);
  3447. }
  3448. }
  3449. return this;
  3450. }
  3451. /**
  3452. * Inserts new nodes to the start of the container.
  3453. *
  3454. * @param {...(Node|object|string|Node[])} children New nodes.
  3455. *
  3456. * @return {Node} This node for methods chain.
  3457. *
  3458. * @example
  3459. * const decl1 = postcss.decl({ prop: 'color', value: 'black' })
  3460. * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' })
  3461. * rule.prepend(decl1, decl2)
  3462. *
  3463. * root.append({ name: 'charset', params: '"UTF-8"' }) // at-rule
  3464. * root.append({ selector: 'a' }) // rule
  3465. * rule.append({ prop: 'color', value: 'black' }) // declaration
  3466. * rule.append({ text: 'Comment' }) // comment
  3467. *
  3468. * root.append('a {}')
  3469. * root.first.append('color: black; z-index: 1')
  3470. */
  3471. ;
  3472. _proto.prepend = function prepend() {
  3473. for (var _len2 = arguments.length, children = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  3474. children[_key2] = arguments[_key2];
  3475. }
  3476. children = children.reverse();
  3477. for (var _iterator2 = _createForOfIteratorHelperLoose(children), _step2; !(_step2 = _iterator2()).done;) {
  3478. var child = _step2.value;
  3479. var nodes = this.normalize(child, this.first, 'prepend').reverse();
  3480. for (var _iterator3 = _createForOfIteratorHelperLoose(nodes), _step3; !(_step3 = _iterator3()).done;) {
  3481. var node = _step3.value;
  3482. this.nodes.unshift(node);
  3483. }
  3484. for (var id in this.indexes) {
  3485. this.indexes[id] = this.indexes[id] + nodes.length;
  3486. }
  3487. }
  3488. return this;
  3489. };
  3490. _proto.cleanRaws = function cleanRaws(keepBetween) {
  3491. _Node.prototype.cleanRaws.call(this, keepBetween);
  3492. if (this.nodes) {
  3493. for (var _iterator4 = _createForOfIteratorHelperLoose(this.nodes), _step4; !(_step4 = _iterator4()).done;) {
  3494. var node = _step4.value;
  3495. node.cleanRaws(keepBetween);
  3496. }
  3497. }
  3498. }
  3499. /**
  3500. * Insert new node before old node within the container.
  3501. *
  3502. * @param {Node|number} exist Child or child’s index.
  3503. * @param {Node|object|string|Node[]} add New node.
  3504. *
  3505. * @return {Node} This node for methods chain.
  3506. *
  3507. * @example
  3508. * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }))
  3509. */
  3510. ;
  3511. _proto.insertBefore = function insertBefore(exist, add) {
  3512. exist = this.index(exist);
  3513. var type = exist === 0 ? 'prepend' : false;
  3514. var nodes = this.normalize(add, this.nodes[exist], type).reverse();
  3515. for (var _iterator5 = _createForOfIteratorHelperLoose(nodes), _step5; !(_step5 = _iterator5()).done;) {
  3516. var node = _step5.value;
  3517. this.nodes.splice(exist, 0, node);
  3518. }
  3519. var index;
  3520. for (var id in this.indexes) {
  3521. index = this.indexes[id];
  3522. if (exist <= index) {
  3523. this.indexes[id] = index + nodes.length;
  3524. }
  3525. }
  3526. return this;
  3527. }
  3528. /**
  3529. * Insert new node after old node within the container.
  3530. *
  3531. * @param {Node|number} exist Child or child’s index.
  3532. * @param {Node|object|string|Node[]} add New node.
  3533. *
  3534. * @return {Node} This node for methods chain.
  3535. */
  3536. ;
  3537. _proto.insertAfter = function insertAfter(exist, add) {
  3538. exist = this.index(exist);
  3539. var nodes = this.normalize(add, this.nodes[exist]).reverse();
  3540. for (var _iterator6 = _createForOfIteratorHelperLoose(nodes), _step6; !(_step6 = _iterator6()).done;) {
  3541. var node = _step6.value;
  3542. this.nodes.splice(exist + 1, 0, node);
  3543. }
  3544. var index;
  3545. for (var id in this.indexes) {
  3546. index = this.indexes[id];
  3547. if (exist < index) {
  3548. this.indexes[id] = index + nodes.length;
  3549. }
  3550. }
  3551. return this;
  3552. }
  3553. /**
  3554. * Removes node from the container and cleans the parent properties
  3555. * from the node and its children.
  3556. *
  3557. * @param {Node|number} child Child or child’s index.
  3558. *
  3559. * @return {Node} This node for methods chain
  3560. *
  3561. * @example
  3562. * rule.nodes.length //=> 5
  3563. * rule.removeChild(decl)
  3564. * rule.nodes.length //=> 4
  3565. * decl.parent //=> undefined
  3566. */
  3567. ;
  3568. _proto.removeChild = function removeChild(child) {
  3569. child = this.index(child);
  3570. this.nodes[child].parent = undefined;
  3571. this.nodes.splice(child, 1);
  3572. var index;
  3573. for (var id in this.indexes) {
  3574. index = this.indexes[id];
  3575. if (index >= child) {
  3576. this.indexes[id] = index - 1;
  3577. }
  3578. }
  3579. return this;
  3580. }
  3581. /**
  3582. * Removes all children from the container
  3583. * and cleans their parent properties.
  3584. *
  3585. * @return {Node} This node for methods chain.
  3586. *
  3587. * @example
  3588. * rule.removeAll()
  3589. * rule.nodes.length //=> 0
  3590. */
  3591. ;
  3592. _proto.removeAll = function removeAll() {
  3593. for (var _iterator7 = _createForOfIteratorHelperLoose(this.nodes), _step7; !(_step7 = _iterator7()).done;) {
  3594. var node = _step7.value;
  3595. node.parent = undefined;
  3596. }
  3597. this.nodes = [];
  3598. return this;
  3599. }
  3600. /**
  3601. * Passes all declaration values within the container that match pattern
  3602. * through callback, replacing those values with the returned result
  3603. * of callback.
  3604. *
  3605. * This method is useful if you are using a custom unit or function
  3606. * and need to iterate through all values.
  3607. *
  3608. * @param {string|RegExp} pattern Replace pattern.
  3609. * @param {object} opts Options to speed up the search.
  3610. * @param {string|string[]} opts.props An array of property names.
  3611. * @param {string} opts.fast String that’s used to narrow down
  3612. * values and speed up the regexp search.
  3613. * @param {function|string} callback String to replace pattern or callback
  3614. * that returns a new value. The callback
  3615. * will receive the same arguments
  3616. * as those passed to a function parameter
  3617. * of `String#replace`.
  3618. *
  3619. * @return {Node} This node for methods chain.
  3620. *
  3621. * @example
  3622. * root.replaceValues(/\d+rem/, { fast: 'rem' }, string => {
  3623. * return 15 * parseInt(string) + 'px'
  3624. * })
  3625. */
  3626. ;
  3627. _proto.replaceValues = function replaceValues(pattern, opts, callback) {
  3628. if (!callback) {
  3629. callback = opts;
  3630. opts = {};
  3631. }
  3632. this.walkDecls(function (decl) {
  3633. if (opts.props && opts.props.indexOf(decl.prop) === -1) return;
  3634. if (opts.fast && decl.value.indexOf(opts.fast) === -1) return;
  3635. decl.value = decl.value.replace(pattern, callback);
  3636. });
  3637. return this;
  3638. }
  3639. /**
  3640. * Returns `true` if callback returns `true`
  3641. * for all of the container’s children.
  3642. *
  3643. * @param {childCondition} condition Iterator returns true or false.
  3644. *
  3645. * @return {boolean} Is every child pass condition.
  3646. *
  3647. * @example
  3648. * const noPrefixes = rule.every(i => i.prop[0] !== '-')
  3649. */
  3650. ;
  3651. _proto.every = function every(condition) {
  3652. return this.nodes.every(condition);
  3653. }
  3654. /**
  3655. * Returns `true` if callback returns `true` for (at least) one
  3656. * of the container’s children.
  3657. *
  3658. * @param {childCondition} condition Iterator returns true or false.
  3659. *
  3660. * @return {boolean} Is some child pass condition.
  3661. *
  3662. * @example
  3663. * const hasPrefix = rule.some(i => i.prop[0] === '-')
  3664. */
  3665. ;
  3666. _proto.some = function some(condition) {
  3667. return this.nodes.some(condition);
  3668. }
  3669. /**
  3670. * Returns a `child`’s index within the {@link Container#nodes} array.
  3671. *
  3672. * @param {Node} child Child of the current container.
  3673. *
  3674. * @return {number} Child index.
  3675. *
  3676. * @example
  3677. * rule.index( rule.nodes[2] ) //=> 2
  3678. */
  3679. ;
  3680. _proto.index = function index(child) {
  3681. if (typeof child === 'number') {
  3682. return child;
  3683. }
  3684. return this.nodes.indexOf(child);
  3685. }
  3686. /**
  3687. * The container’s first child.
  3688. *
  3689. * @type {Node}
  3690. *
  3691. * @example
  3692. * rule.first === rules.nodes[0]
  3693. */
  3694. ;
  3695. _proto.normalize = function normalize(nodes, sample) {
  3696. var _this = this;
  3697. if (typeof nodes === 'string') {
  3698. var parse = __webpack_require__(18);
  3699. nodes = cleanSource(parse(nodes).nodes);
  3700. } else if (Array.isArray(nodes)) {
  3701. nodes = nodes.slice(0);
  3702. for (var _iterator8 = _createForOfIteratorHelperLoose(nodes), _step8; !(_step8 = _iterator8()).done;) {
  3703. var i = _step8.value;
  3704. if (i.parent) i.parent.removeChild(i, 'ignore');
  3705. }
  3706. } else if (nodes.type === 'root') {
  3707. nodes = nodes.nodes.slice(0);
  3708. for (var _iterator9 = _createForOfIteratorHelperLoose(nodes), _step9; !(_step9 = _iterator9()).done;) {
  3709. var _i2 = _step9.value;
  3710. if (_i2.parent) _i2.parent.removeChild(_i2, 'ignore');
  3711. }
  3712. } else if (nodes.type) {
  3713. nodes = [nodes];
  3714. } else if (nodes.prop) {
  3715. if (typeof nodes.value === 'undefined') {
  3716. throw new Error('Value field is missed in node creation');
  3717. } else if (typeof nodes.value !== 'string') {
  3718. nodes.value = String(nodes.value);
  3719. }
  3720. nodes = [new _declaration.default(nodes)];
  3721. } else if (nodes.selector) {
  3722. var Rule = __webpack_require__(22);
  3723. nodes = [new Rule(nodes)];
  3724. } else if (nodes.name) {
  3725. var AtRule = __webpack_require__(20);
  3726. nodes = [new AtRule(nodes)];
  3727. } else if (nodes.text) {
  3728. nodes = [new _comment.default(nodes)];
  3729. } else {
  3730. throw new Error('Unknown node type in node creation');
  3731. }
  3732. var processed = nodes.map(function (i) {
  3733. if (i.parent) i.parent.removeChild(i);
  3734. if (typeof i.raws.before === 'undefined') {
  3735. if (sample && typeof sample.raws.before !== 'undefined') {
  3736. i.raws.before = sample.raws.before.replace(/[^\s]/g, '');
  3737. }
  3738. }
  3739. i.parent = _this;
  3740. return i;
  3741. });
  3742. return processed;
  3743. }
  3744. /**
  3745. * @memberof Container#
  3746. * @member {Node[]} nodes An array containing the container’s children.
  3747. *
  3748. * @example
  3749. * const root = postcss.parse('a { color: black }')
  3750. * root.nodes.length //=> 1
  3751. * root.nodes[0].selector //=> 'a'
  3752. * root.nodes[0].nodes[0].prop //=> 'color'
  3753. */
  3754. ;
  3755. _createClass(Container, [{
  3756. key: "first",
  3757. get: function get() {
  3758. if (!this.nodes) return undefined;
  3759. return this.nodes[0];
  3760. }
  3761. /**
  3762. * The container’s last child.
  3763. *
  3764. * @type {Node}
  3765. *
  3766. * @example
  3767. * rule.last === rule.nodes[rule.nodes.length - 1]
  3768. */
  3769. }, {
  3770. key: "last",
  3771. get: function get() {
  3772. if (!this.nodes) return undefined;
  3773. return this.nodes[this.nodes.length - 1];
  3774. }
  3775. }]);
  3776. return Container;
  3777. }(_node.default);
  3778. var _default = Container;
  3779. /**
  3780. * @callback childCondition
  3781. * @param {Node} node Container child.
  3782. * @param {number} index Child index.
  3783. * @param {Node[]} nodes All container children.
  3784. * @return {boolean}
  3785. */
  3786. /**
  3787. * @callback childIterator
  3788. * @param {Node} node Container child.
  3789. * @param {number} index Child index.
  3790. * @return {false|undefined} Returning `false` will break iteration.
  3791. */
  3792. exports.default = _default;
  3793. module.exports = exports.default;
  3794. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRhaW5lci5lczYiXSwibmFtZXMiOlsiY2xlYW5Tb3VyY2UiLCJub2RlcyIsIm1hcCIsImkiLCJzb3VyY2UiLCJDb250YWluZXIiLCJwdXNoIiwiY2hpbGQiLCJwYXJlbnQiLCJlYWNoIiwiY2FsbGJhY2siLCJsYXN0RWFjaCIsImluZGV4ZXMiLCJpZCIsInVuZGVmaW5lZCIsImluZGV4IiwicmVzdWx0IiwibGVuZ3RoIiwid2FsayIsImUiLCJwb3N0Y3NzTm9kZSIsInN0YWNrIiwidGVzdCIsInMiLCJyZXBsYWNlIiwiaW5wdXQiLCJmcm9tIiwic3RhcnQiLCJsaW5lIiwiY29sdW1uIiwid2Fsa0RlY2xzIiwicHJvcCIsInR5cGUiLCJSZWdFeHAiLCJ3YWxrUnVsZXMiLCJzZWxlY3RvciIsIndhbGtBdFJ1bGVzIiwibmFtZSIsIndhbGtDb21tZW50cyIsImFwcGVuZCIsImNoaWxkcmVuIiwibm9ybWFsaXplIiwibGFzdCIsIm5vZGUiLCJwcmVwZW5kIiwicmV2ZXJzZSIsImZpcnN0IiwidW5zaGlmdCIsImNsZWFuUmF3cyIsImtlZXBCZXR3ZWVuIiwiaW5zZXJ0QmVmb3JlIiwiZXhpc3QiLCJhZGQiLCJzcGxpY2UiLCJpbnNlcnRBZnRlciIsInJlbW92ZUNoaWxkIiwicmVtb3ZlQWxsIiwicmVwbGFjZVZhbHVlcyIsInBhdHRlcm4iLCJvcHRzIiwiZGVjbCIsInByb3BzIiwiaW5kZXhPZiIsImZhc3QiLCJ2YWx1ZSIsImV2ZXJ5IiwiY29uZGl0aW9uIiwic29tZSIsInNhbXBsZSIsInBhcnNlIiwicmVxdWlyZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiRXJyb3IiLCJTdHJpbmciLCJEZWNsYXJhdGlvbiIsIlJ1bGUiLCJBdFJ1bGUiLCJ0ZXh0IiwiQ29tbWVudCIsInByb2Nlc3NlZCIsInJhd3MiLCJiZWZvcmUiLCJOb2RlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsV0FBVCxDQUFzQkMsS0FBdEIsRUFBNkI7QUFDM0IsU0FBT0EsS0FBSyxDQUFDQyxHQUFOLENBQVUsVUFBQUMsQ0FBQyxFQUFJO0FBQ3BCLFFBQUlBLENBQUMsQ0FBQ0YsS0FBTixFQUFhRSxDQUFDLENBQUNGLEtBQUYsR0FBVUQsV0FBVyxDQUFDRyxDQUFDLENBQUNGLEtBQUgsQ0FBckI7QUFDYixXQUFPRSxDQUFDLENBQUNDLE1BQVQ7QUFDQSxXQUFPRCxDQUFQO0FBQ0QsR0FKTSxDQUFQO0FBS0Q7QUFFRDs7Ozs7Ozs7Ozs7O0lBVU1FLFM7Ozs7Ozs7OztTQUNKQyxJLEdBQUEsY0FBTUMsS0FBTixFQUFhO0FBQ1hBLElBQUFBLEtBQUssQ0FBQ0MsTUFBTixHQUFlLElBQWY7QUFDQSxTQUFLUCxLQUFMLENBQVdLLElBQVgsQ0FBZ0JDLEtBQWhCO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FpQ0FFLEksR0FBQSxjQUFNQyxRQUFOLEVBQWdCO0FBQ2QsUUFBSSxDQUFDLEtBQUtDLFFBQVYsRUFBb0IsS0FBS0EsUUFBTCxHQUFnQixDQUFoQjtBQUNwQixRQUFJLENBQUMsS0FBS0MsT0FBVixFQUFtQixLQUFLQSxPQUFMLEdBQWUsRUFBZjtBQUVuQixTQUFLRCxRQUFMLElBQWlCLENBQWpCO0FBQ0EsUUFBSUUsRUFBRSxHQUFHLEtBQUtGLFFBQWQ7QUFDQSxTQUFLQyxPQUFMLENBQWFDLEVBQWIsSUFBbUIsQ0FBbkI7QUFFQSxRQUFJLENBQUMsS0FBS1osS0FBVixFQUFpQixPQUFPYSxTQUFQO0FBRWpCLFFBQUlDLEtBQUosRUFBV0MsTUFBWDs7QUFDQSxXQUFPLEtBQUtKLE9BQUwsQ0FBYUMsRUFBYixJQUFtQixLQUFLWixLQUFMLENBQVdnQixNQUFyQyxFQUE2QztBQUMzQ0YsTUFBQUEsS0FBSyxHQUFHLEtBQUtILE9BQUwsQ0FBYUMsRUFBYixDQUFSO0FBQ0FHLE1BQUFBLE1BQU0sR0FBR04sUUFBUSxDQUFDLEtBQUtULEtBQUwsQ0FBV2MsS0FBWCxDQUFELEVBQW9CQSxLQUFwQixDQUFqQjtBQUNBLFVBQUlDLE1BQU0sS0FBSyxLQUFmLEVBQXNCO0FBRXRCLFdBQUtKLE9BQUwsQ0FBYUMsRUFBYixLQUFvQixDQUFwQjtBQUNEOztBQUVELFdBQU8sS0FBS0QsT0FBTCxDQUFhQyxFQUFiLENBQVA7QUFFQSxXQUFPRyxNQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBbUJBRSxJLEdBQUEsY0FBTVIsUUFBTixFQUFnQjtBQUNkLFdBQU8sS0FBS0QsSUFBTCxDQUFVLFVBQUNGLEtBQUQsRUFBUUosQ0FBUixFQUFjO0FBQzdCLFVBQUlhLE1BQUo7O0FBQ0EsVUFBSTtBQUNGQSxRQUFBQSxNQUFNLEdBQUdOLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRSixDQUFSLENBQWpCO0FBQ0QsT0FGRCxDQUVFLE9BQU9nQixDQUFQLEVBQVU7QUFDVkEsUUFBQUEsQ0FBQyxDQUFDQyxXQUFGLEdBQWdCYixLQUFoQjs7QUFDQSxZQUFJWSxDQUFDLENBQUNFLEtBQUYsSUFBV2QsS0FBSyxDQUFDSCxNQUFqQixJQUEyQixhQUFha0IsSUFBYixDQUFrQkgsQ0FBQyxDQUFDRSxLQUFwQixDQUEvQixFQUEyRDtBQUN6RCxjQUFJRSxDQUFDLEdBQUdoQixLQUFLLENBQUNILE1BQWQ7QUFDQWUsVUFBQUEsQ0FBQyxDQUFDRSxLQUFGLEdBQVVGLENBQUMsQ0FBQ0UsS0FBRixDQUFRRyxPQUFSLENBQWdCLFlBQWhCLFNBQ0ZELENBQUMsQ0FBQ0UsS0FBRixDQUFRQyxJQUROLFNBQ2dCSCxDQUFDLENBQUNJLEtBQUYsQ0FBUUMsSUFEeEIsU0FDa0NMLENBQUMsQ0FBQ0ksS0FBRixDQUFRRSxNQUQxQyxRQUFWO0FBRUQ7O0FBQ0QsY0FBTVYsQ0FBTjtBQUNEOztBQUNELFVBQUlILE1BQU0sS0FBSyxLQUFYLElBQW9CVCxLQUFLLENBQUNXLElBQTlCLEVBQW9DO0FBQ2xDRixRQUFBQSxNQUFNLEdBQUdULEtBQUssQ0FBQ1csSUFBTixDQUFXUixRQUFYLENBQVQ7QUFDRDs7QUFDRCxhQUFPTSxNQUFQO0FBQ0QsS0FqQk0sQ0FBUDtBQWtCRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBNkJBYyxTLEdBQUEsbUJBQVdDLElBQVgsRUFBaUJyQixRQUFqQixFQUEyQjtBQUN6QixRQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNiQSxNQUFBQSxRQUFRLEdBQUdxQixJQUFYO0FBQ0EsYUFBTyxLQUFLYixJQUFMLENBQVUsVUFBQ1gsS0FBRCxFQUFRSixDQUFSLEVBQWM7QUFDN0IsWUFBSUksS0FBSyxDQUFDeUIsSUFBTixLQUFlLE1BQW5CLEVBQTJCO0FBQ3pCLGlCQUFPdEIsUUFBUSxDQUFDSCxLQUFELEVBQVFKLENBQVIsQ0FBZjtBQUNEO0FBQ0YsT0FKTSxDQUFQO0FBS0Q7O0FBQ0QsUUFBSTRCLElBQUksWUFBWUUsTUFBcEIsRUFBNEI7QUFDMUIsYUFBTyxLQUFLZixJQUFMLENBQVUsVUFBQ1gsS0FBRCxFQUFRSixDQUFSLEVBQWM7QUFDN0IsWUFBSUksS0FBSyxDQUFDeUIsSUFBTixLQUFlLE1BQWYsSUFBeUJELElBQUksQ0FBQ1QsSUFBTCxDQUFVZixLQUFLLENBQUN3QixJQUFoQixDQUE3QixFQUFvRDtBQUNsRCxpQkFBT3JCLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRSixDQUFSLENBQWY7QUFDRDtBQUNGLE9BSk0sQ0FBUDtBQUtEOztBQUNELFdBQU8sS0FBS2UsSUFBTCxDQUFVLFVBQUNYLEtBQUQsRUFBUUosQ0FBUixFQUFjO0FBQzdCLFVBQUlJLEtBQUssQ0FBQ3lCLElBQU4sS0FBZSxNQUFmLElBQXlCekIsS0FBSyxDQUFDd0IsSUFBTixLQUFlQSxJQUE1QyxFQUFrRDtBQUNoRCxlQUFPckIsUUFBUSxDQUFDSCxLQUFELEVBQVFKLENBQVIsQ0FBZjtBQUNEO0FBQ0YsS0FKTSxDQUFQO0FBS0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXVCQStCLFMsR0FBQSxtQkFBV0MsUUFBWCxFQUFxQnpCLFFBQXJCLEVBQStCO0FBQzdCLFFBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2JBLE1BQUFBLFFBQVEsR0FBR3lCLFFBQVg7QUFFQSxhQUFPLEtBQUtqQixJQUFMLENBQVUsVUFBQ1gsS0FBRCxFQUFRSixDQUFSLEVBQWM7QUFDN0IsWUFBSUksS0FBSyxDQUFDeUIsSUFBTixLQUFlLE1BQW5CLEVBQTJCO0FBQ3pCLGlCQUFPdEIsUUFBUSxDQUFDSCxLQUFELEVBQVFKLENBQVIsQ0FBZjtBQUNEO0FBQ0YsT0FKTSxDQUFQO0FBS0Q7O0FBQ0QsUUFBSWdDLFFBQVEsWUFBWUYsTUFBeEIsRUFBZ0M7QUFDOUIsYUFBTyxLQUFLZixJQUFMLENBQVUsVUFBQ1gsS0FBRCxFQUFRSixDQUFSLEVBQWM7QUFDN0IsWUFBSUksS0FBSyxDQUFDeUIsSUFBTixLQUFlLE1BQWYsSUFBeUJHLFFBQVEsQ0FBQ2IsSUFBVCxDQUFjZixLQUFLLENBQUM0QixRQUFwQixDQUE3QixFQUE0RDtBQUMxRCxpQkFBT3pCLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRSixDQUFSLENBQWY7QUFDRDtBQUNGLE9BSk0sQ0FBUDtBQUtEOztBQUNELFdBQU8sS0FBS2UsSUFBTCxDQUFVLFVBQUNYLEtBQUQsRUFBUUosQ0FBUixFQUFjO0FBQzdCLFVBQUlJLEtBQUssQ0FBQ3lCLElBQU4sS0FBZSxNQUFmLElBQXlCekIsS0FBSyxDQUFDNEIsUUFBTixLQUFtQkEsUUFBaEQsRUFBMEQ7QUFDeEQsZUFBT3pCLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRSixDQUFSLENBQWY7QUFDRDtBQUNGLEtBSk0sQ0FBUDtBQUtEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBOEJBaUMsVyxHQUFBLHFCQUFhQyxJQUFiLEVBQW1CM0IsUUFBbkIsRUFBNkI7QUFDM0IsUUFBSSxDQUFDQSxRQUFMLEVBQWU7QUFDYkEsTUFBQUEsUUFBUSxHQUFHMkIsSUFBWDtBQUNBLGFBQU8sS0FBS25CLElBQUwsQ0FBVSxVQUFDWCxLQUFELEVBQVFKLENBQVIsRUFBYztBQUM3QixZQUFJSSxLQUFLLENBQUN5QixJQUFOLEtBQWUsUUFBbkIsRUFBNkI7QUFDM0IsaUJBQU90QixRQUFRLENBQUNILEtBQUQsRUFBUUosQ0FBUixDQUFmO0FBQ0Q7QUFDRixPQUpNLENBQVA7QUFLRDs7QUFDRCxRQUFJa0MsSUFBSSxZQUFZSixNQUFwQixFQUE0QjtBQUMxQixhQUFPLEtBQUtmLElBQUwsQ0FBVSxVQUFDWCxLQUFELEVBQVFKLENBQVIsRUFBYztBQUM3QixZQUFJSSxLQUFLLENBQUN5QixJQUFOLEtBQWUsUUFBZixJQUEyQkssSUFBSSxDQUFDZixJQUFMLENBQVVmLEtBQUssQ0FBQzhCLElBQWhCLENBQS9CLEVBQXNEO0FBQ3BELGlCQUFPM0IsUUFBUSxDQUFDSCxLQUFELEVBQVFKLENBQVIsQ0FBZjtBQUNEO0FBQ0YsT0FKTSxDQUFQO0FBS0Q7O0FBQ0QsV0FBTyxLQUFLZSxJQUFMLENBQVUsVUFBQ1gsS0FBRCxFQUFRSixDQUFSLEVBQWM7QUFDN0IsVUFBSUksS0FBSyxDQUFDeUIsSUFBTixLQUFlLFFBQWYsSUFBMkJ6QixLQUFLLENBQUM4QixJQUFOLEtBQWVBLElBQTlDLEVBQW9EO0FBQ2xELGVBQU8zQixRQUFRLENBQUNILEtBQUQsRUFBUUosQ0FBUixDQUFmO0FBQ0Q7QUFDRixLQUpNLENBQVA7QUFLRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FnQkFtQyxZLEdBQUEsc0JBQWM1QixRQUFkLEVBQXdCO0FBQ3RCLFdBQU8sS0FBS1EsSUFBTCxDQUFVLFVBQUNYLEtBQUQsRUFBUUosQ0FBUixFQUFjO0FBQzdCLFVBQUlJLEtBQUssQ0FBQ3lCLElBQU4sS0FBZSxTQUFuQixFQUE4QjtBQUM1QixlQUFPdEIsUUFBUSxDQUFDSCxLQUFELEVBQVFKLENBQVIsQ0FBZjtBQUNEO0FBQ0YsS0FKTSxDQUFQO0FBS0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW9CQW9DLE0sR0FBQSxrQkFBcUI7QUFBQSxzQ0FBVkMsUUFBVTtBQUFWQSxNQUFBQSxRQUFVO0FBQUE7O0FBQ25CLGlDQUFrQkEsUUFBbEIsK0JBQTRCO0FBQXZCLFVBQUlqQyxLQUFLLGdCQUFUO0FBQ0gsVUFBSU4sS0FBSyxHQUFHLEtBQUt3QyxTQUFMLENBQWVsQyxLQUFmLEVBQXNCLEtBQUttQyxJQUEzQixDQUFaOztBQUNBLDJEQUFpQnpDLEtBQWpCO0FBQUEsWUFBUzBDLElBQVQ7QUFBd0IsYUFBSzFDLEtBQUwsQ0FBV0ssSUFBWCxDQUFnQnFDLElBQWhCO0FBQXhCO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW9CQUMsTyxHQUFBLG1CQUFzQjtBQUFBLHVDQUFWSixRQUFVO0FBQVZBLE1BQUFBLFFBQVU7QUFBQTs7QUFDcEJBLElBQUFBLFFBQVEsR0FBR0EsUUFBUSxDQUFDSyxPQUFULEVBQVg7O0FBQ0EsMERBQWtCTCxRQUFsQiwyQ0FBNEI7QUFBQSxVQUFuQmpDLEtBQW1CO0FBQzFCLFVBQUlOLEtBQUssR0FBRyxLQUFLd0MsU0FBTCxDQUFlbEMsS0FBZixFQUFzQixLQUFLdUMsS0FBM0IsRUFBa0MsU0FBbEMsRUFBNkNELE9BQTdDLEVBQVo7O0FBQ0EsNERBQWlCNUMsS0FBakI7QUFBQSxZQUFTMEMsSUFBVDtBQUF3QixhQUFLMUMsS0FBTCxDQUFXOEMsT0FBWCxDQUFtQkosSUFBbkI7QUFBeEI7O0FBQ0EsV0FBSyxJQUFJOUIsRUFBVCxJQUFlLEtBQUtELE9BQXBCLEVBQTZCO0FBQzNCLGFBQUtBLE9BQUwsQ0FBYUMsRUFBYixJQUFtQixLQUFLRCxPQUFMLENBQWFDLEVBQWIsSUFBbUJaLEtBQUssQ0FBQ2dCLE1BQTVDO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPLElBQVA7QUFDRCxHOztTQUVEK0IsUyxHQUFBLG1CQUFXQyxXQUFYLEVBQXdCO0FBQ3RCLG9CQUFNRCxTQUFOLFlBQWdCQyxXQUFoQjs7QUFDQSxRQUFJLEtBQUtoRCxLQUFULEVBQWdCO0FBQ2QsNERBQWlCLEtBQUtBLEtBQXRCO0FBQUEsWUFBUzBDLElBQVQ7QUFBNkJBLFFBQUFBLElBQUksQ0FBQ0ssU0FBTCxDQUFlQyxXQUFmO0FBQTdCO0FBQ0Q7QUFDRjtBQUVEOzs7Ozs7Ozs7Ozs7O1NBV0FDLFksR0FBQSxzQkFBY0MsS0FBZCxFQUFxQkMsR0FBckIsRUFBMEI7QUFDeEJELElBQUFBLEtBQUssR0FBRyxLQUFLcEMsS0FBTCxDQUFXb0MsS0FBWCxDQUFSO0FBRUEsUUFBSW5CLElBQUksR0FBR21CLEtBQUssS0FBSyxDQUFWLEdBQWMsU0FBZCxHQUEwQixLQUFyQztBQUNBLFFBQUlsRCxLQUFLLEdBQUcsS0FBS3dDLFNBQUwsQ0FBZVcsR0FBZixFQUFvQixLQUFLbkQsS0FBTCxDQUFXa0QsS0FBWCxDQUFwQixFQUF1Q25CLElBQXZDLEVBQTZDYSxPQUE3QyxFQUFaOztBQUNBLDBEQUFpQjVDLEtBQWpCO0FBQUEsVUFBUzBDLElBQVQ7QUFBd0IsV0FBSzFDLEtBQUwsQ0FBV29ELE1BQVgsQ0FBa0JGLEtBQWxCLEVBQXlCLENBQXpCLEVBQTRCUixJQUE1QjtBQUF4Qjs7QUFFQSxRQUFJNUIsS0FBSjs7QUFDQSxTQUFLLElBQUlGLEVBQVQsSUFBZSxLQUFLRCxPQUFwQixFQUE2QjtBQUMzQkcsTUFBQUEsS0FBSyxHQUFHLEtBQUtILE9BQUwsQ0FBYUMsRUFBYixDQUFSOztBQUNBLFVBQUlzQyxLQUFLLElBQUlwQyxLQUFiLEVBQW9CO0FBQ2xCLGFBQUtILE9BQUwsQ0FBYUMsRUFBYixJQUFtQkUsS0FBSyxHQUFHZCxLQUFLLENBQUNnQixNQUFqQztBQUNEO0FBQ0Y7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztTQVFBcUMsVyxHQUFBLHFCQUFhSCxLQUFiLEVBQW9CQyxHQUFwQixFQUF5QjtBQUN2QkQsSUFBQUEsS0FBSyxHQUFHLEtBQUtwQyxLQUFMLENBQVdvQyxLQUFYLENBQVI7QUFFQSxRQUFJbEQsS0FBSyxHQUFHLEtBQUt3QyxTQUFMLENBQWVXLEdBQWYsRUFBb0IsS0FBS25ELEtBQUwsQ0FBV2tELEtBQVgsQ0FBcEIsRUFBdUNOLE9BQXZDLEVBQVo7O0FBQ0EsMERBQWlCNUMsS0FBakI7QUFBQSxVQUFTMEMsSUFBVDtBQUF3QixXQUFLMUMsS0FBTCxDQUFXb0QsTUFBWCxDQUFrQkYsS0FBSyxHQUFHLENBQTFCLEVBQTZCLENBQTdCLEVBQWdDUixJQUFoQztBQUF4Qjs7QUFFQSxRQUFJNUIsS0FBSjs7QUFDQSxTQUFLLElBQUlGLEVBQVQsSUFBZSxLQUFLRCxPQUFwQixFQUE2QjtBQUMzQkcsTUFBQUEsS0FBSyxHQUFHLEtBQUtILE9BQUwsQ0FBYUMsRUFBYixDQUFSOztBQUNBLFVBQUlzQyxLQUFLLEdBQUdwQyxLQUFaLEVBQW1CO0FBQ2pCLGFBQUtILE9BQUwsQ0FBYUMsRUFBYixJQUFtQkUsS0FBSyxHQUFHZCxLQUFLLENBQUNnQixNQUFqQztBQUNEO0FBQ0Y7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztTQWNBc0MsVyxHQUFBLHFCQUFhaEQsS0FBYixFQUFvQjtBQUNsQkEsSUFBQUEsS0FBSyxHQUFHLEtBQUtRLEtBQUwsQ0FBV1IsS0FBWCxDQUFSO0FBQ0EsU0FBS04sS0FBTCxDQUFXTSxLQUFYLEVBQWtCQyxNQUFsQixHQUEyQk0sU0FBM0I7QUFDQSxTQUFLYixLQUFMLENBQVdvRCxNQUFYLENBQWtCOUMsS0FBbEIsRUFBeUIsQ0FBekI7QUFFQSxRQUFJUSxLQUFKOztBQUNBLFNBQUssSUFBSUYsRUFBVCxJQUFlLEtBQUtELE9BQXBCLEVBQTZCO0FBQzNCRyxNQUFBQSxLQUFLLEdBQUcsS0FBS0gsT0FBTCxDQUFhQyxFQUFiLENBQVI7O0FBQ0EsVUFBSUUsS0FBSyxJQUFJUixLQUFiLEVBQW9CO0FBQ2xCLGFBQUtLLE9BQUwsQ0FBYUMsRUFBYixJQUFtQkUsS0FBSyxHQUFHLENBQTNCO0FBQ0Q7QUFDRjs7QUFFRCxXQUFPLElBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7U0FVQXlDLFMsR0FBQSxxQkFBYTtBQUNYLDBEQUFpQixLQUFLdkQsS0FBdEI7QUFBQSxVQUFTMEMsSUFBVDtBQUE2QkEsTUFBQUEsSUFBSSxDQUFDbkMsTUFBTCxHQUFjTSxTQUFkO0FBQTdCOztBQUNBLFNBQUtiLEtBQUwsR0FBYSxFQUFiO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQTBCQXdELGEsR0FBQSx1QkFBZUMsT0FBZixFQUF3QkMsSUFBeEIsRUFBOEJqRCxRQUE5QixFQUF3QztBQUN0QyxRQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNiQSxNQUFBQSxRQUFRLEdBQUdpRCxJQUFYO0FBQ0FBLE1BQUFBLElBQUksR0FBRyxFQUFQO0FBQ0Q7O0FBRUQsU0FBSzdCLFNBQUwsQ0FBZSxVQUFBOEIsSUFBSSxFQUFJO0FBQ3JCLFVBQUlELElBQUksQ0FBQ0UsS0FBTCxJQUFjRixJQUFJLENBQUNFLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQkYsSUFBSSxDQUFDN0IsSUFBeEIsTUFBa0MsQ0FBQyxDQUFyRCxFQUF3RDtBQUN4RCxVQUFJNEIsSUFBSSxDQUFDSSxJQUFMLElBQWFILElBQUksQ0FBQ0ksS0FBTCxDQUFXRixPQUFYLENBQW1CSCxJQUFJLENBQUNJLElBQXhCLE1BQWtDLENBQUMsQ0FBcEQsRUFBdUQ7QUFFdkRILE1BQUFBLElBQUksQ0FBQ0ksS0FBTCxHQUFhSixJQUFJLENBQUNJLEtBQUwsQ0FBV3hDLE9BQVgsQ0FBbUJrQyxPQUFuQixFQUE0QmhELFFBQTVCLENBQWI7QUFDRCxLQUxEO0FBT0EsV0FBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OztTQVdBdUQsSyxHQUFBLGVBQU9DLFNBQVAsRUFBa0I7QUFDaEIsV0FBTyxLQUFLakUsS0FBTCxDQUFXZ0UsS0FBWCxDQUFpQkMsU0FBakIsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7U0FXQUMsSSxHQUFBLGNBQU1ELFNBQU4sRUFBaUI7QUFDZixXQUFPLEtBQUtqRSxLQUFMLENBQVdrRSxJQUFYLENBQWdCRCxTQUFoQixDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7O1NBVUFuRCxLLEdBQUEsZUFBT1IsS0FBUCxFQUFjO0FBQ1osUUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCLGFBQU9BLEtBQVA7QUFDRDs7QUFDRCxXQUFPLEtBQUtOLEtBQUwsQ0FBVzZELE9BQVgsQ0FBbUJ2RCxLQUFuQixDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztTQTBCQWtDLFMsR0FBQSxtQkFBV3hDLEtBQVgsRUFBa0JtRSxNQUFsQixFQUEwQjtBQUFBOztBQUN4QixRQUFJLE9BQU9uRSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCLFVBQUlvRSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFELENBQW5COztBQUNBckUsTUFBQUEsS0FBSyxHQUFHRCxXQUFXLENBQUNxRSxLQUFLLENBQUNwRSxLQUFELENBQUwsQ0FBYUEsS0FBZCxDQUFuQjtBQUNELEtBSEQsTUFHTyxJQUFJc0UsS0FBSyxDQUFDQyxPQUFOLENBQWN2RSxLQUFkLENBQUosRUFBMEI7QUFDL0JBLE1BQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDd0UsS0FBTixDQUFZLENBQVosQ0FBUjs7QUFDQSw0REFBY3hFLEtBQWQsMkNBQXFCO0FBQUEsWUFBWkUsQ0FBWTtBQUNuQixZQUFJQSxDQUFDLENBQUNLLE1BQU4sRUFBY0wsQ0FBQyxDQUFDSyxNQUFGLENBQVMrQyxXQUFULENBQXFCcEQsQ0FBckIsRUFBd0IsUUFBeEI7QUFDZjtBQUNGLEtBTE0sTUFLQSxJQUFJRixLQUFLLENBQUMrQixJQUFOLEtBQWUsTUFBbkIsRUFBMkI7QUFDaEMvQixNQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0EsS0FBTixDQUFZd0UsS0FBWixDQUFrQixDQUFsQixDQUFSOztBQUNBLDREQUFjeEUsS0FBZCwyQ0FBcUI7QUFBQSxZQUFaRSxHQUFZO0FBQ25CLFlBQUlBLEdBQUMsQ0FBQ0ssTUFBTixFQUFjTCxHQUFDLENBQUNLLE1BQUYsQ0FBUytDLFdBQVQsQ0FBcUJwRCxHQUFyQixFQUF3QixRQUF4QjtBQUNmO0FBQ0YsS0FMTSxNQUtBLElBQUlGLEtBQUssQ0FBQytCLElBQVYsRUFBZ0I7QUFDckIvQixNQUFBQSxLQUFLLEdBQUcsQ0FBQ0EsS0FBRCxDQUFSO0FBQ0QsS0FGTSxNQUVBLElBQUlBLEtBQUssQ0FBQzhCLElBQVYsRUFBZ0I7QUFDckIsVUFBSSxPQUFPOUIsS0FBSyxDQUFDK0QsS0FBYixLQUF1QixXQUEzQixFQUF3QztBQUN0QyxjQUFNLElBQUlVLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBQ0QsT0FGRCxNQUVPLElBQUksT0FBT3pFLEtBQUssQ0FBQytELEtBQWIsS0FBdUIsUUFBM0IsRUFBcUM7QUFDMUMvRCxRQUFBQSxLQUFLLENBQUMrRCxLQUFOLEdBQWNXLE1BQU0sQ0FBQzFFLEtBQUssQ0FBQytELEtBQVAsQ0FBcEI7QUFDRDs7QUFDRC9ELE1BQUFBLEtBQUssR0FBRyxDQUFDLElBQUkyRSxvQkFBSixDQUFnQjNFLEtBQWhCLENBQUQsQ0FBUjtBQUNELEtBUE0sTUFPQSxJQUFJQSxLQUFLLENBQUNrQyxRQUFWLEVBQW9CO0FBQ3pCLFVBQUkwQyxJQUFJLEdBQUdQLE9BQU8sQ0FBQyxRQUFELENBQWxCOztBQUNBckUsTUFBQUEsS0FBSyxHQUFHLENBQUMsSUFBSTRFLElBQUosQ0FBUzVFLEtBQVQsQ0FBRCxDQUFSO0FBQ0QsS0FITSxNQUdBLElBQUlBLEtBQUssQ0FBQ29DLElBQVYsRUFBZ0I7QUFDckIsVUFBSXlDLE1BQU0sR0FBR1IsT0FBTyxDQUFDLFdBQUQsQ0FBcEI7O0FBQ0FyRSxNQUFBQSxLQUFLLEdBQUcsQ0FBQyxJQUFJNkUsTUFBSixDQUFXN0UsS0FBWCxDQUFELENBQVI7QUFDRCxLQUhNLE1BR0EsSUFBSUEsS0FBSyxDQUFDOEUsSUFBVixFQUFnQjtBQUNyQjlFLE1BQUFBLEtBQUssR0FBRyxDQUFDLElBQUkrRSxnQkFBSixDQUFZL0UsS0FBWixDQUFELENBQVI7QUFDRCxLQUZNLE1BRUE7QUFDTCxZQUFNLElBQUl5RSxLQUFKLENBQVUsb0NBQVYsQ0FBTjtBQUNEOztBQUVELFFBQUlPLFNBQVMsR0FBR2hGLEtBQUssQ0FBQ0MsR0FBTixDQUFVLFVBQUFDLENBQUMsRUFBSTtBQUM3QixVQUFJQSxDQUFDLENBQUNLLE1BQU4sRUFBY0wsQ0FBQyxDQUFDSyxNQUFGLENBQVMrQyxXQUFULENBQXFCcEQsQ0FBckI7O0FBQ2QsVUFBSSxPQUFPQSxDQUFDLENBQUMrRSxJQUFGLENBQU9DLE1BQWQsS0FBeUIsV0FBN0IsRUFBMEM7QUFDeEMsWUFBSWYsTUFBTSxJQUFJLE9BQU9BLE1BQU0sQ0FBQ2MsSUFBUCxDQUFZQyxNQUFuQixLQUE4QixXQUE1QyxFQUF5RDtBQUN2RGhGLFVBQUFBLENBQUMsQ0FBQytFLElBQUYsQ0FBT0MsTUFBUCxHQUFnQmYsTUFBTSxDQUFDYyxJQUFQLENBQVlDLE1BQVosQ0FBbUIzRCxPQUFuQixDQUEyQixRQUEzQixFQUFxQyxFQUFyQyxDQUFoQjtBQUNEO0FBQ0Y7O0FBQ0RyQixNQUFBQSxDQUFDLENBQUNLLE1BQUYsR0FBVyxLQUFYO0FBQ0EsYUFBT0wsQ0FBUDtBQUNELEtBVGUsQ0FBaEI7QUFXQSxXQUFPOEUsU0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O3dCQW5FYTtBQUNYLFVBQUksQ0FBQyxLQUFLaEYsS0FBVixFQUFpQixPQUFPYSxTQUFQO0FBQ2pCLGFBQU8sS0FBS2IsS0FBTCxDQUFXLENBQVgsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7O3dCQVFZO0FBQ1YsVUFBSSxDQUFDLEtBQUtBLEtBQVYsRUFBaUIsT0FBT2EsU0FBUDtBQUNqQixhQUFPLEtBQUtiLEtBQUwsQ0FBVyxLQUFLQSxLQUFMLENBQVdnQixNQUFYLEdBQW9CLENBQS9CLENBQVA7QUFDRDs7OztFQWhqQnFCbUUsYTs7ZUErbUJUL0UsUztBQUVmOzs7Ozs7OztBQVFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gJy4vZGVjbGFyYXRpb24nXG5pbXBvcnQgQ29tbWVudCBmcm9tICcuL2NvbW1lbnQnXG5pbXBvcnQgTm9kZSBmcm9tICcuL25vZGUnXG5cbmZ1bmN0aW9uIGNsZWFuU291cmNlIChub2Rlcykge1xuICByZXR1cm4gbm9kZXMubWFwKGkgPT4ge1xuICAgIGlmIChpLm5vZGVzKSBpLm5vZGVzID0gY2xlYW5Tb3VyY2UoaS5ub2RlcylcbiAgICBkZWxldGUgaS5zb3VyY2VcbiAgICByZXR1cm4gaVxuICB9KVxufVxuXG4vKipcbiAqIFRoZSB7QGxpbmsgUm9vdH0sIHtAbGluayBBdFJ1bGV9LCBhbmQge0BsaW5rIFJ1bGV9IGNvbnRhaW5lciBub2Rlc1xuICogaW5oZXJpdCBzb21lIGNvbW1vbiBtZXRob2RzIHRvIGhlbHAgd29yayB3aXRoIHRoZWlyIGNoaWxkcmVuLlxuICpcbiAqIE5vdGUgdGhhdCBhbGwgY29udGFpbmVycyBjYW4gc3RvcmUgYW55IGNvbnRlbnQuIElmIHlvdSB3cml0ZSBhIHJ1bGUgaW5zaWRlXG4gKiBhIHJ1bGUsIFBvc3RDU1Mgd2lsbCBwYXJzZSBpdC5cbiAqXG4gKiBAZXh0ZW5kcyBOb2RlXG4gKiBAYWJzdHJhY3RcbiAqL1xuY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgTm9kZSB7XG4gIHB1c2ggKGNoaWxkKSB7XG4gICAgY2hpbGQucGFyZW50ID0gdGhpc1xuICAgIHRoaXMubm9kZXMucHVzaChjaGlsZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGNvbnRhaW5lcuKAmXMgaW1tZWRpYXRlIGNoaWxkcmVuLFxuICAgKiBjYWxsaW5nIGBjYWxsYmFja2AgZm9yIGVhY2ggY2hpbGQuXG4gICAqXG4gICAqIFJldHVybmluZyBgZmFsc2VgIGluIHRoZSBjYWxsYmFjayB3aWxsIGJyZWFrIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgb25seSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb250YWluZXLigJlzIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICogSWYgeW91IG5lZWQgdG8gcmVjdXJzaXZlbHkgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgY29udGFpbmVy4oCZcyBkZXNjZW5kYW50XG4gICAqIG5vZGVzLCB1c2Uge0BsaW5rIENvbnRhaW5lciN3YWxrfS5cbiAgICpcbiAgICogVW5saWtlIHRoZSBmb3IgYHt9YC1jeWNsZSBvciBgQXJyYXkjZm9yRWFjaGAgdGhpcyBpdGVyYXRvciBpcyBzYWZlXG4gICAqIGlmIHlvdSBhcmUgbXV0YXRpbmcgdGhlIGFycmF5IG9mIGNoaWxkIG5vZGVzIGR1cmluZyBpdGVyYXRpb24uXG4gICAqIFBvc3RDU1Mgd2lsbCBhZGp1c3QgdGhlIGN1cnJlbnQgaW5kZXggdG8gbWF0Y2ggdGhlIG11dGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtjaGlsZEl0ZXJhdG9yfSBjYWxsYmFjayBJdGVyYXRvciByZWNlaXZlcyBlYWNoIG5vZGUgYW5kIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IFJldHVybnMgYGZhbHNlYCBpZiBpdGVyYXRpb24gd2FzIGJyb2tlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjazsgei1pbmRleDogMSB9JylcbiAgICogY29uc3QgcnVsZSA9IHJvb3QuZmlyc3RcbiAgICpcbiAgICogZm9yIChjb25zdCBkZWNsIG9mIHJ1bGUubm9kZXMpIHtcbiAgICogICBkZWNsLmNsb25lQmVmb3JlKHsgcHJvcDogJy13ZWJraXQtJyArIGRlY2wucHJvcCB9KVxuICAgKiAgIC8vIEN5Y2xlIHdpbGwgYmUgaW5maW5pdGUsIGJlY2F1c2UgY2xvbmVCZWZvcmUgbW92ZXMgdGhlIGN1cnJlbnQgbm9kZVxuICAgKiAgIC8vIHRvIHRoZSBuZXh0IGluZGV4XG4gICAqIH1cbiAgICpcbiAgICogcnVsZS5lYWNoKGRlY2wgPT4ge1xuICAgKiAgIGRlY2wuY2xvbmVCZWZvcmUoeyBwcm9wOiAnLXdlYmtpdC0nICsgZGVjbC5wcm9wIH0pXG4gICAqICAgLy8gV2lsbCBiZSBleGVjdXRlZCBvbmx5IGZvciBjb2xvciBhbmQgei1pbmRleFxuICAgKiB9KVxuICAgKi9cbiAgZWFjaCAoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMubGFzdEVhY2gpIHRoaXMubGFzdEVhY2ggPSAwXG4gICAgaWYgKCF0aGlzLmluZGV4ZXMpIHRoaXMuaW5kZXhlcyA9IHsgfVxuXG4gICAgdGhpcy5sYXN0RWFjaCArPSAxXG4gICAgbGV0IGlkID0gdGhpcy5sYXN0RWFjaFxuICAgIHRoaXMuaW5kZXhlc1tpZF0gPSAwXG5cbiAgICBpZiAoIXRoaXMubm9kZXMpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCBpbmRleCwgcmVzdWx0XG4gICAgd2hpbGUgKHRoaXMuaW5kZXhlc1tpZF0gPCB0aGlzLm5vZGVzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaWRdXG4gICAgICByZXN1bHQgPSBjYWxsYmFjayh0aGlzLm5vZGVzW2luZGV4XSwgaW5kZXgpXG4gICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkgYnJlYWtcblxuICAgICAgdGhpcy5pbmRleGVzW2lkXSArPSAxXG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuaW5kZXhlc1tpZF1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGhlIGNvbnRhaW5lcuKAmXMgZGVzY2VuZGFudCBub2RlcywgY2FsbGluZyBjYWxsYmFja1xuICAgKiBmb3IgZWFjaCBub2RlLlxuICAgKlxuICAgKiBMaWtlIGNvbnRhaW5lci5lYWNoKCksIHRoaXMgbWV0aG9kIGlzIHNhZmUgdG8gdXNlXG4gICAqIGlmIHlvdSBhcmUgbXV0YXRpbmcgYXJyYXlzIGR1cmluZyBpdGVyYXRpb24uXG4gICAqXG4gICAqIElmIHlvdSBvbmx5IG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjb250YWluZXLigJlzIGltbWVkaWF0ZSBjaGlsZHJlbixcbiAgICogdXNlIHtAbGluayBDb250YWluZXIjZWFjaH0uXG4gICAqXG4gICAqIEBwYXJhbSB7Y2hpbGRJdGVyYXRvcn0gY2FsbGJhY2sgSXRlcmF0b3IgcmVjZWl2ZXMgZWFjaCBub2RlIGFuZCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybiB7ZmFsc2V8dW5kZWZpbmVkfSBSZXR1cm5zIGBmYWxzZWAgaWYgaXRlcmF0aW9uIHdhcyBicm9rZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcm9vdC53YWxrKG5vZGUgPT4ge1xuICAgKiAgIC8vIFRyYXZlcnNlcyBhbGwgZGVzY2VuZGFudCBub2Rlcy5cbiAgICogfSlcbiAgICovXG4gIHdhbGsgKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaCgoY2hpbGQsIGkpID0+IHtcbiAgICAgIGxldCByZXN1bHRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLnBvc3Rjc3NOb2RlID0gY2hpbGRcbiAgICAgICAgaWYgKGUuc3RhY2sgJiYgY2hpbGQuc291cmNlICYmIC9cXG5cXHN7NH1hdCAvLnRlc3QoZS5zdGFjaykpIHtcbiAgICAgICAgICBsZXQgcyA9IGNoaWxkLnNvdXJjZVxuICAgICAgICAgIGUuc3RhY2sgPSBlLnN0YWNrLnJlcGxhY2UoL1xcblxcc3s0fWF0IC8sXG4gICAgICAgICAgICBgJCYkeyBzLmlucHV0LmZyb20gfTokeyBzLnN0YXJ0LmxpbmUgfTokeyBzLnN0YXJ0LmNvbHVtbiB9JCZgKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlICYmIGNoaWxkLndhbGspIHtcbiAgICAgICAgcmVzdWx0ID0gY2hpbGQud2FsayhjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgY29udGFpbmVy4oCZcyBkZXNjZW5kYW50IG5vZGVzLCBjYWxsaW5nIGNhbGxiYWNrXG4gICAqIGZvciBlYWNoIGRlY2xhcmF0aW9uIG5vZGUuXG4gICAqXG4gICAqIElmIHlvdSBwYXNzIGEgZmlsdGVyLCBpdGVyYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBvdmVyIGRlY2xhcmF0aW9uc1xuICAgKiB3aXRoIG1hdGNoaW5nIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIExpa2Uge0BsaW5rIENvbnRhaW5lciNlYWNofSwgdGhpcyBtZXRob2QgaXMgc2FmZVxuICAgKiB0byB1c2UgaWYgeW91IGFyZSBtdXRhdGluZyBhcnJheXMgZHVyaW5nIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBbcHJvcF0gICBTdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZmlsdGVyIGRlY2xhcmF0aW9ucyBieSBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0ge2NoaWxkSXRlcmF0b3J9IGNhbGxiYWNrIEl0ZXJhdG9yIHJlY2VpdmVzIGVhY2ggbm9kZSBhbmQgaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gUmV0dXJucyBgZmFsc2VgIGlmIGl0ZXJhdGlvbiB3YXMgYnJva2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJvb3Qud2Fsa0RlY2xzKGRlY2wgPT4ge1xuICAgKiAgIGNoZWNrUHJvcGVydHlTdXBwb3J0KGRlY2wucHJvcClcbiAgICogfSlcbiAgICpcbiAgICogcm9vdC53YWxrRGVjbHMoJ2JvcmRlci1yYWRpdXMnLCBkZWNsID0+IHtcbiAgICogICBkZWNsLnJlbW92ZSgpXG4gICAqIH0pXG4gICAqXG4gICAqIHJvb3Qud2Fsa0RlY2xzKC9eYmFja2dyb3VuZC8sIGRlY2wgPT4ge1xuICAgKiAgIGRlY2wudmFsdWUgPSB0YWtlRmlyc3RDb2xvckZyb21HcmFkaWVudChkZWNsLnZhbHVlKVxuICAgKiB9KVxuICAgKi9cbiAgd2Fsa0RlY2xzIChwcm9wLCBjYWxsYmFjaykge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrID0gcHJvcFxuICAgICAgcmV0dXJuIHRoaXMud2FsaygoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdkZWNsJykge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHByb3AgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnZGVjbCcgJiYgcHJvcC50ZXN0KGNoaWxkLnByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdkZWNsJyAmJiBjaGlsZC5wcm9wID09PSBwcm9wKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgY29udGFpbmVy4oCZcyBkZXNjZW5kYW50IG5vZGVzLCBjYWxsaW5nIGNhbGxiYWNrXG4gICAqIGZvciBlYWNoIHJ1bGUgbm9kZS5cbiAgICpcbiAgICogSWYgeW91IHBhc3MgYSBmaWx0ZXIsIGl0ZXJhdGlvbiB3aWxsIG9ubHkgaGFwcGVuIG92ZXIgcnVsZXNcbiAgICogd2l0aCBtYXRjaGluZyBzZWxlY3RvcnMuXG4gICAqXG4gICAqIExpa2Uge0BsaW5rIENvbnRhaW5lciNlYWNofSwgdGhpcyBtZXRob2QgaXMgc2FmZVxuICAgKiB0byB1c2UgaWYgeW91IGFyZSBtdXRhdGluZyBhcnJheXMgZHVyaW5nIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBbc2VsZWN0b3JdIFN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZpbHRlciBydWxlcyBieSBzZWxlY3Rvci5cbiAgICogQHBhcmFtIHtjaGlsZEl0ZXJhdG9yfSBjYWxsYmFjayAgIEl0ZXJhdG9yIHJlY2VpdmVzIGVhY2ggbm9kZSBhbmQgaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gcmV0dXJucyBgZmFsc2VgIGlmIGl0ZXJhdGlvbiB3YXMgYnJva2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHNlbGVjdG9ycyA9IFtdXG4gICAqIHJvb3Qud2Fsa1J1bGVzKHJ1bGUgPT4ge1xuICAgKiAgIHNlbGVjdG9ycy5wdXNoKHJ1bGUuc2VsZWN0b3IpXG4gICAqIH0pXG4gICAqIGNvbnNvbGUubG9nKGBZb3VyIENTUyB1c2VzICR7IHNlbGVjdG9ycy5sZW5ndGggfSBzZWxlY3RvcnNgKVxuICAgKi9cbiAgd2Fsa1J1bGVzIChzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayA9IHNlbGVjdG9yXG5cbiAgICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAncnVsZScpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHRoaXMud2FsaygoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdydWxlJyAmJiBzZWxlY3Rvci50ZXN0KGNoaWxkLnNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2FsaygoY2hpbGQsIGkpID0+IHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSAncnVsZScgJiYgY2hpbGQuc2VsZWN0b3IgPT09IHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgY29udGFpbmVy4oCZcyBkZXNjZW5kYW50IG5vZGVzLCBjYWxsaW5nIGNhbGxiYWNrXG4gICAqIGZvciBlYWNoIGF0LXJ1bGUgbm9kZS5cbiAgICpcbiAgICogSWYgeW91IHBhc3MgYSBmaWx0ZXIsIGl0ZXJhdGlvbiB3aWxsIG9ubHkgaGFwcGVuIG92ZXIgYXQtcnVsZXNcbiAgICogdGhhdCBoYXZlIG1hdGNoaW5nIG5hbWVzLlxuICAgKlxuICAgKiBMaWtlIHtAbGluayBDb250YWluZXIjZWFjaH0sIHRoaXMgbWV0aG9kIGlzIHNhZmVcbiAgICogdG8gdXNlIGlmIHlvdSBhcmUgbXV0YXRpbmcgYXJyYXlzIGR1cmluZyBpdGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gW25hbWVdICAgU3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZpbHRlciBhdC1ydWxlcyBieSBuYW1lLlxuICAgKiBAcGFyYW0ge2NoaWxkSXRlcmF0b3J9IGNhbGxiYWNrIEl0ZXJhdG9yIHJlY2VpdmVzIGVhY2ggbm9kZSBhbmQgaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gUmV0dXJucyBgZmFsc2VgIGlmIGl0ZXJhdGlvbiB3YXMgYnJva2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJvb3Qud2Fsa0F0UnVsZXMocnVsZSA9PiB7XG4gICAqICAgaWYgKGlzT2xkKHJ1bGUubmFtZSkpIHJ1bGUucmVtb3ZlKClcbiAgICogfSlcbiAgICpcbiAgICogbGV0IGZpcnN0ID0gZmFsc2VcbiAgICogcm9vdC53YWxrQXRSdWxlcygnY2hhcnNldCcsIHJ1bGUgPT4ge1xuICAgKiAgIGlmICghZmlyc3QpIHtcbiAgICogICAgIGZpcnN0ID0gdHJ1ZVxuICAgKiAgIH0gZWxzZSB7XG4gICAqICAgICBydWxlLnJlbW92ZSgpXG4gICAqICAgfVxuICAgKiB9KVxuICAgKi9cbiAgd2Fsa0F0UnVsZXMgKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sgPSBuYW1lXG4gICAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2F0cnVsZScpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChuYW1lIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2F0cnVsZScgJiYgbmFtZS50ZXN0KGNoaWxkLm5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWxrKChjaGlsZCwgaSkgPT4ge1xuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdhdHJ1bGUnICYmIGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIHRoZSBjb250YWluZXLigJlzIGRlc2NlbmRhbnQgbm9kZXMsIGNhbGxpbmcgY2FsbGJhY2tcbiAgICogZm9yIGVhY2ggY29tbWVudCBub2RlLlxuICAgKlxuICAgKiBMaWtlIHtAbGluayBDb250YWluZXIjZWFjaH0sIHRoaXMgbWV0aG9kIGlzIHNhZmVcbiAgICogdG8gdXNlIGlmIHlvdSBhcmUgbXV0YXRpbmcgYXJyYXlzIGR1cmluZyBpdGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Y2hpbGRJdGVyYXRvcn0gY2FsbGJhY2sgSXRlcmF0b3IgcmVjZWl2ZXMgZWFjaCBub2RlIGFuZCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybiB7ZmFsc2V8dW5kZWZpbmVkfSBSZXR1cm5zIGBmYWxzZWAgaWYgaXRlcmF0aW9uIHdhcyBicm9rZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcm9vdC53YWxrQ29tbWVudHMoY29tbWVudCA9PiB7XG4gICAqICAgY29tbWVudC5yZW1vdmUoKVxuICAgKiB9KVxuICAgKi9cbiAgd2Fsa0NvbW1lbnRzIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLndhbGsoKGNoaWxkLCBpKSA9PiB7XG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgbmV3IG5vZGVzIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHsuLi4oTm9kZXxvYmplY3R8c3RyaW5nfE5vZGVbXSl9IGNoaWxkcmVuIE5ldyBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gVGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkZWNsMSA9IHBvc3Rjc3MuZGVjbCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAnYmxhY2snIH0pXG4gICAqIGNvbnN0IGRlY2wyID0gcG9zdGNzcy5kZWNsKHsgcHJvcDogJ2JhY2tncm91bmQtY29sb3InLCB2YWx1ZTogJ3doaXRlJyB9KVxuICAgKiBydWxlLmFwcGVuZChkZWNsMSwgZGVjbDIpXG4gICAqXG4gICAqIHJvb3QuYXBwZW5kKHsgbmFtZTogJ2NoYXJzZXQnLCBwYXJhbXM6ICdcIlVURi04XCInIH0pICAvLyBhdC1ydWxlXG4gICAqIHJvb3QuYXBwZW5kKHsgc2VsZWN0b3I6ICdhJyB9KSAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZVxuICAgKiBydWxlLmFwcGVuZCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAnYmxhY2snIH0pICAgICAgIC8vIGRlY2xhcmF0aW9uXG4gICAqIHJ1bGUuYXBwZW5kKHsgdGV4dDogJ0NvbW1lbnQnIH0pICAgICAgICAgICAgICAgICAgICAgLy8gY29tbWVudFxuICAgKlxuICAgKiByb290LmFwcGVuZCgnYSB7fScpXG4gICAqIHJvb3QuZmlyc3QuYXBwZW5kKCdjb2xvcjogYmxhY2s7IHotaW5kZXg6IDEnKVxuICAgKi9cbiAgYXBwZW5kICguLi5jaGlsZHJlbikge1xuICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBsZXQgbm9kZXMgPSB0aGlzLm5vcm1hbGl6ZShjaGlsZCwgdGhpcy5sYXN0KVxuICAgICAgZm9yIChsZXQgbm9kZSBvZiBub2RlcykgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0cyBuZXcgbm9kZXMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uKE5vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW10pfSBjaGlsZHJlbiBOZXcgbm9kZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgZGVjbDEgPSBwb3N0Y3NzLmRlY2woeyBwcm9wOiAnY29sb3InLCB2YWx1ZTogJ2JsYWNrJyB9KVxuICAgKiBjb25zdCBkZWNsMiA9IHBvc3Rjc3MuZGVjbCh7IHByb3A6ICdiYWNrZ3JvdW5kLWNvbG9yJywgdmFsdWU6ICd3aGl0ZScgfSlcbiAgICogcnVsZS5wcmVwZW5kKGRlY2wxLCBkZWNsMilcbiAgICpcbiAgICogcm9vdC5hcHBlbmQoeyBuYW1lOiAnY2hhcnNldCcsIHBhcmFtczogJ1wiVVRGLThcIicgfSkgIC8vIGF0LXJ1bGVcbiAgICogcm9vdC5hcHBlbmQoeyBzZWxlY3RvcjogJ2EnIH0pICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlXG4gICAqIHJ1bGUuYXBwZW5kKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdibGFjaycgfSkgICAgICAgLy8gZGVjbGFyYXRpb25cbiAgICogcnVsZS5hcHBlbmQoeyB0ZXh0OiAnQ29tbWVudCcgfSkgICAgICAgICAgICAgICAgICAgICAvLyBjb21tZW50XG4gICAqXG4gICAqIHJvb3QuYXBwZW5kKCdhIHt9JylcbiAgICogcm9vdC5maXJzdC5hcHBlbmQoJ2NvbG9yOiBibGFjazsgei1pbmRleDogMScpXG4gICAqL1xuICBwcmVwZW5kICguLi5jaGlsZHJlbikge1xuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4ucmV2ZXJzZSgpXG4gICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGxldCBub2RlcyA9IHRoaXMubm9ybWFsaXplKGNoaWxkLCB0aGlzLmZpcnN0LCAncHJlcGVuZCcpLnJldmVyc2UoKVxuICAgICAgZm9yIChsZXQgbm9kZSBvZiBub2RlcykgdGhpcy5ub2Rlcy51bnNoaWZ0KG5vZGUpXG4gICAgICBmb3IgKGxldCBpZCBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzW2lkXSA9IHRoaXMuaW5kZXhlc1tpZF0gKyBub2Rlcy5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGNsZWFuUmF3cyAoa2VlcEJldHdlZW4pIHtcbiAgICBzdXBlci5jbGVhblJhd3Moa2VlcEJldHdlZW4pXG4gICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgIGZvciAobGV0IG5vZGUgb2YgdGhpcy5ub2Rlcykgbm9kZS5jbGVhblJhd3Moa2VlcEJldHdlZW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBuZXcgbm9kZSBiZWZvcmUgb2xkIG5vZGUgd2l0aGluIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZXxudW1iZXJ9IGV4aXN0ICAgICAgICAgICAgIENoaWxkIG9yIGNoaWxk4oCZcyBpbmRleC5cbiAgICogQHBhcmFtIHtOb2RlfG9iamVjdHxzdHJpbmd8Tm9kZVtdfSBhZGQgTmV3IG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcnVsZS5pbnNlcnRCZWZvcmUoZGVjbCwgZGVjbC5jbG9uZSh7IHByb3A6ICctd2Via2l0LScgKyBkZWNsLnByb3AgfSkpXG4gICAqL1xuICBpbnNlcnRCZWZvcmUgKGV4aXN0LCBhZGQpIHtcbiAgICBleGlzdCA9IHRoaXMuaW5kZXgoZXhpc3QpXG5cbiAgICBsZXQgdHlwZSA9IGV4aXN0ID09PSAwID8gJ3ByZXBlbmQnIDogZmFsc2VcbiAgICBsZXQgbm9kZXMgPSB0aGlzLm5vcm1hbGl6ZShhZGQsIHRoaXMubm9kZXNbZXhpc3RdLCB0eXBlKS5yZXZlcnNlKClcbiAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB0aGlzLm5vZGVzLnNwbGljZShleGlzdCwgMCwgbm9kZSlcblxuICAgIGxldCBpbmRleFxuICAgIGZvciAobGV0IGlkIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaWRdXG4gICAgICBpZiAoZXhpc3QgPD0gaW5kZXgpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzW2lkXSA9IGluZGV4ICsgbm9kZXMubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgbmV3IG5vZGUgYWZ0ZXIgb2xkIG5vZGUgd2l0aGluIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZXxudW1iZXJ9IGV4aXN0ICAgICAgICAgICAgIENoaWxkIG9yIGNoaWxk4oCZcyBpbmRleC5cbiAgICogQHBhcmFtIHtOb2RlfG9iamVjdHxzdHJpbmd8Tm9kZVtdfSBhZGQgTmV3IG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpbi5cbiAgICovXG4gIGluc2VydEFmdGVyIChleGlzdCwgYWRkKSB7XG4gICAgZXhpc3QgPSB0aGlzLmluZGV4KGV4aXN0KVxuXG4gICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoYWRkLCB0aGlzLm5vZGVzW2V4aXN0XSkucmV2ZXJzZSgpXG4gICAgZm9yIChsZXQgbm9kZSBvZiBub2RlcykgdGhpcy5ub2Rlcy5zcGxpY2UoZXhpc3QgKyAxLCAwLCBub2RlKVxuXG4gICAgbGV0IGluZGV4XG4gICAgZm9yIChsZXQgaWQgaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICBpbmRleCA9IHRoaXMuaW5kZXhlc1tpZF1cbiAgICAgIGlmIChleGlzdCA8IGluZGV4KSB7XG4gICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSBpbmRleCArIG5vZGVzLmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBub2RlIGZyb20gdGhlIGNvbnRhaW5lciBhbmQgY2xlYW5zIHRoZSBwYXJlbnQgcHJvcGVydGllc1xuICAgKiBmcm9tIHRoZSBub2RlIGFuZCBpdHMgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZXxudW1iZXJ9IGNoaWxkIENoaWxkIG9yIGNoaWxk4oCZcyBpbmRleC5cbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gVGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJ1bGUubm9kZXMubGVuZ3RoICAvLz0+IDVcbiAgICogcnVsZS5yZW1vdmVDaGlsZChkZWNsKVxuICAgKiBydWxlLm5vZGVzLmxlbmd0aCAgLy89PiA0XG4gICAqIGRlY2wucGFyZW50ICAgICAgICAvLz0+IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVtb3ZlQ2hpbGQgKGNoaWxkKSB7XG4gICAgY2hpbGQgPSB0aGlzLmluZGV4KGNoaWxkKVxuICAgIHRoaXMubm9kZXNbY2hpbGRdLnBhcmVudCA9IHVuZGVmaW5lZFxuICAgIHRoaXMubm9kZXMuc3BsaWNlKGNoaWxkLCAxKVxuXG4gICAgbGV0IGluZGV4XG4gICAgZm9yIChsZXQgaWQgaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICBpbmRleCA9IHRoaXMuaW5kZXhlc1tpZF1cbiAgICAgIGlmIChpbmRleCA+PSBjaGlsZCkge1xuICAgICAgICB0aGlzLmluZGV4ZXNbaWRdID0gaW5kZXggLSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBjb250YWluZXJcbiAgICogYW5kIGNsZWFucyB0aGVpciBwYXJlbnQgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gVGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBydWxlLnJlbW92ZUFsbCgpXG4gICAqIHJ1bGUubm9kZXMubGVuZ3RoIC8vPT4gMFxuICAgKi9cbiAgcmVtb3ZlQWxsICgpIHtcbiAgICBmb3IgKGxldCBub2RlIG9mIHRoaXMubm9kZXMpIG5vZGUucGFyZW50ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5ub2RlcyA9IFtdXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzZXMgYWxsIGRlY2xhcmF0aW9uIHZhbHVlcyB3aXRoaW4gdGhlIGNvbnRhaW5lciB0aGF0IG1hdGNoIHBhdHRlcm5cbiAgICogdGhyb3VnaCBjYWxsYmFjaywgcmVwbGFjaW5nIHRob3NlIHZhbHVlcyB3aXRoIHRoZSByZXR1cm5lZCByZXN1bHRcbiAgICogb2YgY2FsbGJhY2suXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIHVuaXQgb3IgZnVuY3Rpb25cbiAgICogYW5kIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcGF0dGVybiAgICAgIFJlcGxhY2UgcGF0dGVybi5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdHMgICAgICAgICAgICAgICAgT3B0aW9ucyB0byBzcGVlZCB1cCB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0cy5wcm9wcyBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZmFzdCAgICAgICAgICAgU3RyaW5nIHRoYXTigJlzIHVzZWQgdG8gbmFycm93IGRvd25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFuZCBzcGVlZCB1cCB0aGUgcmVnZXhwIHNlYXJjaC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmd9IGNhbGxiYWNrICAgU3RyaW5nIHRvIHJlcGxhY2UgcGF0dGVybiBvciBjYWxsYmFja1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHJldHVybnMgYSBuZXcgdmFsdWUuIFRoZSBjYWxsYmFja1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHJlY2VpdmUgdGhlIHNhbWUgYXJndW1lbnRzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRob3NlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHBhcmFtZXRlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBgU3RyaW5nI3JlcGxhY2VgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBUaGlzIG5vZGUgZm9yIG1ldGhvZHMgY2hhaW4uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJvb3QucmVwbGFjZVZhbHVlcygvXFxkK3JlbS8sIHsgZmFzdDogJ3JlbScgfSwgc3RyaW5nID0+IHtcbiAgICogICByZXR1cm4gMTUgKiBwYXJzZUludChzdHJpbmcpICsgJ3B4J1xuICAgKiB9KVxuICAgKi9cbiAgcmVwbGFjZVZhbHVlcyAocGF0dGVybiwgb3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdHNcbiAgICAgIG9wdHMgPSB7IH1cbiAgICB9XG5cbiAgICB0aGlzLndhbGtEZWNscyhkZWNsID0+IHtcbiAgICAgIGlmIChvcHRzLnByb3BzICYmIG9wdHMucHJvcHMuaW5kZXhPZihkZWNsLnByb3ApID09PSAtMSkgcmV0dXJuXG4gICAgICBpZiAob3B0cy5mYXN0ICYmIGRlY2wudmFsdWUuaW5kZXhPZihvcHRzLmZhc3QpID09PSAtMSkgcmV0dXJuXG5cbiAgICAgIGRlY2wudmFsdWUgPSBkZWNsLnZhbHVlLnJlcGxhY2UocGF0dGVybiwgY2FsbGJhY2spXG4gICAgfSlcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWBcbiAgICogZm9yIGFsbCBvZiB0aGUgY29udGFpbmVy4oCZcyBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHtjaGlsZENvbmRpdGlvbn0gY29uZGl0aW9uIEl0ZXJhdG9yIHJldHVybnMgdHJ1ZSBvciBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSXMgZXZlcnkgY2hpbGQgcGFzcyBjb25kaXRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG5vUHJlZml4ZXMgPSBydWxlLmV2ZXJ5KGkgPT4gaS5wcm9wWzBdICE9PSAnLScpXG4gICAqL1xuICBldmVyeSAoY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMuZXZlcnkoY29uZGl0aW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGNhbGxiYWNrIHJldHVybnMgYHRydWVgIGZvciAoYXQgbGVhc3QpIG9uZVxuICAgKiBvZiB0aGUgY29udGFpbmVy4oCZcyBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHtjaGlsZENvbmRpdGlvbn0gY29uZGl0aW9uIEl0ZXJhdG9yIHJldHVybnMgdHJ1ZSBvciBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSXMgc29tZSBjaGlsZCBwYXNzIGNvbmRpdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaGFzUHJlZml4ID0gcnVsZS5zb21lKGkgPT4gaS5wcm9wWzBdID09PSAnLScpXG4gICAqL1xuICBzb21lIChjb25kaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlcy5zb21lKGNvbmRpdGlvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYGNoaWxkYOKAmXMgaW5kZXggd2l0aGluIHRoZSB7QGxpbmsgQ29udGFpbmVyI25vZGVzfSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBjaGlsZCBDaGlsZCBvZiB0aGUgY3VycmVudCBjb250YWluZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gQ2hpbGQgaW5kZXguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJ1bGUuaW5kZXgoIHJ1bGUubm9kZXNbMl0gKSAvLz0+IDJcbiAgICovXG4gIGluZGV4IChjaGlsZCkge1xuICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gY2hpbGRcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZihjaGlsZClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVy4oCZcyBmaXJzdCBjaGlsZC5cbiAgICpcbiAgICogQHR5cGUge05vZGV9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJ1bGUuZmlyc3QgPT09IHJ1bGVzLm5vZGVzWzBdXG4gICAqL1xuICBnZXQgZmlyc3QgKCkge1xuICAgIGlmICghdGhpcy5ub2RlcykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLm5vZGVzWzBdXG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lcuKAmXMgbGFzdCBjaGlsZC5cbiAgICpcbiAgICogQHR5cGUge05vZGV9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJ1bGUubGFzdCA9PT0gcnVsZS5ub2Rlc1tydWxlLm5vZGVzLmxlbmd0aCAtIDFdXG4gICAqL1xuICBnZXQgbGFzdCAoKSB7XG4gICAgaWYgKCF0aGlzLm5vZGVzKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGggLSAxXVxuICB9XG5cbiAgbm9ybWFsaXplIChub2Rlcywgc2FtcGxlKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuICAgICAgbm9kZXMgPSBjbGVhblNvdXJjZShwYXJzZShub2Rlcykubm9kZXMpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgbm9kZXMgPSBub2Rlcy5zbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSBvZiBub2Rlcykge1xuICAgICAgICBpZiAoaS5wYXJlbnQpIGkucGFyZW50LnJlbW92ZUNoaWxkKGksICdpZ25vcmUnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZXMudHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBub2RlcyA9IG5vZGVzLm5vZGVzLnNsaWNlKDApXG4gICAgICBmb3IgKGxldCBpIG9mIG5vZGVzKSB7XG4gICAgICAgIGlmIChpLnBhcmVudCkgaS5wYXJlbnQucmVtb3ZlQ2hpbGQoaSwgJ2lnbm9yZScpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2Rlcy50eXBlKSB7XG4gICAgICBub2RlcyA9IFtub2Rlc11cbiAgICB9IGVsc2UgaWYgKG5vZGVzLnByb3ApIHtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZXMudmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgZmllbGQgaXMgbWlzc2VkIGluIG5vZGUgY3JlYXRpb24nKVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZXMudmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5vZGVzLnZhbHVlID0gU3RyaW5nKG5vZGVzLnZhbHVlKVxuICAgICAgfVxuICAgICAgbm9kZXMgPSBbbmV3IERlY2xhcmF0aW9uKG5vZGVzKV1cbiAgICB9IGVsc2UgaWYgKG5vZGVzLnNlbGVjdG9yKSB7XG4gICAgICBsZXQgUnVsZSA9IHJlcXVpcmUoJy4vcnVsZScpXG4gICAgICBub2RlcyA9IFtuZXcgUnVsZShub2RlcyldXG4gICAgfSBlbHNlIGlmIChub2Rlcy5uYW1lKSB7XG4gICAgICBsZXQgQXRSdWxlID0gcmVxdWlyZSgnLi9hdC1ydWxlJylcbiAgICAgIG5vZGVzID0gW25ldyBBdFJ1bGUobm9kZXMpXVxuICAgIH0gZWxzZSBpZiAobm9kZXMudGV4dCkge1xuICAgICAgbm9kZXMgPSBbbmV3IENvbW1lbnQobm9kZXMpXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlIGluIG5vZGUgY3JlYXRpb24nKVxuICAgIH1cblxuICAgIGxldCBwcm9jZXNzZWQgPSBub2Rlcy5tYXAoaSA9PiB7XG4gICAgICBpZiAoaS5wYXJlbnQpIGkucGFyZW50LnJlbW92ZUNoaWxkKGkpXG4gICAgICBpZiAodHlwZW9mIGkucmF3cy5iZWZvcmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChzYW1wbGUgJiYgdHlwZW9mIHNhbXBsZS5yYXdzLmJlZm9yZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpLnJhd3MuYmVmb3JlID0gc2FtcGxlLnJhd3MuYmVmb3JlLnJlcGxhY2UoL1teXFxzXS9nLCAnJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5wYXJlbnQgPSB0aGlzXG4gICAgICByZXR1cm4gaVxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIENvbnRhaW5lciNcbiAgICogQG1lbWJlciB7Tm9kZVtdfSBub2RlcyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb250YWluZXLigJlzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjayB9JylcbiAgICogcm9vdC5ub2Rlcy5sZW5ndGggICAgICAgICAgIC8vPT4gMVxuICAgKiByb290Lm5vZGVzWzBdLnNlbGVjdG9yICAgICAgLy89PiAnYSdcbiAgICogcm9vdC5ub2Rlc1swXS5ub2Rlc1swXS5wcm9wIC8vPT4gJ2NvbG9yJ1xuICAgKi9cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyXG5cbi8qKlxuICogQGNhbGxiYWNrIGNoaWxkQ29uZGl0aW9uXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgICAgQ29udGFpbmVyIGNoaWxkLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IENoaWxkIGluZGV4LlxuICogQHBhcmFtIHtOb2RlW119IG5vZGVzIEFsbCBjb250YWluZXIgY2hpbGRyZW4uXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIGNoaWxkSXRlcmF0b3JcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBDb250YWluZXIgY2hpbGQuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggQ2hpbGQgaW5kZXguXG4gKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IFJldHVybmluZyBgZmFsc2VgIHdpbGwgYnJlYWsgaXRlcmF0aW9uLlxuICovXG4iXSwiZmlsZSI6ImNvbnRhaW5lci5qcyJ9
  3795. /***/ }),
  3796. /* 22 */
  3797. /***/ (function(module, exports, __webpack_require__) {
  3798. "use strict";
  3799. exports.__esModule = true;
  3800. exports.default = void 0;
  3801. var _container = _interopRequireDefault(__webpack_require__(21));
  3802. var _list = _interopRequireDefault(__webpack_require__(43));
  3803. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  3804. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  3805. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  3806. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  3807. /**
  3808. * Represents a CSS rule: a selector followed by a declaration block.
  3809. *
  3810. * @extends Container
  3811. *
  3812. * @example
  3813. * const root = postcss.parse('a{}')
  3814. * const rule = root.first
  3815. * rule.type //=> 'rule'
  3816. * rule.toString() //=> 'a{}'
  3817. */
  3818. var Rule = /*#__PURE__*/function (_Container) {
  3819. _inheritsLoose(Rule, _Container);
  3820. function Rule(defaults) {
  3821. var _this;
  3822. _this = _Container.call(this, defaults) || this;
  3823. _this.type = 'rule';
  3824. if (!_this.nodes) _this.nodes = [];
  3825. return _this;
  3826. }
  3827. /**
  3828. * An array containing the rule’s individual selectors.
  3829. * Groups of selectors are split at commas.
  3830. *
  3831. * @type {string[]}
  3832. *
  3833. * @example
  3834. * const root = postcss.parse('a, b { }')
  3835. * const rule = root.first
  3836. *
  3837. * rule.selector //=> 'a, b'
  3838. * rule.selectors //=> ['a', 'b']
  3839. *
  3840. * rule.selectors = ['a', 'strong']
  3841. * rule.selector //=> 'a, strong'
  3842. */
  3843. _createClass(Rule, [{
  3844. key: "selectors",
  3845. get: function get() {
  3846. return _list.default.comma(this.selector);
  3847. },
  3848. set: function set(values) {
  3849. var match = this.selector ? this.selector.match(/,\s*/) : null;
  3850. var sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');
  3851. this.selector = values.join(sep);
  3852. }
  3853. /**
  3854. * @memberof Rule#
  3855. * @member {string} selector The rule’s full selector represented
  3856. * as a string.
  3857. *
  3858. * @example
  3859. * const root = postcss.parse('a, b { }')
  3860. * const rule = root.first
  3861. * rule.selector //=> 'a, b'
  3862. */
  3863. /**
  3864. * @memberof Rule#
  3865. * @member {object} raws Information to generate byte-to-byte equal
  3866. * node string as it was in the origin input.
  3867. *
  3868. * Every parser saves its own properties,
  3869. * but the default CSS parser uses:
  3870. *
  3871. * * `before`: the space symbols before the node. It also stores `*`
  3872. * and `_` symbols before the declaration (IE hack).
  3873. * * `after`: the space symbols after the last child of the node
  3874. * to the end of the node.
  3875. * * `between`: the symbols between the property and value
  3876. * for declarations, selector and `{` for rules, or last parameter
  3877. * and `{` for at-rules.
  3878. * * `semicolon`: contains `true` if the last child has
  3879. * an (optional) semicolon.
  3880. * * `ownSemicolon`: contains `true` if there is semicolon after rule.
  3881. *
  3882. * PostCSS cleans selectors from comments and extra spaces,
  3883. * but it stores origin content in raws properties.
  3884. * As such, if you don’t change a declaration’s value,
  3885. * PostCSS will use the raw value with comments.
  3886. *
  3887. * @example
  3888. * const root = postcss.parse('a {\n color:black\n}')
  3889. * root.first.first.raws //=> { before: '', between: ' ', after: '\n' }
  3890. */
  3891. }]);
  3892. return Rule;
  3893. }(_container.default);
  3894. var _default = Rule;
  3895. exports.default = _default;
  3896. module.exports = exports.default;
  3897. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGUuZXM2Il0sIm5hbWVzIjpbIlJ1bGUiLCJkZWZhdWx0cyIsInR5cGUiLCJub2RlcyIsImxpc3QiLCJjb21tYSIsInNlbGVjdG9yIiwidmFsdWVzIiwibWF0Y2giLCJzZXAiLCJyYXciLCJqb2luIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOzs7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7O0lBV01BLEk7OztBQUNKLGdCQUFhQyxRQUFiLEVBQXVCO0FBQUE7O0FBQ3JCLGtDQUFNQSxRQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLE1BQVo7QUFDQSxRQUFJLENBQUMsTUFBS0MsS0FBVixFQUFpQixNQUFLQSxLQUFMLEdBQWEsRUFBYjtBQUhJO0FBSXRCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dCQWdCaUI7QUFDZixhQUFPQyxjQUFLQyxLQUFMLENBQVcsS0FBS0MsUUFBaEIsQ0FBUDtBQUNELEs7c0JBRWNDLE0sRUFBUTtBQUNyQixVQUFJQyxLQUFLLEdBQUcsS0FBS0YsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNFLEtBQWQsQ0FBb0IsTUFBcEIsQ0FBaEIsR0FBOEMsSUFBMUQ7QUFDQSxVQUFJQyxHQUFHLEdBQUdELEtBQUssR0FBR0EsS0FBSyxDQUFDLENBQUQsQ0FBUixHQUFjLE1BQU0sS0FBS0UsR0FBTCxDQUFTLFNBQVQsRUFBb0IsWUFBcEIsQ0FBbkM7QUFDQSxXQUFLSixRQUFMLEdBQWdCQyxNQUFNLENBQUNJLElBQVAsQ0FBWUYsR0FBWixDQUFoQjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7O0FBV0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNUNpQkcsa0I7O2VBMEVKWixJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbnRhaW5lcidcbmltcG9ydCBsaXN0IGZyb20gJy4vbGlzdCdcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ1NTIHJ1bGU6IGEgc2VsZWN0b3IgZm9sbG93ZWQgYnkgYSBkZWNsYXJhdGlvbiBibG9jay5cbiAqXG4gKiBAZXh0ZW5kcyBDb250YWluZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2F7fScpXG4gKiBjb25zdCBydWxlID0gcm9vdC5maXJzdFxuICogcnVsZS50eXBlICAgICAgIC8vPT4gJ3J1bGUnXG4gKiBydWxlLnRvU3RyaW5nKCkgLy89PiAnYXt9J1xuICovXG5jbGFzcyBSdWxlIGV4dGVuZHMgQ29udGFpbmVyIHtcbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ3J1bGUnXG4gICAgaWYgKCF0aGlzLm5vZGVzKSB0aGlzLm5vZGVzID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBydWxl4oCZcyBpbmRpdmlkdWFsIHNlbGVjdG9ycy5cbiAgICogR3JvdXBzIG9mIHNlbGVjdG9ycyBhcmUgc3BsaXQgYXQgY29tbWFzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhLCBiIHsgfScpXG4gICAqIGNvbnN0IHJ1bGUgPSByb290LmZpcnN0XG4gICAqXG4gICAqIHJ1bGUuc2VsZWN0b3IgIC8vPT4gJ2EsIGInXG4gICAqIHJ1bGUuc2VsZWN0b3JzIC8vPT4gWydhJywgJ2InXVxuICAgKlxuICAgKiBydWxlLnNlbGVjdG9ycyA9IFsnYScsICdzdHJvbmcnXVxuICAgKiBydWxlLnNlbGVjdG9yIC8vPT4gJ2EsIHN0cm9uZydcbiAgICovXG4gIGdldCBzZWxlY3RvcnMgKCkge1xuICAgIHJldHVybiBsaXN0LmNvbW1hKHRoaXMuc2VsZWN0b3IpXG4gIH1cblxuICBzZXQgc2VsZWN0b3JzICh2YWx1ZXMpIHtcbiAgICBsZXQgbWF0Y2ggPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3Rvci5tYXRjaCgvLFxccyovKSA6IG51bGxcbiAgICBsZXQgc2VwID0gbWF0Y2ggPyBtYXRjaFswXSA6ICcsJyArIHRoaXMucmF3KCdiZXR3ZWVuJywgJ2JlZm9yZU9wZW4nKVxuICAgIHRoaXMuc2VsZWN0b3IgPSB2YWx1ZXMuam9pbihzZXApXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIFJ1bGUjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gc2VsZWN0b3IgVGhlIHJ1bGXigJlzIGZ1bGwgc2VsZWN0b3IgcmVwcmVzZW50ZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2EsIGIgeyB9JylcbiAgICogY29uc3QgcnVsZSA9IHJvb3QuZmlyc3RcbiAgICogcnVsZS5zZWxlY3RvciAvLz0+ICdhLCBiJ1xuICAgKi9cblxuICAvKipcbiAgICogQG1lbWJlcm9mIFJ1bGUjXG4gICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgKlxuICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgKlxuICAgKiAqIGBiZWZvcmVgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZWZvcmUgdGhlIG5vZGUuIEl0IGFsc28gc3RvcmVzIGAqYFxuICAgKiAgIGFuZCBgX2Agc3ltYm9scyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIChJRSBoYWNrKS5cbiAgICogKiBgYWZ0ZXJgOiB0aGUgc3BhY2Ugc3ltYm9scyBhZnRlciB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgbm9kZVxuICAgKiAgIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGUuXG4gICAqICogYGJldHdlZW5gOiB0aGUgc3ltYm9scyBiZXR3ZWVuIHRoZSBwcm9wZXJ0eSBhbmQgdmFsdWVcbiAgICogICBmb3IgZGVjbGFyYXRpb25zLCBzZWxlY3RvciBhbmQgYHtgIGZvciBydWxlcywgb3IgbGFzdCBwYXJhbWV0ZXJcbiAgICogICBhbmQgYHtgIGZvciBhdC1ydWxlcy5cbiAgICogKiBgc2VtaWNvbG9uYDogY29udGFpbnMgYHRydWVgIGlmIHRoZSBsYXN0IGNoaWxkIGhhc1xuICAgKiAgIGFuIChvcHRpb25hbCkgc2VtaWNvbG9uLlxuICAgKiAqIGBvd25TZW1pY29sb25gOiBjb250YWlucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgc2VtaWNvbG9uIGFmdGVyIHJ1bGUuXG4gICAqXG4gICAqIFBvc3RDU1MgY2xlYW5zIHNlbGVjdG9ycyBmcm9tIGNvbW1lbnRzIGFuZCBleHRyYSBzcGFjZXMsXG4gICAqIGJ1dCBpdCBzdG9yZXMgb3JpZ2luIGNvbnRlbnQgaW4gcmF3cyBwcm9wZXJ0aWVzLlxuICAgKiBBcyBzdWNoLCBpZiB5b3UgZG9u4oCZdCBjaGFuZ2UgYSBkZWNsYXJhdGlvbuKAmXMgdmFsdWUsXG4gICAqIFBvc3RDU1Mgd2lsbCB1c2UgdGhlIHJhdyB2YWx1ZSB3aXRoIGNvbW1lbnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7XFxuICBjb2xvcjpibGFja1xcbn0nKVxuICAgKiByb290LmZpcnN0LmZpcnN0LnJhd3MgLy89PiB7IGJlZm9yZTogJycsIGJldHdlZW46ICcgJywgYWZ0ZXI6ICdcXG4nIH1cbiAgICovXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJ1bGVcbiJdLCJmaWxlIjoicnVsZS5qcyJ9
  3898. /***/ }),
  3899. /* 23 */
  3900. /***/ (function(module, exports) {
  3901. module.exports = function createCustomError(name, message) {
  3902. // use Object.create(), because some VMs prevent setting line/column otherwise
  3903. // (iOS Safari 10 even throws an exception)
  3904. var error = Object.create(SyntaxError.prototype);
  3905. var errorStack = new Error();
  3906. error.name = name;
  3907. error.message = message;
  3908. Object.defineProperty(error, 'stack', {
  3909. get: function() {
  3910. return (errorStack.stack || '').replace(/^(.+\n){1,3}/, name + ': ' + message + '\n');
  3911. }
  3912. });
  3913. return error;
  3914. };
  3915. /***/ }),
  3916. /* 24 */
  3917. /***/ (function(module, exports, __webpack_require__) {
  3918. "use strict";
  3919. // token types (note: value shouldn't intersect with used char codes)
  3920. var WHITESPACE = 1;
  3921. var IDENTIFIER = 2;
  3922. var NUMBER = 3;
  3923. var STRING = 4;
  3924. var COMMENT = 5;
  3925. var PUNCTUATOR = 6;
  3926. var CDO = 7;
  3927. var CDC = 8;
  3928. var ATKEYWORD = 14;
  3929. var FUNCTION = 15;
  3930. var URL = 16;
  3931. var RAW = 17;
  3932. var TAB = 9;
  3933. var N = 10;
  3934. var F = 12;
  3935. var R = 13;
  3936. var SPACE = 32;
  3937. var TYPE = {
  3938. WhiteSpace: WHITESPACE,
  3939. Identifier: IDENTIFIER,
  3940. Number: NUMBER,
  3941. String: STRING,
  3942. Comment: COMMENT,
  3943. Punctuator: PUNCTUATOR,
  3944. CDO: CDO,
  3945. CDC: CDC,
  3946. AtKeyword: ATKEYWORD,
  3947. Function: FUNCTION,
  3948. Url: URL,
  3949. Raw: RAW,
  3950. ExclamationMark: 33, // !
  3951. QuotationMark: 34, // "
  3952. NumberSign: 35, // #
  3953. DollarSign: 36, // $
  3954. PercentSign: 37, // %
  3955. Ampersand: 38, // &
  3956. Apostrophe: 39, // '
  3957. LeftParenthesis: 40, // (
  3958. RightParenthesis: 41, // )
  3959. Asterisk: 42, // *
  3960. PlusSign: 43, // +
  3961. Comma: 44, // ,
  3962. HyphenMinus: 45, // -
  3963. FullStop: 46, // .
  3964. Solidus: 47, // /
  3965. Colon: 58, // :
  3966. Semicolon: 59, // ;
  3967. LessThanSign: 60, // <
  3968. EqualsSign: 61, // =
  3969. GreaterThanSign: 62, // >
  3970. QuestionMark: 63, // ?
  3971. CommercialAt: 64, // @
  3972. LeftSquareBracket: 91, // [
  3973. Backslash: 92, // \
  3974. RightSquareBracket: 93, // ]
  3975. CircumflexAccent: 94, // ^
  3976. LowLine: 95, // _
  3977. GraveAccent: 96, // `
  3978. LeftCurlyBracket: 123, // {
  3979. VerticalLine: 124, // |
  3980. RightCurlyBracket: 125, // }
  3981. Tilde: 126 // ~
  3982. };
  3983. var NAME = Object.keys(TYPE).reduce(function(result, key) {
  3984. result[TYPE[key]] = key;
  3985. return result;
  3986. }, {});
  3987. // https://drafts.csswg.org/css-syntax/#tokenizer-definitions
  3988. // > non-ASCII code point
  3989. // > A code point with a value equal to or greater than U+0080 <control>
  3990. // > name-start code point
  3991. // > A letter, a non-ASCII code point, or U+005F LOW LINE (_).
  3992. // > name code point
  3993. // > A name-start code point, a digit, or U+002D HYPHEN-MINUS (-)
  3994. // That means only ASCII code points has a special meaning and we a maps for 0..127 codes only
  3995. var SafeUint32Array = typeof Uint32Array !== 'undefined' ? Uint32Array : Array; // fallback on Array when TypedArray is not supported
  3996. var SYMBOL_TYPE = new SafeUint32Array(0x80);
  3997. var PUNCTUATION = new SafeUint32Array(0x80);
  3998. var STOP_URL_RAW = new SafeUint32Array(0x80);
  3999. for (var i = 0; i < SYMBOL_TYPE.length; i++) {
  4000. SYMBOL_TYPE[i] = IDENTIFIER;
  4001. }
  4002. // fill categories
  4003. [
  4004. TYPE.ExclamationMark, // !
  4005. TYPE.QuotationMark, // "
  4006. TYPE.NumberSign, // #
  4007. TYPE.DollarSign, // $
  4008. TYPE.PercentSign, // %
  4009. TYPE.Ampersand, // &
  4010. TYPE.Apostrophe, // '
  4011. TYPE.LeftParenthesis, // (
  4012. TYPE.RightParenthesis, // )
  4013. TYPE.Asterisk, // *
  4014. TYPE.PlusSign, // +
  4015. TYPE.Comma, // ,
  4016. TYPE.HyphenMinus, // -
  4017. TYPE.FullStop, // .
  4018. TYPE.Solidus, // /
  4019. TYPE.Colon, // :
  4020. TYPE.Semicolon, // ;
  4021. TYPE.LessThanSign, // <
  4022. TYPE.EqualsSign, // =
  4023. TYPE.GreaterThanSign, // >
  4024. TYPE.QuestionMark, // ?
  4025. TYPE.CommercialAt, // @
  4026. TYPE.LeftSquareBracket, // [
  4027. // TYPE.Backslash, // \
  4028. TYPE.RightSquareBracket, // ]
  4029. TYPE.CircumflexAccent, // ^
  4030. // TYPE.LowLine, // _
  4031. TYPE.GraveAccent, // `
  4032. TYPE.LeftCurlyBracket, // {
  4033. TYPE.VerticalLine, // |
  4034. TYPE.RightCurlyBracket, // }
  4035. TYPE.Tilde // ~
  4036. ].forEach(function(key) {
  4037. SYMBOL_TYPE[Number(key)] = PUNCTUATOR;
  4038. PUNCTUATION[Number(key)] = PUNCTUATOR;
  4039. });
  4040. for (var i = 48; i <= 57; i++) {
  4041. SYMBOL_TYPE[i] = NUMBER;
  4042. }
  4043. SYMBOL_TYPE[SPACE] = WHITESPACE;
  4044. SYMBOL_TYPE[TAB] = WHITESPACE;
  4045. SYMBOL_TYPE[N] = WHITESPACE;
  4046. SYMBOL_TYPE[R] = WHITESPACE;
  4047. SYMBOL_TYPE[F] = WHITESPACE;
  4048. SYMBOL_TYPE[TYPE.Apostrophe] = STRING;
  4049. SYMBOL_TYPE[TYPE.QuotationMark] = STRING;
  4050. STOP_URL_RAW[SPACE] = 1;
  4051. STOP_URL_RAW[TAB] = 1;
  4052. STOP_URL_RAW[N] = 1;
  4053. STOP_URL_RAW[R] = 1;
  4054. STOP_URL_RAW[F] = 1;
  4055. STOP_URL_RAW[TYPE.Apostrophe] = 1;
  4056. STOP_URL_RAW[TYPE.QuotationMark] = 1;
  4057. STOP_URL_RAW[TYPE.LeftParenthesis] = 1;
  4058. STOP_URL_RAW[TYPE.RightParenthesis] = 1;
  4059. // whitespace is punctuation ...
  4060. PUNCTUATION[SPACE] = PUNCTUATOR;
  4061. PUNCTUATION[TAB] = PUNCTUATOR;
  4062. PUNCTUATION[N] = PUNCTUATOR;
  4063. PUNCTUATION[R] = PUNCTUATOR;
  4064. PUNCTUATION[F] = PUNCTUATOR;
  4065. // ... hyper minus is not
  4066. PUNCTUATION[TYPE.HyphenMinus] = 0;
  4067. module.exports = {
  4068. TYPE: TYPE,
  4069. NAME: NAME,
  4070. SYMBOL_TYPE: SYMBOL_TYPE,
  4071. PUNCTUATION: PUNCTUATION,
  4072. STOP_URL_RAW: STOP_URL_RAW
  4073. };
  4074. /***/ }),
  4075. /* 25 */
  4076. /***/ (function(module, exports) {
  4077. function noop(value) {
  4078. return value;
  4079. }
  4080. function generateMultiplier(multiplier) {
  4081. if (multiplier.min === 0 && multiplier.max === 0) {
  4082. return '*';
  4083. }
  4084. if (multiplier.min === 0 && multiplier.max === 1) {
  4085. return '?';
  4086. }
  4087. if (multiplier.min === 1 && multiplier.max === 0) {
  4088. return multiplier.comma ? '#' : '+';
  4089. }
  4090. if (multiplier.min === 1 && multiplier.max === 1) {
  4091. return '';
  4092. }
  4093. return (
  4094. (multiplier.comma ? '#' : '') +
  4095. (multiplier.min === multiplier.max
  4096. ? '{' + multiplier.min + '}'
  4097. : '{' + multiplier.min + ',' + (multiplier.max !== 0 ? multiplier.max : '') + '}'
  4098. )
  4099. );
  4100. }
  4101. function generateSequence(node, forceBraces, decorate) {
  4102. var result = node.terms.map(function(term) {
  4103. return generate(term, forceBraces, decorate);
  4104. }).join(node.combinator === ' ' ? ' ' : ' ' + node.combinator + ' ');
  4105. if (node.explicit || forceBraces) {
  4106. result = (result[0] !== ',' ? '[ ' : '[') + result + ' ]';
  4107. }
  4108. return result;
  4109. }
  4110. function generate(node, forceBraces, decorate) {
  4111. var result;
  4112. switch (node.type) {
  4113. case 'Group':
  4114. result =
  4115. generateSequence(node, forceBraces, decorate) +
  4116. (node.disallowEmpty ? '!' : '');
  4117. break;
  4118. case 'Multiplier':
  4119. // return since node is a composition
  4120. return (
  4121. generate(node.term, forceBraces, decorate) +
  4122. decorate(generateMultiplier(node), node)
  4123. );
  4124. case 'Type':
  4125. result = '<' + node.name + '>';
  4126. break;
  4127. case 'Property':
  4128. result = '<\'' + node.name + '\'>';
  4129. break;
  4130. case 'Keyword':
  4131. result = node.name;
  4132. break;
  4133. case 'AtKeyword':
  4134. result = '@' + node.name;
  4135. break;
  4136. case 'Function':
  4137. result = node.name + '(';
  4138. break;
  4139. case 'String':
  4140. case 'Token':
  4141. result = node.value;
  4142. break;
  4143. case 'Comma':
  4144. result = ',';
  4145. break;
  4146. default:
  4147. throw new Error('Unknown node type `' + node.type + '`');
  4148. }
  4149. return decorate(result, node);
  4150. }
  4151. module.exports = function(node, options) {
  4152. var decorate = noop;
  4153. var forceBraces = false;
  4154. if (typeof options === 'function') {
  4155. decorate = options;
  4156. } else if (options) {
  4157. forceBraces = Boolean(options.forceBraces);
  4158. if (typeof options.decorate === 'function') {
  4159. decorate = options.decorate;
  4160. }
  4161. }
  4162. return generate(node, forceBraces, decorate);
  4163. };
  4164. /***/ }),
  4165. /* 26 */
  4166. /***/ (function(module, exports, __webpack_require__) {
  4167. "use strict";
  4168. var hasOwnProperty = Object.prototype.hasOwnProperty;
  4169. var keywords = Object.create(null);
  4170. var properties = Object.create(null);
  4171. var HYPHENMINUS = 45; // '-'.charCodeAt()
  4172. function isCustomProperty(str, offset) {
  4173. offset = offset || 0;
  4174. return str.length - offset >= 2 &&
  4175. str.charCodeAt(offset) === HYPHENMINUS &&
  4176. str.charCodeAt(offset + 1) === HYPHENMINUS;
  4177. }
  4178. function getVendorPrefix(str, offset) {
  4179. offset = offset || 0;
  4180. // verdor prefix should be at least 3 chars length
  4181. if (str.length - offset >= 3) {
  4182. // vendor prefix starts with hyper minus following non-hyper minus
  4183. if (str.charCodeAt(offset) === HYPHENMINUS &&
  4184. str.charCodeAt(offset + 1) !== HYPHENMINUS) {
  4185. // vendor prefix should contain a hyper minus at the ending
  4186. var secondDashIndex = str.indexOf('-', offset + 2);
  4187. if (secondDashIndex !== -1) {
  4188. return str.substring(offset, secondDashIndex + 1);
  4189. }
  4190. }
  4191. }
  4192. return '';
  4193. }
  4194. function getKeywordDescriptor(keyword) {
  4195. if (hasOwnProperty.call(keywords, keyword)) {
  4196. return keywords[keyword];
  4197. }
  4198. var name = keyword.toLowerCase();
  4199. if (hasOwnProperty.call(keywords, name)) {
  4200. return keywords[keyword] = keywords[name];
  4201. }
  4202. var custom = isCustomProperty(name, 0);
  4203. var vendor = !custom ? getVendorPrefix(name, 0) : '';
  4204. return keywords[keyword] = Object.freeze({
  4205. basename: name.substr(vendor.length),
  4206. name: name,
  4207. vendor: vendor,
  4208. prefix: vendor,
  4209. custom: custom
  4210. });
  4211. }
  4212. function getPropertyDescriptor(property) {
  4213. if (hasOwnProperty.call(properties, property)) {
  4214. return properties[property];
  4215. }
  4216. var name = property;
  4217. var hack = property[0];
  4218. if (hack === '/') {
  4219. hack = property[1] === '/' ? '//' : '/';
  4220. } else if (hack !== '_' &&
  4221. hack !== '*' &&
  4222. hack !== '$' &&
  4223. hack !== '#' &&
  4224. hack !== '+') {
  4225. hack = '';
  4226. }
  4227. var custom = isCustomProperty(name, hack.length);
  4228. // re-use result when possible (the same as for lower case)
  4229. if (!custom) {
  4230. name = name.toLowerCase();
  4231. if (hasOwnProperty.call(properties, name)) {
  4232. return properties[property] = properties[name];
  4233. }
  4234. }
  4235. var vendor = !custom ? getVendorPrefix(name, hack.length) : '';
  4236. var prefix = name.substr(0, hack.length + vendor.length);
  4237. return properties[property] = Object.freeze({
  4238. basename: name.substr(prefix.length),
  4239. name: name.substr(hack.length),
  4240. hack: hack,
  4241. vendor: vendor,
  4242. prefix: prefix,
  4243. custom: custom
  4244. });
  4245. }
  4246. module.exports = {
  4247. keyword: getKeywordDescriptor,
  4248. property: getPropertyDescriptor,
  4249. isCustomProperty: isCustomProperty,
  4250. vendorPrefix: getVendorPrefix
  4251. };
  4252. /***/ }),
  4253. /* 27 */
  4254. /***/ (function(module, exports, __webpack_require__) {
  4255. var Tokenizer = __webpack_require__(103);
  4256. var TAB = 9;
  4257. var N = 10;
  4258. var F = 12;
  4259. var R = 13;
  4260. var SPACE = 32;
  4261. var EXCLAMATIONMARK = 33; // !
  4262. var NUMBERSIGN = 35; // #
  4263. var AMPERSAND = 38; // &
  4264. var APOSTROPHE = 39; // '
  4265. var LEFTPARENTHESIS = 40; // (
  4266. var RIGHTPARENTHESIS = 41; // )
  4267. var ASTERISK = 42; // *
  4268. var PLUSSIGN = 43; // +
  4269. var COMMA = 44; // ,
  4270. var LESSTHANSIGN = 60; // <
  4271. var GREATERTHANSIGN = 62; // >
  4272. var QUESTIONMARK = 63; // ?
  4273. var COMMERCIALAT = 64; // @
  4274. var LEFTSQUAREBRACKET = 91; // [
  4275. var RIGHTSQUAREBRACKET = 93; // ]
  4276. var LEFTCURLYBRACKET = 123; // {
  4277. var VERTICALLINE = 124; // |
  4278. var RIGHTCURLYBRACKET = 125; // }
  4279. var NAME_CHAR = createCharMap(function(ch) {
  4280. return /[a-zA-Z0-9\-]/.test(ch);
  4281. });
  4282. var COMBINATOR_PRECEDENCE = {
  4283. ' ': 1,
  4284. '&&': 2,
  4285. '||': 3,
  4286. '|': 4
  4287. };
  4288. function createCharMap(fn) {
  4289. var array = typeof Uint32Array === 'function' ? new Uint32Array(128) : new Array(128);
  4290. for (var i = 0; i < 128; i++) {
  4291. array[i] = fn(String.fromCharCode(i)) ? 1 : 0;
  4292. }
  4293. return array;
  4294. }
  4295. function scanSpaces(tokenizer) {
  4296. return tokenizer.substringToPos(
  4297. tokenizer.findWsEnd(tokenizer.pos + 1)
  4298. );
  4299. }
  4300. function scanWord(tokenizer) {
  4301. var end = tokenizer.pos;
  4302. for (; end < tokenizer.str.length; end++) {
  4303. var code = tokenizer.str.charCodeAt(end);
  4304. if (code >= 128 || NAME_CHAR[code] === 0) {
  4305. break;
  4306. }
  4307. }
  4308. if (tokenizer.pos === end) {
  4309. tokenizer.error('Expect a keyword');
  4310. }
  4311. return tokenizer.substringToPos(end);
  4312. }
  4313. function scanNumber(tokenizer) {
  4314. var end = tokenizer.pos;
  4315. for (; end < tokenizer.str.length; end++) {
  4316. var code = tokenizer.str.charCodeAt(end);
  4317. if (code < 48 || code > 57) {
  4318. break;
  4319. }
  4320. }
  4321. if (tokenizer.pos === end) {
  4322. tokenizer.error('Expect a number');
  4323. }
  4324. return tokenizer.substringToPos(end);
  4325. }
  4326. function scanString(tokenizer) {
  4327. var end = tokenizer.str.indexOf('\'', tokenizer.pos + 1);
  4328. if (end === -1) {
  4329. tokenizer.pos = tokenizer.str.length;
  4330. tokenizer.error('Expect an apostrophe');
  4331. }
  4332. return tokenizer.substringToPos(end + 1);
  4333. }
  4334. function readMultiplierRange(tokenizer) {
  4335. var min = null;
  4336. var max = null;
  4337. tokenizer.eat(LEFTCURLYBRACKET);
  4338. min = scanNumber(tokenizer);
  4339. if (tokenizer.charCode() === COMMA) {
  4340. tokenizer.pos++;
  4341. if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {
  4342. max = scanNumber(tokenizer);
  4343. }
  4344. } else {
  4345. max = min;
  4346. }
  4347. tokenizer.eat(RIGHTCURLYBRACKET);
  4348. return {
  4349. min: Number(min),
  4350. max: max ? Number(max) : 0
  4351. };
  4352. }
  4353. function readMultiplier(tokenizer) {
  4354. var range = null;
  4355. var comma = false;
  4356. switch (tokenizer.charCode()) {
  4357. case ASTERISK:
  4358. tokenizer.pos++;
  4359. range = {
  4360. min: 0,
  4361. max: 0
  4362. };
  4363. break;
  4364. case PLUSSIGN:
  4365. tokenizer.pos++;
  4366. range = {
  4367. min: 1,
  4368. max: 0
  4369. };
  4370. break;
  4371. case QUESTIONMARK:
  4372. tokenizer.pos++;
  4373. range = {
  4374. min: 0,
  4375. max: 1
  4376. };
  4377. break;
  4378. case NUMBERSIGN:
  4379. tokenizer.pos++;
  4380. comma = true;
  4381. if (tokenizer.charCode() === LEFTCURLYBRACKET) {
  4382. range = readMultiplierRange(tokenizer);
  4383. } else {
  4384. range = {
  4385. min: 1,
  4386. max: 0
  4387. };
  4388. }
  4389. break;
  4390. case LEFTCURLYBRACKET:
  4391. range = readMultiplierRange(tokenizer);
  4392. break;
  4393. default:
  4394. return null;
  4395. }
  4396. return {
  4397. type: 'Multiplier',
  4398. comma: comma,
  4399. min: range.min,
  4400. max: range.max,
  4401. term: null
  4402. };
  4403. }
  4404. function maybeMultiplied(tokenizer, node) {
  4405. var multiplier = readMultiplier(tokenizer);
  4406. if (multiplier !== null) {
  4407. multiplier.term = node;
  4408. return multiplier;
  4409. }
  4410. return node;
  4411. }
  4412. function maybeToken(tokenizer) {
  4413. var ch = tokenizer.peek();
  4414. if (ch === '') {
  4415. return null;
  4416. }
  4417. return {
  4418. type: 'Token',
  4419. value: ch
  4420. };
  4421. }
  4422. function readProperty(tokenizer) {
  4423. var name;
  4424. tokenizer.eat(LESSTHANSIGN);
  4425. tokenizer.eat(APOSTROPHE);
  4426. name = scanWord(tokenizer);
  4427. tokenizer.eat(APOSTROPHE);
  4428. tokenizer.eat(GREATERTHANSIGN);
  4429. return maybeMultiplied(tokenizer, {
  4430. type: 'Property',
  4431. name: name
  4432. });
  4433. }
  4434. function readType(tokenizer) {
  4435. var name;
  4436. tokenizer.eat(LESSTHANSIGN);
  4437. name = scanWord(tokenizer);
  4438. if (tokenizer.charCode() === LEFTPARENTHESIS &&
  4439. tokenizer.nextCharCode() === RIGHTPARENTHESIS) {
  4440. tokenizer.pos += 2;
  4441. name += '()';
  4442. }
  4443. tokenizer.eat(GREATERTHANSIGN);
  4444. return maybeMultiplied(tokenizer, {
  4445. type: 'Type',
  4446. name: name
  4447. });
  4448. }
  4449. function readKeywordOrFunction(tokenizer) {
  4450. var name;
  4451. name = scanWord(tokenizer);
  4452. if (tokenizer.charCode() === LEFTPARENTHESIS) {
  4453. tokenizer.pos++;
  4454. return {
  4455. type: 'Function',
  4456. name: name
  4457. };
  4458. }
  4459. return maybeMultiplied(tokenizer, {
  4460. type: 'Keyword',
  4461. name: name
  4462. });
  4463. }
  4464. function regroupTerms(terms, combinators) {
  4465. function createGroup(terms, combinator) {
  4466. return {
  4467. type: 'Group',
  4468. terms: terms,
  4469. combinator: combinator,
  4470. disallowEmpty: false,
  4471. explicit: false
  4472. };
  4473. }
  4474. combinators = Object.keys(combinators).sort(function(a, b) {
  4475. return COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b];
  4476. });
  4477. while (combinators.length > 0) {
  4478. var combinator = combinators.shift();
  4479. for (var i = 0, subgroupStart = 0; i < terms.length; i++) {
  4480. var term = terms[i];
  4481. if (term.type === 'Combinator') {
  4482. if (term.value === combinator) {
  4483. if (subgroupStart === -1) {
  4484. subgroupStart = i - 1;
  4485. }
  4486. terms.splice(i, 1);
  4487. i--;
  4488. } else {
  4489. if (subgroupStart !== -1 && i - subgroupStart > 1) {
  4490. terms.splice(
  4491. subgroupStart,
  4492. i - subgroupStart,
  4493. createGroup(terms.slice(subgroupStart, i), combinator)
  4494. );
  4495. i = subgroupStart + 1;
  4496. }
  4497. subgroupStart = -1;
  4498. }
  4499. }
  4500. }
  4501. if (subgroupStart !== -1 && combinators.length) {
  4502. terms.splice(
  4503. subgroupStart,
  4504. i - subgroupStart,
  4505. createGroup(terms.slice(subgroupStart, i), combinator)
  4506. );
  4507. }
  4508. }
  4509. return combinator;
  4510. }
  4511. function readImplicitGroup(tokenizer) {
  4512. var terms = [];
  4513. var combinators = {};
  4514. var token;
  4515. var prevToken = null;
  4516. var prevTokenPos = tokenizer.pos;
  4517. while (token = peek(tokenizer)) {
  4518. if (token.type !== 'Spaces') {
  4519. if (token.type === 'Combinator') {
  4520. // check for combinator in group beginning and double combinator sequence
  4521. if (prevToken === null || prevToken.type === 'Combinator') {
  4522. tokenizer.pos = prevTokenPos;
  4523. tokenizer.error('Unexpected combinator');
  4524. }
  4525. combinators[token.value] = true;
  4526. } else if (prevToken !== null && prevToken.type !== 'Combinator') {
  4527. combinators[' '] = true; // a b
  4528. terms.push({
  4529. type: 'Combinator',
  4530. value: ' '
  4531. });
  4532. }
  4533. terms.push(token);
  4534. prevToken = token;
  4535. prevTokenPos = tokenizer.pos;
  4536. }
  4537. }
  4538. // check for combinator in group ending
  4539. if (prevToken !== null && prevToken.type === 'Combinator') {
  4540. tokenizer.pos -= prevTokenPos;
  4541. tokenizer.error('Unexpected combinator');
  4542. }
  4543. return {
  4544. type: 'Group',
  4545. terms: terms,
  4546. combinator: regroupTerms(terms, combinators) || ' ',
  4547. disallowEmpty: false,
  4548. explicit: false
  4549. };
  4550. }
  4551. function readGroup(tokenizer) {
  4552. var result;
  4553. tokenizer.eat(LEFTSQUAREBRACKET);
  4554. result = readImplicitGroup(tokenizer);
  4555. tokenizer.eat(RIGHTSQUAREBRACKET);
  4556. result.explicit = true;
  4557. if (tokenizer.charCode() === EXCLAMATIONMARK) {
  4558. tokenizer.pos++;
  4559. result.disallowEmpty = true;
  4560. }
  4561. return result;
  4562. }
  4563. function peek(tokenizer) {
  4564. var code = tokenizer.charCode();
  4565. if (code < 128 && NAME_CHAR[code] === 1) {
  4566. return readKeywordOrFunction(tokenizer);
  4567. }
  4568. switch (code) {
  4569. case RIGHTSQUAREBRACKET:
  4570. // don't eat, stop scan a group
  4571. break;
  4572. case LEFTSQUAREBRACKET:
  4573. return maybeMultiplied(tokenizer, readGroup(tokenizer));
  4574. case LESSTHANSIGN:
  4575. return tokenizer.nextCharCode() === APOSTROPHE
  4576. ? readProperty(tokenizer)
  4577. : readType(tokenizer);
  4578. case VERTICALLINE:
  4579. return {
  4580. type: 'Combinator',
  4581. value: tokenizer.substringToPos(
  4582. tokenizer.nextCharCode() === VERTICALLINE
  4583. ? tokenizer.pos + 2
  4584. : tokenizer.pos + 1
  4585. )
  4586. };
  4587. case AMPERSAND:
  4588. tokenizer.pos++;
  4589. tokenizer.eat(AMPERSAND);
  4590. return {
  4591. type: 'Combinator',
  4592. value: '&&'
  4593. };
  4594. case COMMA:
  4595. tokenizer.pos++;
  4596. return {
  4597. type: 'Comma'
  4598. };
  4599. case APOSTROPHE:
  4600. return maybeMultiplied(tokenizer, {
  4601. type: 'String',
  4602. value: scanString(tokenizer)
  4603. });
  4604. case SPACE:
  4605. case TAB:
  4606. case N:
  4607. case R:
  4608. case F:
  4609. return {
  4610. type: 'Spaces',
  4611. value: scanSpaces(tokenizer)
  4612. };
  4613. case COMMERCIALAT:
  4614. code = tokenizer.nextCharCode();
  4615. if (code < 128 && NAME_CHAR[code] === 1) {
  4616. tokenizer.pos++;
  4617. return {
  4618. type: 'AtKeyword',
  4619. name: scanWord(tokenizer)
  4620. };
  4621. }
  4622. return maybeToken(tokenizer);
  4623. case ASTERISK:
  4624. case PLUSSIGN:
  4625. case QUESTIONMARK:
  4626. case NUMBERSIGN:
  4627. case EXCLAMATIONMARK:
  4628. // prohibited tokens (used as a multiplier start)
  4629. break;
  4630. case LEFTCURLYBRACKET:
  4631. // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting
  4632. // check next char isn't a number, because it's likely a disjoined multiplier
  4633. code = tokenizer.nextCharCode();
  4634. if (code < 48 || code > 57) {
  4635. return maybeToken(tokenizer);
  4636. }
  4637. break;
  4638. default:
  4639. return maybeToken(tokenizer);
  4640. }
  4641. }
  4642. function parse(str) {
  4643. var tokenizer = new Tokenizer(str);
  4644. var result = readImplicitGroup(tokenizer);
  4645. if (tokenizer.pos !== str.length) {
  4646. tokenizer.error('Unexpected input');
  4647. }
  4648. // reduce redundant groups with single group term
  4649. if (result.terms.length === 1 && result.terms[0].type === 'Group') {
  4650. result = result.terms[0];
  4651. }
  4652. return result;
  4653. }
  4654. // warm up parse to elimitate code branches that never execute
  4655. // fix soft deoptimizations (insufficient type feedback)
  4656. parse('[a&&<b>#|<\'c\'>*||e() f{2} /,(% g#{1,2} h{2,})]!');
  4657. module.exports = parse;
  4658. /***/ }),
  4659. /* 28 */
  4660. /***/ (function(module, exports, __webpack_require__) {
  4661. module.exports = {
  4662. AnPlusB: __webpack_require__(127),
  4663. Atrule: __webpack_require__(128),
  4664. AtrulePrelude: __webpack_require__(129),
  4665. AttributeSelector: __webpack_require__(130),
  4666. Block: __webpack_require__(131),
  4667. Brackets: __webpack_require__(132),
  4668. CDC: __webpack_require__(133),
  4669. CDO: __webpack_require__(134),
  4670. ClassSelector: __webpack_require__(135),
  4671. Combinator: __webpack_require__(136),
  4672. Comment: __webpack_require__(137),
  4673. Declaration: __webpack_require__(138),
  4674. DeclarationList: __webpack_require__(139),
  4675. Dimension: __webpack_require__(140),
  4676. Function: __webpack_require__(141),
  4677. HexColor: __webpack_require__(142),
  4678. Identifier: __webpack_require__(143),
  4679. IdSelector: __webpack_require__(144),
  4680. MediaFeature: __webpack_require__(145),
  4681. MediaQuery: __webpack_require__(146),
  4682. MediaQueryList: __webpack_require__(147),
  4683. Nth: __webpack_require__(148),
  4684. Number: __webpack_require__(149),
  4685. Operator: __webpack_require__(150),
  4686. Parentheses: __webpack_require__(151),
  4687. Percentage: __webpack_require__(152),
  4688. PseudoClassSelector: __webpack_require__(153),
  4689. PseudoElementSelector: __webpack_require__(154),
  4690. Ratio: __webpack_require__(155),
  4691. Raw: __webpack_require__(156),
  4692. Rule: __webpack_require__(157),
  4693. Selector: __webpack_require__(158),
  4694. SelectorList: __webpack_require__(159),
  4695. String: __webpack_require__(160),
  4696. StyleSheet: __webpack_require__(161),
  4697. TypeSelector: __webpack_require__(162),
  4698. UnicodeRange: __webpack_require__(163),
  4699. Url: __webpack_require__(164),
  4700. Value: __webpack_require__(165),
  4701. WhiteSpace: __webpack_require__(166)
  4702. };
  4703. /***/ }),
  4704. /* 29 */
  4705. /***/ (function(module, exports, __webpack_require__) {
  4706. var lexer = __webpack_require__(1).lexer;
  4707. var packNumber = __webpack_require__(11).pack;
  4708. // http://www.w3.org/TR/css3-color/#svg-color
  4709. var NAME_TO_HEX = {
  4710. 'aliceblue': 'f0f8ff',
  4711. 'antiquewhite': 'faebd7',
  4712. 'aqua': '0ff',
  4713. 'aquamarine': '7fffd4',
  4714. 'azure': 'f0ffff',
  4715. 'beige': 'f5f5dc',
  4716. 'bisque': 'ffe4c4',
  4717. 'black': '000',
  4718. 'blanchedalmond': 'ffebcd',
  4719. 'blue': '00f',
  4720. 'blueviolet': '8a2be2',
  4721. 'brown': 'a52a2a',
  4722. 'burlywood': 'deb887',
  4723. 'cadetblue': '5f9ea0',
  4724. 'chartreuse': '7fff00',
  4725. 'chocolate': 'd2691e',
  4726. 'coral': 'ff7f50',
  4727. 'cornflowerblue': '6495ed',
  4728. 'cornsilk': 'fff8dc',
  4729. 'crimson': 'dc143c',
  4730. 'cyan': '0ff',
  4731. 'darkblue': '00008b',
  4732. 'darkcyan': '008b8b',
  4733. 'darkgoldenrod': 'b8860b',
  4734. 'darkgray': 'a9a9a9',
  4735. 'darkgrey': 'a9a9a9',
  4736. 'darkgreen': '006400',
  4737. 'darkkhaki': 'bdb76b',
  4738. 'darkmagenta': '8b008b',
  4739. 'darkolivegreen': '556b2f',
  4740. 'darkorange': 'ff8c00',
  4741. 'darkorchid': '9932cc',
  4742. 'darkred': '8b0000',
  4743. 'darksalmon': 'e9967a',
  4744. 'darkseagreen': '8fbc8f',
  4745. 'darkslateblue': '483d8b',
  4746. 'darkslategray': '2f4f4f',
  4747. 'darkslategrey': '2f4f4f',
  4748. 'darkturquoise': '00ced1',
  4749. 'darkviolet': '9400d3',
  4750. 'deeppink': 'ff1493',
  4751. 'deepskyblue': '00bfff',
  4752. 'dimgray': '696969',
  4753. 'dimgrey': '696969',
  4754. 'dodgerblue': '1e90ff',
  4755. 'firebrick': 'b22222',
  4756. 'floralwhite': 'fffaf0',
  4757. 'forestgreen': '228b22',
  4758. 'fuchsia': 'f0f',
  4759. 'gainsboro': 'dcdcdc',
  4760. 'ghostwhite': 'f8f8ff',
  4761. 'gold': 'ffd700',
  4762. 'goldenrod': 'daa520',
  4763. 'gray': '808080',
  4764. 'grey': '808080',
  4765. 'green': '008000',
  4766. 'greenyellow': 'adff2f',
  4767. 'honeydew': 'f0fff0',
  4768. 'hotpink': 'ff69b4',
  4769. 'indianred': 'cd5c5c',
  4770. 'indigo': '4b0082',
  4771. 'ivory': 'fffff0',
  4772. 'khaki': 'f0e68c',
  4773. 'lavender': 'e6e6fa',
  4774. 'lavenderblush': 'fff0f5',
  4775. 'lawngreen': '7cfc00',
  4776. 'lemonchiffon': 'fffacd',
  4777. 'lightblue': 'add8e6',
  4778. 'lightcoral': 'f08080',
  4779. 'lightcyan': 'e0ffff',
  4780. 'lightgoldenrodyellow': 'fafad2',
  4781. 'lightgray': 'd3d3d3',
  4782. 'lightgrey': 'd3d3d3',
  4783. 'lightgreen': '90ee90',
  4784. 'lightpink': 'ffb6c1',
  4785. 'lightsalmon': 'ffa07a',
  4786. 'lightseagreen': '20b2aa',
  4787. 'lightskyblue': '87cefa',
  4788. 'lightslategray': '789',
  4789. 'lightslategrey': '789',
  4790. 'lightsteelblue': 'b0c4de',
  4791. 'lightyellow': 'ffffe0',
  4792. 'lime': '0f0',
  4793. 'limegreen': '32cd32',
  4794. 'linen': 'faf0e6',
  4795. 'magenta': 'f0f',
  4796. 'maroon': '800000',
  4797. 'mediumaquamarine': '66cdaa',
  4798. 'mediumblue': '0000cd',
  4799. 'mediumorchid': 'ba55d3',
  4800. 'mediumpurple': '9370db',
  4801. 'mediumseagreen': '3cb371',
  4802. 'mediumslateblue': '7b68ee',
  4803. 'mediumspringgreen': '00fa9a',
  4804. 'mediumturquoise': '48d1cc',
  4805. 'mediumvioletred': 'c71585',
  4806. 'midnightblue': '191970',
  4807. 'mintcream': 'f5fffa',
  4808. 'mistyrose': 'ffe4e1',
  4809. 'moccasin': 'ffe4b5',
  4810. 'navajowhite': 'ffdead',
  4811. 'navy': '000080',
  4812. 'oldlace': 'fdf5e6',
  4813. 'olive': '808000',
  4814. 'olivedrab': '6b8e23',
  4815. 'orange': 'ffa500',
  4816. 'orangered': 'ff4500',
  4817. 'orchid': 'da70d6',
  4818. 'palegoldenrod': 'eee8aa',
  4819. 'palegreen': '98fb98',
  4820. 'paleturquoise': 'afeeee',
  4821. 'palevioletred': 'db7093',
  4822. 'papayawhip': 'ffefd5',
  4823. 'peachpuff': 'ffdab9',
  4824. 'peru': 'cd853f',
  4825. 'pink': 'ffc0cb',
  4826. 'plum': 'dda0dd',
  4827. 'powderblue': 'b0e0e6',
  4828. 'purple': '800080',
  4829. 'rebeccapurple': '639',
  4830. 'red': 'f00',
  4831. 'rosybrown': 'bc8f8f',
  4832. 'royalblue': '4169e1',
  4833. 'saddlebrown': '8b4513',
  4834. 'salmon': 'fa8072',
  4835. 'sandybrown': 'f4a460',
  4836. 'seagreen': '2e8b57',
  4837. 'seashell': 'fff5ee',
  4838. 'sienna': 'a0522d',
  4839. 'silver': 'c0c0c0',
  4840. 'skyblue': '87ceeb',
  4841. 'slateblue': '6a5acd',
  4842. 'slategray': '708090',
  4843. 'slategrey': '708090',
  4844. 'snow': 'fffafa',
  4845. 'springgreen': '00ff7f',
  4846. 'steelblue': '4682b4',
  4847. 'tan': 'd2b48c',
  4848. 'teal': '008080',
  4849. 'thistle': 'd8bfd8',
  4850. 'tomato': 'ff6347',
  4851. 'turquoise': '40e0d0',
  4852. 'violet': 'ee82ee',
  4853. 'wheat': 'f5deb3',
  4854. 'white': 'fff',
  4855. 'whitesmoke': 'f5f5f5',
  4856. 'yellow': 'ff0',
  4857. 'yellowgreen': '9acd32'
  4858. };
  4859. var HEX_TO_NAME = {
  4860. '800000': 'maroon',
  4861. '800080': 'purple',
  4862. '808000': 'olive',
  4863. '808080': 'gray',
  4864. '00ffff': 'cyan',
  4865. 'f0ffff': 'azure',
  4866. 'f5f5dc': 'beige',
  4867. 'ffe4c4': 'bisque',
  4868. '000000': 'black',
  4869. '0000ff': 'blue',
  4870. 'a52a2a': 'brown',
  4871. 'ff7f50': 'coral',
  4872. 'ffd700': 'gold',
  4873. '008000': 'green',
  4874. '4b0082': 'indigo',
  4875. 'fffff0': 'ivory',
  4876. 'f0e68c': 'khaki',
  4877. '00ff00': 'lime',
  4878. 'faf0e6': 'linen',
  4879. '000080': 'navy',
  4880. 'ffa500': 'orange',
  4881. 'da70d6': 'orchid',
  4882. 'cd853f': 'peru',
  4883. 'ffc0cb': 'pink',
  4884. 'dda0dd': 'plum',
  4885. 'f00': 'red',
  4886. 'ff0000': 'red',
  4887. 'fa8072': 'salmon',
  4888. 'a0522d': 'sienna',
  4889. 'c0c0c0': 'silver',
  4890. 'fffafa': 'snow',
  4891. 'd2b48c': 'tan',
  4892. '008080': 'teal',
  4893. 'ff6347': 'tomato',
  4894. 'ee82ee': 'violet',
  4895. 'f5deb3': 'wheat',
  4896. 'ffffff': 'white',
  4897. 'ffff00': 'yellow'
  4898. };
  4899. function hueToRgb(p, q, t) {
  4900. if (t < 0) {
  4901. t += 1;
  4902. }
  4903. if (t > 1) {
  4904. t -= 1;
  4905. }
  4906. if (t < 1 / 6) {
  4907. return p + (q - p) * 6 * t;
  4908. }
  4909. if (t < 1 / 2) {
  4910. return q;
  4911. }
  4912. if (t < 2 / 3) {
  4913. return p + (q - p) * (2 / 3 - t) * 6;
  4914. }
  4915. return p;
  4916. }
  4917. function hslToRgb(h, s, l, a) {
  4918. var r;
  4919. var g;
  4920. var b;
  4921. if (s === 0) {
  4922. r = g = b = l; // achromatic
  4923. } else {
  4924. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  4925. var p = 2 * l - q;
  4926. r = hueToRgb(p, q, h + 1 / 3);
  4927. g = hueToRgb(p, q, h);
  4928. b = hueToRgb(p, q, h - 1 / 3);
  4929. }
  4930. return [
  4931. Math.round(r * 255),
  4932. Math.round(g * 255),
  4933. Math.round(b * 255),
  4934. a
  4935. ];
  4936. }
  4937. function toHex(value) {
  4938. value = value.toString(16);
  4939. return value.length === 1 ? '0' + value : value;
  4940. }
  4941. function parseFunctionArgs(functionArgs, count, rgb) {
  4942. var cursor = functionArgs.head;
  4943. var args = [];
  4944. var wasValue = false;
  4945. while (cursor !== null) {
  4946. var node = cursor.data;
  4947. var type = node.type;
  4948. switch (type) {
  4949. case 'Number':
  4950. case 'Percentage':
  4951. if (wasValue) {
  4952. return;
  4953. }
  4954. wasValue = true;
  4955. args.push({
  4956. type: type,
  4957. value: Number(node.value)
  4958. });
  4959. break;
  4960. case 'Operator':
  4961. if (node.value === ',') {
  4962. if (!wasValue) {
  4963. return;
  4964. }
  4965. wasValue = false;
  4966. } else if (wasValue || node.value !== '+') {
  4967. return;
  4968. }
  4969. break;
  4970. default:
  4971. // something we couldn't understand
  4972. return;
  4973. }
  4974. cursor = cursor.next;
  4975. }
  4976. if (args.length !== count) {
  4977. // invalid arguments count
  4978. // TODO: remove those tokens
  4979. return;
  4980. }
  4981. if (args.length === 4) {
  4982. if (args[3].type !== 'Number') {
  4983. // 4th argument should be a number
  4984. // TODO: remove those tokens
  4985. return;
  4986. }
  4987. args[3].type = 'Alpha';
  4988. }
  4989. if (rgb) {
  4990. if (args[0].type !== args[1].type || args[0].type !== args[2].type) {
  4991. // invalid color, numbers and percentage shouldn't be mixed
  4992. // TODO: remove those tokens
  4993. return;
  4994. }
  4995. } else {
  4996. if (args[0].type !== 'Number' ||
  4997. args[1].type !== 'Percentage' ||
  4998. args[2].type !== 'Percentage') {
  4999. // invalid color, for hsl values should be: number, percentage, percentage
  5000. // TODO: remove those tokens
  5001. return;
  5002. }
  5003. args[0].type = 'Angle';
  5004. }
  5005. return args.map(function(arg) {
  5006. var value = Math.max(0, arg.value);
  5007. switch (arg.type) {
  5008. case 'Number':
  5009. // fit value to [0..255] range
  5010. value = Math.min(value, 255);
  5011. break;
  5012. case 'Percentage':
  5013. // convert 0..100% to value in [0..255] range
  5014. value = Math.min(value, 100) / 100;
  5015. if (!rgb) {
  5016. return value;
  5017. }
  5018. value = 255 * value;
  5019. break;
  5020. case 'Angle':
  5021. // fit value to (-360..360) range
  5022. return (((value % 360) + 360) % 360) / 360;
  5023. case 'Alpha':
  5024. // fit value to [0..1] range
  5025. return Math.min(value, 1);
  5026. }
  5027. return Math.round(value);
  5028. });
  5029. }
  5030. function compressFunction(node, item, list) {
  5031. var functionName = node.name;
  5032. var args;
  5033. if (functionName === 'rgba' || functionName === 'hsla') {
  5034. args = parseFunctionArgs(node.children, 4, functionName === 'rgba');
  5035. if (!args) {
  5036. // something went wrong
  5037. return;
  5038. }
  5039. if (functionName === 'hsla') {
  5040. args = hslToRgb.apply(null, args);
  5041. node.name = 'rgba';
  5042. }
  5043. if (args[3] === 0) {
  5044. // try to replace `rgba(x, x, x, 0)` to `transparent`
  5045. // always replace `rgba(0, 0, 0, 0)` to `transparent`
  5046. // otherwise avoid replacement in gradients since it may break color transition
  5047. // http://stackoverflow.com/questions/11829410/css3-gradient-rendering-issues-from-transparent-to-white
  5048. var scopeFunctionName = this['function'] && this['function'].name;
  5049. if ((args[0] === 0 && args[1] === 0 && args[2] === 0) ||
  5050. !/^(?:to|from|color-stop)$|gradient$/i.test(scopeFunctionName)) {
  5051. item.data = {
  5052. type: 'Identifier',
  5053. loc: node.loc,
  5054. name: 'transparent'
  5055. };
  5056. return;
  5057. }
  5058. }
  5059. if (args[3] !== 1) {
  5060. // replace argument values for normalized/interpolated
  5061. node.children.each(function(node, item, list) {
  5062. if (node.type === 'Operator') {
  5063. if (node.value !== ',') {
  5064. list.remove(item);
  5065. }
  5066. return;
  5067. }
  5068. item.data = {
  5069. type: 'Number',
  5070. loc: node.loc,
  5071. value: packNumber(args.shift(), null)
  5072. };
  5073. });
  5074. return;
  5075. }
  5076. // otherwise convert to rgb, i.e. rgba(255, 0, 0, 1) -> rgb(255, 0, 0)
  5077. functionName = 'rgb';
  5078. }
  5079. if (functionName === 'hsl') {
  5080. args = args || parseFunctionArgs(node.children, 3, false);
  5081. if (!args) {
  5082. // something went wrong
  5083. return;
  5084. }
  5085. // convert to rgb
  5086. args = hslToRgb.apply(null, args);
  5087. functionName = 'rgb';
  5088. }
  5089. if (functionName === 'rgb') {
  5090. args = args || parseFunctionArgs(node.children, 3, true);
  5091. if (!args) {
  5092. // something went wrong
  5093. return;
  5094. }
  5095. // check if color is not at the end and not followed by space
  5096. var next = item.next;
  5097. if (next && next.data.type !== 'WhiteSpace') {
  5098. list.insert(list.createItem({
  5099. type: 'WhiteSpace',
  5100. value: ' '
  5101. }), next);
  5102. }
  5103. item.data = {
  5104. type: 'HexColor',
  5105. loc: node.loc,
  5106. value: toHex(args[0]) + toHex(args[1]) + toHex(args[2])
  5107. };
  5108. compressHex(item.data, item);
  5109. }
  5110. }
  5111. function compressIdent(node, item) {
  5112. if (this.declaration === null) {
  5113. return;
  5114. }
  5115. var color = node.name.toLowerCase();
  5116. if (NAME_TO_HEX.hasOwnProperty(color) &&
  5117. lexer.matchDeclaration(this.declaration).isType(node, 'color')) {
  5118. var hex = NAME_TO_HEX[color];
  5119. if (hex.length + 1 <= color.length) {
  5120. // replace for shorter hex value
  5121. item.data = {
  5122. type: 'HexColor',
  5123. loc: node.loc,
  5124. value: hex
  5125. };
  5126. } else {
  5127. // special case for consistent colors
  5128. if (color === 'grey') {
  5129. color = 'gray';
  5130. }
  5131. // just replace value for lower cased name
  5132. node.name = color;
  5133. }
  5134. }
  5135. }
  5136. function compressHex(node, item) {
  5137. var color = node.value.toLowerCase();
  5138. // #112233 -> #123
  5139. if (color.length === 6 &&
  5140. color[0] === color[1] &&
  5141. color[2] === color[3] &&
  5142. color[4] === color[5]) {
  5143. color = color[0] + color[2] + color[4];
  5144. }
  5145. if (HEX_TO_NAME[color]) {
  5146. item.data = {
  5147. type: 'Identifier',
  5148. loc: node.loc,
  5149. name: HEX_TO_NAME[color]
  5150. };
  5151. } else {
  5152. node.value = color;
  5153. }
  5154. }
  5155. module.exports = {
  5156. compressFunction: compressFunction,
  5157. compressIdent: compressIdent,
  5158. compressHex: compressHex
  5159. };
  5160. /***/ }),
  5161. /* 30 */
  5162. /***/ (function(module, exports) {
  5163. var hasOwnProperty = Object.prototype.hasOwnProperty;
  5164. function isEqualSelectors(a, b) {
  5165. var cursor1 = a.head;
  5166. var cursor2 = b.head;
  5167. while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) {
  5168. cursor1 = cursor1.next;
  5169. cursor2 = cursor2.next;
  5170. }
  5171. return cursor1 === null && cursor2 === null;
  5172. }
  5173. function isEqualDeclarations(a, b) {
  5174. var cursor1 = a.head;
  5175. var cursor2 = b.head;
  5176. while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) {
  5177. cursor1 = cursor1.next;
  5178. cursor2 = cursor2.next;
  5179. }
  5180. return cursor1 === null && cursor2 === null;
  5181. }
  5182. function compareDeclarations(declarations1, declarations2) {
  5183. var result = {
  5184. eq: [],
  5185. ne1: [],
  5186. ne2: [],
  5187. ne2overrided: []
  5188. };
  5189. var fingerprints = Object.create(null);
  5190. var declarations2hash = Object.create(null);
  5191. for (var cursor = declarations2.head; cursor; cursor = cursor.next) {
  5192. declarations2hash[cursor.data.id] = true;
  5193. }
  5194. for (var cursor = declarations1.head; cursor; cursor = cursor.next) {
  5195. var data = cursor.data;
  5196. if (data.fingerprint) {
  5197. fingerprints[data.fingerprint] = data.important;
  5198. }
  5199. if (declarations2hash[data.id]) {
  5200. declarations2hash[data.id] = false;
  5201. result.eq.push(data);
  5202. } else {
  5203. result.ne1.push(data);
  5204. }
  5205. }
  5206. for (var cursor = declarations2.head; cursor; cursor = cursor.next) {
  5207. var data = cursor.data;
  5208. if (declarations2hash[data.id]) {
  5209. // if declarations1 has overriding declaration, this is not a difference
  5210. // but take in account !important - prev should be equal or greater than follow
  5211. if (hasOwnProperty.call(fingerprints, data.fingerprint) &&
  5212. Number(fingerprints[data.fingerprint]) >= Number(data.important)) {
  5213. result.ne2overrided.push(data);
  5214. } else {
  5215. result.ne2.push(data);
  5216. }
  5217. }
  5218. }
  5219. return result;
  5220. }
  5221. function addSelectors(dest, source) {
  5222. source.each(function(sourceData) {
  5223. var newStr = sourceData.id;
  5224. var cursor = dest.head;
  5225. while (cursor) {
  5226. var nextStr = cursor.data.id;
  5227. if (nextStr === newStr) {
  5228. return;
  5229. }
  5230. if (nextStr > newStr) {
  5231. break;
  5232. }
  5233. cursor = cursor.next;
  5234. }
  5235. dest.insert(dest.createItem(sourceData), cursor);
  5236. });
  5237. return dest;
  5238. }
  5239. // check if simpleselectors has no equal specificity and element selector
  5240. function hasSimilarSelectors(selectors1, selectors2) {
  5241. var cursor1 = selectors1.head;
  5242. while (cursor1 !== null) {
  5243. var cursor2 = selectors2.head;
  5244. while (cursor2 !== null) {
  5245. if (cursor1.data.compareMarker === cursor2.data.compareMarker) {
  5246. return true;
  5247. }
  5248. cursor2 = cursor2.next;
  5249. }
  5250. cursor1 = cursor1.next;
  5251. }
  5252. return false;
  5253. }
  5254. // test node can't to be skipped
  5255. function unsafeToSkipNode(node) {
  5256. switch (node.type) {
  5257. case 'Rule':
  5258. // unsafe skip ruleset with selector similarities
  5259. return hasSimilarSelectors(node.prelude.children, this);
  5260. case 'Atrule':
  5261. // can skip at-rules with blocks
  5262. if (node.block) {
  5263. // unsafe skip at-rule if block contains something unsafe to skip
  5264. return node.block.children.some(unsafeToSkipNode, this);
  5265. }
  5266. break;
  5267. case 'Declaration':
  5268. return false;
  5269. }
  5270. // unsafe by default
  5271. return true;
  5272. }
  5273. module.exports = {
  5274. isEqualSelectors: isEqualSelectors,
  5275. isEqualDeclarations: isEqualDeclarations,
  5276. compareDeclarations: compareDeclarations,
  5277. addSelectors: addSelectors,
  5278. hasSimilarSelectors: hasSimilarSelectors,
  5279. unsafeToSkipNode: unsafeToSkipNode
  5280. };
  5281. /***/ }),
  5282. /* 31 */
  5283. /***/ (function(module, exports, __webpack_require__) {
  5284. module.exports = __webpack_require__(61);
  5285. /***/ }),
  5286. /* 32 */
  5287. /***/ (function(module, exports, __webpack_require__) {
  5288. const Expression = __webpack_require__(66)
  5289. module.exports = {
  5290. /**
  5291. * 获取表达式
  5292. */
  5293. getExpression(content) {
  5294. let end = 0
  5295. let start = content.indexOf('{{', end)
  5296. const res = []
  5297. while (start >= 0) {
  5298. let expression
  5299. res.push(content.substring(end, start)) // before
  5300. start += 2
  5301. end = content.indexOf('}}', start)
  5302. if (end >= 0) {
  5303. expression = new Expression(content.substring(start, end))
  5304. end += 2
  5305. } else {
  5306. // without end
  5307. res.push(content.substring(start - 2))
  5308. end = content.length
  5309. }
  5310. if (expression) res.push(expression.parse())
  5311. start = content.indexOf('{{', end)
  5312. }
  5313. res.push(content.substring(end)) // after
  5314. return res.filter(item => !!item)
  5315. },
  5316. /**
  5317. * 计算表达式
  5318. */
  5319. calcExpression(arr, data = {}) {
  5320. if (!arr || typeof arr === 'string' || typeof arr === 'number' || typeof arr === 'boolean') {
  5321. return arr
  5322. } if (arr.length === 1 && typeof arr[0] === 'function') {
  5323. return arr[0](data)
  5324. }
  5325. return arr.map(item => {
  5326. if (typeof item === 'string') return item
  5327. if (typeof item === 'function') return item(data)
  5328. return ''
  5329. }).join('')
  5330. },
  5331. }
  5332. /***/ }),
  5333. /* 33 */
  5334. /***/ (function(module, exports, __webpack_require__) {
  5335. const exparser = __webpack_require__(4)
  5336. const _ = __webpack_require__(5)
  5337. /**
  5338. * 测量相交区域
  5339. */
  5340. function measureIntersect(baseRect, newRect) {
  5341. const rect = {
  5342. left: baseRect.left < newRect.left ? newRect.left : baseRect.left,
  5343. top: baseRect.top < newRect.top ? newRect.top : baseRect.top,
  5344. right: baseRect.right > newRect.right ? newRect.right : baseRect.right,
  5345. bottom: baseRect.bottom > newRect.bottom ? newRect.bottom : baseRect.bottom,
  5346. width: 0,
  5347. height: 0,
  5348. }
  5349. if (rect.right > rect.left) rect.width = rect.right - rect.left
  5350. else rect.right = rect.left = rect.bottom = rect.top = 0
  5351. if (rect.bottom > rect.top) rect.height = rect.bottom - rect.top
  5352. else rect.right = rect.left = rect.bottom = rect.top = 0
  5353. return rect
  5354. }
  5355. /**
  5356. * 测量参照区域
  5357. */
  5358. function measureRelativeRect(relatives) {
  5359. const clientWidth = document.documentElement.clientWidth
  5360. const clientHeight = document.documentElement.clientHeight
  5361. let retRect = null
  5362. for (let i = 0; i < relatives.length; i++) {
  5363. const {node, margins} = relatives[i]
  5364. const boundingRect = node ? node.$$.getBoundingClientRect() : {
  5365. left: 0,
  5366. top: 0,
  5367. right: clientWidth,
  5368. bottom: clientHeight,
  5369. width: clientWidth,
  5370. height: clientHeight
  5371. }
  5372. const rect = {
  5373. left: boundingRect.left - margins.left,
  5374. top: boundingRect.top - margins.top,
  5375. right: boundingRect.right + margins.right,
  5376. bottom: boundingRect.bottom + margins.bottom,
  5377. }
  5378. if (retRect) retRect = measureIntersect(retRect, rect)
  5379. else retRect = rect
  5380. }
  5381. return retRect
  5382. }
  5383. class IntersectionObserver {
  5384. constructor(compInst, options = {}) {
  5385. this._exparserNode = compInst._exparserNode
  5386. this._relativeInfo = []
  5387. this._options = options
  5388. this._disconnected = false
  5389. this._observers = []
  5390. this._exparserNode._listenInfoMap = this._exparserNode._listenInfoMap || {} // 存入监听信息
  5391. }
  5392. /**
  5393. * 检查并更新目标节点的相交情况
  5394. */
  5395. static updateTargetIntersection(listenerInfo) {
  5396. const {
  5397. targetNode, relatives, thresholds, minWidthOrHeight, currentRatio, callback
  5398. } = listenerInfo
  5399. const targetRect = targetNode.$$.getBoundingClientRect()
  5400. if (targetRect.right - targetRect.left < minWidthOrHeight) {
  5401. targetRect.right = targetRect.left + minWidthOrHeight
  5402. targetRect.width = minWidthOrHeight
  5403. }
  5404. if (targetRect.bottom - targetRect.top < minWidthOrHeight) {
  5405. targetRect.bottom = targetRect.top + minWidthOrHeight
  5406. targetRect.height = minWidthOrHeight
  5407. }
  5408. const relativeRect = measureRelativeRect(relatives)
  5409. const intersectRect = measureIntersect(relativeRect, targetRect)
  5410. const targetArea = targetRect.width * targetRect.height
  5411. const intersectRatio = targetArea ? intersectRect.width * intersectRect.height / targetArea : 0
  5412. listenerInfo.currentRatio = intersectRatio
  5413. let isUpdate = currentRatio === undefined
  5414. if (intersectRatio !== currentRatio) {
  5415. thresholds.forEach(threshold => {
  5416. if (isUpdate) return
  5417. if (intersectRatio <= threshold && currentRatio >= threshold) isUpdate = true
  5418. else if (intersectRatio >= threshold && currentRatio <= threshold) isUpdate = true
  5419. })
  5420. }
  5421. if (isUpdate) {
  5422. callback.call(targetNode, {
  5423. id: targetNode.id,
  5424. dataset: targetNode.dataset,
  5425. time: Date.now(),
  5426. boundingClientRect: targetRect,
  5427. intersectionRatio: intersectRatio,
  5428. intersectionRect: intersectRect,
  5429. relativeRect,
  5430. })
  5431. }
  5432. }
  5433. disconnect() {
  5434. this._disconnected = true
  5435. this._observers.forEach(observer => observer.disconnect())
  5436. this._observers = []
  5437. }
  5438. observe(selector, callback) {
  5439. // 获取目标节点
  5440. const shadowRoot = this._exparserNode.shadowRoot
  5441. let targetNodes = this._options.observeAll ? shadowRoot.querySelectorAll(selector) : shadowRoot.querySelector(selector)
  5442. if (!Array.isArray(targetNodes)) targetNodes = targetNodes ? [targetNodes] : []
  5443. // 获取参照区域
  5444. const relatives = []
  5445. this._relativeInfo.forEach(item => {
  5446. const {selector, margins} = item
  5447. const node = selector === null ? null : shadowRoot.querySelector(selector)
  5448. if (selector === null || node) {
  5449. relatives.push({
  5450. node,
  5451. margins: {
  5452. left: margins.left || 0,
  5453. top: margins.top || 0,
  5454. right: margins.right || 0,
  5455. bottom: margins.bottom || 0,
  5456. },
  5457. })
  5458. }
  5459. })
  5460. targetNodes.forEach(targetNode => {
  5461. const id = _.getId()
  5462. const listenerInfo = {
  5463. targetNode,
  5464. relatives,
  5465. thresholds: this._options.thresholds || [0],
  5466. currentRatio: this._options.initialRatio || 0,
  5467. minWidthOrHeight: 0,
  5468. callback,
  5469. }
  5470. const observer = exparser.Observer.create(evt => {
  5471. if (evt.status === 'attached') {
  5472. this._exparserNode._listenInfoMap[id] = listenerInfo
  5473. window.requestAnimationFrame(() => {
  5474. if (!this._disconnected) IntersectionObserver.updateTargetIntersection(listenerInfo)
  5475. })
  5476. } else if (evt.status === 'detached') {
  5477. delete this._exparserNode._listenInfoMap[id]
  5478. observer.disconnect()
  5479. }
  5480. })
  5481. observer.observe(targetNode, {attachStatus: true})
  5482. if (exparser.Element.isAttached(targetNode)) {
  5483. this._exparserNode._listenInfoMap[id] = listenerInfo
  5484. window.requestAnimationFrame(() => {
  5485. if (!this._disconnected) IntersectionObserver.updateTargetIntersection(listenerInfo)
  5486. })
  5487. }
  5488. this._observers.push(observer)
  5489. })
  5490. }
  5491. relativeTo(selector, margins = {}) {
  5492. this._relativeInfo.push({
  5493. selector,
  5494. margins,
  5495. })
  5496. return this
  5497. }
  5498. relativeToViewport(margins = {}) {
  5499. this._relativeInfo.push({
  5500. selector: null,
  5501. margins,
  5502. })
  5503. return this
  5504. }
  5505. }
  5506. module.exports = IntersectionObserver
  5507. /***/ }),
  5508. /* 34 */
  5509. /***/ (function(module, exports, __webpack_require__) {
  5510. "use strict";
  5511. exports.__esModule = true;
  5512. exports.default = void 0;
  5513. var _picocolors = _interopRequireDefault(__webpack_require__(74));
  5514. var _terminalHighlight = _interopRequireDefault(__webpack_require__(75));
  5515. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  5516. function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
  5517. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  5518. function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
  5519. function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
  5520. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  5521. function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
  5522. function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  5523. function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  5524. /**
  5525. * The CSS parser throws this error for broken CSS.
  5526. *
  5527. * Custom parsers can throw this error for broken custom syntax using
  5528. * the {@link Node#error} method.
  5529. *
  5530. * PostCSS will use the input source map to detect the original error location.
  5531. * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,
  5532. * PostCSS will show the original position in the Sass file.
  5533. *
  5534. * If you need the position in the PostCSS input
  5535. * (e.g., to debug the previous compiler), use `error.input.file`.
  5536. *
  5537. * @example
  5538. * // Catching and checking syntax error
  5539. * try {
  5540. * postcss.parse('a{')
  5541. * } catch (error) {
  5542. * if (error.name === 'CssSyntaxError') {
  5543. * error //=> CssSyntaxError
  5544. * }
  5545. * }
  5546. *
  5547. * @example
  5548. * // Raising error from plugin
  5549. * throw node.error('Unknown variable', { plugin: 'postcss-vars' })
  5550. */
  5551. var CssSyntaxError = /*#__PURE__*/function (_Error) {
  5552. _inheritsLoose(CssSyntaxError, _Error);
  5553. /**
  5554. * @param {string} message Error message.
  5555. * @param {number} [line] Source line of the error.
  5556. * @param {number} [column] Source column of the error.
  5557. * @param {string} [source] Source code of the broken file.
  5558. * @param {string} [file] Absolute path to the broken file.
  5559. * @param {string} [plugin] PostCSS plugin name, if error came from plugin.
  5560. */
  5561. function CssSyntaxError(message, line, column, source, file, plugin) {
  5562. var _this;
  5563. _this = _Error.call(this, message) || this;
  5564. /**
  5565. * Always equal to `'CssSyntaxError'`. You should always check error type
  5566. * by `error.name === 'CssSyntaxError'`
  5567. * instead of `error instanceof CssSyntaxError`,
  5568. * because npm could have several PostCSS versions.
  5569. *
  5570. * @type {string}
  5571. *
  5572. * @example
  5573. * if (error.name === 'CssSyntaxError') {
  5574. * error //=> CssSyntaxError
  5575. * }
  5576. */
  5577. _this.name = 'CssSyntaxError';
  5578. /**
  5579. * Error message.
  5580. *
  5581. * @type {string}
  5582. *
  5583. * @example
  5584. * error.message //=> 'Unclosed block'
  5585. */
  5586. _this.reason = message;
  5587. if (file) {
  5588. /**
  5589. * Absolute path to the broken file.
  5590. *
  5591. * @type {string}
  5592. *
  5593. * @example
  5594. * error.file //=> 'a.sass'
  5595. * error.input.file //=> 'a.css'
  5596. */
  5597. _this.file = file;
  5598. }
  5599. if (source) {
  5600. /**
  5601. * Source code of the broken file.
  5602. *
  5603. * @type {string}
  5604. *
  5605. * @example
  5606. * error.source //=> 'a { b {} }'
  5607. * error.input.column //=> 'a b { }'
  5608. */
  5609. _this.source = source;
  5610. }
  5611. if (plugin) {
  5612. /**
  5613. * Plugin name, if error came from plugin.
  5614. *
  5615. * @type {string}
  5616. *
  5617. * @example
  5618. * error.plugin //=> 'postcss-vars'
  5619. */
  5620. _this.plugin = plugin;
  5621. }
  5622. if (typeof line !== 'undefined' && typeof column !== 'undefined') {
  5623. /**
  5624. * Source line of the error.
  5625. *
  5626. * @type {number}
  5627. *
  5628. * @example
  5629. * error.line //=> 2
  5630. * error.input.line //=> 4
  5631. */
  5632. _this.line = line;
  5633. /**
  5634. * Source column of the error.
  5635. *
  5636. * @type {number}
  5637. *
  5638. * @example
  5639. * error.column //=> 1
  5640. * error.input.column //=> 4
  5641. */
  5642. _this.column = column;
  5643. }
  5644. _this.setMessage();
  5645. if (Error.captureStackTrace) {
  5646. Error.captureStackTrace(_assertThisInitialized(_this), CssSyntaxError);
  5647. }
  5648. return _this;
  5649. }
  5650. var _proto = CssSyntaxError.prototype;
  5651. _proto.setMessage = function setMessage() {
  5652. /**
  5653. * Full error text in the GNU error format
  5654. * with plugin, file, line and column.
  5655. *
  5656. * @type {string}
  5657. *
  5658. * @example
  5659. * error.message //=> 'a.css:1:1: Unclosed block'
  5660. */
  5661. this.message = this.plugin ? this.plugin + ': ' : '';
  5662. this.message += this.file ? this.file : '<css input>';
  5663. if (typeof this.line !== 'undefined') {
  5664. this.message += ':' + this.line + ':' + this.column;
  5665. }
  5666. this.message += ': ' + this.reason;
  5667. }
  5668. /**
  5669. * Returns a few lines of CSS source that caused the error.
  5670. *
  5671. * If the CSS has an input source map without `sourceContent`,
  5672. * this method will return an empty string.
  5673. *
  5674. * @param {boolean} [color] Whether arrow will be colored red by terminal
  5675. * color codes. By default, PostCSS will detect
  5676. * color support by `process.stdout.isTTY`
  5677. * and `process.env.NODE_DISABLE_COLORS`.
  5678. *
  5679. * @example
  5680. * error.showSourceCode() //=> " 4 | }
  5681. * // 5 | a {
  5682. * // > 6 | bad
  5683. * // | ^
  5684. * // 7 | }
  5685. * // 8 | b {"
  5686. *
  5687. * @return {string} Few lines of CSS source that caused the error.
  5688. */
  5689. ;
  5690. _proto.showSourceCode = function showSourceCode(color) {
  5691. var _this2 = this;
  5692. if (!this.source) return '';
  5693. var css = this.source;
  5694. if (_terminalHighlight.default) {
  5695. if (typeof color === 'undefined') color = _picocolors.default.isColorSupported;
  5696. if (color) css = (0, _terminalHighlight.default)(css);
  5697. }
  5698. var lines = css.split(/\r?\n/);
  5699. var start = Math.max(this.line - 3, 0);
  5700. var end = Math.min(this.line + 2, lines.length);
  5701. var maxWidth = String(end).length;
  5702. function mark(text) {
  5703. if (color && _picocolors.default.red) {
  5704. return _picocolors.default.red(_picocolors.default.bold(text));
  5705. }
  5706. return text;
  5707. }
  5708. function aside(text) {
  5709. if (color && _picocolors.default.gray) {
  5710. return _picocolors.default.gray(text);
  5711. }
  5712. return text;
  5713. }
  5714. return lines.slice(start, end).map(function (line, index) {
  5715. var number = start + 1 + index;
  5716. var gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';
  5717. if (number === _this2.line) {
  5718. var spacing = aside(gutter.replace(/\d/g, ' ')) + line.slice(0, _this2.column - 1).replace(/[^\t]/g, ' ');
  5719. return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^');
  5720. }
  5721. return ' ' + aside(gutter) + line;
  5722. }).join('\n');
  5723. }
  5724. /**
  5725. * Returns error position, message and source code of the broken part.
  5726. *
  5727. * @example
  5728. * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block
  5729. * // > 1 | a {
  5730. * // | ^"
  5731. *
  5732. * @return {string} Error position, message and source code.
  5733. */
  5734. ;
  5735. _proto.toString = function toString() {
  5736. var code = this.showSourceCode();
  5737. if (code) {
  5738. code = '\n\n' + code + '\n';
  5739. }
  5740. return this.name + ': ' + this.message + code;
  5741. }
  5742. /**
  5743. * @memberof CssSyntaxError#
  5744. * @member {Input} input Input object with PostCSS internal information
  5745. * about input file. If input has source map
  5746. * from previous tool, PostCSS will use origin
  5747. * (for example, Sass) source. You can use this
  5748. * object to get PostCSS input source.
  5749. *
  5750. * @example
  5751. * error.input.file //=> 'a.css'
  5752. * error.file //=> 'a.sass'
  5753. */
  5754. ;
  5755. return CssSyntaxError;
  5756. }( /*#__PURE__*/_wrapNativeSuper(Error));
  5757. var _default = CssSyntaxError;
  5758. exports.default = _default;
  5759. module.exports = exports.default;
  5760. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy1zeW50YXgtZXJyb3IuZXM2Il0sIm5hbWVzIjpbIkNzc1N5bnRheEVycm9yIiwibWVzc2FnZSIsImxpbmUiLCJjb2x1bW4iLCJzb3VyY2UiLCJmaWxlIiwicGx1Z2luIiwibmFtZSIsInJlYXNvbiIsInNldE1lc3NhZ2UiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwic2hvd1NvdXJjZUNvZGUiLCJjb2xvciIsImNzcyIsInRlcm1pbmFsSGlnaGxpZ2h0IiwicGljbyIsImlzQ29sb3JTdXBwb3J0ZWQiLCJsaW5lcyIsInNwbGl0Iiwic3RhcnQiLCJNYXRoIiwibWF4IiwiZW5kIiwibWluIiwibGVuZ3RoIiwibWF4V2lkdGgiLCJTdHJpbmciLCJtYXJrIiwidGV4dCIsInJlZCIsImJvbGQiLCJhc2lkZSIsImdyYXkiLCJzbGljZSIsIm1hcCIsImluZGV4IiwibnVtYmVyIiwiZ3V0dGVyIiwic3BhY2luZyIsInJlcGxhY2UiLCJqb2luIiwidG9TdHJpbmciLCJjb2RlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEyQk1BLGM7OztBQUNKOzs7Ozs7OztBQVFBLDBCQUFhQyxPQUFiLEVBQXNCQyxJQUF0QixFQUE0QkMsTUFBNUIsRUFBb0NDLE1BQXBDLEVBQTRDQyxJQUE1QyxFQUFrREMsTUFBbEQsRUFBMEQ7QUFBQTs7QUFDeEQsOEJBQU1MLE9BQU47QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFhQSxVQUFLTSxJQUFMLEdBQVksZ0JBQVo7QUFDQTs7Ozs7Ozs7O0FBUUEsVUFBS0MsTUFBTCxHQUFjUCxPQUFkOztBQUVBLFFBQUlJLElBQUosRUFBVTtBQUNSOzs7Ozs7Ozs7QUFTQSxZQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDRDs7QUFDRCxRQUFJRCxNQUFKLEVBQVk7QUFDVjs7Ozs7Ozs7O0FBU0EsWUFBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0Q7O0FBQ0QsUUFBSUUsTUFBSixFQUFZO0FBQ1Y7Ozs7Ozs7O0FBUUEsWUFBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0Q7O0FBQ0QsUUFBSSxPQUFPSixJQUFQLEtBQWdCLFdBQWhCLElBQStCLE9BQU9DLE1BQVAsS0FBa0IsV0FBckQsRUFBa0U7QUFDaEU7Ozs7Ozs7OztBQVNBLFlBQUtELElBQUwsR0FBWUEsSUFBWjtBQUNBOzs7Ozs7Ozs7O0FBU0EsWUFBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0Q7O0FBRUQsVUFBS00sVUFBTDs7QUFFQSxRQUFJQyxLQUFLLENBQUNDLGlCQUFWLEVBQTZCO0FBQzNCRCxNQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QlgsY0FBOUI7QUFDRDs7QUF6RnVEO0FBMEZ6RDs7OztTQUVEUyxVLEdBQUEsc0JBQWM7QUFDWjs7Ozs7Ozs7O0FBU0EsU0FBS1IsT0FBTCxHQUFlLEtBQUtLLE1BQUwsR0FBYyxLQUFLQSxNQUFMLEdBQWMsSUFBNUIsR0FBbUMsRUFBbEQ7QUFDQSxTQUFLTCxPQUFMLElBQWdCLEtBQUtJLElBQUwsR0FBWSxLQUFLQSxJQUFqQixHQUF3QixhQUF4Qzs7QUFDQSxRQUFJLE9BQU8sS0FBS0gsSUFBWixLQUFxQixXQUF6QixFQUFzQztBQUNwQyxXQUFLRCxPQUFMLElBQWdCLE1BQU0sS0FBS0MsSUFBWCxHQUFrQixHQUFsQixHQUF3QixLQUFLQyxNQUE3QztBQUNEOztBQUNELFNBQUtGLE9BQUwsSUFBZ0IsT0FBTyxLQUFLTyxNQUE1QjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBcUJBSSxjLEdBQUEsd0JBQWdCQyxLQUFoQixFQUF1QjtBQUFBOztBQUNyQixRQUFJLENBQUMsS0FBS1QsTUFBVixFQUFrQixPQUFPLEVBQVA7QUFFbEIsUUFBSVUsR0FBRyxHQUFHLEtBQUtWLE1BQWY7O0FBQ0EsUUFBSVcsMEJBQUosRUFBdUI7QUFDckIsVUFBSSxPQUFPRixLQUFQLEtBQWlCLFdBQXJCLEVBQWtDQSxLQUFLLEdBQUdHLG9CQUFLQyxnQkFBYjtBQUNsQyxVQUFJSixLQUFKLEVBQVdDLEdBQUcsR0FBRyxnQ0FBa0JBLEdBQWxCLENBQU47QUFDWjs7QUFFRCxRQUFJSSxLQUFLLEdBQUdKLEdBQUcsQ0FBQ0ssS0FBSixDQUFVLE9BQVYsQ0FBWjtBQUNBLFFBQUlDLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVMsS0FBS3BCLElBQUwsR0FBWSxDQUFyQixFQUF3QixDQUF4QixDQUFaO0FBQ0EsUUFBSXFCLEdBQUcsR0FBR0YsSUFBSSxDQUFDRyxHQUFMLENBQVMsS0FBS3RCLElBQUwsR0FBWSxDQUFyQixFQUF3QmdCLEtBQUssQ0FBQ08sTUFBOUIsQ0FBVjtBQUVBLFFBQUlDLFFBQVEsR0FBR0MsTUFBTSxDQUFDSixHQUFELENBQU4sQ0FBWUUsTUFBM0I7O0FBRUEsYUFBU0csSUFBVCxDQUFlQyxJQUFmLEVBQXFCO0FBQ25CLFVBQUloQixLQUFLLElBQUlHLG9CQUFLYyxHQUFsQixFQUF1QjtBQUNyQixlQUFPZCxvQkFBS2MsR0FBTCxDQUFTZCxvQkFBS2UsSUFBTCxDQUFVRixJQUFWLENBQVQsQ0FBUDtBQUNEOztBQUNELGFBQU9BLElBQVA7QUFDRDs7QUFDRCxhQUFTRyxLQUFULENBQWdCSCxJQUFoQixFQUFzQjtBQUNwQixVQUFJaEIsS0FBSyxJQUFJRyxvQkFBS2lCLElBQWxCLEVBQXdCO0FBQ3RCLGVBQU9qQixvQkFBS2lCLElBQUwsQ0FBVUosSUFBVixDQUFQO0FBQ0Q7O0FBQ0QsYUFBT0EsSUFBUDtBQUNEOztBQUVELFdBQU9YLEtBQUssQ0FDVGdCLEtBREksQ0FDRWQsS0FERixFQUNTRyxHQURULEVBRUpZLEdBRkksQ0FFQSxVQUFDakMsSUFBRCxFQUFPa0MsS0FBUCxFQUFpQjtBQUNwQixVQUFJQyxNQUFNLEdBQUdqQixLQUFLLEdBQUcsQ0FBUixHQUFZZ0IsS0FBekI7QUFDQSxVQUFJRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU1ELE1BQVAsRUFBZUgsS0FBZixDQUFxQixDQUFDUixRQUF0QixDQUFOLEdBQXdDLEtBQXJEOztBQUNBLFVBQUlXLE1BQU0sS0FBSyxNQUFJLENBQUNuQyxJQUFwQixFQUEwQjtBQUN4QixZQUFJcUMsT0FBTyxHQUNUUCxLQUFLLENBQUNNLE1BQU0sQ0FBQ0UsT0FBUCxDQUFlLEtBQWYsRUFBc0IsR0FBdEIsQ0FBRCxDQUFMLEdBQ0F0QyxJQUFJLENBQUNnQyxLQUFMLENBQVcsQ0FBWCxFQUFjLE1BQUksQ0FBQy9CLE1BQUwsR0FBYyxDQUE1QixFQUErQnFDLE9BQS9CLENBQXVDLFFBQXZDLEVBQWlELEdBQWpELENBRkY7QUFHQSxlQUFPWixJQUFJLENBQUMsR0FBRCxDQUFKLEdBQVlJLEtBQUssQ0FBQ00sTUFBRCxDQUFqQixHQUE0QnBDLElBQTVCLEdBQW1DLEtBQW5DLEdBQTJDcUMsT0FBM0MsR0FBcURYLElBQUksQ0FBQyxHQUFELENBQWhFO0FBQ0Q7O0FBQ0QsYUFBTyxNQUFNSSxLQUFLLENBQUNNLE1BQUQsQ0FBWCxHQUFzQnBDLElBQTdCO0FBQ0QsS0FaSSxFQWFKdUMsSUFiSSxDQWFDLElBYkQsQ0FBUDtBQWNEO0FBRUQ7Ozs7Ozs7Ozs7OztTQVVBQyxRLEdBQUEsb0JBQVk7QUFDVixRQUFJQyxJQUFJLEdBQUcsS0FBSy9CLGNBQUwsRUFBWDs7QUFDQSxRQUFJK0IsSUFBSixFQUFVO0FBQ1JBLE1BQUFBLElBQUksR0FBRyxTQUFTQSxJQUFULEdBQWdCLElBQXZCO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLcEMsSUFBTCxHQUFZLElBQVosR0FBbUIsS0FBS04sT0FBeEIsR0FBa0MwQyxJQUF6QztBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztpQ0ExTTJCakMsSzs7ZUF3TmRWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJ1xuXG5pbXBvcnQgdGVybWluYWxIaWdobGlnaHQgZnJvbSAnLi90ZXJtaW5hbC1oaWdobGlnaHQnXG5cbi8qKlxuICogVGhlIENTUyBwYXJzZXIgdGhyb3dzIHRoaXMgZXJyb3IgZm9yIGJyb2tlbiBDU1MuXG4gKlxuICogQ3VzdG9tIHBhcnNlcnMgY2FuIHRocm93IHRoaXMgZXJyb3IgZm9yIGJyb2tlbiBjdXN0b20gc3ludGF4IHVzaW5nXG4gKiB0aGUge0BsaW5rIE5vZGUjZXJyb3J9IG1ldGhvZC5cbiAqXG4gKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSBpbnB1dCBzb3VyY2UgbWFwIHRvIGRldGVjdCB0aGUgb3JpZ2luYWwgZXJyb3IgbG9jYXRpb24uXG4gKiBJZiB5b3Ugd3JvdGUgYSBTYXNzIGZpbGUsIGNvbXBpbGVkIGl0IHRvIENTUyBhbmQgdGhlbiBwYXJzZWQgaXQgd2l0aCBQb3N0Q1NTLFxuICogUG9zdENTUyB3aWxsIHNob3cgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRoZSBTYXNzIGZpbGUuXG4gKlxuICogSWYgeW91IG5lZWQgdGhlIHBvc2l0aW9uIGluIHRoZSBQb3N0Q1NTIGlucHV0XG4gKiAoZS5nLiwgdG8gZGVidWcgdGhlIHByZXZpb3VzIGNvbXBpbGVyKSwgdXNlIGBlcnJvci5pbnB1dC5maWxlYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2F0Y2hpbmcgYW5kIGNoZWNraW5nIHN5bnRheCBlcnJvclxuICogdHJ5IHtcbiAqICAgcG9zdGNzcy5wYXJzZSgnYXsnKVxuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yLm5hbWUgPT09ICdDc3NTeW50YXhFcnJvcicpIHtcbiAqICAgICBlcnJvciAvLz0+IENzc1N5bnRheEVycm9yXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmFpc2luZyBlcnJvciBmcm9tIHBsdWdpblxuICogdGhyb3cgbm9kZS5lcnJvcignVW5rbm93biB2YXJpYWJsZScsIHsgcGx1Z2luOiAncG9zdGNzcy12YXJzJyB9KVxuICovXG5jbGFzcyBDc3NTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlICBFcnJvciBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbmVdICAgU291cmNlIGxpbmUgb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbl0gU291cmNlIGNvbHVtbiBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIGZpbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmlsZV0gICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBicm9rZW4gZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwbHVnaW5dIFBvc3RDU1MgcGx1Z2luIG5hbWUsIGlmIGVycm9yIGNhbWUgZnJvbSBwbHVnaW4uXG4gICAqL1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgbGluZSwgY29sdW1uLCBzb3VyY2UsIGZpbGUsIHBsdWdpbikge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG5cbiAgICAvKipcbiAgICAgKiBBbHdheXMgZXF1YWwgdG8gYCdDc3NTeW50YXhFcnJvcidgLiBZb3Ugc2hvdWxkIGFsd2F5cyBjaGVjayBlcnJvciB0eXBlXG4gICAgICogYnkgYGVycm9yLm5hbWUgPT09ICdDc3NTeW50YXhFcnJvcidgXG4gICAgICogaW5zdGVhZCBvZiBgZXJyb3IgaW5zdGFuY2VvZiBDc3NTeW50YXhFcnJvcmAsXG4gICAgICogYmVjYXVzZSBucG0gY291bGQgaGF2ZSBzZXZlcmFsIFBvc3RDU1MgdmVyc2lvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBpZiAoZXJyb3IubmFtZSA9PT0gJ0Nzc1N5bnRheEVycm9yJykge1xuICAgICAqICAgZXJyb3IgLy89PiBDc3NTeW50YXhFcnJvclxuICAgICAqIH1cbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSAnQ3NzU3ludGF4RXJyb3InXG4gICAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGVycm9yLm1lc3NhZ2UgLy89PiAnVW5jbG9zZWQgYmxvY2snXG4gICAgICovXG4gICAgdGhpcy5yZWFzb24gPSBtZXNzYWdlXG5cbiAgICBpZiAoZmlsZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBicm9rZW4gZmlsZS5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBlcnJvci5maWxlICAgICAgIC8vPT4gJ2Euc2FzcydcbiAgICAgICAqIGVycm9yLmlucHV0LmZpbGUgLy89PiAnYS5jc3MnXG4gICAgICAgKi9cbiAgICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICB9XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBTb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIGZpbGUuXG4gICAgICAgKlxuICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICogZXJyb3Iuc291cmNlICAgICAgIC8vPT4gJ2EgeyBiIHt9IH0nXG4gICAgICAgKiBlcnJvci5pbnB1dC5jb2x1bW4gLy89PiAnYSBiIHsgfSdcbiAgICAgICAqL1xuICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2VcbiAgICB9XG4gICAgaWYgKHBsdWdpbikge1xuICAgICAgLyoqXG4gICAgICAgKiBQbHVnaW4gbmFtZSwgaWYgZXJyb3IgY2FtZSBmcm9tIHBsdWdpbi5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBlcnJvci5wbHVnaW4gLy89PiAncG9zdGNzcy12YXJzJ1xuICAgICAgICovXG4gICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpblxuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpbmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb2x1bW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvKipcbiAgICAgICAqIFNvdXJjZSBsaW5lIG9mIHRoZSBlcnJvci5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBlcnJvci5saW5lICAgICAgIC8vPT4gMlxuICAgICAgICogZXJyb3IuaW5wdXQubGluZSAvLz0+IDRcbiAgICAgICAqL1xuICAgICAgdGhpcy5saW5lID0gbGluZVxuICAgICAgLyoqXG4gICAgICAgKiBTb3VyY2UgY29sdW1uIG9mIHRoZSBlcnJvci5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBlcnJvci5jb2x1bW4gICAgICAgLy89PiAxXG4gICAgICAgKiBlcnJvci5pbnB1dC5jb2x1bW4gLy89PiA0XG4gICAgICAgKi9cbiAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uXG4gICAgfVxuXG4gICAgdGhpcy5zZXRNZXNzYWdlKClcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3NzU3ludGF4RXJyb3IpXG4gICAgfVxuICB9XG5cbiAgc2V0TWVzc2FnZSAoKSB7XG4gICAgLyoqXG4gICAgICogRnVsbCBlcnJvciB0ZXh0IGluIHRoZSBHTlUgZXJyb3IgZm9ybWF0XG4gICAgICogd2l0aCBwbHVnaW4sIGZpbGUsIGxpbmUgYW5kIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGVycm9yLm1lc3NhZ2UgLy89PiAnYS5jc3M6MToxOiBVbmNsb3NlZCBibG9jaydcbiAgICAgKi9cbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLnBsdWdpbiA/IHRoaXMucGx1Z2luICsgJzogJyA6ICcnXG4gICAgdGhpcy5tZXNzYWdlICs9IHRoaXMuZmlsZSA/IHRoaXMuZmlsZSA6ICc8Y3NzIGlucHV0PidcbiAgICBpZiAodHlwZW9mIHRoaXMubGluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubWVzc2FnZSArPSAnOicgKyB0aGlzLmxpbmUgKyAnOicgKyB0aGlzLmNvbHVtblxuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2UgKz0gJzogJyArIHRoaXMucmVhc29uXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZldyBsaW5lcyBvZiBDU1Mgc291cmNlIHRoYXQgY2F1c2VkIHRoZSBlcnJvci5cbiAgICpcbiAgICogSWYgdGhlIENTUyBoYXMgYW4gaW5wdXQgc291cmNlIG1hcCB3aXRob3V0IGBzb3VyY2VDb250ZW50YCxcbiAgICogdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xvcl0gV2hldGhlciBhcnJvdyB3aWxsIGJlIGNvbG9yZWQgcmVkIGJ5IHRlcm1pbmFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciBjb2Rlcy4gQnkgZGVmYXVsdCwgUG9zdENTUyB3aWxsIGRldGVjdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Igc3VwcG9ydCBieSBgcHJvY2Vzcy5zdGRvdXQuaXNUVFlgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYHByb2Nlc3MuZW52Lk5PREVfRElTQUJMRV9DT0xPUlNgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBlcnJvci5zaG93U291cmNlQ29kZSgpIC8vPT4gXCIgIDQgfCB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICA1IHwgYSB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgPiA2IHwgICBiYWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgfCAgIF5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDcgfCB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICA4IHwgYiB7XCJcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBGZXcgbGluZXMgb2YgQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgZXJyb3IuXG4gICAqL1xuICBzaG93U291cmNlQ29kZSAoY29sb3IpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlKSByZXR1cm4gJydcblxuICAgIGxldCBjc3MgPSB0aGlzLnNvdXJjZVxuICAgIGlmICh0ZXJtaW5hbEhpZ2hsaWdodCkge1xuICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3VuZGVmaW5lZCcpIGNvbG9yID0gcGljby5pc0NvbG9yU3VwcG9ydGVkXG4gICAgICBpZiAoY29sb3IpIGNzcyA9IHRlcm1pbmFsSGlnaGxpZ2h0KGNzcylcbiAgICB9XG5cbiAgICBsZXQgbGluZXMgPSBjc3Muc3BsaXQoL1xccj9cXG4vKVxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KHRoaXMubGluZSAtIDMsIDApXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRoaXMubGluZSArIDIsIGxpbmVzLmxlbmd0aClcblxuICAgIGxldCBtYXhXaWR0aCA9IFN0cmluZyhlbmQpLmxlbmd0aFxuXG4gICAgZnVuY3Rpb24gbWFyayAodGV4dCkge1xuICAgICAgaWYgKGNvbG9yICYmIHBpY28ucmVkKSB7XG4gICAgICAgIHJldHVybiBwaWNvLnJlZChwaWNvLmJvbGQodGV4dCkpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGV4dFxuICAgIH1cbiAgICBmdW5jdGlvbiBhc2lkZSAodGV4dCkge1xuICAgICAgaWYgKGNvbG9yICYmIHBpY28uZ3JheSkge1xuICAgICAgICByZXR1cm4gcGljby5ncmF5KHRleHQpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGV4dFxuICAgIH1cblxuICAgIHJldHVybiBsaW5lc1xuICAgICAgLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgICAubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgbnVtYmVyID0gc3RhcnQgKyAxICsgaW5kZXhcbiAgICAgICAgbGV0IGd1dHRlciA9ICcgJyArICgnICcgKyBudW1iZXIpLnNsaWNlKC1tYXhXaWR0aCkgKyAnIHwgJ1xuICAgICAgICBpZiAobnVtYmVyID09PSB0aGlzLmxpbmUpIHtcbiAgICAgICAgICBsZXQgc3BhY2luZyA9XG4gICAgICAgICAgICBhc2lkZShndXR0ZXIucmVwbGFjZSgvXFxkL2csICcgJykpICtcbiAgICAgICAgICAgIGxpbmUuc2xpY2UoMCwgdGhpcy5jb2x1bW4gLSAxKS5yZXBsYWNlKC9bXlxcdF0vZywgJyAnKVxuICAgICAgICAgIHJldHVybiBtYXJrKCc+JykgKyBhc2lkZShndXR0ZXIpICsgbGluZSArICdcXG4gJyArIHNwYWNpbmcgKyBtYXJrKCdeJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyAnICsgYXNpZGUoZ3V0dGVyKSArIGxpbmVcbiAgICAgIH0pXG4gICAgICAuam9pbignXFxuJylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGVycm9yIHBvc2l0aW9uLCBtZXNzYWdlIGFuZCBzb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIHBhcnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGVycm9yLnRvU3RyaW5nKCkgLy89PiBcIkNzc1N5bnRheEVycm9yOiBhcHAuY3NzOjE6MTogVW5jbG9zZWQgYmxvY2tcbiAgICogICAgICAgICAgICAgICAgICAvLyAgICA+IDEgfCBhIHtcbiAgICogICAgICAgICAgICAgICAgICAvLyAgICAgICAgfCBeXCJcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBFcnJvciBwb3NpdGlvbiwgbWVzc2FnZSBhbmQgc291cmNlIGNvZGUuXG4gICAqL1xuICB0b1N0cmluZyAoKSB7XG4gICAgbGV0IGNvZGUgPSB0aGlzLnNob3dTb3VyY2VDb2RlKClcbiAgICBpZiAoY29kZSkge1xuICAgICAgY29kZSA9ICdcXG5cXG4nICsgY29kZSArICdcXG4nXG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlICsgY29kZVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBDc3NTeW50YXhFcnJvciNcbiAgICogQG1lbWJlciB7SW5wdXR9IGlucHV0IElucHV0IG9iamVjdCB3aXRoIFBvc3RDU1MgaW50ZXJuYWwgaW5mb3JtYXRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgIGFib3V0IGlucHV0IGZpbGUuIElmIGlucHV0IGhhcyBzb3VyY2UgbWFwXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHByZXZpb3VzIHRvb2wsIFBvc3RDU1Mgd2lsbCB1c2Ugb3JpZ2luXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAoZm9yIGV4YW1wbGUsIFNhc3MpIHNvdXJjZS4gWW91IGNhbiB1c2UgdGhpc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHRvIGdldCBQb3N0Q1NTIGlucHV0IHNvdXJjZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZXJyb3IuaW5wdXQuZmlsZSAvLz0+ICdhLmNzcydcbiAgICogZXJyb3IuZmlsZSAgICAgICAvLz0+ICdhLnNhc3MnXG4gICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBDc3NTeW50YXhFcnJvclxuIl0sImZpbGUiOiJjc3Mtc3ludGF4LWVycm9yLmpzIn0=
  5761. /***/ }),
  5762. /* 35 */
  5763. /***/ (function(module, exports, __webpack_require__) {
  5764. "use strict";
  5765. exports.__esModule = true;
  5766. exports.default = void 0;
  5767. var DEFAULT_RAW = {
  5768. colon: ': ',
  5769. indent: ' ',
  5770. beforeDecl: '\n',
  5771. beforeRule: '\n',
  5772. beforeOpen: ' ',
  5773. beforeClose: '\n',
  5774. beforeComment: '\n',
  5775. after: '\n',
  5776. emptyBody: '',
  5777. commentLeft: ' ',
  5778. commentRight: ' ',
  5779. semicolon: false
  5780. };
  5781. function capitalize(str) {
  5782. return str[0].toUpperCase() + str.slice(1);
  5783. }
  5784. var Stringifier = /*#__PURE__*/function () {
  5785. function Stringifier(builder) {
  5786. this.builder = builder;
  5787. }
  5788. var _proto = Stringifier.prototype;
  5789. _proto.stringify = function stringify(node, semicolon) {
  5790. this[node.type](node, semicolon);
  5791. };
  5792. _proto.root = function root(node) {
  5793. this.body(node);
  5794. if (node.raws.after) this.builder(node.raws.after);
  5795. };
  5796. _proto.comment = function comment(node) {
  5797. var left = this.raw(node, 'left', 'commentLeft');
  5798. var right = this.raw(node, 'right', 'commentRight');
  5799. this.builder('/*' + left + node.text + right + '*/', node);
  5800. };
  5801. _proto.decl = function decl(node, semicolon) {
  5802. var between = this.raw(node, 'between', 'colon');
  5803. var string = node.prop + between + this.rawValue(node, 'value');
  5804. if (node.important) {
  5805. string += node.raws.important || ' !important';
  5806. }
  5807. if (semicolon) string += ';';
  5808. this.builder(string, node);
  5809. };
  5810. _proto.rule = function rule(node) {
  5811. this.block(node, this.rawValue(node, 'selector'));
  5812. if (node.raws.ownSemicolon) {
  5813. this.builder(node.raws.ownSemicolon, node, 'end');
  5814. }
  5815. };
  5816. _proto.atrule = function atrule(node, semicolon) {
  5817. var name = '@' + node.name;
  5818. var params = node.params ? this.rawValue(node, 'params') : '';
  5819. if (typeof node.raws.afterName !== 'undefined') {
  5820. name += node.raws.afterName;
  5821. } else if (params) {
  5822. name += ' ';
  5823. }
  5824. if (node.nodes) {
  5825. this.block(node, name + params);
  5826. } else {
  5827. var end = (node.raws.between || '') + (semicolon ? ';' : '');
  5828. this.builder(name + params + end, node);
  5829. }
  5830. };
  5831. _proto.body = function body(node) {
  5832. var last = node.nodes.length - 1;
  5833. while (last > 0) {
  5834. if (node.nodes[last].type !== 'comment') break;
  5835. last -= 1;
  5836. }
  5837. var semicolon = this.raw(node, 'semicolon');
  5838. for (var i = 0; i < node.nodes.length; i++) {
  5839. var child = node.nodes[i];
  5840. var before = this.raw(child, 'before');
  5841. if (before) this.builder(before);
  5842. this.stringify(child, last !== i || semicolon);
  5843. }
  5844. };
  5845. _proto.block = function block(node, start) {
  5846. var between = this.raw(node, 'between', 'beforeOpen');
  5847. this.builder(start + between + '{', node, 'start');
  5848. var after;
  5849. if (node.nodes && node.nodes.length) {
  5850. this.body(node);
  5851. after = this.raw(node, 'after');
  5852. } else {
  5853. after = this.raw(node, 'after', 'emptyBody');
  5854. }
  5855. if (after) this.builder(after);
  5856. this.builder('}', node, 'end');
  5857. };
  5858. _proto.raw = function raw(node, own, detect) {
  5859. var value;
  5860. if (!detect) detect = own; // Already had
  5861. if (own) {
  5862. value = node.raws[own];
  5863. if (typeof value !== 'undefined') return value;
  5864. }
  5865. var parent = node.parent; // Hack for first rule in CSS
  5866. if (detect === 'before') {
  5867. if (!parent || parent.type === 'root' && parent.first === node) {
  5868. return '';
  5869. }
  5870. } // Floating child without parent
  5871. if (!parent) return DEFAULT_RAW[detect]; // Detect style by other nodes
  5872. var root = node.root();
  5873. if (!root.rawCache) root.rawCache = {};
  5874. if (typeof root.rawCache[detect] !== 'undefined') {
  5875. return root.rawCache[detect];
  5876. }
  5877. if (detect === 'before' || detect === 'after') {
  5878. return this.beforeAfter(node, detect);
  5879. } else {
  5880. var method = 'raw' + capitalize(detect);
  5881. if (this[method]) {
  5882. value = this[method](root, node);
  5883. } else {
  5884. root.walk(function (i) {
  5885. value = i.raws[own];
  5886. if (typeof value !== 'undefined') return false;
  5887. });
  5888. }
  5889. }
  5890. if (typeof value === 'undefined') value = DEFAULT_RAW[detect];
  5891. root.rawCache[detect] = value;
  5892. return value;
  5893. };
  5894. _proto.rawSemicolon = function rawSemicolon(root) {
  5895. var value;
  5896. root.walk(function (i) {
  5897. if (i.nodes && i.nodes.length && i.last.type === 'decl') {
  5898. value = i.raws.semicolon;
  5899. if (typeof value !== 'undefined') return false;
  5900. }
  5901. });
  5902. return value;
  5903. };
  5904. _proto.rawEmptyBody = function rawEmptyBody(root) {
  5905. var value;
  5906. root.walk(function (i) {
  5907. if (i.nodes && i.nodes.length === 0) {
  5908. value = i.raws.after;
  5909. if (typeof value !== 'undefined') return false;
  5910. }
  5911. });
  5912. return value;
  5913. };
  5914. _proto.rawIndent = function rawIndent(root) {
  5915. if (root.raws.indent) return root.raws.indent;
  5916. var value;
  5917. root.walk(function (i) {
  5918. var p = i.parent;
  5919. if (p && p !== root && p.parent && p.parent === root) {
  5920. if (typeof i.raws.before !== 'undefined') {
  5921. var parts = i.raws.before.split('\n');
  5922. value = parts[parts.length - 1];
  5923. value = value.replace(/[^\s]/g, '');
  5924. return false;
  5925. }
  5926. }
  5927. });
  5928. return value;
  5929. };
  5930. _proto.rawBeforeComment = function rawBeforeComment(root, node) {
  5931. var value;
  5932. root.walkComments(function (i) {
  5933. if (typeof i.raws.before !== 'undefined') {
  5934. value = i.raws.before;
  5935. if (value.indexOf('\n') !== -1) {
  5936. value = value.replace(/[^\n]+$/, '');
  5937. }
  5938. return false;
  5939. }
  5940. });
  5941. if (typeof value === 'undefined') {
  5942. value = this.raw(node, null, 'beforeDecl');
  5943. } else if (value) {
  5944. value = value.replace(/[^\s]/g, '');
  5945. }
  5946. return value;
  5947. };
  5948. _proto.rawBeforeDecl = function rawBeforeDecl(root, node) {
  5949. var value;
  5950. root.walkDecls(function (i) {
  5951. if (typeof i.raws.before !== 'undefined') {
  5952. value = i.raws.before;
  5953. if (value.indexOf('\n') !== -1) {
  5954. value = value.replace(/[^\n]+$/, '');
  5955. }
  5956. return false;
  5957. }
  5958. });
  5959. if (typeof value === 'undefined') {
  5960. value = this.raw(node, null, 'beforeRule');
  5961. } else if (value) {
  5962. value = value.replace(/[^\s]/g, '');
  5963. }
  5964. return value;
  5965. };
  5966. _proto.rawBeforeRule = function rawBeforeRule(root) {
  5967. var value;
  5968. root.walk(function (i) {
  5969. if (i.nodes && (i.parent !== root || root.first !== i)) {
  5970. if (typeof i.raws.before !== 'undefined') {
  5971. value = i.raws.before;
  5972. if (value.indexOf('\n') !== -1) {
  5973. value = value.replace(/[^\n]+$/, '');
  5974. }
  5975. return false;
  5976. }
  5977. }
  5978. });
  5979. if (value) value = value.replace(/[^\s]/g, '');
  5980. return value;
  5981. };
  5982. _proto.rawBeforeClose = function rawBeforeClose(root) {
  5983. var value;
  5984. root.walk(function (i) {
  5985. if (i.nodes && i.nodes.length > 0) {
  5986. if (typeof i.raws.after !== 'undefined') {
  5987. value = i.raws.after;
  5988. if (value.indexOf('\n') !== -1) {
  5989. value = value.replace(/[^\n]+$/, '');
  5990. }
  5991. return false;
  5992. }
  5993. }
  5994. });
  5995. if (value) value = value.replace(/[^\s]/g, '');
  5996. return value;
  5997. };
  5998. _proto.rawBeforeOpen = function rawBeforeOpen(root) {
  5999. var value;
  6000. root.walk(function (i) {
  6001. if (i.type !== 'decl') {
  6002. value = i.raws.between;
  6003. if (typeof value !== 'undefined') return false;
  6004. }
  6005. });
  6006. return value;
  6007. };
  6008. _proto.rawColon = function rawColon(root) {
  6009. var value;
  6010. root.walkDecls(function (i) {
  6011. if (typeof i.raws.between !== 'undefined') {
  6012. value = i.raws.between.replace(/[^\s:]/g, '');
  6013. return false;
  6014. }
  6015. });
  6016. return value;
  6017. };
  6018. _proto.beforeAfter = function beforeAfter(node, detect) {
  6019. var value;
  6020. if (node.type === 'decl') {
  6021. value = this.raw(node, null, 'beforeDecl');
  6022. } else if (node.type === 'comment') {
  6023. value = this.raw(node, null, 'beforeComment');
  6024. } else if (detect === 'before') {
  6025. value = this.raw(node, null, 'beforeRule');
  6026. } else {
  6027. value = this.raw(node, null, 'beforeClose');
  6028. }
  6029. var buf = node.parent;
  6030. var depth = 0;
  6031. while (buf && buf.type !== 'root') {
  6032. depth += 1;
  6033. buf = buf.parent;
  6034. }
  6035. if (value.indexOf('\n') !== -1) {
  6036. var indent = this.raw(node, null, 'indent');
  6037. if (indent.length) {
  6038. for (var step = 0; step < depth; step++) {
  6039. value += indent;
  6040. }
  6041. }
  6042. }
  6043. return value;
  6044. };
  6045. _proto.rawValue = function rawValue(node, prop) {
  6046. var value = node[prop];
  6047. var raw = node.raws[prop];
  6048. if (raw && raw.value === value) {
  6049. return raw.raw;
  6050. }
  6051. return value;
  6052. };
  6053. return Stringifier;
  6054. }();
  6055. var _default = Stringifier;
  6056. exports.default = _default;
  6057. module.exports = exports.default;
  6058. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmaWVyLmVzNiJdLCJuYW1lcyI6WyJERUZBVUxUX1JBVyIsImNvbG9uIiwiaW5kZW50IiwiYmVmb3JlRGVjbCIsImJlZm9yZVJ1bGUiLCJiZWZvcmVPcGVuIiwiYmVmb3JlQ2xvc2UiLCJiZWZvcmVDb21tZW50IiwiYWZ0ZXIiLCJlbXB0eUJvZHkiLCJjb21tZW50TGVmdCIsImNvbW1lbnRSaWdodCIsInNlbWljb2xvbiIsImNhcGl0YWxpemUiLCJzdHIiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiU3RyaW5naWZpZXIiLCJidWlsZGVyIiwic3RyaW5naWZ5Iiwibm9kZSIsInR5cGUiLCJyb290IiwiYm9keSIsInJhd3MiLCJjb21tZW50IiwibGVmdCIsInJhdyIsInJpZ2h0IiwidGV4dCIsImRlY2wiLCJiZXR3ZWVuIiwic3RyaW5nIiwicHJvcCIsInJhd1ZhbHVlIiwiaW1wb3J0YW50IiwicnVsZSIsImJsb2NrIiwib3duU2VtaWNvbG9uIiwiYXRydWxlIiwibmFtZSIsInBhcmFtcyIsImFmdGVyTmFtZSIsIm5vZGVzIiwiZW5kIiwibGFzdCIsImxlbmd0aCIsImkiLCJjaGlsZCIsImJlZm9yZSIsInN0YXJ0Iiwib3duIiwiZGV0ZWN0IiwidmFsdWUiLCJwYXJlbnQiLCJmaXJzdCIsInJhd0NhY2hlIiwiYmVmb3JlQWZ0ZXIiLCJtZXRob2QiLCJ3YWxrIiwicmF3U2VtaWNvbG9uIiwicmF3RW1wdHlCb2R5IiwicmF3SW5kZW50IiwicCIsInBhcnRzIiwic3BsaXQiLCJyZXBsYWNlIiwicmF3QmVmb3JlQ29tbWVudCIsIndhbGtDb21tZW50cyIsImluZGV4T2YiLCJyYXdCZWZvcmVEZWNsIiwid2Fsa0RlY2xzIiwicmF3QmVmb3JlUnVsZSIsInJhd0JlZm9yZUNsb3NlIiwicmF3QmVmb3JlT3BlbiIsInJhd0NvbG9uIiwiYnVmIiwiZGVwdGgiLCJzdGVwIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBTUEsV0FBVyxHQUFHO0FBQ2xCQyxFQUFB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QUFDRDs7QUFFRCxRQUFJd0QsR0FBRyxHQUFHeEQsSUFBSSxDQUFDa0MsTUFBZjtBQUNBLFFBQUl1QixLQUFLLEdBQUcsQ0FBWjs7QUFDQSxXQUFPRCxHQUFHLElBQUlBLEdBQUcsQ0FBQ3ZELElBQUosS0FBYSxNQUEzQixFQUFtQztBQUNqQ3dELE1BQUFBLEtBQUssSUFBSSxDQUFUO0FBQ0FELE1BQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDdEIsTUFBVjtBQUNEOztBQUVELFFBQUlELEtBQUssQ0FBQ2dCLE9BQU4sQ0FBYyxJQUFkLE1BQXdCLENBQUMsQ0FBN0IsRUFBZ0M7QUFDOUIsVUFBSW5FLE1BQU0sR0FBRyxLQUFLeUIsR0FBTCxDQUFTUCxJQUFULEVBQWUsSUFBZixFQUFxQixRQUFyQixDQUFiOztBQUNBLFVBQUlsQixNQUFNLENBQUM0QyxNQUFYLEVBQW1CO0FBQ2pCLGFBQUssSUFBSWdDLElBQUksR0FBRyxDQUFoQixFQUFtQkEsSUFBSSxHQUFHRCxLQUExQixFQUFpQ0MsSUFBSSxFQUFyQztBQUF5Q3pCLFVBQUFBLEtBQUssSUFBSW5ELE1BQVQ7QUFBekM7QUFDRDtBQUNGOztBQUVELFdBQU9tRCxLQUFQO0FBQ0QsRzs7U0FFRG5CLFEsR0FBQSxrQkFBVWQsSUFBVixFQUFnQmEsSUFBaEIsRUFBc0I7QUFDcEIsUUFBSW9CLEtBQUssR0FBR2pDLElBQUksQ0FBQ2EsSUFBRCxDQUFoQjtBQUNBLFFBQUlOLEdBQUcsR0FBR1AsSUFBSSxDQUFDSSxJQUFMLENBQVVTLElBQVYsQ0FBVjs7QUFDQSxRQUFJTixHQUFHLElBQUlBLEdBQUcsQ0FBQzBCLEtBQUosS0FBY0EsS0FBekIsRUFBZ0M7QUFDOUIsYUFBTzFCLEdBQUcsQ0FBQ0EsR0FBWDtBQUNEOztBQUVELFdBQU8wQixLQUFQO0FBQ0QsRzs7Ozs7ZUFHWXBDLFciLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBERUZBVUxUX1JBVyA9IHtcbiAgY29sb246ICc6ICcsXG4gIGluZGVudDogJyAgICAnLFxuICBiZWZvcmVEZWNsOiAnXFxuJyxcbiAgYmVmb3JlUnVsZTogJ1xcbicsXG4gIGJlZm9yZU9wZW46ICcgJyxcbiAgYmVmb3JlQ2xvc2U6ICdcXG4nLFxuICBiZWZvcmVDb21tZW50OiAnXFxuJyxcbiAgYWZ0ZXI6ICdcXG4nLFxuICBlbXB0eUJvZHk6ICcnLFxuICBjb21tZW50TGVmdDogJyAnLFxuICBjb21tZW50UmlnaHQ6ICcgJyxcbiAgc2VtaWNvbG9uOiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplIChzdHIpIHtcbiAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59XG5cbmNsYXNzIFN0cmluZ2lmaWVyIHtcbiAgY29uc3RydWN0b3IgKGJ1aWxkZXIpIHtcbiAgICB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyXG4gIH1cblxuICBzdHJpbmdpZnkgKG5vZGUsIHNlbWljb2xvbikge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlLCBzZW1pY29sb24pXG4gIH1cblxuICByb290IChub2RlKSB7XG4gICAgdGhpcy5ib2R5KG5vZGUpXG4gICAgaWYgKG5vZGUucmF3cy5hZnRlcikgdGhpcy5idWlsZGVyKG5vZGUucmF3cy5hZnRlcilcbiAgfVxuXG4gIGNvbW1lbnQgKG5vZGUpIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMucmF3KG5vZGUsICdsZWZ0JywgJ2NvbW1lbnRMZWZ0JylcbiAgICBsZXQgcmlnaHQgPSB0aGlzLnJhdyhub2RlLCAncmlnaHQnLCAnY29tbWVudFJpZ2h0JylcbiAgICB0aGlzLmJ1aWxkZXIoJy8qJyArIGxlZnQgKyBub2RlLnRleHQgKyByaWdodCArICcqLycsIG5vZGUpXG4gIH1cblxuICBkZWNsIChub2RlLCBzZW1pY29sb24pIHtcbiAgICBsZXQgYmV0d2VlbiA9IHRoaXMucmF3KG5vZGUsICdiZXR3ZWVuJywgJ2NvbG9uJylcbiAgICBsZXQgc3RyaW5nID0gbm9kZS5wcm9wICsgYmV0d2VlbiArIHRoaXMucmF3VmFsdWUobm9kZSwgJ3ZhbHVlJylcblxuICAgIGlmIChub2RlLmltcG9ydGFudCkge1xuICAgICAgc3RyaW5nICs9IG5vZGUucmF3cy5pbXBvcnRhbnQgfHwgJyAhaW1wb3J0YW50J1xuICAgIH1cblxuICAgIGlmIChzZW1pY29sb24pIHN0cmluZyArPSAnOydcbiAgICB0aGlzLmJ1aWxkZXIoc3RyaW5nLCBub2RlKVxuICB9XG5cbiAgcnVsZSAobm9kZSkge1xuICAgIHRoaXMuYmxvY2sobm9kZSwgdGhpcy5yYXdWYWx1ZShub2RlLCAnc2VsZWN0b3InKSlcbiAgICBpZiAobm9kZS5yYXdzLm93blNlbWljb2xvbikge1xuICAgICAgdGhpcy5idWlsZGVyKG5vZGUucmF3cy5vd25TZW1pY29sb24sIG5vZGUsICdlbmQnKVxuICAgIH1cbiAgfVxuXG4gIGF0cnVsZSAobm9kZSwgc2VtaWNvbG9uKSB7XG4gICAgbGV0IG5hbWUgPSAnQCcgKyBub2RlLm5hbWVcbiAgICBsZXQgcGFyYW1zID0gbm9kZS5wYXJhbXMgPyB0aGlzLnJhd1ZhbHVlKG5vZGUsICdwYXJhbXMnKSA6ICcnXG5cbiAgICBpZiAodHlwZW9mIG5vZGUucmF3cy5hZnRlck5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuYW1lICs9IG5vZGUucmF3cy5hZnRlck5hbWVcbiAgICB9IGVsc2UgaWYgKHBhcmFtcykge1xuICAgICAgbmFtZSArPSAnICdcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgdGhpcy5ibG9jayhub2RlLCBuYW1lICsgcGFyYW1zKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW5kID0gKG5vZGUucmF3cy5iZXR3ZWVuIHx8ICcnKSArIChzZW1pY29sb24gPyAnOycgOiAnJylcbiAgICAgIHRoaXMuYnVpbGRlcihuYW1lICsgcGFyYW1zICsgZW5kLCBub2RlKVxuICAgIH1cbiAgfVxuXG4gIGJvZHkgKG5vZGUpIHtcbiAgICBsZXQgbGFzdCA9IG5vZGUubm9kZXMubGVuZ3RoIC0gMVxuICAgIHdoaWxlIChsYXN0ID4gMCkge1xuICAgICAgaWYgKG5vZGUubm9kZXNbbGFzdF0udHlwZSAhPT0gJ2NvbW1lbnQnKSBicmVha1xuICAgICAgbGFzdCAtPSAxXG4gICAgfVxuXG4gICAgbGV0IHNlbWljb2xvbiA9IHRoaXMucmF3KG5vZGUsICdzZW1pY29sb24nKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkID0gbm9kZS5ub2Rlc1tpXVxuICAgICAgbGV0IGJlZm9yZSA9IHRoaXMucmF3KGNoaWxkLCAnYmVmb3JlJylcbiAgICAgIGlmIChiZWZvcmUpIHRoaXMuYnVpbGRlcihiZWZvcmUpXG4gICAgICB0aGlzLnN0cmluZ2lmeShjaGlsZCwgbGFzdCAhPT0gaSB8fCBzZW1pY29sb24pXG4gICAgfVxuICB9XG5cbiAgYmxvY2sgKG5vZGUsIHN0YXJ0KSB7XG4gICAgbGV0IGJldHdlZW4gPSB0aGlzLnJhdyhub2RlLCAnYmV0d2VlbicsICdiZWZvcmVPcGVuJylcbiAgICB0aGlzLmJ1aWxkZXIoc3RhcnQgKyBiZXR3ZWVuICsgJ3snLCBub2RlLCAnc3RhcnQnKVxuXG4gICAgbGV0IGFmdGVyXG4gICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYm9keShub2RlKVxuICAgICAgYWZ0ZXIgPSB0aGlzLnJhdyhub2RlLCAnYWZ0ZXInKVxuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlciA9IHRoaXMucmF3KG5vZGUsICdhZnRlcicsICdlbXB0eUJvZHknKVxuICAgIH1cblxuICAgIGlmIChhZnRlcikgdGhpcy5idWlsZGVyKGFmdGVyKVxuICAgIHRoaXMuYnVpbGRlcignfScsIG5vZGUsICdlbmQnKVxuICB9XG5cbiAgcmF3IChub2RlLCBvd24sIGRldGVjdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIGlmICghZGV0ZWN0KSBkZXRlY3QgPSBvd25cblxuICAgIC8vIEFscmVhZHkgaGFkXG4gICAgaWYgKG93bikge1xuICAgICAgdmFsdWUgPSBub2RlLnJhd3Nbb3duXVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudFxuXG4gICAgLy8gSGFjayBmb3IgZmlyc3QgcnVsZSBpbiBDU1NcbiAgICBpZiAoZGV0ZWN0ID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKCFwYXJlbnQgfHwgKHBhcmVudC50eXBlID09PSAncm9vdCcgJiYgcGFyZW50LmZpcnN0ID09PSBub2RlKSkge1xuICAgICAgICByZXR1cm4gJydcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGbG9hdGluZyBjaGlsZCB3aXRob3V0IHBhcmVudFxuICAgIGlmICghcGFyZW50KSByZXR1cm4gREVGQVVMVF9SQVdbZGV0ZWN0XVxuXG4gICAgLy8gRGV0ZWN0IHN0eWxlIGJ5IG90aGVyIG5vZGVzXG4gICAgbGV0IHJvb3QgPSBub2RlLnJvb3QoKVxuICAgIGlmICghcm9vdC5yYXdDYWNoZSkgcm9vdC5yYXdDYWNoZSA9IHsgfVxuICAgIGlmICh0eXBlb2Ygcm9vdC5yYXdDYWNoZVtkZXRlY3RdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHJvb3QucmF3Q2FjaGVbZGV0ZWN0XVxuICAgIH1cblxuICAgIGlmIChkZXRlY3QgPT09ICdiZWZvcmUnIHx8IGRldGVjdCA9PT0gJ2FmdGVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlQWZ0ZXIobm9kZSwgZGV0ZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWV0aG9kID0gJ3JhdycgKyBjYXBpdGFsaXplKGRldGVjdClcbiAgICAgIGlmICh0aGlzW21ldGhvZF0pIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzW21ldGhvZF0ocm9vdCwgbm9kZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3Qud2FsayhpID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IGkucmF3c1tvd25dXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB2YWx1ZSA9IERFRkFVTFRfUkFXW2RldGVjdF1cblxuICAgIHJvb3QucmF3Q2FjaGVbZGV0ZWN0XSA9IHZhbHVlXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdTZW1pY29sb24gKHJvb3QpIHtcbiAgICBsZXQgdmFsdWVcbiAgICByb290LndhbGsoaSA9PiB7XG4gICAgICBpZiAoaS5ub2RlcyAmJiBpLm5vZGVzLmxlbmd0aCAmJiBpLmxhc3QudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLnNlbWljb2xvblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJhd0VtcHR5Qm9keSAocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2FsayhpID0+IHtcbiAgICAgIGlmIChpLm5vZGVzICYmIGkubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLmFmdGVyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3SW5kZW50IChyb290KSB7XG4gICAgaWYgKHJvb3QucmF3cy5pbmRlbnQpIHJldHVybiByb290LnJhd3MuaW5kZW50XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrKGkgPT4ge1xuICAgICAgbGV0IHAgPSBpLnBhcmVudFxuICAgICAgaWYgKHAgJiYgcCAhPT0gcm9vdCAmJiBwLnBhcmVudCAmJiBwLnBhcmVudCA9PT0gcm9vdCkge1xuICAgICAgICBpZiAodHlwZW9mIGkucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbGV0IHBhcnRzID0gaS5yYXdzLmJlZm9yZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICB2YWx1ZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcc10vZywgJycpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3QmVmb3JlQ29tbWVudCAocm9vdCwgbm9kZSkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2Fsa0NvbW1lbnRzKGkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpLnJhd3MuYmVmb3JlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YWx1ZSA9IGkucmF3cy5iZWZvcmVcbiAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJ1xcbicpICE9PSAtMSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVEZWNsJylcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxzXS9nLCAnJylcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdCZWZvcmVEZWNsIChyb290LCBub2RlKSB7XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrRGVjbHMoaSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLmJlZm9yZVxuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignXFxuJykgIT09IC0xKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcbl0rJC8sICcnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5yYXcobm9kZSwgbnVsbCwgJ2JlZm9yZVJ1bGUnKVxuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXHNdL2csICcnKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJhd0JlZm9yZVJ1bGUgKHJvb3QpIHtcbiAgICBsZXQgdmFsdWVcbiAgICByb290LndhbGsoaSA9PiB7XG4gICAgICBpZiAoaS5ub2RlcyAmJiAoaS5wYXJlbnQgIT09IHJvb3QgfHwgcm9vdC5maXJzdCAhPT0gaSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpLnJhd3MuYmVmb3JlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHZhbHVlID0gaS5yYXdzLmJlZm9yZVxuICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdcXG4nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh2YWx1ZSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcc10vZywgJycpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdCZWZvcmVDbG9zZSAocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2FsayhpID0+IHtcbiAgICAgIGlmIChpLm5vZGVzICYmIGkubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodHlwZW9mIGkucmF3cy5hZnRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5hZnRlclxuICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdcXG4nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh2YWx1ZSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcc10vZywgJycpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdCZWZvcmVPcGVuIChyb290KSB7XG4gICAgbGV0IHZhbHVlXG4gICAgcm9vdC53YWxrKGkgPT4ge1xuICAgICAgaWYgKGkudHlwZSAhPT0gJ2RlY2wnKSB7XG4gICAgICAgIHZhbHVlID0gaS5yYXdzLmJldHdlZW5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICByYXdDb2xvbiAocm9vdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIHJvb3Qud2Fsa0RlY2xzKGkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpLnJhd3MuYmV0d2VlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFsdWUgPSBpLnJhd3MuYmV0d2Vlbi5yZXBsYWNlKC9bXlxcczpdL2csICcnKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgYmVmb3JlQWZ0ZXIgKG5vZGUsIGRldGVjdCkge1xuICAgIGxldCB2YWx1ZVxuICAgIGlmIChub2RlLnR5cGUgPT09ICdkZWNsJykge1xuICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlRGVjbCcpXG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdjb21tZW50Jykge1xuICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlQ29tbWVudCcpXG4gICAgfSBlbHNlIGlmIChkZXRlY3QgPT09ICdiZWZvcmUnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVSdWxlJylcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlQ2xvc2UnKVxuICAgIH1cblxuICAgIGxldCBidWYgPSBub2RlLnBhcmVudFxuICAgIGxldCBkZXB0aCA9IDBcbiAgICB3aGlsZSAoYnVmICYmIGJ1Zi50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGRlcHRoICs9IDFcbiAgICAgIGJ1ZiA9IGJ1Zi5wYXJlbnRcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZignXFxuJykgIT09IC0xKSB7XG4gICAgICBsZXQgaW5kZW50ID0gdGhpcy5yYXcobm9kZSwgbnVsbCwgJ2luZGVudCcpXG4gICAgICBpZiAoaW5kZW50Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBzdGVwID0gMDsgc3RlcCA8IGRlcHRoOyBzdGVwKyspIHZhbHVlICs9IGluZGVudFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmF3VmFsdWUgKG5vZGUsIHByb3ApIHtcbiAgICBsZXQgdmFsdWUgPSBub2RlW3Byb3BdXG4gICAgbGV0IHJhdyA9IG5vZGUucmF3c1twcm9wXVxuICAgIGlmIChyYXcgJiYgcmF3LnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHJhdy5yYXdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHJpbmdpZmllclxuIl0sImZpbGUiOiJzdHJpbmdpZmllci5qcyJ9
  6059. /***/ }),
  6060. /* 36 */
  6061. /***/ (function(module, exports, __webpack_require__) {
  6062. "use strict";
  6063. exports.__esModule = true;
  6064. exports.default = void 0;
  6065. var _lazyResult = _interopRequireDefault(__webpack_require__(37));
  6066. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  6067. function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
  6068. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  6069. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  6070. /**
  6071. * Contains plugins to process CSS. Create one `Processor` instance,
  6072. * initialize its plugins, and then use that instance on numerous CSS files.
  6073. *
  6074. * @example
  6075. * const processor = postcss([autoprefixer, precss])
  6076. * processor.process(css1).then(result => console.log(result.css))
  6077. * processor.process(css2).then(result => console.log(result.css))
  6078. */
  6079. var Processor = /*#__PURE__*/function () {
  6080. /**
  6081. * @param {Array.<Plugin|pluginFunction>|Processor} plugins PostCSS plugins.
  6082. * See {@link Processor#use} for plugin format.
  6083. */
  6084. function Processor(plugins) {
  6085. if (plugins === void 0) {
  6086. plugins = [];
  6087. }
  6088. /**
  6089. * Current PostCSS version.
  6090. *
  6091. * @type {string}
  6092. *
  6093. * @example
  6094. * if (result.processor.version.split('.')[0] !== '6') {
  6095. * throw new Error('This plugin works only with PostCSS 6')
  6096. * }
  6097. */
  6098. this.version = '7.0.39';
  6099. /**
  6100. * Plugins added to this processor.
  6101. *
  6102. * @type {pluginFunction[]}
  6103. *
  6104. * @example
  6105. * const processor = postcss([autoprefixer, precss])
  6106. * processor.plugins.length //=> 2
  6107. */
  6108. this.plugins = this.normalize(plugins);
  6109. }
  6110. /**
  6111. * Adds a plugin to be used as a CSS processor.
  6112. *
  6113. * PostCSS plugin can be in 4 formats:
  6114. * * A plugin created by {@link postcss.plugin} method.
  6115. * * A function. PostCSS will pass the function a @{link Root}
  6116. * as the first argument and current {@link Result} instance
  6117. * as the second.
  6118. * * An object with a `postcss` method. PostCSS will use that method
  6119. * as described in #2.
  6120. * * Another {@link Processor} instance. PostCSS will copy plugins
  6121. * from that instance into this one.
  6122. *
  6123. * Plugins can also be added by passing them as arguments when creating
  6124. * a `postcss` instance (see [`postcss(plugins)`]).
  6125. *
  6126. * Asynchronous plugins should return a `Promise` instance.
  6127. *
  6128. * @param {Plugin|pluginFunction|Processor} plugin PostCSS plugin
  6129. * or {@link Processor}
  6130. * with plugins.
  6131. *
  6132. * @example
  6133. * const processor = postcss()
  6134. * .use(autoprefixer)
  6135. * .use(precss)
  6136. *
  6137. * @return {Processes} Current processor to make methods chain.
  6138. */
  6139. var _proto = Processor.prototype;
  6140. _proto.use = function use(plugin) {
  6141. this.plugins = this.plugins.concat(this.normalize([plugin]));
  6142. return this;
  6143. }
  6144. /**
  6145. * Parses source CSS and returns a {@link LazyResult} Promise proxy.
  6146. * Because some plugins can be asynchronous it doesn’t make
  6147. * any transformations. Transformations will be applied
  6148. * in the {@link LazyResult} methods.
  6149. *
  6150. * @param {string|toString|Result} css String with input CSS or any object
  6151. * with a `toString()` method,
  6152. * like a Buffer. Optionally, send
  6153. * a {@link Result} instance
  6154. * and the processor will take
  6155. * the {@link Root} from it.
  6156. * @param {processOptions} [opts] Options.
  6157. *
  6158. * @return {LazyResult} Promise proxy.
  6159. *
  6160. * @example
  6161. * processor.process(css, { from: 'a.css', to: 'a.out.css' })
  6162. * .then(result => {
  6163. * console.log(result.css)
  6164. * })
  6165. */
  6166. ;
  6167. _proto.process = function (_process) {
  6168. function process(_x) {
  6169. return _process.apply(this, arguments);
  6170. }
  6171. process.toString = function () {
  6172. return _process.toString();
  6173. };
  6174. return process;
  6175. }(function (css, opts) {
  6176. if (opts === void 0) {
  6177. opts = {};
  6178. }
  6179. if (this.plugins.length === 0 && opts.parser === opts.stringifier) {
  6180. if (false) {}
  6181. }
  6182. return new _lazyResult.default(this, css, opts);
  6183. });
  6184. _proto.normalize = function normalize(plugins) {
  6185. var normalized = [];
  6186. for (var _iterator = _createForOfIteratorHelperLoose(plugins), _step; !(_step = _iterator()).done;) {
  6187. var i = _step.value;
  6188. if (i.postcss === true) {
  6189. var plugin = i();
  6190. throw new Error('PostCSS plugin ' + plugin.postcssPlugin + ' requires PostCSS 8.\n' + 'Migration guide for end-users:\n' + 'https://github.com/postcss/postcss/wiki/PostCSS-8-for-end-users');
  6191. }
  6192. if (i.postcss) i = i.postcss;
  6193. if (typeof i === 'object' && Array.isArray(i.plugins)) {
  6194. normalized = normalized.concat(i.plugins);
  6195. } else if (typeof i === 'function') {
  6196. normalized.push(i);
  6197. } else if (typeof i === 'object' && (i.parse || i.stringify)) {
  6198. if (false) {}
  6199. } else if (typeof i === 'object' && i.postcssPlugin) {
  6200. throw new Error('PostCSS plugin ' + i.postcssPlugin + ' requires PostCSS 8.\n' + 'Migration guide for end-users:\n' + 'https://github.com/postcss/postcss/wiki/PostCSS-8-for-end-users');
  6201. } else {
  6202. throw new Error(i + ' is not a PostCSS plugin');
  6203. }
  6204. }
  6205. return normalized;
  6206. };
  6207. return Processor;
  6208. }();
  6209. var _default = Processor;
  6210. /**
  6211. * @callback builder
  6212. * @param {string} part Part of generated CSS connected to this node.
  6213. * @param {Node} node AST node.
  6214. * @param {"start"|"end"} [type] Node’s part type.
  6215. */
  6216. /**
  6217. * @callback parser
  6218. *
  6219. * @param {string|toString} css String with input CSS or any object
  6220. * with toString() method, like a Buffer.
  6221. * @param {processOptions} [opts] Options with only `from` and `map` keys.
  6222. *
  6223. * @return {Root} PostCSS AST
  6224. */
  6225. /**
  6226. * @callback stringifier
  6227. *
  6228. * @param {Node} node Start node for stringifing. Usually {@link Root}.
  6229. * @param {builder} builder Function to concatenate CSS from node’s parts
  6230. * or generate string and source map.
  6231. *
  6232. * @return {void}
  6233. */
  6234. /**
  6235. * @typedef {object} syntax
  6236. * @property {parser} parse Function to generate AST by string.
  6237. * @property {stringifier} stringify Function to generate string by AST.
  6238. */
  6239. /**
  6240. * @typedef {object} toString
  6241. * @property {function} toString
  6242. */
  6243. /**
  6244. * @callback pluginFunction
  6245. * @param {Root} root Parsed input CSS.
  6246. * @param {Result} result Result to set warnings or check other plugins.
  6247. */
  6248. /**
  6249. * @typedef {object} Plugin
  6250. * @property {function} postcss PostCSS plugin function.
  6251. */
  6252. /**
  6253. * @typedef {object} processOptions
  6254. * @property {string} from The path of the CSS source file.
  6255. * You should always set `from`,
  6256. * because it is used in source map
  6257. * generation and syntax error messages.
  6258. * @property {string} to The path where you’ll put the output
  6259. * CSS file. You should always set `to`
  6260. * to generate correct source maps.
  6261. * @property {parser} parser Function to generate AST by string.
  6262. * @property {stringifier} stringifier Class to generate string by AST.
  6263. * @property {syntax} syntax Object with `parse` and `stringify`.
  6264. * @property {object} map Source map options.
  6265. * @property {boolean} map.inline Does source map should
  6266. * be embedded in the output
  6267. * CSS as a base64-encoded
  6268. * comment.
  6269. * @property {string|object|false|function} map.prev Source map content
  6270. * from a previous
  6271. * processing step
  6272. * (for example, Sass).
  6273. * PostCSS will try to find
  6274. * previous map automatically,
  6275. * so you could disable it by
  6276. * `false` value.
  6277. * @property {boolean} map.sourcesContent Does PostCSS should set
  6278. * the origin content to map.
  6279. * @property {string|false} map.annotation Does PostCSS should set
  6280. * annotation comment to map.
  6281. * @property {string} map.from Override `from` in map’s
  6282. * sources`.
  6283. */
  6284. exports.default = _default;
  6285. module.exports = exports.default;
  6286. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByb2Nlc3Nvci5lczYiXSwibmFtZXMiOlsiUHJvY2Vzc29yIiwicGx1Z2lucyIsInZlcnNpb24iLCJub3JtYWxpemUiLCJ1c2UiLCJwbHVnaW4iLCJjb25jYXQiLCJwcm9jZXNzIiwiY3NzIiwib3B0cyIsImxlbmd0aCIsInBhcnNlciIsInN0cmluZ2lmaWVyIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsIkxhenlSZXN1bHQiLCJub3JtYWxpemVkIiwiaSIsInBvc3Rjc3MiLCJFcnJvciIsInBvc3Rjc3NQbHVnaW4iLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwicGFyc2UiLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7QUFFQTs7Ozs7Ozs7O0lBU01BLFM7QUFDSjs7OztBQUlBLHFCQUFhQyxPQUFiLEVBQTJCO0FBQUEsUUFBZEEsT0FBYztBQUFkQSxNQUFBQSxPQUFjLEdBQUosRUFBSTtBQUFBOztBQUN6Qjs7Ozs7Ozs7OztBQVVBLFNBQUtDLE9BQUwsR0FBZSxRQUFmO0FBQ0E7Ozs7Ozs7Ozs7QUFTQSxTQUFLRCxPQUFMLEdBQWUsS0FBS0UsU0FBTCxDQUFlRixPQUFmLENBQWY7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0E2QkFHLEcsR0FBQSxhQUFLQyxNQUFMLEVBQWE7QUFDWCxTQUFLSixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhSyxNQUFiLENBQW9CLEtBQUtILFNBQUwsQ0FBZSxDQUFDRSxNQUFELENBQWYsQ0FBcEIsQ0FBZjtBQUNBLFdBQU8sSUFBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXNCQUUsTzs7Ozs7Ozs7OztJQUFBLFVBQVNDLEdBQVQsRUFBY0MsSUFBZCxFQUEwQjtBQUFBLFFBQVpBLElBQVk7QUFBWkEsTUFBQUEsSUFBWSxHQUFMLEVBQUs7QUFBQTs7QUFDeEIsUUFBSSxLQUFLUixPQUFMLENBQWFTLE1BQWIsS0FBd0IsQ0FBeEIsSUFBNkJELElBQUksQ0FBQ0UsTUFBTCxLQUFnQkYsSUFBSSxDQUFDRyxXQUF0RCxFQUFtRTtBQUNqRSxVQUFJTCxPQUFPLENBQUNNLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztBQUN6QyxZQUFJLE9BQU9DLE9BQVAsS0FBbUIsV0FBbkIsSUFBa0NBLE9BQU8sQ0FBQ0MsSUFBOUMsRUFBb0Q7QUFDbERELFVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUNFLDBEQUNBLDhEQURBLEdBRUEsa0VBSEY7QUFLRDtBQUNGO0FBQ0Y7O0FBQ0QsV0FBTyxJQUFJQyxtQkFBSixDQUFlLElBQWYsRUFBcUJULEdBQXJCLEVBQTBCQyxJQUExQixDQUFQO0FBQ0QsRzs7U0FFRE4sUyxHQUFBLG1CQUFXRixPQUFYLEVBQW9CO0FBQ2xCLFFBQUlpQixVQUFVLEdBQUcsRUFBakI7O0FBQ0EseURBQWNqQixPQUFkLHdDQUF1QjtBQUFBLFVBQWRrQixDQUFjOztBQUNyQixVQUFJQSxDQUFDLENBQUNDLE9BQUYsS0FBYyxJQUFsQixFQUF3QjtBQUN0QixZQUFJZixNQUFNLEdBQUdjLENBQUMsRUFBZDtBQUNBLGNBQU0sSUFBSUUsS0FBSixDQUNKLG9CQUFvQmhCLE1BQU0sQ0FBQ2lCLGFBQTNCLEdBQTJDLHdCQUEzQyxHQUNBLGtDQURBLEdBRUEsaUVBSEksQ0FBTjtBQUtEOztBQUVELFVBQUlILENBQUMsQ0FBQ0MsT0FBTixFQUFlRCxDQUFDLEdBQUdBLENBQUMsQ0FBQ0MsT0FBTjs7QUFFZixVQUFJLE9BQU9ELENBQVAsS0FBYSxRQUFiLElBQXlCSSxLQUFLLENBQUNDLE9BQU4sQ0FBY0wsQ0FBQyxDQUFDbEIsT0FBaEIsQ0FBN0IsRUFBdUQ7QUFDckRpQixRQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ1osTUFBWCxDQUFrQmEsQ0FBQyxDQUFDbEIsT0FBcEIsQ0FBYjtBQUNELE9BRkQsTUFFTyxJQUFJLE9BQU9rQixDQUFQLEtBQWEsVUFBakIsRUFBNkI7QUFDbENELFFBQUFBLFVBQVUsQ0FBQ08sSUFBWCxDQUFnQk4sQ0FBaEI7QUFDRCxPQUZNLE1BRUEsSUFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBYixLQUEwQkEsQ0FBQyxDQUFDTyxLQUFGLElBQVdQLENBQUMsQ0FBQ1EsU0FBdkMsQ0FBSixFQUF1RDtBQUM1RCxZQUFJcEIsT0FBTyxDQUFDTSxHQUFSLENBQVlDLFFBQVosS0FBeUIsWUFBN0IsRUFBMkM7QUFDekMsZ0JBQU0sSUFBSU8sS0FBSixDQUNKLHFFQUNBLDJEQURBLEdBRUEsdUNBSEksQ0FBTjtBQUtEO0FBQ0YsT0FSTSxNQVFBLElBQUksT0FBT0YsQ0FBUCxLQUFhLFFBQWIsSUFBeUJBLENBQUMsQ0FBQ0csYUFBL0IsRUFBOEM7QUFDbkQsY0FBTSxJQUFJRCxLQUFKLENBQ0osb0JBQW9CRixDQUFDLENBQUNHLGFBQXRCLEdBQXNDLHdCQUF0QyxHQUNBLGtDQURBLEdBRUEsaUVBSEksQ0FBTjtBQUtELE9BTk0sTUFNQTtBQUNMLGNBQU0sSUFBSUQsS0FBSixDQUFVRixDQUFDLEdBQUcsMEJBQWQsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT0QsVUFBUDtBQUNELEc7Ozs7O2VBR1lsQixTO0FBRWY7Ozs7Ozs7QUFPQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7O0FBVUE7Ozs7OztBQU1BOzs7OztBQUtBOzs7Ozs7QUFNQTs7Ozs7QUFLQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMYXp5UmVzdWx0IGZyb20gJy4vbGF6eS1yZXN1bHQnXG5cbi8qKlxuICogQ29udGFpbnMgcGx1Z2lucyB0byBwcm9jZXNzIENTUy4gQ3JlYXRlIG9uZSBgUHJvY2Vzc29yYCBpbnN0YW5jZSxcbiAqIGluaXRpYWxpemUgaXRzIHBsdWdpbnMsIGFuZCB0aGVuIHVzZSB0aGF0IGluc3RhbmNlIG9uIG51bWVyb3VzIENTUyBmaWxlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJvY2Vzc29yID0gcG9zdGNzcyhbYXV0b3ByZWZpeGVyLCBwcmVjc3NdKVxuICogcHJvY2Vzc29yLnByb2Nlc3MoY3NzMSkudGhlbihyZXN1bHQgPT4gY29uc29sZS5sb2cocmVzdWx0LmNzcykpXG4gKiBwcm9jZXNzb3IucHJvY2Vzcyhjc3MyKS50aGVuKHJlc3VsdCA9PiBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKSlcbiAqL1xuY2xhc3MgUHJvY2Vzc29yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPFBsdWdpbnxwbHVnaW5GdW5jdGlvbj58UHJvY2Vzc29yfSBwbHVnaW5zIFBvc3RDU1MgcGx1Z2lucy5cbiAgICogICAgICAgIFNlZSB7QGxpbmsgUHJvY2Vzc29yI3VzZX0gZm9yIHBsdWdpbiBmb3JtYXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAocGx1Z2lucyA9IFtdKSB7XG4gICAgLyoqXG4gICAgICogQ3VycmVudCBQb3N0Q1NTIHZlcnNpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBpZiAocmVzdWx0LnByb2Nlc3Nvci52ZXJzaW9uLnNwbGl0KCcuJylbMF0gIT09ICc2Jykge1xuICAgICAqICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHBsdWdpbiB3b3JrcyBvbmx5IHdpdGggUG9zdENTUyA2JylcbiAgICAgKiB9XG4gICAgICovXG4gICAgdGhpcy52ZXJzaW9uID0gJzcuMC4zOSdcbiAgICAvKipcbiAgICAgKiBQbHVnaW5zIGFkZGVkIHRvIHRoaXMgcHJvY2Vzc29yLlxuICAgICAqXG4gICAgICogQHR5cGUge3BsdWdpbkZ1bmN0aW9uW119XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHByb2Nlc3NvciA9IHBvc3Rjc3MoW2F1dG9wcmVmaXhlciwgcHJlY3NzXSlcbiAgICAgKiBwcm9jZXNzb3IucGx1Z2lucy5sZW5ndGggLy89PiAyXG4gICAgICovXG4gICAgdGhpcy5wbHVnaW5zID0gdGhpcy5ub3JtYWxpemUocGx1Z2lucylcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGx1Z2luIHRvIGJlIHVzZWQgYXMgYSBDU1MgcHJvY2Vzc29yLlxuICAgKlxuICAgKiBQb3N0Q1NTIHBsdWdpbiBjYW4gYmUgaW4gNCBmb3JtYXRzOlxuICAgKiAqIEEgcGx1Z2luIGNyZWF0ZWQgYnkge0BsaW5rIHBvc3Rjc3MucGx1Z2lufSBtZXRob2QuXG4gICAqICogQSBmdW5jdGlvbi4gUG9zdENTUyB3aWxsIHBhc3MgdGhlIGZ1bmN0aW9uIGEgQHtsaW5rIFJvb3R9XG4gICAqICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBjdXJyZW50IHtAbGluayBSZXN1bHR9IGluc3RhbmNlXG4gICAqICAgYXMgdGhlIHNlY29uZC5cbiAgICogKiBBbiBvYmplY3Qgd2l0aCBhIGBwb3N0Y3NzYCBtZXRob2QuIFBvc3RDU1Mgd2lsbCB1c2UgdGhhdCBtZXRob2RcbiAgICogICBhcyBkZXNjcmliZWQgaW4gIzIuXG4gICAqICogQW5vdGhlciB7QGxpbmsgUHJvY2Vzc29yfSBpbnN0YW5jZS4gUG9zdENTUyB3aWxsIGNvcHkgcGx1Z2luc1xuICAgKiAgIGZyb20gdGhhdCBpbnN0YW5jZSBpbnRvIHRoaXMgb25lLlxuICAgKlxuICAgKiBQbHVnaW5zIGNhbiBhbHNvIGJlIGFkZGVkIGJ5IHBhc3NpbmcgdGhlbSBhcyBhcmd1bWVudHMgd2hlbiBjcmVhdGluZ1xuICAgKiBhIGBwb3N0Y3NzYCBpbnN0YW5jZSAoc2VlIFtgcG9zdGNzcyhwbHVnaW5zKWBdKS5cbiAgICpcbiAgICogQXN5bmNocm9ub3VzIHBsdWdpbnMgc2hvdWxkIHJldHVybiBhIGBQcm9taXNlYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtQbHVnaW58cGx1Z2luRnVuY3Rpb258UHJvY2Vzc29yfSBwbHVnaW4gUG9zdENTUyBwbHVnaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ige0BsaW5rIFByb2Nlc3Nvcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwbHVnaW5zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBwcm9jZXNzb3IgPSBwb3N0Y3NzKClcbiAgICogICAudXNlKGF1dG9wcmVmaXhlcilcbiAgICogICAudXNlKHByZWNzcylcbiAgICpcbiAgICogQHJldHVybiB7UHJvY2Vzc2VzfSBDdXJyZW50IHByb2Nlc3NvciB0byBtYWtlIG1ldGhvZHMgY2hhaW4uXG4gICAqL1xuICB1c2UgKHBsdWdpbikge1xuICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucy5jb25jYXQodGhpcy5ub3JtYWxpemUoW3BsdWdpbl0pKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHNvdXJjZSBDU1MgYW5kIHJldHVybnMgYSB7QGxpbmsgTGF6eVJlc3VsdH0gUHJvbWlzZSBwcm94eS5cbiAgICogQmVjYXVzZSBzb21lIHBsdWdpbnMgY2FuIGJlIGFzeW5jaHJvbm91cyBpdCBkb2VzbuKAmXQgbWFrZVxuICAgKiBhbnkgdHJhbnNmb3JtYXRpb25zLiBUcmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSBhcHBsaWVkXG4gICAqIGluIHRoZSB7QGxpbmsgTGF6eVJlc3VsdH0gbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8dG9TdHJpbmd8UmVzdWx0fSBjc3MgU3RyaW5nIHdpdGggaW5wdXQgQ1NTIG9yIGFueSBvYmplY3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGB0b1N0cmluZygpYCBtZXRob2QsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYSBCdWZmZXIuIE9wdGlvbmFsbHksIHNlbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB7QGxpbmsgUmVzdWx0fSBpbnN0YW5jZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHByb2Nlc3NvciB3aWxsIHRha2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHtAbGluayBSb290fSBmcm9tIGl0LlxuICAgKiBAcGFyYW0ge3Byb2Nlc3NPcHRpb25zfSBbb3B0c10gICAgICBPcHRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtMYXp5UmVzdWx0fSBQcm9taXNlIHByb3h5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9jZXNzb3IucHJvY2Vzcyhjc3MsIHsgZnJvbTogJ2EuY3NzJywgdG86ICdhLm91dC5jc3MnIH0pXG4gICAqICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICogICAgICBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKVxuICAgKiAgIH0pXG4gICAqL1xuICBwcm9jZXNzIChjc3MsIG9wdHMgPSB7IH0pIHtcbiAgICBpZiAodGhpcy5wbHVnaW5zLmxlbmd0aCA9PT0gMCAmJiBvcHRzLnBhcnNlciA9PT0gb3B0cy5zdHJpbmdpZmllcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnWW91IGRpZCBub3Qgc2V0IGFueSBwbHVnaW5zLCBwYXJzZXIsIG9yIHN0cmluZ2lmaWVyLiAnICtcbiAgICAgICAgICAgICdSaWdodCBub3csIFBvc3RDU1MgZG9lcyBub3RoaW5nLiBQaWNrIHBsdWdpbnMgZm9yIHlvdXIgY2FzZSAnICtcbiAgICAgICAgICAgICdvbiBodHRwczovL3d3dy5wb3N0Y3NzLnBhcnRzLyBhbmQgdXNlIHRoZW0gaW4gcG9zdGNzcy5jb25maWcuanMuJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExhenlSZXN1bHQodGhpcywgY3NzLCBvcHRzKVxuICB9XG5cbiAgbm9ybWFsaXplIChwbHVnaW5zKSB7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBbXVxuICAgIGZvciAobGV0IGkgb2YgcGx1Z2lucykge1xuICAgICAgaWYgKGkucG9zdGNzcyA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgcGx1Z2luID0gaSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnUG9zdENTUyBwbHVnaW4gJyArIHBsdWdpbi5wb3N0Y3NzUGx1Z2luICsgJyByZXF1aXJlcyBQb3N0Q1NTIDguXFxuJyArXG4gICAgICAgICAgJ01pZ3JhdGlvbiBndWlkZSBmb3IgZW5kLXVzZXJzOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vcG9zdGNzcy9wb3N0Y3NzL3dpa2kvUG9zdENTUy04LWZvci1lbmQtdXNlcnMnXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKGkucG9zdGNzcykgaSA9IGkucG9zdGNzc1xuXG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoaS5wbHVnaW5zKSkge1xuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5jb25jYXQoaS5wbHVnaW5zKVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBub3JtYWxpemVkLnB1c2goaSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIChpLnBhcnNlIHx8IGkuc3RyaW5naWZ5KSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdQb3N0Q1NTIHN5bnRheGVzIGNhbm5vdCBiZSB1c2VkIGFzIHBsdWdpbnMuIEluc3RlYWQsIHBsZWFzZSB1c2UgJyArXG4gICAgICAgICAgICAnb25lIG9mIHRoZSBzeW50YXgvcGFyc2VyL3N0cmluZ2lmaWVyIG9wdGlvbnMgYXMgb3V0bGluZWQgJyArXG4gICAgICAgICAgICAnaW4geW91ciBQb3N0Q1NTIHJ1bm5lciBkb2N1bWVudGF0aW9uLidcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGkgPT09ICdvYmplY3QnICYmIGkucG9zdGNzc1BsdWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1Bvc3RDU1MgcGx1Z2luICcgKyBpLnBvc3Rjc3NQbHVnaW4gKyAnIHJlcXVpcmVzIFBvc3RDU1MgOC5cXG4nICtcbiAgICAgICAgICAnTWlncmF0aW9uIGd1aWRlIGZvciBlbmQtdXNlcnM6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Y3NzL3Bvc3Rjc3Mvd2lraS9Qb3N0Q1NTLTgtZm9yLWVuZC11c2VycydcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGkgKyAnIGlzIG5vdCBhIFBvc3RDU1MgcGx1Z2luJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9jZXNzb3JcblxuLyoqXG4gKiBAY2FsbGJhY2sgYnVpbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhcnQgICAgICAgICAgUGFydCBvZiBnZW5lcmF0ZWQgQ1NTIGNvbm5lY3RlZCB0byB0aGlzIG5vZGUuXG4gKiBAcGFyYW0ge05vZGV9ICAgbm9kZSAgICAgICAgICBBU1Qgbm9kZS5cbiAqIEBwYXJhbSB7XCJzdGFydFwifFwiZW5kXCJ9IFt0eXBlXSBOb2Rl4oCZcyBwYXJ0IHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgcGFyc2VyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8dG9TdHJpbmd9IGNzcyAgIFN0cmluZyB3aXRoIGlucHV0IENTUyBvciBhbnkgb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0b1N0cmluZygpIG1ldGhvZCwgbGlrZSBhIEJ1ZmZlci5cbiAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSBPcHRpb25zIHdpdGggb25seSBgZnJvbWAgYW5kIGBtYXBgIGtleXMuXG4gKlxuICogQHJldHVybiB7Um9vdH0gUG9zdENTUyBBU1RcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBzdHJpbmdpZmllclxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICAgICBTdGFydCBub2RlIGZvciBzdHJpbmdpZmluZy4gVXN1YWxseSB7QGxpbmsgUm9vdH0uXG4gKiBAcGFyYW0ge2J1aWxkZXJ9IGJ1aWxkZXIgRnVuY3Rpb24gdG8gY29uY2F0ZW5hdGUgQ1NTIGZyb20gbm9kZeKAmXMgcGFydHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBnZW5lcmF0ZSBzdHJpbmcgYW5kIHNvdXJjZSBtYXAuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHN5bnRheFxuICogQHByb3BlcnR5IHtwYXJzZXJ9IHBhcnNlICAgICAgICAgIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIEFTVCBieSBzdHJpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ2lmaWVyfSBzdHJpbmdpZnkgRnVuY3Rpb24gdG8gZ2VuZXJhdGUgc3RyaW5nIGJ5IEFTVC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHRvU3RyaW5nXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB0b1N0cmluZ1xuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIHBsdWdpbkZ1bmN0aW9uXG4gKiBAcGFyYW0ge1Jvb3R9IHJvb3QgICAgIFBhcnNlZCBpbnB1dCBDU1MuXG4gKiBAcGFyYW0ge1Jlc3VsdH0gcmVzdWx0IFJlc3VsdCB0byBzZXQgd2FybmluZ3Mgb3IgY2hlY2sgb3RoZXIgcGx1Z2lucy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBsdWdpblxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gcG9zdGNzcyBQb3N0Q1NTIHBsdWdpbiBmdW5jdGlvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHByb2Nlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZnJvbSAgICAgICAgICAgICBUaGUgcGF0aCBvZiB0aGUgQ1NTIHNvdXJjZSBmaWxlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc2V0IGBmcm9tYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBzb3VyY2UgbWFwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uIGFuZCBzeW50YXggZXJyb3IgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdG8gICAgICAgICAgICAgICBUaGUgcGF0aCB3aGVyZSB5b3XigJlsbCBwdXQgdGhlIG91dHB1dFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTIGZpbGUuIFlvdSBzaG91bGQgYWx3YXlzIHNldCBgdG9gXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZW5lcmF0ZSBjb3JyZWN0IHNvdXJjZSBtYXBzLlxuICogQHByb3BlcnR5IHtwYXJzZXJ9IHBhcnNlciAgICAgICAgICAgRnVuY3Rpb24gdG8gZ2VuZXJhdGUgQVNUIGJ5IHN0cmluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5naWZpZXJ9IHN0cmluZ2lmaWVyIENsYXNzIHRvIGdlbmVyYXRlIHN0cmluZyBieSBBU1QuXG4gKiBAcHJvcGVydHkge3N5bnRheH0gc3ludGF4ICAgICAgICAgICBPYmplY3Qgd2l0aCBgcGFyc2VgIGFuZCBgc3RyaW5naWZ5YC5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXAgICAgICAgICAgICAgIFNvdXJjZSBtYXAgb3B0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbWFwLmlubGluZSAgICAgICAgICAgICAgICAgICAgRG9lcyBzb3VyY2UgbWFwIHNob3VsZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBlbWJlZGRlZCBpbiB0aGUgb3V0cHV0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTUyBhcyBhIGJhc2U2NC1lbmNvZGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ3xvYmplY3R8ZmFsc2V8ZnVuY3Rpb259IG1hcC5wcmV2IFNvdXJjZSBtYXAgY29udGVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGEgcHJldmlvdXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBzdGVwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgZXhhbXBsZSwgU2FzcykuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3RDU1Mgd2lsbCB0cnkgdG8gZmluZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBtYXAgYXV0b21hdGljYWxseSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28geW91IGNvdWxkIGRpc2FibGUgaXQgYnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZhbHNlYCB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbWFwLnNvdXJjZXNDb250ZW50ICAgICAgICAgICAgRG9lcyBQb3N0Q1NTIHNob3VsZCBzZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbiBjb250ZW50IHRvIG1hcC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfGZhbHNlfSBtYXAuYW5ub3RhdGlvbiAgICAgICAgICAgRG9lcyBQb3N0Q1NTIHNob3VsZCBzZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbiBjb21tZW50IHRvIG1hcC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXAuZnJvbSAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgYGZyb21gIGluIG1hcOKAmXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlc2AuXG4gKi9cbiJdLCJmaWxlIjoicHJvY2Vzc29yLmpzIn0=
  6287. /***/ }),
  6288. /* 37 */
  6289. /***/ (function(module, exports, __webpack_require__) {
  6290. "use strict";
  6291. exports.__esModule = true;
  6292. exports.default = void 0;
  6293. var _mapGenerator = _interopRequireDefault(__webpack_require__(76));
  6294. var _stringify2 = _interopRequireDefault(__webpack_require__(17));
  6295. var _warnOnce = _interopRequireDefault(__webpack_require__(86));
  6296. var _result = _interopRequireDefault(__webpack_require__(87));
  6297. var _parse = _interopRequireDefault(__webpack_require__(18));
  6298. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  6299. function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
  6300. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  6301. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  6302. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  6303. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  6304. function isPromise(obj) {
  6305. return typeof obj === 'object' && typeof obj.then === 'function';
  6306. }
  6307. /**
  6308. * A Promise proxy for the result of PostCSS transformations.
  6309. *
  6310. * A `LazyResult` instance is returned by {@link Processor#process}.
  6311. *
  6312. * @example
  6313. * const lazy = postcss([autoprefixer]).process(css)
  6314. */
  6315. var LazyResult = /*#__PURE__*/function () {
  6316. function LazyResult(processor, css, opts) {
  6317. this.stringified = false;
  6318. this.processed = false;
  6319. var root;
  6320. if (typeof css === 'object' && css !== null && css.type === 'root') {
  6321. root = css;
  6322. } else if (css instanceof LazyResult || css instanceof _result.default) {
  6323. root = css.root;
  6324. if (css.map) {
  6325. if (typeof opts.map === 'undefined') opts.map = {};
  6326. if (!opts.map.inline) opts.map.inline = false;
  6327. opts.map.prev = css.map;
  6328. }
  6329. } else {
  6330. var parser = _parse.default;
  6331. if (opts.syntax) parser = opts.syntax.parse;
  6332. if (opts.parser) parser = opts.parser;
  6333. if (parser.parse) parser = parser.parse;
  6334. try {
  6335. root = parser(css, opts);
  6336. } catch (error) {
  6337. this.error = error;
  6338. }
  6339. }
  6340. this.result = new _result.default(processor, root, opts);
  6341. }
  6342. /**
  6343. * Returns a {@link Processor} instance, which will be used
  6344. * for CSS transformations.
  6345. *
  6346. * @type {Processor}
  6347. */
  6348. var _proto = LazyResult.prototype;
  6349. /**
  6350. * Processes input CSS through synchronous plugins
  6351. * and calls {@link Result#warnings()}.
  6352. *
  6353. * @return {Warning[]} Warnings from plugins.
  6354. */
  6355. _proto.warnings = function warnings() {
  6356. return this.sync().warnings();
  6357. }
  6358. /**
  6359. * Alias for the {@link LazyResult#css} property.
  6360. *
  6361. * @example
  6362. * lazy + '' === lazy.css
  6363. *
  6364. * @return {string} Output CSS.
  6365. */
  6366. ;
  6367. _proto.toString = function toString() {
  6368. return this.css;
  6369. }
  6370. /**
  6371. * Processes input CSS through synchronous and asynchronous plugins
  6372. * and calls `onFulfilled` with a Result instance. If a plugin throws
  6373. * an error, the `onRejected` callback will be executed.
  6374. *
  6375. * It implements standard Promise API.
  6376. *
  6377. * @param {onFulfilled} onFulfilled Callback will be executed
  6378. * when all plugins will finish work.
  6379. * @param {onRejected} onRejected Callback will be executed on any error.
  6380. *
  6381. * @return {Promise} Promise API to make queue.
  6382. *
  6383. * @example
  6384. * postcss([autoprefixer]).process(css, { from: cssPath }).then(result => {
  6385. * console.log(result.css)
  6386. * })
  6387. */
  6388. ;
  6389. _proto.then = function then(onFulfilled, onRejected) {
  6390. if (false) {}
  6391. return this.async().then(onFulfilled, onRejected);
  6392. }
  6393. /**
  6394. * Processes input CSS through synchronous and asynchronous plugins
  6395. * and calls onRejected for each error thrown in any plugin.
  6396. *
  6397. * It implements standard Promise API.
  6398. *
  6399. * @param {onRejected} onRejected Callback will be executed on any error.
  6400. *
  6401. * @return {Promise} Promise API to make queue.
  6402. *
  6403. * @example
  6404. * postcss([autoprefixer]).process(css).then(result => {
  6405. * console.log(result.css)
  6406. * }).catch(error => {
  6407. * console.error(error)
  6408. * })
  6409. */
  6410. ;
  6411. _proto.catch = function _catch(onRejected) {
  6412. return this.async().catch(onRejected);
  6413. }
  6414. /**
  6415. * Processes input CSS through synchronous and asynchronous plugins
  6416. * and calls onFinally on any error or when all plugins will finish work.
  6417. *
  6418. * It implements standard Promise API.
  6419. *
  6420. * @param {onFinally} onFinally Callback will be executed on any error or
  6421. * when all plugins will finish work.
  6422. *
  6423. * @return {Promise} Promise API to make queue.
  6424. *
  6425. * @example
  6426. * postcss([autoprefixer]).process(css).finally(() => {
  6427. * console.log('processing ended')
  6428. * })
  6429. */
  6430. ;
  6431. _proto.finally = function _finally(onFinally) {
  6432. return this.async().then(onFinally, onFinally);
  6433. };
  6434. _proto.handleError = function handleError(error, plugin) {
  6435. try {
  6436. this.error = error;
  6437. if (error.name === 'CssSyntaxError' && !error.plugin) {
  6438. error.plugin = plugin.postcssPlugin;
  6439. error.setMessage();
  6440. } else if (plugin.postcssVersion) {
  6441. if (false) { var b, a, runtimeVer, pluginVer, pluginName; }
  6442. }
  6443. } catch (err) {
  6444. if (console && console.error) console.error(err);
  6445. }
  6446. };
  6447. _proto.asyncTick = function asyncTick(resolve, reject) {
  6448. var _this = this;
  6449. if (this.plugin >= this.processor.plugins.length) {
  6450. this.processed = true;
  6451. return resolve();
  6452. }
  6453. try {
  6454. var plugin = this.processor.plugins[this.plugin];
  6455. var promise = this.run(plugin);
  6456. this.plugin += 1;
  6457. if (isPromise(promise)) {
  6458. promise.then(function () {
  6459. _this.asyncTick(resolve, reject);
  6460. }).catch(function (error) {
  6461. _this.handleError(error, plugin);
  6462. _this.processed = true;
  6463. reject(error);
  6464. });
  6465. } else {
  6466. this.asyncTick(resolve, reject);
  6467. }
  6468. } catch (error) {
  6469. this.processed = true;
  6470. reject(error);
  6471. }
  6472. };
  6473. _proto.async = function async() {
  6474. var _this2 = this;
  6475. if (this.processed) {
  6476. return new Promise(function (resolve, reject) {
  6477. if (_this2.error) {
  6478. reject(_this2.error);
  6479. } else {
  6480. resolve(_this2.stringify());
  6481. }
  6482. });
  6483. }
  6484. if (this.processing) {
  6485. return this.processing;
  6486. }
  6487. this.processing = new Promise(function (resolve, reject) {
  6488. if (_this2.error) return reject(_this2.error);
  6489. _this2.plugin = 0;
  6490. _this2.asyncTick(resolve, reject);
  6491. }).then(function () {
  6492. _this2.processed = true;
  6493. return _this2.stringify();
  6494. });
  6495. return this.processing;
  6496. };
  6497. _proto.sync = function sync() {
  6498. if (this.processed) return this.result;
  6499. this.processed = true;
  6500. if (this.processing) {
  6501. throw new Error('Use process(css).then(cb) to work with async plugins');
  6502. }
  6503. if (this.error) throw this.error;
  6504. for (var _iterator = _createForOfIteratorHelperLoose(this.result.processor.plugins), _step; !(_step = _iterator()).done;) {
  6505. var plugin = _step.value;
  6506. var promise = this.run(plugin);
  6507. if (isPromise(promise)) {
  6508. throw new Error('Use process(css).then(cb) to work with async plugins');
  6509. }
  6510. }
  6511. return this.result;
  6512. };
  6513. _proto.run = function run(plugin) {
  6514. this.result.lastPlugin = plugin;
  6515. try {
  6516. return plugin(this.result.root, this.result);
  6517. } catch (error) {
  6518. this.handleError(error, plugin);
  6519. throw error;
  6520. }
  6521. };
  6522. _proto.stringify = function stringify() {
  6523. if (this.stringified) return this.result;
  6524. this.stringified = true;
  6525. this.sync();
  6526. var opts = this.result.opts;
  6527. var str = _stringify2.default;
  6528. if (opts.syntax) str = opts.syntax.stringify;
  6529. if (opts.stringifier) str = opts.stringifier;
  6530. if (str.stringify) str = str.stringify;
  6531. var map = new _mapGenerator.default(str, this.result.root, this.result.opts);
  6532. var data = map.generate();
  6533. this.result.css = data[0];
  6534. this.result.map = data[1];
  6535. return this.result;
  6536. };
  6537. _createClass(LazyResult, [{
  6538. key: "processor",
  6539. get: function get() {
  6540. return this.result.processor;
  6541. }
  6542. /**
  6543. * Options from the {@link Processor#process} call.
  6544. *
  6545. * @type {processOptions}
  6546. */
  6547. }, {
  6548. key: "opts",
  6549. get: function get() {
  6550. return this.result.opts;
  6551. }
  6552. /**
  6553. * Processes input CSS through synchronous plugins, converts `Root`
  6554. * to a CSS string and returns {@link Result#css}.
  6555. *
  6556. * This property will only work with synchronous plugins.
  6557. * If the processor contains any asynchronous plugins
  6558. * it will throw an error. This is why this method is only
  6559. * for debug purpose, you should always use {@link LazyResult#then}.
  6560. *
  6561. * @type {string}
  6562. * @see Result#css
  6563. */
  6564. }, {
  6565. key: "css",
  6566. get: function get() {
  6567. return this.stringify().css;
  6568. }
  6569. /**
  6570. * An alias for the `css` property. Use it with syntaxes
  6571. * that generate non-CSS output.
  6572. *
  6573. * This property will only work with synchronous plugins.
  6574. * If the processor contains any asynchronous plugins
  6575. * it will throw an error. This is why this method is only
  6576. * for debug purpose, you should always use {@link LazyResult#then}.
  6577. *
  6578. * @type {string}
  6579. * @see Result#content
  6580. */
  6581. }, {
  6582. key: "content",
  6583. get: function get() {
  6584. return this.stringify().content;
  6585. }
  6586. /**
  6587. * Processes input CSS through synchronous plugins
  6588. * and returns {@link Result#map}.
  6589. *
  6590. * This property will only work with synchronous plugins.
  6591. * If the processor contains any asynchronous plugins
  6592. * it will throw an error. This is why this method is only
  6593. * for debug purpose, you should always use {@link LazyResult#then}.
  6594. *
  6595. * @type {SourceMapGenerator}
  6596. * @see Result#map
  6597. */
  6598. }, {
  6599. key: "map",
  6600. get: function get() {
  6601. return this.stringify().map;
  6602. }
  6603. /**
  6604. * Processes input CSS through synchronous plugins
  6605. * and returns {@link Result#root}.
  6606. *
  6607. * This property will only work with synchronous plugins. If the processor
  6608. * contains any asynchronous plugins it will throw an error.
  6609. *
  6610. * This is why this method is only for debug purpose,
  6611. * you should always use {@link LazyResult#then}.
  6612. *
  6613. * @type {Root}
  6614. * @see Result#root
  6615. */
  6616. }, {
  6617. key: "root",
  6618. get: function get() {
  6619. return this.sync().root;
  6620. }
  6621. /**
  6622. * Processes input CSS through synchronous plugins
  6623. * and returns {@link Result#messages}.
  6624. *
  6625. * This property will only work with synchronous plugins. If the processor
  6626. * contains any asynchronous plugins it will throw an error.
  6627. *
  6628. * This is why this method is only for debug purpose,
  6629. * you should always use {@link LazyResult#then}.
  6630. *
  6631. * @type {Message[]}
  6632. * @see Result#messages
  6633. */
  6634. }, {
  6635. key: "messages",
  6636. get: function get() {
  6637. return this.sync().messages;
  6638. }
  6639. }]);
  6640. return LazyResult;
  6641. }();
  6642. var _default = LazyResult;
  6643. /**
  6644. * @callback onFulfilled
  6645. * @param {Result} result
  6646. */
  6647. /**
  6648. * @callback onRejected
  6649. * @param {Error} error
  6650. */
  6651. exports.default = _default;
  6652. module.exports = exports.default;
  6653. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxhenktcmVzdWx0LmVzNiJdLCJuYW1lcyI6WyJpc1Byb21pc2UiLCJvYmoiLCJ0aGVuIiwiTGF6eVJlc3VsdCIsInByb2Nlc3NvciIsImNzcyIsIm9wdHMiLCJzdHJpbmdpZmllZCIsInByb2Nlc3NlZCIsInJvb3QiLCJ0eXBlIiwiUmVzdWx0IiwibWFwIiwiaW5saW5lIiwicHJldiIsInBhcnNlciIsInBhcnNlIiwic3ludGF4IiwiZXJyb3IiLCJyZXN1bHQiLCJ3YXJuaW5ncyIsInN5bmMiLCJ0b1N0cmluZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImFzeW5jIiwiY2F0Y2giLCJmaW5hbGx5Iiwib25GaW5hbGx5IiwiaGFuZGxlRXJyb3IiLCJwbHVnaW4iLCJuYW1lIiwicG9zdGNzc1BsdWdpbiIsInNldE1lc3NhZ2UiLCJwb3N0Y3NzVmVyc2lvbiIsInBsdWdpbk5hbWUiLCJwbHVnaW5WZXIiLCJydW50aW1lVmVyIiwidmVyc2lvbiIsImEiLCJzcGxpdCIsImIiLCJwYXJzZUludCIsImNvbnNvbGUiLCJlcnIiLCJhc3luY1RpY2siLCJyZXNvbHZlIiwicmVqZWN0IiwicGx1Z2lucyIsImxlbmd0aCIsInByb21pc2UiLCJydW4iLCJQcm9taXNlIiwic3RyaW5naWZ5IiwicHJvY2Vzc2luZyIsIkVycm9yIiwibGFzdFBsdWdpbiIsInN0ciIsInN0cmluZ2lmaWVyIiwiTWFwR2VuZXJhdG9yIiwiZGF0YSIsImdlbmVyYXRlIiwiY29udGVudCIsIm1lc3NhZ2VzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLFNBQVQsQ0FBb0JDLEdBQXBCLEVBQXlCO0FBQ3ZCLFNBQU8sT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkIsT0FBT0EsR0FBRyxDQUFDQyxJQUFYLEtBQW9CLFVBQXREO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztJ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SUFBSWtELHFCQUFKLENBQWlCRixHQUFqQixFQUFzQixLQUFLekMsTUFBTCxDQUFZVixJQUFsQyxFQUF3QyxLQUFLVSxNQUFMLENBQVliLElBQXBELENBQVY7QUFDQSxRQUFJeUQsSUFBSSxHQUFHbkQsR0FBRyxDQUFDb0QsUUFBSixFQUFYO0FBQ0EsU0FBSzdDLE1BQUwsQ0FBWWQsR0FBWixHQUFrQjBELElBQUksQ0FBQyxDQUFELENBQXRCO0FBQ0EsU0FBSzVDLE1BQUwsQ0FBWVAsR0FBWixHQUFrQm1ELElBQUksQ0FBQyxDQUFELENBQXRCO0FBRUEsV0FBTyxLQUFLNUMsTUFBWjtBQUNELEc7Ozs7d0JBalVnQjtBQUNmLGFBQU8sS0FBS0EsTUFBTCxDQUFZZixTQUFuQjtBQUNEO0FBRUQ7Ozs7Ozs7O3dCQUtZO0FBQ1YsYUFBTyxLQUFLZSxNQUFMLENBQVliLElBQW5CO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O3dCQVlXO0FBQ1QsYUFBTyxLQUFLa0QsU0FBTCxHQUFpQm5ELEdBQXhCO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O3dCQVllO0FBQ2IsYUFBTyxLQUFLbUQsU0FBTCxHQUFpQlMsT0FBeEI7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7d0JBWVc7QUFDVCxhQUFPLEtBQUtULFNBQUwsR0FBaUI1QyxHQUF4QjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBYVk7QUFDVixhQUFPLEtBQUtTLElBQUwsR0FBWVosSUFBbkI7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O3dCQWFnQjtBQUNkLGFBQU8sS0FBS1ksSUFBTCxHQUFZNkMsUUFBbkI7QUFDRDs7Ozs7O2VBdU9ZL0QsVTtBQUVmOzs7OztBQUtBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hcEdlbmVyYXRvciBmcm9tICcuL21hcC1nZW5lcmF0b3InXG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJy4vc3RyaW5naWZ5J1xuaW1wb3J0IHdhcm5PbmNlIGZyb20gJy4vd2Fybi1vbmNlJ1xuaW1wb3J0IFJlc3VsdCBmcm9tICcuL3Jlc3VsdCdcbmltcG9ydCBwYXJzZSBmcm9tICcuL3BhcnNlJ1xuXG5mdW5jdGlvbiBpc1Byb21pc2UgKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nXG59XG5cbi8qKlxuICogQSBQcm9taXNlIHByb3h5IGZvciB0aGUgcmVzdWx0IG9mIFBvc3RDU1MgdHJhbnNmb3JtYXRpb25zLlxuICpcbiAqIEEgYExhenlSZXN1bHRgIGluc3RhbmNlIGlzIHJldHVybmVkIGJ5IHtAbGluayBQcm9jZXNzb3IjcHJvY2Vzc30uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGxhenkgPSBwb3N0Y3NzKFthdXRvcHJlZml4ZXJdKS5wcm9jZXNzKGNzcylcbiAqL1xuY2xhc3MgTGF6eVJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yIChwcm9jZXNzb3IsIGNzcywgb3B0cykge1xuICAgIHRoaXMuc3RyaW5naWZpZWQgPSBmYWxzZVxuICAgIHRoaXMucHJvY2Vzc2VkID0gZmFsc2VcblxuICAgIGxldCByb290XG4gICAgaWYgKHR5cGVvZiBjc3MgPT09ICdvYmplY3QnICYmIGNzcyAhPT0gbnVsbCAmJiBjc3MudHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICByb290ID0gY3NzXG4gICAgfSBlbHNlIGlmIChjc3MgaW5zdGFuY2VvZiBMYXp5UmVzdWx0IHx8IGNzcyBpbnN0YW5jZW9mIFJlc3VsdCkge1xuICAgICAgcm9vdCA9IGNzcy5yb290XG4gICAgICBpZiAoY3NzLm1hcCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubWFwID09PSAndW5kZWZpbmVkJykgb3B0cy5tYXAgPSB7IH1cbiAgICAgICAgaWYgKCFvcHRzLm1hcC5pbmxpbmUpIG9wdHMubWFwLmlubGluZSA9IGZhbHNlXG4gICAgICAgIG9wdHMubWFwLnByZXYgPSBjc3MubWFwXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXJzZXIgPSBwYXJzZVxuICAgICAgaWYgKG9wdHMuc3ludGF4KSBwYXJzZXIgPSBvcHRzLnN5bnRheC5wYXJzZVxuICAgICAgaWYgKG9wdHMucGFyc2VyKSBwYXJzZXIgPSBvcHRzLnBhcnNlclxuICAgICAgaWYgKHBhcnNlci5wYXJzZSkgcGFyc2VyID0gcGFyc2VyLnBhcnNlXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3QgPSBwYXJzZXIoY3NzLCBvcHRzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHQgPSBuZXcgUmVzdWx0KHByb2Nlc3Nvciwgcm9vdCwgb3B0cylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIFByb2Nlc3Nvcn0gaW5zdGFuY2UsIHdoaWNoIHdpbGwgYmUgdXNlZFxuICAgKiBmb3IgQ1NTIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge1Byb2Nlc3Nvcn1cbiAgICovXG4gIGdldCBwcm9jZXNzb3IgKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdC5wcm9jZXNzb3JcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZyb20gdGhlIHtAbGluayBQcm9jZXNzb3IjcHJvY2Vzc30gY2FsbC5cbiAgICpcbiAgICogQHR5cGUge3Byb2Nlc3NPcHRpb25zfVxuICAgKi9cbiAgZ2V0IG9wdHMgKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdC5vcHRzXG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIHBsdWdpbnMsIGNvbnZlcnRzIGBSb290YFxuICAgKiB0byBhIENTUyBzdHJpbmcgYW5kIHJldHVybnMge0BsaW5rIFJlc3VsdCNjc3N9LlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSB3b3JrIHdpdGggc3luY2hyb25vdXMgcGx1Z2lucy5cbiAgICogSWYgdGhlIHByb2Nlc3NvciBjb250YWlucyBhbnkgYXN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICogaXQgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seVxuICAgKiBmb3IgZGVidWcgcHVycG9zZSwgeW91IHNob3VsZCBhbHdheXMgdXNlIHtAbGluayBMYXp5UmVzdWx0I3RoZW59LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAc2VlIFJlc3VsdCNjc3NcbiAgICovXG4gIGdldCBjc3MgKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeSgpLmNzc1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFsaWFzIGZvciB0aGUgYGNzc2AgcHJvcGVydHkuIFVzZSBpdCB3aXRoIHN5bnRheGVzXG4gICAqIHRoYXQgZ2VuZXJhdGUgbm9uLUNTUyBvdXRwdXQuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IHdvcmsgd2l0aCBzeW5jaHJvbm91cyBwbHVnaW5zLlxuICAgKiBJZiB0aGUgcHJvY2Vzc29yIGNvbnRhaW5zIGFueSBhc3luY2hyb25vdXMgcGx1Z2luc1xuICAgKiBpdCB3aWxsIHRocm93IGFuIGVycm9yLiBUaGlzIGlzIHdoeSB0aGlzIG1ldGhvZCBpcyBvbmx5XG4gICAqIGZvciBkZWJ1ZyBwdXJwb3NlLCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBzZWUgUmVzdWx0I2NvbnRlbnRcbiAgICovXG4gIGdldCBjb250ZW50ICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jb250ZW50XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICogYW5kIHJldHVybnMge0BsaW5rIFJlc3VsdCNtYXB9LlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSB3b3JrIHdpdGggc3luY2hyb25vdXMgcGx1Z2lucy5cbiAgICogSWYgdGhlIHByb2Nlc3NvciBjb250YWlucyBhbnkgYXN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICogaXQgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seVxuICAgKiBmb3IgZGVidWcgcHVycG9zZSwgeW91IHNob3VsZCBhbHdheXMgdXNlIHtAbGluayBMYXp5UmVzdWx0I3RoZW59LlxuICAgKlxuICAgKiBAdHlwZSB7U291cmNlTWFwR2VuZXJhdG9yfVxuICAgKiBAc2VlIFJlc3VsdCNtYXBcbiAgICovXG4gIGdldCBtYXAgKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeSgpLm1hcFxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBpbnB1dCBDU1MgdGhyb3VnaCBzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAqIGFuZCByZXR1cm5zIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IHdvcmsgd2l0aCBzeW5jaHJvbm91cyBwbHVnaW5zLiBJZiB0aGUgcHJvY2Vzc29yXG4gICAqIGNvbnRhaW5zIGFueSBhc3luY2hyb25vdXMgcGx1Z2lucyBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBUaGlzIGlzIHdoeSB0aGlzIG1ldGhvZCBpcyBvbmx5IGZvciBkZWJ1ZyBwdXJwb3NlLFxuICAgKiB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAqXG4gICAqIEB0eXBlIHtSb290fVxuICAgKiBAc2VlIFJlc3VsdCNyb290XG4gICAqL1xuICBnZXQgcm9vdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3luYygpLnJvb3RcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgaW5wdXQgQ1NTIHRocm91Z2ggc3luY2hyb25vdXMgcGx1Z2luc1xuICAgKiBhbmQgcmV0dXJucyB7QGxpbmsgUmVzdWx0I21lc3NhZ2VzfS5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgd29yayB3aXRoIHN5bmNocm9ub3VzIHBsdWdpbnMuIElmIHRoZSBwcm9jZXNzb3JcbiAgICogY29udGFpbnMgYW55IGFzeW5jaHJvbm91cyBwbHVnaW5zIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIFRoaXMgaXMgd2h5IHRoaXMgbWV0aG9kIGlzIG9ubHkgZm9yIGRlYnVnIHB1cnBvc2UsXG4gICAqIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB7QGxpbmsgTGF6eVJlc3VsdCN0aGVufS5cbiAgICpcbiAgICogQHR5cGUge01lc3NhZ2VbXX1cbiAgICogQHNlZSBSZXN1bHQjbWVzc2FnZXNcbiAgICovXG4gIGdldCBtZXNzYWdlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3luYygpLm1lc3NhZ2VzXG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICogYW5kIGNhbGxzIHtAbGluayBSZXN1bHQjd2FybmluZ3MoKX0uXG4gICAqXG4gICAqIEByZXR1cm4ge1dhcm5pbmdbXX0gV2FybmluZ3MgZnJvbSBwbHVnaW5zLlxuICAgKi9cbiAgd2FybmluZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLnN5bmMoKS53YXJuaW5ncygpXG4gIH1cblxuICAvKipcbiAgICogQWxpYXMgZm9yIHRoZSB7QGxpbmsgTGF6eVJlc3VsdCNjc3N9IHByb3BlcnR5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBsYXp5ICsgJycgPT09IGxhenkuY3NzXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gT3V0cHV0IENTUy5cbiAgICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5jc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgaW5wdXQgQ1NTIHRocm91Z2ggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAqIGFuZCBjYWxscyBgb25GdWxmaWxsZWRgIHdpdGggYSBSZXN1bHQgaW5zdGFuY2UuIElmIGEgcGx1Z2luIHRocm93c1xuICAgKiBhbiBlcnJvciwgdGhlIGBvblJlamVjdGVkYCBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBJdCBpbXBsZW1lbnRzIHN0YW5kYXJkIFByb21pc2UgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge29uRnVsZmlsbGVkfSBvbkZ1bGZpbGxlZCBDYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYWxsIHBsdWdpbnMgd2lsbCBmaW5pc2ggd29yay5cbiAgICogQHBhcmFtIHtvblJlamVjdGVkfSAgb25SZWplY3RlZCAgQ2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBvbiBhbnkgZXJyb3IuXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IFByb21pc2UgQVBJIHRvIG1ha2UgcXVldWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHBvc3Rjc3MoW2F1dG9wcmVmaXhlcl0pLnByb2Nlc3MoY3NzLCB7IGZyb206IGNzc1BhdGggfSkudGhlbihyZXN1bHQgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKHJlc3VsdC5jc3MpXG4gICAqIH0pXG4gICAqL1xuICB0aGVuIChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoISgnZnJvbScgaW4gdGhpcy5vcHRzKSkge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAnV2l0aG91dCBgZnJvbWAgb3B0aW9uIFBvc3RDU1MgY291bGQgZ2VuZXJhdGUgd3Jvbmcgc291cmNlIG1hcCAnICtcbiAgICAgICAgICAnYW5kIHdpbGwgbm90IGZpbmQgQnJvd3NlcnNsaXN0IGNvbmZpZy4gU2V0IGl0IHRvIENTUyBmaWxlIHBhdGggJyArXG4gICAgICAgICAgJ29yIHRvIGB1bmRlZmluZWRgIHRvIHByZXZlbnQgdGhpcyB3YXJuaW5nLidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3luYygpLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGx1Z2luc1xuICAgKiBhbmQgY2FsbHMgb25SZWplY3RlZCBmb3IgZWFjaCBlcnJvciB0aHJvd24gaW4gYW55IHBsdWdpbi5cbiAgICpcbiAgICogSXQgaW1wbGVtZW50cyBzdGFuZGFyZCBQcm9taXNlIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtvblJlamVjdGVkfSBvblJlamVjdGVkIENhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb24gYW55IGVycm9yLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBQcm9taXNlIEFQSSB0byBtYWtlIHF1ZXVlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwb3N0Y3NzKFthdXRvcHJlZml4ZXJdKS5wcm9jZXNzKGNzcykudGhlbihyZXN1bHQgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKHJlc3VsdC5jc3MpXG4gICAqIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICogICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgKiB9KVxuICAgKi9cbiAgY2F0Y2ggKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luYygpLmNhdGNoKG9uUmVqZWN0ZWQpXG4gIH1cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBpbnB1dCBDU1MgdGhyb3VnaCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICogYW5kIGNhbGxzIG9uRmluYWxseSBvbiBhbnkgZXJyb3Igb3Igd2hlbiBhbGwgcGx1Z2lucyB3aWxsIGZpbmlzaCB3b3JrLlxuICAgKlxuICAgKiBJdCBpbXBsZW1lbnRzIHN0YW5kYXJkIFByb21pc2UgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge29uRmluYWxseX0gb25GaW5hbGx5IENhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb24gYW55IGVycm9yIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBhbGwgcGx1Z2lucyB3aWxsIGZpbmlzaCB3b3JrLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBQcm9taXNlIEFQSSB0byBtYWtlIHF1ZXVlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwb3N0Y3NzKFthdXRvcHJlZml4ZXJdKS5wcm9jZXNzKGNzcykuZmluYWxseSgoKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ3Byb2Nlc3NpbmcgZW5kZWQnKVxuICAgKiB9KVxuICAgKi9cbiAgZmluYWxseSAob25GaW5hbGx5KSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKG9uRmluYWxseSwgb25GaW5hbGx5KVxuICB9XG5cbiAgaGFuZGxlRXJyb3IgKGVycm9yLCBwbHVnaW4pIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Nzc1N5bnRheEVycm9yJyAmJiAhZXJyb3IucGx1Z2luKSB7XG4gICAgICAgIGVycm9yLnBsdWdpbiA9IHBsdWdpbi5wb3N0Y3NzUGx1Z2luXG4gICAgICAgIGVycm9yLnNldE1lc3NhZ2UoKVxuICAgICAgfSBlbHNlIGlmIChwbHVnaW4ucG9zdGNzc1ZlcnNpb24pIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBsZXQgcGx1Z2luTmFtZSA9IHBsdWdpbi5wb3N0Y3NzUGx1Z2luXG4gICAgICAgICAgbGV0IHBsdWdpblZlciA9IHBsdWdpbi5wb3N0Y3NzVmVyc2lvblxuICAgICAgICAgIGxldCBydW50aW1lVmVyID0gdGhpcy5yZXN1bHQucHJvY2Vzc29yLnZlcnNpb25cbiAgICAgICAgICBsZXQgYSA9IHBsdWdpblZlci5zcGxpdCgnLicpXG4gICAgICAgICAgbGV0IGIgPSBydW50aW1lVmVyLnNwbGl0KCcuJylcblxuICAgICAgICAgIGlmIChhWzBdICE9PSBiWzBdIHx8IHBhcnNlSW50KGFbMV0pID4gcGFyc2VJbnQoYlsxXSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdVbmtub3duIGVycm9yIGZyb20gUG9zdENTUyBwbHVnaW4uIFlvdXIgY3VycmVudCBQb3N0Q1NTICcgK1xuICAgICAgICAgICAgICAndmVyc2lvbiBpcyAnICsgcnVudGltZVZlciArICcsIGJ1dCAnICsgcGx1Z2luTmFtZSArICcgdXNlcyAnICtcbiAgICAgICAgICAgICAgcGx1Z2luVmVyICsgJy4gUGVyaGFwcyB0aGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yIGJlbG93LidcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jVGljayAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHRoaXMucGx1Z2luID49IHRoaXMucHJvY2Vzc29yLnBsdWdpbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnByb2Nlc3NlZCA9IHRydWVcbiAgICAgIHJldHVybiByZXNvbHZlKClcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBsdWdpbiA9IHRoaXMucHJvY2Vzc29yLnBsdWdpbnNbdGhpcy5wbHVnaW5dXG4gICAgICBsZXQgcHJvbWlzZSA9IHRoaXMucnVuKHBsdWdpbilcbiAgICAgIHRoaXMucGx1Z2luICs9IDFcblxuICAgICAgaWYgKGlzUHJvbWlzZShwcm9taXNlKSkge1xuICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXN5bmNUaWNrKHJlc29sdmUsIHJlamVjdClcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIHBsdWdpbilcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZCA9IHRydWVcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzeW5jVGljayhyZXNvbHZlLCByZWplY3QpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkID0gdHJ1ZVxuICAgICAgcmVqZWN0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jICgpIHtcbiAgICBpZiAodGhpcy5wcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHRoaXMuZXJyb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLnN0cmluZ2lmeSgpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nXG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzaW5nID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXJyb3IpIHJldHVybiByZWplY3QodGhpcy5lcnJvcilcbiAgICAgIHRoaXMucGx1Z2luID0gMFxuICAgICAgdGhpcy5hc3luY1RpY2socmVzb2x2ZSwgcmVqZWN0KVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nXG4gIH1cblxuICBzeW5jICgpIHtcbiAgICBpZiAodGhpcy5wcm9jZXNzZWQpIHJldHVybiB0aGlzLnJlc3VsdFxuICAgIHRoaXMucHJvY2Vzc2VkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVXNlIHByb2Nlc3MoY3NzKS50aGVuKGNiKSB0byB3b3JrIHdpdGggYXN5bmMgcGx1Z2lucycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHRocm93IHRoaXMuZXJyb3JcblxuICAgIGZvciAobGV0IHBsdWdpbiBvZiB0aGlzLnJlc3VsdC5wcm9jZXNzb3IucGx1Z2lucykge1xuICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnJ1bihwbHVnaW4pXG4gICAgICBpZiAoaXNQcm9taXNlKHByb21pc2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVXNlIHByb2Nlc3MoY3NzKS50aGVuKGNiKSB0byB3b3JrIHdpdGggYXN5bmMgcGx1Z2lucycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0XG4gIH1cblxuICBydW4gKHBsdWdpbikge1xuICAgIHRoaXMucmVzdWx0Lmxhc3RQbHVnaW4gPSBwbHVnaW5cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGx1Z2luKHRoaXMucmVzdWx0LnJvb3QsIHRoaXMucmVzdWx0KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCBwbHVnaW4pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHN0cmluZ2lmeSAoKSB7XG4gICAgaWYgKHRoaXMuc3RyaW5naWZpZWQpIHJldHVybiB0aGlzLnJlc3VsdFxuICAgIHRoaXMuc3RyaW5naWZpZWQgPSB0cnVlXG5cbiAgICB0aGlzLnN5bmMoKVxuXG4gICAgbGV0IG9wdHMgPSB0aGlzLnJlc3VsdC5vcHRzXG4gICAgbGV0IHN0ciA9IHN0cmluZ2lmeVxuICAgIGlmIChvcHRzLnN5bnRheCkgc3RyID0gb3B0cy5zeW50YXguc3RyaW5naWZ5XG4gICAgaWYgKG9wdHMuc3RyaW5naWZpZXIpIHN0ciA9IG9wdHMuc3RyaW5naWZpZXJcbiAgICBpZiAoc3RyLnN0cmluZ2lmeSkgc3RyID0gc3RyLnN0cmluZ2lmeVxuXG4gICAgbGV0IG1hcCA9IG5ldyBNYXBHZW5lcmF0b3Ioc3RyLCB0aGlzLnJlc3VsdC5yb290LCB0aGlzLnJlc3VsdC5vcHRzKVxuICAgIGxldCBkYXRhID0gbWFwLmdlbmVyYXRlKClcbiAgICB0aGlzLnJlc3VsdC5jc3MgPSBkYXRhWzBdXG4gICAgdGhpcy5yZXN1bHQubWFwID0gZGF0YVsxXVxuXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF6eVJlc3VsdFxuXG4vKipcbiAqIEBjYWxsYmFjayBvbkZ1bGZpbGxlZFxuICogQHBhcmFtIHtSZXN1bHR9IHJlc3VsdFxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uUmVqZWN0ZWRcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gKi9cbiJdLCJmaWxlIjoibGF6eS1yZXN1bHQuanMifQ==
  6654. /***/ }),
  6655. /* 38 */
  6656. /***/ (function(module, exports, __webpack_require__) {
  6657. "use strict";
  6658. /* WEBPACK VAR INJECTION */(function(global) {/*!
  6659. * The buffer module from node.js, for the browser.
  6660. *
  6661. * @author Feross Aboukhadijeh <http://feross.org>
  6662. * @license MIT
  6663. */
  6664. /* eslint-disable no-proto */
  6665. var base64 = __webpack_require__(77)
  6666. var ieee754 = __webpack_require__(78)
  6667. var isArray = __webpack_require__(79)
  6668. exports.Buffer = Buffer
  6669. exports.SlowBuffer = SlowBuffer
  6670. exports.INSPECT_MAX_BYTES = 50
  6671. /**
  6672. * If `Buffer.TYPED_ARRAY_SUPPORT`:
  6673. * === true Use Uint8Array implementation (fastest)
  6674. * === false Use Object implementation (most compatible, even IE6)
  6675. *
  6676. * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
  6677. * Opera 11.6+, iOS 4.2+.
  6678. *
  6679. * Due to various browser bugs, sometimes the Object implementation will be used even
  6680. * when the browser supports typed arrays.
  6681. *
  6682. * Note:
  6683. *
  6684. * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
  6685. * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
  6686. *
  6687. * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
  6688. *
  6689. * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
  6690. * incorrect length in some situations.
  6691. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
  6692. * get the Object implementation, which is slower but behaves correctly.
  6693. */
  6694. Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
  6695. ? global.TYPED_ARRAY_SUPPORT
  6696. : typedArraySupport()
  6697. /*
  6698. * Export kMaxLength after typed array support is determined.
  6699. */
  6700. exports.kMaxLength = kMaxLength()
  6701. function typedArraySupport () {
  6702. try {
  6703. var arr = new Uint8Array(1)
  6704. arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
  6705. return arr.foo() === 42 && // typed array instances can be augmented
  6706. typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
  6707. arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
  6708. } catch (e) {
  6709. return false
  6710. }
  6711. }
  6712. function kMaxLength () {
  6713. return Buffer.TYPED_ARRAY_SUPPORT
  6714. ? 0x7fffffff
  6715. : 0x3fffffff
  6716. }
  6717. function createBuffer (that, length) {
  6718. if (kMaxLength() < length) {
  6719. throw new RangeError('Invalid typed array length')
  6720. }
  6721. if (Buffer.TYPED_ARRAY_SUPPORT) {
  6722. // Return an augmented `Uint8Array` instance, for best performance
  6723. that = new Uint8Array(length)
  6724. that.__proto__ = Buffer.prototype
  6725. } else {
  6726. // Fallback: Return an object instance of the Buffer class
  6727. if (that === null) {
  6728. that = new Buffer(length)
  6729. }
  6730. that.length = length
  6731. }
  6732. return that
  6733. }
  6734. /**
  6735. * The Buffer constructor returns instances of `Uint8Array` that have their
  6736. * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
  6737. * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
  6738. * and the `Uint8Array` methods. Square bracket notation works as expected -- it
  6739. * returns a single octet.
  6740. *
  6741. * The `Uint8Array` prototype remains unmodified.
  6742. */
  6743. function Buffer (arg, encodingOrOffset, length) {
  6744. if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
  6745. return new Buffer(arg, encodingOrOffset, length)
  6746. }
  6747. // Common case.
  6748. if (typeof arg === 'number') {
  6749. if (typeof encodingOrOffset === 'string') {
  6750. throw new Error(
  6751. 'If encoding is specified then the first argument must be a string'
  6752. )
  6753. }
  6754. return allocUnsafe(this, arg)
  6755. }
  6756. return from(this, arg, encodingOrOffset, length)
  6757. }
  6758. Buffer.poolSize = 8192 // not used by this implementation
  6759. // TODO: Legacy, not needed anymore. Remove in next major version.
  6760. Buffer._augment = function (arr) {
  6761. arr.__proto__ = Buffer.prototype
  6762. return arr
  6763. }
  6764. function from (that, value, encodingOrOffset, length) {
  6765. if (typeof value === 'number') {
  6766. throw new TypeError('"value" argument must not be a number')
  6767. }
  6768. if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
  6769. return fromArrayBuffer(that, value, encodingOrOffset, length)
  6770. }
  6771. if (typeof value === 'string') {
  6772. return fromString(that, value, encodingOrOffset)
  6773. }
  6774. return fromObject(that, value)
  6775. }
  6776. /**
  6777. * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
  6778. * if value is a number.
  6779. * Buffer.from(str[, encoding])
  6780. * Buffer.from(array)
  6781. * Buffer.from(buffer)
  6782. * Buffer.from(arrayBuffer[, byteOffset[, length]])
  6783. **/
  6784. Buffer.from = function (value, encodingOrOffset, length) {
  6785. return from(null, value, encodingOrOffset, length)
  6786. }
  6787. if (Buffer.TYPED_ARRAY_SUPPORT) {
  6788. Buffer.prototype.__proto__ = Uint8Array.prototype
  6789. Buffer.__proto__ = Uint8Array
  6790. if (typeof Symbol !== 'undefined' && Symbol.species &&
  6791. Buffer[Symbol.species] === Buffer) {
  6792. // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
  6793. Object.defineProperty(Buffer, Symbol.species, {
  6794. value: null,
  6795. configurable: true
  6796. })
  6797. }
  6798. }
  6799. function assertSize (size) {
  6800. if (typeof size !== 'number') {
  6801. throw new TypeError('"size" argument must be a number')
  6802. } else if (size < 0) {
  6803. throw new RangeError('"size" argument must not be negative')
  6804. }
  6805. }
  6806. function alloc (that, size, fill, encoding) {
  6807. assertSize(size)
  6808. if (size <= 0) {
  6809. return createBuffer(that, size)
  6810. }
  6811. if (fill !== undefined) {
  6812. // Only pay attention to encoding if it's a string. This
  6813. // prevents accidentally sending in a number that would
  6814. // be interpretted as a start offset.
  6815. return typeof encoding === 'string'
  6816. ? createBuffer(that, size).fill(fill, encoding)
  6817. : createBuffer(that, size).fill(fill)
  6818. }
  6819. return createBuffer(that, size)
  6820. }
  6821. /**
  6822. * Creates a new filled Buffer instance.
  6823. * alloc(size[, fill[, encoding]])
  6824. **/
  6825. Buffer.alloc = function (size, fill, encoding) {
  6826. return alloc(null, size, fill, encoding)
  6827. }
  6828. function allocUnsafe (that, size) {
  6829. assertSize(size)
  6830. that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
  6831. if (!Buffer.TYPED_ARRAY_SUPPORT) {
  6832. for (var i = 0; i < size; ++i) {
  6833. that[i] = 0
  6834. }
  6835. }
  6836. return that
  6837. }
  6838. /**
  6839. * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
  6840. * */
  6841. Buffer.allocUnsafe = function (size) {
  6842. return allocUnsafe(null, size)
  6843. }
  6844. /**
  6845. * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
  6846. */
  6847. Buffer.allocUnsafeSlow = function (size) {
  6848. return allocUnsafe(null, size)
  6849. }
  6850. function fromString (that, string, encoding) {
  6851. if (typeof encoding !== 'string' || encoding === '') {
  6852. encoding = 'utf8'
  6853. }
  6854. if (!Buffer.isEncoding(encoding)) {
  6855. throw new TypeError('"encoding" must be a valid string encoding')
  6856. }
  6857. var length = byteLength(string, encoding) | 0
  6858. that = createBuffer(that, length)
  6859. var actual = that.write(string, encoding)
  6860. if (actual !== length) {
  6861. // Writing a hex string, for example, that contains invalid characters will
  6862. // cause everything after the first invalid character to be ignored. (e.g.
  6863. // 'abxxcd' will be treated as 'ab')
  6864. that = that.slice(0, actual)
  6865. }
  6866. return that
  6867. }
  6868. function fromArrayLike (that, array) {
  6869. var length = array.length < 0 ? 0 : checked(array.length) | 0
  6870. that = createBuffer(that, length)
  6871. for (var i = 0; i < length; i += 1) {
  6872. that[i] = array[i] & 255
  6873. }
  6874. return that
  6875. }
  6876. function fromArrayBuffer (that, array, byteOffset, length) {
  6877. array.byteLength // this throws if `array` is not a valid ArrayBuffer
  6878. if (byteOffset < 0 || array.byteLength < byteOffset) {
  6879. throw new RangeError('\'offset\' is out of bounds')
  6880. }
  6881. if (array.byteLength < byteOffset + (length || 0)) {
  6882. throw new RangeError('\'length\' is out of bounds')
  6883. }
  6884. if (byteOffset === undefined && length === undefined) {
  6885. array = new Uint8Array(array)
  6886. } else if (length === undefined) {
  6887. array = new Uint8Array(array, byteOffset)
  6888. } else {
  6889. array = new Uint8Array(array, byteOffset, length)
  6890. }
  6891. if (Buffer.TYPED_ARRAY_SUPPORT) {
  6892. // Return an augmented `Uint8Array` instance, for best performance
  6893. that = array
  6894. that.__proto__ = Buffer.prototype
  6895. } else {
  6896. // Fallback: Return an object instance of the Buffer class
  6897. that = fromArrayLike(that, array)
  6898. }
  6899. return that
  6900. }
  6901. function fromObject (that, obj) {
  6902. if (Buffer.isBuffer(obj)) {
  6903. var len = checked(obj.length) | 0
  6904. that = createBuffer(that, len)
  6905. if (that.length === 0) {
  6906. return that
  6907. }
  6908. obj.copy(that, 0, 0, len)
  6909. return that
  6910. }
  6911. if (obj) {
  6912. if ((typeof ArrayBuffer !== 'undefined' &&
  6913. obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
  6914. if (typeof obj.length !== 'number' || isnan(obj.length)) {
  6915. return createBuffer(that, 0)
  6916. }
  6917. return fromArrayLike(that, obj)
  6918. }
  6919. if (obj.type === 'Buffer' && isArray(obj.data)) {
  6920. return fromArrayLike(that, obj.data)
  6921. }
  6922. }
  6923. throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
  6924. }
  6925. function checked (length) {
  6926. // Note: cannot use `length < kMaxLength()` here because that fails when
  6927. // length is NaN (which is otherwise coerced to zero.)
  6928. if (length >= kMaxLength()) {
  6929. throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
  6930. 'size: 0x' + kMaxLength().toString(16) + ' bytes')
  6931. }
  6932. return length | 0
  6933. }
  6934. function SlowBuffer (length) {
  6935. if (+length != length) { // eslint-disable-line eqeqeq
  6936. length = 0
  6937. }
  6938. return Buffer.alloc(+length)
  6939. }
  6940. Buffer.isBuffer = function isBuffer (b) {
  6941. return !!(b != null && b._isBuffer)
  6942. }
  6943. Buffer.compare = function compare (a, b) {
  6944. if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
  6945. throw new TypeError('Arguments must be Buffers')
  6946. }
  6947. if (a === b) return 0
  6948. var x = a.length
  6949. var y = b.length
  6950. for (var i = 0, len = Math.min(x, y); i < len; ++i) {
  6951. if (a[i] !== b[i]) {
  6952. x = a[i]
  6953. y = b[i]
  6954. break
  6955. }
  6956. }
  6957. if (x < y) return -1
  6958. if (y < x) return 1
  6959. return 0
  6960. }
  6961. Buffer.isEncoding = function isEncoding (encoding) {
  6962. switch (String(encoding).toLowerCase()) {
  6963. case 'hex':
  6964. case 'utf8':
  6965. case 'utf-8':
  6966. case 'ascii':
  6967. case 'latin1':
  6968. case 'binary':
  6969. case 'base64':
  6970. case 'ucs2':
  6971. case 'ucs-2':
  6972. case 'utf16le':
  6973. case 'utf-16le':
  6974. return true
  6975. default:
  6976. return false
  6977. }
  6978. }
  6979. Buffer.concat = function concat (list, length) {
  6980. if (!isArray(list)) {
  6981. throw new TypeError('"list" argument must be an Array of Buffers')
  6982. }
  6983. if (list.length === 0) {
  6984. return Buffer.alloc(0)
  6985. }
  6986. var i
  6987. if (length === undefined) {
  6988. length = 0
  6989. for (i = 0; i < list.length; ++i) {
  6990. length += list[i].length
  6991. }
  6992. }
  6993. var buffer = Buffer.allocUnsafe(length)
  6994. var pos = 0
  6995. for (i = 0; i < list.length; ++i) {
  6996. var buf = list[i]
  6997. if (!Buffer.isBuffer(buf)) {
  6998. throw new TypeError('"list" argument must be an Array of Buffers')
  6999. }
  7000. buf.copy(buffer, pos)
  7001. pos += buf.length
  7002. }
  7003. return buffer
  7004. }
  7005. function byteLength (string, encoding) {
  7006. if (Buffer.isBuffer(string)) {
  7007. return string.length
  7008. }
  7009. if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
  7010. (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
  7011. return string.byteLength
  7012. }
  7013. if (typeof string !== 'string') {
  7014. string = '' + string
  7015. }
  7016. var len = string.length
  7017. if (len === 0) return 0
  7018. // Use a for loop to avoid recursion
  7019. var loweredCase = false
  7020. for (;;) {
  7021. switch (encoding) {
  7022. case 'ascii':
  7023. case 'latin1':
  7024. case 'binary':
  7025. return len
  7026. case 'utf8':
  7027. case 'utf-8':
  7028. case undefined:
  7029. return utf8ToBytes(string).length
  7030. case 'ucs2':
  7031. case 'ucs-2':
  7032. case 'utf16le':
  7033. case 'utf-16le':
  7034. return len * 2
  7035. case 'hex':
  7036. return len >>> 1
  7037. case 'base64':
  7038. return base64ToBytes(string).length
  7039. default:
  7040. if (loweredCase) return utf8ToBytes(string).length // assume utf8
  7041. encoding = ('' + encoding).toLowerCase()
  7042. loweredCase = true
  7043. }
  7044. }
  7045. }
  7046. Buffer.byteLength = byteLength
  7047. function slowToString (encoding, start, end) {
  7048. var loweredCase = false
  7049. // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  7050. // property of a typed array.
  7051. // This behaves neither like String nor Uint8Array in that we set start/end
  7052. // to their upper/lower bounds if the value passed is out of range.
  7053. // undefined is handled specially as per ECMA-262 6th Edition,
  7054. // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  7055. if (start === undefined || start < 0) {
  7056. start = 0
  7057. }
  7058. // Return early if start > this.length. Done here to prevent potential uint32
  7059. // coercion fail below.
  7060. if (start > this.length) {
  7061. return ''
  7062. }
  7063. if (end === undefined || end > this.length) {
  7064. end = this.length
  7065. }
  7066. if (end <= 0) {
  7067. return ''
  7068. }
  7069. // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
  7070. end >>>= 0
  7071. start >>>= 0
  7072. if (end <= start) {
  7073. return ''
  7074. }
  7075. if (!encoding) encoding = 'utf8'
  7076. while (true) {
  7077. switch (encoding) {
  7078. case 'hex':
  7079. return hexSlice(this, start, end)
  7080. case 'utf8':
  7081. case 'utf-8':
  7082. return utf8Slice(this, start, end)
  7083. case 'ascii':
  7084. return asciiSlice(this, start, end)
  7085. case 'latin1':
  7086. case 'binary':
  7087. return latin1Slice(this, start, end)
  7088. case 'base64':
  7089. return base64Slice(this, start, end)
  7090. case 'ucs2':
  7091. case 'ucs-2':
  7092. case 'utf16le':
  7093. case 'utf-16le':
  7094. return utf16leSlice(this, start, end)
  7095. default:
  7096. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  7097. encoding = (encoding + '').toLowerCase()
  7098. loweredCase = true
  7099. }
  7100. }
  7101. }
  7102. // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
  7103. // Buffer instances.
  7104. Buffer.prototype._isBuffer = true
  7105. function swap (b, n, m) {
  7106. var i = b[n]
  7107. b[n] = b[m]
  7108. b[m] = i
  7109. }
  7110. Buffer.prototype.swap16 = function swap16 () {
  7111. var len = this.length
  7112. if (len % 2 !== 0) {
  7113. throw new RangeError('Buffer size must be a multiple of 16-bits')
  7114. }
  7115. for (var i = 0; i < len; i += 2) {
  7116. swap(this, i, i + 1)
  7117. }
  7118. return this
  7119. }
  7120. Buffer.prototype.swap32 = function swap32 () {
  7121. var len = this.length
  7122. if (len % 4 !== 0) {
  7123. throw new RangeError('Buffer size must be a multiple of 32-bits')
  7124. }
  7125. for (var i = 0; i < len; i += 4) {
  7126. swap(this, i, i + 3)
  7127. swap(this, i + 1, i + 2)
  7128. }
  7129. return this
  7130. }
  7131. Buffer.prototype.swap64 = function swap64 () {
  7132. var len = this.length
  7133. if (len % 8 !== 0) {
  7134. throw new RangeError('Buffer size must be a multiple of 64-bits')
  7135. }
  7136. for (var i = 0; i < len; i += 8) {
  7137. swap(this, i, i + 7)
  7138. swap(this, i + 1, i + 6)
  7139. swap(this, i + 2, i + 5)
  7140. swap(this, i + 3, i + 4)
  7141. }
  7142. return this
  7143. }
  7144. Buffer.prototype.toString = function toString () {
  7145. var length = this.length | 0
  7146. if (length === 0) return ''
  7147. if (arguments.length === 0) return utf8Slice(this, 0, length)
  7148. return slowToString.apply(this, arguments)
  7149. }
  7150. Buffer.prototype.equals = function equals (b) {
  7151. if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  7152. if (this === b) return true
  7153. return Buffer.compare(this, b) === 0
  7154. }
  7155. Buffer.prototype.inspect = function inspect () {
  7156. var str = ''
  7157. var max = exports.INSPECT_MAX_BYTES
  7158. if (this.length > 0) {
  7159. str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
  7160. if (this.length > max) str += ' ... '
  7161. }
  7162. return '<Buffer ' + str + '>'
  7163. }
  7164. Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  7165. if (!Buffer.isBuffer(target)) {
  7166. throw new TypeError('Argument must be a Buffer')
  7167. }
  7168. if (start === undefined) {
  7169. start = 0
  7170. }
  7171. if (end === undefined) {
  7172. end = target ? target.length : 0
  7173. }
  7174. if (thisStart === undefined) {
  7175. thisStart = 0
  7176. }
  7177. if (thisEnd === undefined) {
  7178. thisEnd = this.length
  7179. }
  7180. if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
  7181. throw new RangeError('out of range index')
  7182. }
  7183. if (thisStart >= thisEnd && start >= end) {
  7184. return 0
  7185. }
  7186. if (thisStart >= thisEnd) {
  7187. return -1
  7188. }
  7189. if (start >= end) {
  7190. return 1
  7191. }
  7192. start >>>= 0
  7193. end >>>= 0
  7194. thisStart >>>= 0
  7195. thisEnd >>>= 0
  7196. if (this === target) return 0
  7197. var x = thisEnd - thisStart
  7198. var y = end - start
  7199. var len = Math.min(x, y)
  7200. var thisCopy = this.slice(thisStart, thisEnd)
  7201. var targetCopy = target.slice(start, end)
  7202. for (var i = 0; i < len; ++i) {
  7203. if (thisCopy[i] !== targetCopy[i]) {
  7204. x = thisCopy[i]
  7205. y = targetCopy[i]
  7206. break
  7207. }
  7208. }
  7209. if (x < y) return -1
  7210. if (y < x) return 1
  7211. return 0
  7212. }
  7213. // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
  7214. // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
  7215. //
  7216. // Arguments:
  7217. // - buffer - a Buffer to search
  7218. // - val - a string, Buffer, or number
  7219. // - byteOffset - an index into `buffer`; will be clamped to an int32
  7220. // - encoding - an optional encoding, relevant is val is a string
  7221. // - dir - true for indexOf, false for lastIndexOf
  7222. function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  7223. // Empty buffer means no match
  7224. if (buffer.length === 0) return -1
  7225. // Normalize byteOffset
  7226. if (typeof byteOffset === 'string') {
  7227. encoding = byteOffset
  7228. byteOffset = 0
  7229. } else if (byteOffset > 0x7fffffff) {
  7230. byteOffset = 0x7fffffff
  7231. } else if (byteOffset < -0x80000000) {
  7232. byteOffset = -0x80000000
  7233. }
  7234. byteOffset = +byteOffset // Coerce to Number.
  7235. if (isNaN(byteOffset)) {
  7236. // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
  7237. byteOffset = dir ? 0 : (buffer.length - 1)
  7238. }
  7239. // Normalize byteOffset: negative offsets start from the end of the buffer
  7240. if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  7241. if (byteOffset >= buffer.length) {
  7242. if (dir) return -1
  7243. else byteOffset = buffer.length - 1
  7244. } else if (byteOffset < 0) {
  7245. if (dir) byteOffset = 0
  7246. else return -1
  7247. }
  7248. // Normalize val
  7249. if (typeof val === 'string') {
  7250. val = Buffer.from(val, encoding)
  7251. }
  7252. // Finally, search either indexOf (if dir is true) or lastIndexOf
  7253. if (Buffer.isBuffer(val)) {
  7254. // Special case: looking for empty string/buffer always fails
  7255. if (val.length === 0) {
  7256. return -1
  7257. }
  7258. return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  7259. } else if (typeof val === 'number') {
  7260. val = val & 0xFF // Search for a byte value [0-255]
  7261. if (Buffer.TYPED_ARRAY_SUPPORT &&
  7262. typeof Uint8Array.prototype.indexOf === 'function') {
  7263. if (dir) {
  7264. return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
  7265. } else {
  7266. return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
  7267. }
  7268. }
  7269. return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
  7270. }
  7271. throw new TypeError('val must be string, number or Buffer')
  7272. }
  7273. function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  7274. var indexSize = 1
  7275. var arrLength = arr.length
  7276. var valLength = val.length
  7277. if (encoding !== undefined) {
  7278. encoding = String(encoding).toLowerCase()
  7279. if (encoding === 'ucs2' || encoding === 'ucs-2' ||
  7280. encoding === 'utf16le' || encoding === 'utf-16le') {
  7281. if (arr.length < 2 || val.length < 2) {
  7282. return -1
  7283. }
  7284. indexSize = 2
  7285. arrLength /= 2
  7286. valLength /= 2
  7287. byteOffset /= 2
  7288. }
  7289. }
  7290. function read (buf, i) {
  7291. if (indexSize === 1) {
  7292. return buf[i]
  7293. } else {
  7294. return buf.readUInt16BE(i * indexSize)
  7295. }
  7296. }
  7297. var i
  7298. if (dir) {
  7299. var foundIndex = -1
  7300. for (i = byteOffset; i < arrLength; i++) {
  7301. if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
  7302. if (foundIndex === -1) foundIndex = i
  7303. if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
  7304. } else {
  7305. if (foundIndex !== -1) i -= i - foundIndex
  7306. foundIndex = -1
  7307. }
  7308. }
  7309. } else {
  7310. if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
  7311. for (i = byteOffset; i >= 0; i--) {
  7312. var found = true
  7313. for (var j = 0; j < valLength; j++) {
  7314. if (read(arr, i + j) !== read(val, j)) {
  7315. found = false
  7316. break
  7317. }
  7318. }
  7319. if (found) return i
  7320. }
  7321. }
  7322. return -1
  7323. }
  7324. Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  7325. return this.indexOf(val, byteOffset, encoding) !== -1
  7326. }
  7327. Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  7328. return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
  7329. }
  7330. Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  7331. return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
  7332. }
  7333. function hexWrite (buf, string, offset, length) {
  7334. offset = Number(offset) || 0
  7335. var remaining = buf.length - offset
  7336. if (!length) {
  7337. length = remaining
  7338. } else {
  7339. length = Number(length)
  7340. if (length > remaining) {
  7341. length = remaining
  7342. }
  7343. }
  7344. // must be an even number of digits
  7345. var strLen = string.length
  7346. if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
  7347. if (length > strLen / 2) {
  7348. length = strLen / 2
  7349. }
  7350. for (var i = 0; i < length; ++i) {
  7351. var parsed = parseInt(string.substr(i * 2, 2), 16)
  7352. if (isNaN(parsed)) return i
  7353. buf[offset + i] = parsed
  7354. }
  7355. return i
  7356. }
  7357. function utf8Write (buf, string, offset, length) {
  7358. return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
  7359. }
  7360. function asciiWrite (buf, string, offset, length) {
  7361. return blitBuffer(asciiToBytes(string), buf, offset, length)
  7362. }
  7363. function latin1Write (buf, string, offset, length) {
  7364. return asciiWrite(buf, string, offset, length)
  7365. }
  7366. function base64Write (buf, string, offset, length) {
  7367. return blitBuffer(base64ToBytes(string), buf, offset, length)
  7368. }
  7369. function ucs2Write (buf, string, offset, length) {
  7370. return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
  7371. }
  7372. Buffer.prototype.write = function write (string, offset, length, encoding) {
  7373. // Buffer#write(string)
  7374. if (offset === undefined) {
  7375. encoding = 'utf8'
  7376. length = this.length
  7377. offset = 0
  7378. // Buffer#write(string, encoding)
  7379. } else if (length === undefined && typeof offset === 'string') {
  7380. encoding = offset
  7381. length = this.length
  7382. offset = 0
  7383. // Buffer#write(string, offset[, length][, encoding])
  7384. } else if (isFinite(offset)) {
  7385. offset = offset | 0
  7386. if (isFinite(length)) {
  7387. length = length | 0
  7388. if (encoding === undefined) encoding = 'utf8'
  7389. } else {
  7390. encoding = length
  7391. length = undefined
  7392. }
  7393. // legacy write(string, encoding, offset, length) - remove in v0.13
  7394. } else {
  7395. throw new Error(
  7396. 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
  7397. )
  7398. }
  7399. var remaining = this.length - offset
  7400. if (length === undefined || length > remaining) length = remaining
  7401. if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
  7402. throw new RangeError('Attempt to write outside buffer bounds')
  7403. }
  7404. if (!encoding) encoding = 'utf8'
  7405. var loweredCase = false
  7406. for (;;) {
  7407. switch (encoding) {
  7408. case 'hex':
  7409. return hexWrite(this, string, offset, length)
  7410. case 'utf8':
  7411. case 'utf-8':
  7412. return utf8Write(this, string, offset, length)
  7413. case 'ascii':
  7414. return asciiWrite(this, string, offset, length)
  7415. case 'latin1':
  7416. case 'binary':
  7417. return latin1Write(this, string, offset, length)
  7418. case 'base64':
  7419. // Warning: maxLength not taken into account in base64Write
  7420. return base64Write(this, string, offset, length)
  7421. case 'ucs2':
  7422. case 'ucs-2':
  7423. case 'utf16le':
  7424. case 'utf-16le':
  7425. return ucs2Write(this, string, offset, length)
  7426. default:
  7427. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  7428. encoding = ('' + encoding).toLowerCase()
  7429. loweredCase = true
  7430. }
  7431. }
  7432. }
  7433. Buffer.prototype.toJSON = function toJSON () {
  7434. return {
  7435. type: 'Buffer',
  7436. data: Array.prototype.slice.call(this._arr || this, 0)
  7437. }
  7438. }
  7439. function base64Slice (buf, start, end) {
  7440. if (start === 0 && end === buf.length) {
  7441. return base64.fromByteArray(buf)
  7442. } else {
  7443. return base64.fromByteArray(buf.slice(start, end))
  7444. }
  7445. }
  7446. function utf8Slice (buf, start, end) {
  7447. end = Math.min(buf.length, end)
  7448. var res = []
  7449. var i = start
  7450. while (i < end) {
  7451. var firstByte = buf[i]
  7452. var codePoint = null
  7453. var bytesPerSequence = (firstByte > 0xEF) ? 4
  7454. : (firstByte > 0xDF) ? 3
  7455. : (firstByte > 0xBF) ? 2
  7456. : 1
  7457. if (i + bytesPerSequence <= end) {
  7458. var secondByte, thirdByte, fourthByte, tempCodePoint
  7459. switch (bytesPerSequence) {
  7460. case 1:
  7461. if (firstByte < 0x80) {
  7462. codePoint = firstByte
  7463. }
  7464. break
  7465. case 2:
  7466. secondByte = buf[i + 1]
  7467. if ((secondByte & 0xC0) === 0x80) {
  7468. tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
  7469. if (tempCodePoint > 0x7F) {
  7470. codePoint = tempCodePoint
  7471. }
  7472. }
  7473. break
  7474. case 3:
  7475. secondByte = buf[i + 1]
  7476. thirdByte = buf[i + 2]
  7477. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
  7478. tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
  7479. if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
  7480. codePoint = tempCodePoint
  7481. }
  7482. }
  7483. break
  7484. case 4:
  7485. secondByte = buf[i + 1]
  7486. thirdByte = buf[i + 2]
  7487. fourthByte = buf[i + 3]
  7488. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
  7489. tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
  7490. if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
  7491. codePoint = tempCodePoint
  7492. }
  7493. }
  7494. }
  7495. }
  7496. if (codePoint === null) {
  7497. // we did not generate a valid codePoint so insert a
  7498. // replacement char (U+FFFD) and advance only 1 byte
  7499. codePoint = 0xFFFD
  7500. bytesPerSequence = 1
  7501. } else if (codePoint > 0xFFFF) {
  7502. // encode to utf16 (surrogate pair dance)
  7503. codePoint -= 0x10000
  7504. res.push(codePoint >>> 10 & 0x3FF | 0xD800)
  7505. codePoint = 0xDC00 | codePoint & 0x3FF
  7506. }
  7507. res.push(codePoint)
  7508. i += bytesPerSequence
  7509. }
  7510. return decodeCodePointsArray(res)
  7511. }
  7512. // Based on http://stackoverflow.com/a/22747272/680742, the browser with
  7513. // the lowest limit is Chrome, with 0x10000 args.
  7514. // We go 1 magnitude less, for safety
  7515. var MAX_ARGUMENTS_LENGTH = 0x1000
  7516. function decodeCodePointsArray (codePoints) {
  7517. var len = codePoints.length
  7518. if (len <= MAX_ARGUMENTS_LENGTH) {
  7519. return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  7520. }
  7521. // Decode in chunks to avoid "call stack size exceeded".
  7522. var res = ''
  7523. var i = 0
  7524. while (i < len) {
  7525. res += String.fromCharCode.apply(
  7526. String,
  7527. codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
  7528. )
  7529. }
  7530. return res
  7531. }
  7532. function asciiSlice (buf, start, end) {
  7533. var ret = ''
  7534. end = Math.min(buf.length, end)
  7535. for (var i = start; i < end; ++i) {
  7536. ret += String.fromCharCode(buf[i] & 0x7F)
  7537. }
  7538. return ret
  7539. }
  7540. function latin1Slice (buf, start, end) {
  7541. var ret = ''
  7542. end = Math.min(buf.length, end)
  7543. for (var i = start; i < end; ++i) {
  7544. ret += String.fromCharCode(buf[i])
  7545. }
  7546. return ret
  7547. }
  7548. function hexSlice (buf, start, end) {
  7549. var len = buf.length
  7550. if (!start || start < 0) start = 0
  7551. if (!end || end < 0 || end > len) end = len
  7552. var out = ''
  7553. for (var i = start; i < end; ++i) {
  7554. out += toHex(buf[i])
  7555. }
  7556. return out
  7557. }
  7558. function utf16leSlice (buf, start, end) {
  7559. var bytes = buf.slice(start, end)
  7560. var res = ''
  7561. for (var i = 0; i < bytes.length; i += 2) {
  7562. res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
  7563. }
  7564. return res
  7565. }
  7566. Buffer.prototype.slice = function slice (start, end) {
  7567. var len = this.length
  7568. start = ~~start
  7569. end = end === undefined ? len : ~~end
  7570. if (start < 0) {
  7571. start += len
  7572. if (start < 0) start = 0
  7573. } else if (start > len) {
  7574. start = len
  7575. }
  7576. if (end < 0) {
  7577. end += len
  7578. if (end < 0) end = 0
  7579. } else if (end > len) {
  7580. end = len
  7581. }
  7582. if (end < start) end = start
  7583. var newBuf
  7584. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7585. newBuf = this.subarray(start, end)
  7586. newBuf.__proto__ = Buffer.prototype
  7587. } else {
  7588. var sliceLen = end - start
  7589. newBuf = new Buffer(sliceLen, undefined)
  7590. for (var i = 0; i < sliceLen; ++i) {
  7591. newBuf[i] = this[i + start]
  7592. }
  7593. }
  7594. return newBuf
  7595. }
  7596. /*
  7597. * Need to make sure that buffer isn't trying to write out of bounds.
  7598. */
  7599. function checkOffset (offset, ext, length) {
  7600. if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  7601. if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
  7602. }
  7603. Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  7604. offset = offset | 0
  7605. byteLength = byteLength | 0
  7606. if (!noAssert) checkOffset(offset, byteLength, this.length)
  7607. var val = this[offset]
  7608. var mul = 1
  7609. var i = 0
  7610. while (++i < byteLength && (mul *= 0x100)) {
  7611. val += this[offset + i] * mul
  7612. }
  7613. return val
  7614. }
  7615. Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  7616. offset = offset | 0
  7617. byteLength = byteLength | 0
  7618. if (!noAssert) {
  7619. checkOffset(offset, byteLength, this.length)
  7620. }
  7621. var val = this[offset + --byteLength]
  7622. var mul = 1
  7623. while (byteLength > 0 && (mul *= 0x100)) {
  7624. val += this[offset + --byteLength] * mul
  7625. }
  7626. return val
  7627. }
  7628. Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  7629. if (!noAssert) checkOffset(offset, 1, this.length)
  7630. return this[offset]
  7631. }
  7632. Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  7633. if (!noAssert) checkOffset(offset, 2, this.length)
  7634. return this[offset] | (this[offset + 1] << 8)
  7635. }
  7636. Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  7637. if (!noAssert) checkOffset(offset, 2, this.length)
  7638. return (this[offset] << 8) | this[offset + 1]
  7639. }
  7640. Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  7641. if (!noAssert) checkOffset(offset, 4, this.length)
  7642. return ((this[offset]) |
  7643. (this[offset + 1] << 8) |
  7644. (this[offset + 2] << 16)) +
  7645. (this[offset + 3] * 0x1000000)
  7646. }
  7647. Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  7648. if (!noAssert) checkOffset(offset, 4, this.length)
  7649. return (this[offset] * 0x1000000) +
  7650. ((this[offset + 1] << 16) |
  7651. (this[offset + 2] << 8) |
  7652. this[offset + 3])
  7653. }
  7654. Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  7655. offset = offset | 0
  7656. byteLength = byteLength | 0
  7657. if (!noAssert) checkOffset(offset, byteLength, this.length)
  7658. var val = this[offset]
  7659. var mul = 1
  7660. var i = 0
  7661. while (++i < byteLength && (mul *= 0x100)) {
  7662. val += this[offset + i] * mul
  7663. }
  7664. mul *= 0x80
  7665. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  7666. return val
  7667. }
  7668. Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  7669. offset = offset | 0
  7670. byteLength = byteLength | 0
  7671. if (!noAssert) checkOffset(offset, byteLength, this.length)
  7672. var i = byteLength
  7673. var mul = 1
  7674. var val = this[offset + --i]
  7675. while (i > 0 && (mul *= 0x100)) {
  7676. val += this[offset + --i] * mul
  7677. }
  7678. mul *= 0x80
  7679. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  7680. return val
  7681. }
  7682. Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  7683. if (!noAssert) checkOffset(offset, 1, this.length)
  7684. if (!(this[offset] & 0x80)) return (this[offset])
  7685. return ((0xff - this[offset] + 1) * -1)
  7686. }
  7687. Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  7688. if (!noAssert) checkOffset(offset, 2, this.length)
  7689. var val = this[offset] | (this[offset + 1] << 8)
  7690. return (val & 0x8000) ? val | 0xFFFF0000 : val
  7691. }
  7692. Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  7693. if (!noAssert) checkOffset(offset, 2, this.length)
  7694. var val = this[offset + 1] | (this[offset] << 8)
  7695. return (val & 0x8000) ? val | 0xFFFF0000 : val
  7696. }
  7697. Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  7698. if (!noAssert) checkOffset(offset, 4, this.length)
  7699. return (this[offset]) |
  7700. (this[offset + 1] << 8) |
  7701. (this[offset + 2] << 16) |
  7702. (this[offset + 3] << 24)
  7703. }
  7704. Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  7705. if (!noAssert) checkOffset(offset, 4, this.length)
  7706. return (this[offset] << 24) |
  7707. (this[offset + 1] << 16) |
  7708. (this[offset + 2] << 8) |
  7709. (this[offset + 3])
  7710. }
  7711. Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  7712. if (!noAssert) checkOffset(offset, 4, this.length)
  7713. return ieee754.read(this, offset, true, 23, 4)
  7714. }
  7715. Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  7716. if (!noAssert) checkOffset(offset, 4, this.length)
  7717. return ieee754.read(this, offset, false, 23, 4)
  7718. }
  7719. Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  7720. if (!noAssert) checkOffset(offset, 8, this.length)
  7721. return ieee754.read(this, offset, true, 52, 8)
  7722. }
  7723. Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  7724. if (!noAssert) checkOffset(offset, 8, this.length)
  7725. return ieee754.read(this, offset, false, 52, 8)
  7726. }
  7727. function checkInt (buf, value, offset, ext, max, min) {
  7728. if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  7729. if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  7730. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  7731. }
  7732. Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  7733. value = +value
  7734. offset = offset | 0
  7735. byteLength = byteLength | 0
  7736. if (!noAssert) {
  7737. var maxBytes = Math.pow(2, 8 * byteLength) - 1
  7738. checkInt(this, value, offset, byteLength, maxBytes, 0)
  7739. }
  7740. var mul = 1
  7741. var i = 0
  7742. this[offset] = value & 0xFF
  7743. while (++i < byteLength && (mul *= 0x100)) {
  7744. this[offset + i] = (value / mul) & 0xFF
  7745. }
  7746. return offset + byteLength
  7747. }
  7748. Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  7749. value = +value
  7750. offset = offset | 0
  7751. byteLength = byteLength | 0
  7752. if (!noAssert) {
  7753. var maxBytes = Math.pow(2, 8 * byteLength) - 1
  7754. checkInt(this, value, offset, byteLength, maxBytes, 0)
  7755. }
  7756. var i = byteLength - 1
  7757. var mul = 1
  7758. this[offset + i] = value & 0xFF
  7759. while (--i >= 0 && (mul *= 0x100)) {
  7760. this[offset + i] = (value / mul) & 0xFF
  7761. }
  7762. return offset + byteLength
  7763. }
  7764. Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  7765. value = +value
  7766. offset = offset | 0
  7767. if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  7768. if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
  7769. this[offset] = (value & 0xff)
  7770. return offset + 1
  7771. }
  7772. function objectWriteUInt16 (buf, value, offset, littleEndian) {
  7773. if (value < 0) value = 0xffff + value + 1
  7774. for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
  7775. buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
  7776. (littleEndian ? i : 1 - i) * 8
  7777. }
  7778. }
  7779. Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  7780. value = +value
  7781. offset = offset | 0
  7782. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  7783. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7784. this[offset] = (value & 0xff)
  7785. this[offset + 1] = (value >>> 8)
  7786. } else {
  7787. objectWriteUInt16(this, value, offset, true)
  7788. }
  7789. return offset + 2
  7790. }
  7791. Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  7792. value = +value
  7793. offset = offset | 0
  7794. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  7795. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7796. this[offset] = (value >>> 8)
  7797. this[offset + 1] = (value & 0xff)
  7798. } else {
  7799. objectWriteUInt16(this, value, offset, false)
  7800. }
  7801. return offset + 2
  7802. }
  7803. function objectWriteUInt32 (buf, value, offset, littleEndian) {
  7804. if (value < 0) value = 0xffffffff + value + 1
  7805. for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
  7806. buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
  7807. }
  7808. }
  7809. Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  7810. value = +value
  7811. offset = offset | 0
  7812. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  7813. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7814. this[offset + 3] = (value >>> 24)
  7815. this[offset + 2] = (value >>> 16)
  7816. this[offset + 1] = (value >>> 8)
  7817. this[offset] = (value & 0xff)
  7818. } else {
  7819. objectWriteUInt32(this, value, offset, true)
  7820. }
  7821. return offset + 4
  7822. }
  7823. Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  7824. value = +value
  7825. offset = offset | 0
  7826. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  7827. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7828. this[offset] = (value >>> 24)
  7829. this[offset + 1] = (value >>> 16)
  7830. this[offset + 2] = (value >>> 8)
  7831. this[offset + 3] = (value & 0xff)
  7832. } else {
  7833. objectWriteUInt32(this, value, offset, false)
  7834. }
  7835. return offset + 4
  7836. }
  7837. Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  7838. value = +value
  7839. offset = offset | 0
  7840. if (!noAssert) {
  7841. var limit = Math.pow(2, 8 * byteLength - 1)
  7842. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  7843. }
  7844. var i = 0
  7845. var mul = 1
  7846. var sub = 0
  7847. this[offset] = value & 0xFF
  7848. while (++i < byteLength && (mul *= 0x100)) {
  7849. if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
  7850. sub = 1
  7851. }
  7852. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  7853. }
  7854. return offset + byteLength
  7855. }
  7856. Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  7857. value = +value
  7858. offset = offset | 0
  7859. if (!noAssert) {
  7860. var limit = Math.pow(2, 8 * byteLength - 1)
  7861. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  7862. }
  7863. var i = byteLength - 1
  7864. var mul = 1
  7865. var sub = 0
  7866. this[offset + i] = value & 0xFF
  7867. while (--i >= 0 && (mul *= 0x100)) {
  7868. if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
  7869. sub = 1
  7870. }
  7871. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  7872. }
  7873. return offset + byteLength
  7874. }
  7875. Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  7876. value = +value
  7877. offset = offset | 0
  7878. if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  7879. if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
  7880. if (value < 0) value = 0xff + value + 1
  7881. this[offset] = (value & 0xff)
  7882. return offset + 1
  7883. }
  7884. Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  7885. value = +value
  7886. offset = offset | 0
  7887. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  7888. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7889. this[offset] = (value & 0xff)
  7890. this[offset + 1] = (value >>> 8)
  7891. } else {
  7892. objectWriteUInt16(this, value, offset, true)
  7893. }
  7894. return offset + 2
  7895. }
  7896. Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  7897. value = +value
  7898. offset = offset | 0
  7899. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  7900. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7901. this[offset] = (value >>> 8)
  7902. this[offset + 1] = (value & 0xff)
  7903. } else {
  7904. objectWriteUInt16(this, value, offset, false)
  7905. }
  7906. return offset + 2
  7907. }
  7908. Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  7909. value = +value
  7910. offset = offset | 0
  7911. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  7912. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7913. this[offset] = (value & 0xff)
  7914. this[offset + 1] = (value >>> 8)
  7915. this[offset + 2] = (value >>> 16)
  7916. this[offset + 3] = (value >>> 24)
  7917. } else {
  7918. objectWriteUInt32(this, value, offset, true)
  7919. }
  7920. return offset + 4
  7921. }
  7922. Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  7923. value = +value
  7924. offset = offset | 0
  7925. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  7926. if (value < 0) value = 0xffffffff + value + 1
  7927. if (Buffer.TYPED_ARRAY_SUPPORT) {
  7928. this[offset] = (value >>> 24)
  7929. this[offset + 1] = (value >>> 16)
  7930. this[offset + 2] = (value >>> 8)
  7931. this[offset + 3] = (value & 0xff)
  7932. } else {
  7933. objectWriteUInt32(this, value, offset, false)
  7934. }
  7935. return offset + 4
  7936. }
  7937. function checkIEEE754 (buf, value, offset, ext, max, min) {
  7938. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  7939. if (offset < 0) throw new RangeError('Index out of range')
  7940. }
  7941. function writeFloat (buf, value, offset, littleEndian, noAssert) {
  7942. if (!noAssert) {
  7943. checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  7944. }
  7945. ieee754.write(buf, value, offset, littleEndian, 23, 4)
  7946. return offset + 4
  7947. }
  7948. Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  7949. return writeFloat(this, value, offset, true, noAssert)
  7950. }
  7951. Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  7952. return writeFloat(this, value, offset, false, noAssert)
  7953. }
  7954. function writeDouble (buf, value, offset, littleEndian, noAssert) {
  7955. if (!noAssert) {
  7956. checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  7957. }
  7958. ieee754.write(buf, value, offset, littleEndian, 52, 8)
  7959. return offset + 8
  7960. }
  7961. Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  7962. return writeDouble(this, value, offset, true, noAssert)
  7963. }
  7964. Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  7965. return writeDouble(this, value, offset, false, noAssert)
  7966. }
  7967. // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
  7968. Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  7969. if (!start) start = 0
  7970. if (!end && end !== 0) end = this.length
  7971. if (targetStart >= target.length) targetStart = target.length
  7972. if (!targetStart) targetStart = 0
  7973. if (end > 0 && end < start) end = start
  7974. // Copy 0 bytes; we're done
  7975. if (end === start) return 0
  7976. if (target.length === 0 || this.length === 0) return 0
  7977. // Fatal error conditions
  7978. if (targetStart < 0) {
  7979. throw new RangeError('targetStart out of bounds')
  7980. }
  7981. if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
  7982. if (end < 0) throw new RangeError('sourceEnd out of bounds')
  7983. // Are we oob?
  7984. if (end > this.length) end = this.length
  7985. if (target.length - targetStart < end - start) {
  7986. end = target.length - targetStart + start
  7987. }
  7988. var len = end - start
  7989. var i
  7990. if (this === target && start < targetStart && targetStart < end) {
  7991. // descending copy from end
  7992. for (i = len - 1; i >= 0; --i) {
  7993. target[i + targetStart] = this[i + start]
  7994. }
  7995. } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
  7996. // ascending copy from start
  7997. for (i = 0; i < len; ++i) {
  7998. target[i + targetStart] = this[i + start]
  7999. }
  8000. } else {
  8001. Uint8Array.prototype.set.call(
  8002. target,
  8003. this.subarray(start, start + len),
  8004. targetStart
  8005. )
  8006. }
  8007. return len
  8008. }
  8009. // Usage:
  8010. // buffer.fill(number[, offset[, end]])
  8011. // buffer.fill(buffer[, offset[, end]])
  8012. // buffer.fill(string[, offset[, end]][, encoding])
  8013. Buffer.prototype.fill = function fill (val, start, end, encoding) {
  8014. // Handle string cases:
  8015. if (typeof val === 'string') {
  8016. if (typeof start === 'string') {
  8017. encoding = start
  8018. start = 0
  8019. end = this.length
  8020. } else if (typeof end === 'string') {
  8021. encoding = end
  8022. end = this.length
  8023. }
  8024. if (val.length === 1) {
  8025. var code = val.charCodeAt(0)
  8026. if (code < 256) {
  8027. val = code
  8028. }
  8029. }
  8030. if (encoding !== undefined && typeof encoding !== 'string') {
  8031. throw new TypeError('encoding must be a string')
  8032. }
  8033. if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
  8034. throw new TypeError('Unknown encoding: ' + encoding)
  8035. }
  8036. } else if (typeof val === 'number') {
  8037. val = val & 255
  8038. }
  8039. // Invalid ranges are not set to a default, so can range check early.
  8040. if (start < 0 || this.length < start || this.length < end) {
  8041. throw new RangeError('Out of range index')
  8042. }
  8043. if (end <= start) {
  8044. return this
  8045. }
  8046. start = start >>> 0
  8047. end = end === undefined ? this.length : end >>> 0
  8048. if (!val) val = 0
  8049. var i
  8050. if (typeof val === 'number') {
  8051. for (i = start; i < end; ++i) {
  8052. this[i] = val
  8053. }
  8054. } else {
  8055. var bytes = Buffer.isBuffer(val)
  8056. ? val
  8057. : utf8ToBytes(new Buffer(val, encoding).toString())
  8058. var len = bytes.length
  8059. for (i = 0; i < end - start; ++i) {
  8060. this[i + start] = bytes[i % len]
  8061. }
  8062. }
  8063. return this
  8064. }
  8065. // HELPER FUNCTIONS
  8066. // ================
  8067. var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
  8068. function base64clean (str) {
  8069. // Node strips out invalid characters like \n and \t from the string, base64-js does not
  8070. str = stringtrim(str).replace(INVALID_BASE64_RE, '')
  8071. // Node converts strings with length < 2 to ''
  8072. if (str.length < 2) return ''
  8073. // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  8074. while (str.length % 4 !== 0) {
  8075. str = str + '='
  8076. }
  8077. return str
  8078. }
  8079. function stringtrim (str) {
  8080. if (str.trim) return str.trim()
  8081. return str.replace(/^\s+|\s+$/g, '')
  8082. }
  8083. function toHex (n) {
  8084. if (n < 16) return '0' + n.toString(16)
  8085. return n.toString(16)
  8086. }
  8087. function utf8ToBytes (string, units) {
  8088. units = units || Infinity
  8089. var codePoint
  8090. var length = string.length
  8091. var leadSurrogate = null
  8092. var bytes = []
  8093. for (var i = 0; i < length; ++i) {
  8094. codePoint = string.charCodeAt(i)
  8095. // is surrogate component
  8096. if (codePoint > 0xD7FF && codePoint < 0xE000) {
  8097. // last char was a lead
  8098. if (!leadSurrogate) {
  8099. // no lead yet
  8100. if (codePoint > 0xDBFF) {
  8101. // unexpected trail
  8102. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  8103. continue
  8104. } else if (i + 1 === length) {
  8105. // unpaired lead
  8106. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  8107. continue
  8108. }
  8109. // valid lead
  8110. leadSurrogate = codePoint
  8111. continue
  8112. }
  8113. // 2 leads in a row
  8114. if (codePoint < 0xDC00) {
  8115. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  8116. leadSurrogate = codePoint
  8117. continue
  8118. }
  8119. // valid surrogate pair
  8120. codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
  8121. } else if (leadSurrogate) {
  8122. // valid bmp char, but last char was a lead
  8123. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  8124. }
  8125. leadSurrogate = null
  8126. // encode utf8
  8127. if (codePoint < 0x80) {
  8128. if ((units -= 1) < 0) break
  8129. bytes.push(codePoint)
  8130. } else if (codePoint < 0x800) {
  8131. if ((units -= 2) < 0) break
  8132. bytes.push(
  8133. codePoint >> 0x6 | 0xC0,
  8134. codePoint & 0x3F | 0x80
  8135. )
  8136. } else if (codePoint < 0x10000) {
  8137. if ((units -= 3) < 0) break
  8138. bytes.push(
  8139. codePoint >> 0xC | 0xE0,
  8140. codePoint >> 0x6 & 0x3F | 0x80,
  8141. codePoint & 0x3F | 0x80
  8142. )
  8143. } else if (codePoint < 0x110000) {
  8144. if ((units -= 4) < 0) break
  8145. bytes.push(
  8146. codePoint >> 0x12 | 0xF0,
  8147. codePoint >> 0xC & 0x3F | 0x80,
  8148. codePoint >> 0x6 & 0x3F | 0x80,
  8149. codePoint & 0x3F | 0x80
  8150. )
  8151. } else {
  8152. throw new Error('Invalid code point')
  8153. }
  8154. }
  8155. return bytes
  8156. }
  8157. function asciiToBytes (str) {
  8158. var byteArray = []
  8159. for (var i = 0; i < str.length; ++i) {
  8160. // Node's code seems to be doing this and not & 0x7F..
  8161. byteArray.push(str.charCodeAt(i) & 0xFF)
  8162. }
  8163. return byteArray
  8164. }
  8165. function utf16leToBytes (str, units) {
  8166. var c, hi, lo
  8167. var byteArray = []
  8168. for (var i = 0; i < str.length; ++i) {
  8169. if ((units -= 2) < 0) break
  8170. c = str.charCodeAt(i)
  8171. hi = c >> 8
  8172. lo = c % 256
  8173. byteArray.push(lo)
  8174. byteArray.push(hi)
  8175. }
  8176. return byteArray
  8177. }
  8178. function base64ToBytes (str) {
  8179. return base64.toByteArray(base64clean(str))
  8180. }
  8181. function blitBuffer (src, dst, offset, length) {
  8182. for (var i = 0; i < length; ++i) {
  8183. if ((i + offset >= dst.length) || (i >= src.length)) break
  8184. dst[i + offset] = src[i]
  8185. }
  8186. return i
  8187. }
  8188. function isnan (val) {
  8189. return val !== val // eslint-disable-line no-self-compare
  8190. }
  8191. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  8192. /***/ }),
  8193. /* 39 */
  8194. /***/ (function(module, exports, __webpack_require__) {
  8195. /*
  8196. * Copyright 2009-2011 Mozilla Foundation and contributors
  8197. * Licensed under the New BSD license. See LICENSE.txt or:
  8198. * http://opensource.org/licenses/BSD-3-Clause
  8199. */
  8200. exports.SourceMapGenerator = __webpack_require__(40).SourceMapGenerator;
  8201. exports.SourceMapConsumer = __webpack_require__(82).SourceMapConsumer;
  8202. exports.SourceNode = __webpack_require__(85).SourceNode;
  8203. /***/ }),
  8204. /* 40 */
  8205. /***/ (function(module, exports, __webpack_require__) {
  8206. /* -*- Mode: js; js-indent-level: 2; -*- */
  8207. /*
  8208. * Copyright 2011 Mozilla Foundation and contributors
  8209. * Licensed under the New BSD license. See LICENSE or:
  8210. * http://opensource.org/licenses/BSD-3-Clause
  8211. */
  8212. var base64VLQ = __webpack_require__(41);
  8213. var util = __webpack_require__(8);
  8214. var ArraySet = __webpack_require__(42).ArraySet;
  8215. var MappingList = __webpack_require__(81).MappingList;
  8216. /**
  8217. * An instance of the SourceMapGenerator represents a source map which is
  8218. * being built incrementally. You may pass an object with the following
  8219. * properties:
  8220. *
  8221. * - file: The filename of the generated source.
  8222. * - sourceRoot: A root for all relative URLs in this source map.
  8223. */
  8224. function SourceMapGenerator(aArgs) {
  8225. if (!aArgs) {
  8226. aArgs = {};
  8227. }
  8228. this._file = util.getArg(aArgs, 'file', null);
  8229. this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  8230. this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  8231. this._sources = new ArraySet();
  8232. this._names = new ArraySet();
  8233. this._mappings = new MappingList();
  8234. this._sourcesContents = null;
  8235. }
  8236. SourceMapGenerator.prototype._version = 3;
  8237. /**
  8238. * Creates a new SourceMapGenerator based on a SourceMapConsumer
  8239. *
  8240. * @param aSourceMapConsumer The SourceMap.
  8241. */
  8242. SourceMapGenerator.fromSourceMap =
  8243. function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
  8244. var sourceRoot = aSourceMapConsumer.sourceRoot;
  8245. var generator = new SourceMapGenerator({
  8246. file: aSourceMapConsumer.file,
  8247. sourceRoot: sourceRoot
  8248. });
  8249. aSourceMapConsumer.eachMapping(function (mapping) {
  8250. var newMapping = {
  8251. generated: {
  8252. line: mapping.generatedLine,
  8253. column: mapping.generatedColumn
  8254. }
  8255. };
  8256. if (mapping.source != null) {
  8257. newMapping.source = mapping.source;
  8258. if (sourceRoot != null) {
  8259. newMapping.source = util.relative(sourceRoot, newMapping.source);
  8260. }
  8261. newMapping.original = {
  8262. line: mapping.originalLine,
  8263. column: mapping.originalColumn
  8264. };
  8265. if (mapping.name != null) {
  8266. newMapping.name = mapping.name;
  8267. }
  8268. }
  8269. generator.addMapping(newMapping);
  8270. });
  8271. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  8272. var sourceRelative = sourceFile;
  8273. if (sourceRoot !== null) {
  8274. sourceRelative = util.relative(sourceRoot, sourceFile);
  8275. }
  8276. if (!generator._sources.has(sourceRelative)) {
  8277. generator._sources.add(sourceRelative);
  8278. }
  8279. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  8280. if (content != null) {
  8281. generator.setSourceContent(sourceFile, content);
  8282. }
  8283. });
  8284. return generator;
  8285. };
  8286. /**
  8287. * Add a single mapping from original source line and column to the generated
  8288. * source's line and column for this source map being created. The mapping
  8289. * object should have the following properties:
  8290. *
  8291. * - generated: An object with the generated line and column positions.
  8292. * - original: An object with the original line and column positions.
  8293. * - source: The original source file (relative to the sourceRoot).
  8294. * - name: An optional original token name for this mapping.
  8295. */
  8296. SourceMapGenerator.prototype.addMapping =
  8297. function SourceMapGenerator_addMapping(aArgs) {
  8298. var generated = util.getArg(aArgs, 'generated');
  8299. var original = util.getArg(aArgs, 'original', null);
  8300. var source = util.getArg(aArgs, 'source', null);
  8301. var name = util.getArg(aArgs, 'name', null);
  8302. if (!this._skipValidation) {
  8303. this._validateMapping(generated, original, source, name);
  8304. }
  8305. if (source != null) {
  8306. source = String(source);
  8307. if (!this._sources.has(source)) {
  8308. this._sources.add(source);
  8309. }
  8310. }
  8311. if (name != null) {
  8312. name = String(name);
  8313. if (!this._names.has(name)) {
  8314. this._names.add(name);
  8315. }
  8316. }
  8317. this._mappings.add({
  8318. generatedLine: generated.line,
  8319. generatedColumn: generated.column,
  8320. originalLine: original != null && original.line,
  8321. originalColumn: original != null && original.column,
  8322. source: source,
  8323. name: name
  8324. });
  8325. };
  8326. /**
  8327. * Set the source content for a source file.
  8328. */
  8329. SourceMapGenerator.prototype.setSourceContent =
  8330. function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
  8331. var source = aSourceFile;
  8332. if (this._sourceRoot != null) {
  8333. source = util.relative(this._sourceRoot, source);
  8334. }
  8335. if (aSourceContent != null) {
  8336. // Add the source content to the _sourcesContents map.
  8337. // Create a new _sourcesContents map if the property is null.
  8338. if (!this._sourcesContents) {
  8339. this._sourcesContents = Object.create(null);
  8340. }
  8341. this._sourcesContents[util.toSetString(source)] = aSourceContent;
  8342. } else if (this._sourcesContents) {
  8343. // Remove the source file from the _sourcesContents map.
  8344. // If the _sourcesContents map is empty, set the property to null.
  8345. delete this._sourcesContents[util.toSetString(source)];
  8346. if (Object.keys(this._sourcesContents).length === 0) {
  8347. this._sourcesContents = null;
  8348. }
  8349. }
  8350. };
  8351. /**
  8352. * Applies the mappings of a sub-source-map for a specific source file to the
  8353. * source map being generated. Each mapping to the supplied source file is
  8354. * rewritten using the supplied source map. Note: The resolution for the
  8355. * resulting mappings is the minimium of this map and the supplied map.
  8356. *
  8357. * @param aSourceMapConsumer The source map to be applied.
  8358. * @param aSourceFile Optional. The filename of the source file.
  8359. * If omitted, SourceMapConsumer's file property will be used.
  8360. * @param aSourceMapPath Optional. The dirname of the path to the source map
  8361. * to be applied. If relative, it is relative to the SourceMapConsumer.
  8362. * This parameter is needed when the two source maps aren't in the same
  8363. * directory, and the source map to be applied contains relative source
  8364. * paths. If so, those relative source paths need to be rewritten
  8365. * relative to the SourceMapGenerator.
  8366. */
  8367. SourceMapGenerator.prototype.applySourceMap =
  8368. function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
  8369. var sourceFile = aSourceFile;
  8370. // If aSourceFile is omitted, we will use the file property of the SourceMap
  8371. if (aSourceFile == null) {
  8372. if (aSourceMapConsumer.file == null) {
  8373. throw new Error(
  8374. 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
  8375. 'or the source map\'s "file" property. Both were omitted.'
  8376. );
  8377. }
  8378. sourceFile = aSourceMapConsumer.file;
  8379. }
  8380. var sourceRoot = this._sourceRoot;
  8381. // Make "sourceFile" relative if an absolute Url is passed.
  8382. if (sourceRoot != null) {
  8383. sourceFile = util.relative(sourceRoot, sourceFile);
  8384. }
  8385. // Applying the SourceMap can add and remove items from the sources and
  8386. // the names array.
  8387. var newSources = new ArraySet();
  8388. var newNames = new ArraySet();
  8389. // Find mappings for the "sourceFile"
  8390. this._mappings.unsortedForEach(function (mapping) {
  8391. if (mapping.source === sourceFile && mapping.originalLine != null) {
  8392. // Check if it can be mapped by the source map, then update the mapping.
  8393. var original = aSourceMapConsumer.originalPositionFor({
  8394. line: mapping.originalLine,
  8395. column: mapping.originalColumn
  8396. });
  8397. if (original.source != null) {
  8398. // Copy mapping
  8399. mapping.source = original.source;
  8400. if (aSourceMapPath != null) {
  8401. mapping.source = util.join(aSourceMapPath, mapping.source)
  8402. }
  8403. if (sourceRoot != null) {
  8404. mapping.source = util.relative(sourceRoot, mapping.source);
  8405. }
  8406. mapping.originalLine = original.line;
  8407. mapping.originalColumn = original.column;
  8408. if (original.name != null) {
  8409. mapping.name = original.name;
  8410. }
  8411. }
  8412. }
  8413. var source = mapping.source;
  8414. if (source != null && !newSources.has(source)) {
  8415. newSources.add(source);
  8416. }
  8417. var name = mapping.name;
  8418. if (name != null && !newNames.has(name)) {
  8419. newNames.add(name);
  8420. }
  8421. }, this);
  8422. this._sources = newSources;
  8423. this._names = newNames;
  8424. // Copy sourcesContents of applied map.
  8425. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  8426. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  8427. if (content != null) {
  8428. if (aSourceMapPath != null) {
  8429. sourceFile = util.join(aSourceMapPath, sourceFile);
  8430. }
  8431. if (sourceRoot != null) {
  8432. sourceFile = util.relative(sourceRoot, sourceFile);
  8433. }
  8434. this.setSourceContent(sourceFile, content);
  8435. }
  8436. }, this);
  8437. };
  8438. /**
  8439. * A mapping can have one of the three levels of data:
  8440. *
  8441. * 1. Just the generated position.
  8442. * 2. The Generated position, original position, and original source.
  8443. * 3. Generated and original position, original source, as well as a name
  8444. * token.
  8445. *
  8446. * To maintain consistency, we validate that any new mapping being added falls
  8447. * in to one of these categories.
  8448. */
  8449. SourceMapGenerator.prototype._validateMapping =
  8450. function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
  8451. aName) {
  8452. // When aOriginal is truthy but has empty values for .line and .column,
  8453. // it is most likely a programmer error. In this case we throw a very
  8454. // specific error message to try to guide them the right way.
  8455. // For example: https://github.com/Polymer/polymer-bundler/pull/519
  8456. if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
  8457. throw new Error(
  8458. 'original.line and original.column are not numbers -- you probably meant to omit ' +
  8459. 'the original mapping entirely and only map the generated position. If so, pass ' +
  8460. 'null for the original mapping instead of an object with empty or null values.'
  8461. );
  8462. }
  8463. if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
  8464. && aGenerated.line > 0 && aGenerated.column >= 0
  8465. && !aOriginal && !aSource && !aName) {
  8466. // Case 1.
  8467. return;
  8468. }
  8469. else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
  8470. && aOriginal && 'line' in aOriginal && 'column' in aOriginal
  8471. && aGenerated.line > 0 && aGenerated.column >= 0
  8472. && aOriginal.line > 0 && aOriginal.column >= 0
  8473. && aSource) {
  8474. // Cases 2 and 3.
  8475. return;
  8476. }
  8477. else {
  8478. throw new Error('Invalid mapping: ' + JSON.stringify({
  8479. generated: aGenerated,
  8480. source: aSource,
  8481. original: aOriginal,
  8482. name: aName
  8483. }));
  8484. }
  8485. };
  8486. /**
  8487. * Serialize the accumulated mappings in to the stream of base 64 VLQs
  8488. * specified by the source map format.
  8489. */
  8490. SourceMapGenerator.prototype._serializeMappings =
  8491. function SourceMapGenerator_serializeMappings() {
  8492. var previousGeneratedColumn = 0;
  8493. var previousGeneratedLine = 1;
  8494. var previousOriginalColumn = 0;
  8495. var previousOriginalLine = 0;
  8496. var previousName = 0;
  8497. var previousSource = 0;
  8498. var result = '';
  8499. var next;
  8500. var mapping;
  8501. var nameIdx;
  8502. var sourceIdx;
  8503. var mappings = this._mappings.toArray();
  8504. for (var i = 0, len = mappings.length; i < len; i++) {
  8505. mapping = mappings[i];
  8506. next = ''
  8507. if (mapping.generatedLine !== previousGeneratedLine) {
  8508. previousGeneratedColumn = 0;
  8509. while (mapping.generatedLine !== previousGeneratedLine) {
  8510. next += ';';
  8511. previousGeneratedLine++;
  8512. }
  8513. }
  8514. else {
  8515. if (i > 0) {
  8516. if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
  8517. continue;
  8518. }
  8519. next += ',';
  8520. }
  8521. }
  8522. next += base64VLQ.encode(mapping.generatedColumn
  8523. - previousGeneratedColumn);
  8524. previousGeneratedColumn = mapping.generatedColumn;
  8525. if (mapping.source != null) {
  8526. sourceIdx = this._sources.indexOf(mapping.source);
  8527. next += base64VLQ.encode(sourceIdx - previousSource);
  8528. previousSource = sourceIdx;
  8529. // lines are stored 0-based in SourceMap spec version 3
  8530. next += base64VLQ.encode(mapping.originalLine - 1
  8531. - previousOriginalLine);
  8532. previousOriginalLine = mapping.originalLine - 1;
  8533. next += base64VLQ.encode(mapping.originalColumn
  8534. - previousOriginalColumn);
  8535. previousOriginalColumn = mapping.originalColumn;
  8536. if (mapping.name != null) {
  8537. nameIdx = this._names.indexOf(mapping.name);
  8538. next += base64VLQ.encode(nameIdx - previousName);
  8539. previousName = nameIdx;
  8540. }
  8541. }
  8542. result += next;
  8543. }
  8544. return result;
  8545. };
  8546. SourceMapGenerator.prototype._generateSourcesContent =
  8547. function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
  8548. return aSources.map(function (source) {
  8549. if (!this._sourcesContents) {
  8550. return null;
  8551. }
  8552. if (aSourceRoot != null) {
  8553. source = util.relative(aSourceRoot, source);
  8554. }
  8555. var key = util.toSetString(source);
  8556. return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
  8557. ? this._sourcesContents[key]
  8558. : null;
  8559. }, this);
  8560. };
  8561. /**
  8562. * Externalize the source map.
  8563. */
  8564. SourceMapGenerator.prototype.toJSON =
  8565. function SourceMapGenerator_toJSON() {
  8566. var map = {
  8567. version: this._version,
  8568. sources: this._sources.toArray(),
  8569. names: this._names.toArray(),
  8570. mappings: this._serializeMappings()
  8571. };
  8572. if (this._file != null) {
  8573. map.file = this._file;
  8574. }
  8575. if (this._sourceRoot != null) {
  8576. map.sourceRoot = this._sourceRoot;
  8577. }
  8578. if (this._sourcesContents) {
  8579. map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
  8580. }
  8581. return map;
  8582. };
  8583. /**
  8584. * Render the source map being generated to a string.
  8585. */
  8586. SourceMapGenerator.prototype.toString =
  8587. function SourceMapGenerator_toString() {
  8588. return JSON.stringify(this.toJSON());
  8589. };
  8590. exports.SourceMapGenerator = SourceMapGenerator;
  8591. /***/ }),
  8592. /* 41 */
  8593. /***/ (function(module, exports, __webpack_require__) {
  8594. /* -*- Mode: js; js-indent-level: 2; -*- */
  8595. /*
  8596. * Copyright 2011 Mozilla Foundation and contributors
  8597. * Licensed under the New BSD license. See LICENSE or:
  8598. * http://opensource.org/licenses/BSD-3-Clause
  8599. *
  8600. * Based on the Base 64 VLQ implementation in Closure Compiler:
  8601. * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
  8602. *
  8603. * Copyright 2011 The Closure Compiler Authors. All rights reserved.
  8604. * Redistribution and use in source and binary forms, with or without
  8605. * modification, are permitted provided that the following conditions are
  8606. * met:
  8607. *
  8608. * * Redistributions of source code must retain the above copyright
  8609. * notice, this list of conditions and the following disclaimer.
  8610. * * Redistributions in binary form must reproduce the above
  8611. * copyright notice, this list of conditions and the following
  8612. * disclaimer in the documentation and/or other materials provided
  8613. * with the distribution.
  8614. * * Neither the name of Google Inc. nor the names of its
  8615. * contributors may be used to endorse or promote products derived
  8616. * from this software without specific prior written permission.
  8617. *
  8618. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  8619. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  8620. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8621. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  8622. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  8623. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  8624. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  8625. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  8626. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  8627. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  8628. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  8629. */
  8630. var base64 = __webpack_require__(80);
  8631. // A single base 64 digit can contain 6 bits of data. For the base 64 variable
  8632. // length quantities we use in the source map spec, the first bit is the sign,
  8633. // the next four bits are the actual value, and the 6th bit is the
  8634. // continuation bit. The continuation bit tells us whether there are more
  8635. // digits in this value following this digit.
  8636. //
  8637. // Continuation
  8638. // | Sign
  8639. // | |
  8640. // V V
  8641. // 101011
  8642. var VLQ_BASE_SHIFT = 5;
  8643. // binary: 100000
  8644. var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
  8645. // binary: 011111
  8646. var VLQ_BASE_MASK = VLQ_BASE - 1;
  8647. // binary: 100000
  8648. var VLQ_CONTINUATION_BIT = VLQ_BASE;
  8649. /**
  8650. * Converts from a two-complement value to a value where the sign bit is
  8651. * placed in the least significant bit. For example, as decimals:
  8652. * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
  8653. * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
  8654. */
  8655. function toVLQSigned(aValue) {
  8656. return aValue < 0
  8657. ? ((-aValue) << 1) + 1
  8658. : (aValue << 1) + 0;
  8659. }
  8660. /**
  8661. * Converts to a two-complement value from a value where the sign bit is
  8662. * placed in the least significant bit. For example, as decimals:
  8663. * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
  8664. * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
  8665. */
  8666. function fromVLQSigned(aValue) {
  8667. var isNegative = (aValue & 1) === 1;
  8668. var shifted = aValue >> 1;
  8669. return isNegative
  8670. ? -shifted
  8671. : shifted;
  8672. }
  8673. /**
  8674. * Returns the base 64 VLQ encoded value.
  8675. */
  8676. exports.encode = function base64VLQ_encode(aValue) {
  8677. var encoded = "";
  8678. var digit;
  8679. var vlq = toVLQSigned(aValue);
  8680. do {
  8681. digit = vlq & VLQ_BASE_MASK;
  8682. vlq >>>= VLQ_BASE_SHIFT;
  8683. if (vlq > 0) {
  8684. // There are still more digits in this value, so we must make sure the
  8685. // continuation bit is marked.
  8686. digit |= VLQ_CONTINUATION_BIT;
  8687. }
  8688. encoded += base64.encode(digit);
  8689. } while (vlq > 0);
  8690. return encoded;
  8691. };
  8692. /**
  8693. * Decodes the next base 64 VLQ value from the given string and returns the
  8694. * value and the rest of the string via the out parameter.
  8695. */
  8696. exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  8697. var strLen = aStr.length;
  8698. var result = 0;
  8699. var shift = 0;
  8700. var continuation, digit;
  8701. do {
  8702. if (aIndex >= strLen) {
  8703. throw new Error("Expected more digits in base 64 VLQ value.");
  8704. }
  8705. digit = base64.decode(aStr.charCodeAt(aIndex++));
  8706. if (digit === -1) {
  8707. throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
  8708. }
  8709. continuation = !!(digit & VLQ_CONTINUATION_BIT);
  8710. digit &= VLQ_BASE_MASK;
  8711. result = result + (digit << shift);
  8712. shift += VLQ_BASE_SHIFT;
  8713. } while (continuation);
  8714. aOutParam.value = fromVLQSigned(result);
  8715. aOutParam.rest = aIndex;
  8716. };
  8717. /***/ }),
  8718. /* 42 */
  8719. /***/ (function(module, exports, __webpack_require__) {
  8720. /* -*- Mode: js; js-indent-level: 2; -*- */
  8721. /*
  8722. * Copyright 2011 Mozilla Foundation and contributors
  8723. * Licensed under the New BSD license. See LICENSE or:
  8724. * http://opensource.org/licenses/BSD-3-Clause
  8725. */
  8726. var util = __webpack_require__(8);
  8727. var has = Object.prototype.hasOwnProperty;
  8728. var hasNativeMap = typeof Map !== "undefined";
  8729. /**
  8730. * A data structure which is a combination of an array and a set. Adding a new
  8731. * member is O(1), testing for membership is O(1), and finding the index of an
  8732. * element is O(1). Removing elements from the set is not supported. Only
  8733. * strings are supported for membership.
  8734. */
  8735. function ArraySet() {
  8736. this._array = [];
  8737. this._set = hasNativeMap ? new Map() : Object.create(null);
  8738. }
  8739. /**
  8740. * Static method for creating ArraySet instances from an existing array.
  8741. */
  8742. ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  8743. var set = new ArraySet();
  8744. for (var i = 0, len = aArray.length; i < len; i++) {
  8745. set.add(aArray[i], aAllowDuplicates);
  8746. }
  8747. return set;
  8748. };
  8749. /**
  8750. * Return how many unique items are in this ArraySet. If duplicates have been
  8751. * added, than those do not count towards the size.
  8752. *
  8753. * @returns Number
  8754. */
  8755. ArraySet.prototype.size = function ArraySet_size() {
  8756. return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
  8757. };
  8758. /**
  8759. * Add the given string to this set.
  8760. *
  8761. * @param String aStr
  8762. */
  8763. ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  8764. var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
  8765. var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
  8766. var idx = this._array.length;
  8767. if (!isDuplicate || aAllowDuplicates) {
  8768. this._array.push(aStr);
  8769. }
  8770. if (!isDuplicate) {
  8771. if (hasNativeMap) {
  8772. this._set.set(aStr, idx);
  8773. } else {
  8774. this._set[sStr] = idx;
  8775. }
  8776. }
  8777. };
  8778. /**
  8779. * Is the given string a member of this set?
  8780. *
  8781. * @param String aStr
  8782. */
  8783. ArraySet.prototype.has = function ArraySet_has(aStr) {
  8784. if (hasNativeMap) {
  8785. return this._set.has(aStr);
  8786. } else {
  8787. var sStr = util.toSetString(aStr);
  8788. return has.call(this._set, sStr);
  8789. }
  8790. };
  8791. /**
  8792. * What is the index of the given string in the array?
  8793. *
  8794. * @param String aStr
  8795. */
  8796. ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  8797. if (hasNativeMap) {
  8798. var idx = this._set.get(aStr);
  8799. if (idx >= 0) {
  8800. return idx;
  8801. }
  8802. } else {
  8803. var sStr = util.toSetString(aStr);
  8804. if (has.call(this._set, sStr)) {
  8805. return this._set[sStr];
  8806. }
  8807. }
  8808. throw new Error('"' + aStr + '" is not in the set.');
  8809. };
  8810. /**
  8811. * What is the element at the given index?
  8812. *
  8813. * @param Number aIdx
  8814. */
  8815. ArraySet.prototype.at = function ArraySet_at(aIdx) {
  8816. if (aIdx >= 0 && aIdx < this._array.length) {
  8817. return this._array[aIdx];
  8818. }
  8819. throw new Error('No element indexed by ' + aIdx);
  8820. };
  8821. /**
  8822. * Returns the array representation of this set (which has the proper indices
  8823. * indicated by indexOf). Note that this is a copy of the internal array used
  8824. * for storing the members so that no one can mess with internal state.
  8825. */
  8826. ArraySet.prototype.toArray = function ArraySet_toArray() {
  8827. return this._array.slice();
  8828. };
  8829. exports.ArraySet = ArraySet;
  8830. /***/ }),
  8831. /* 43 */
  8832. /***/ (function(module, exports, __webpack_require__) {
  8833. "use strict";
  8834. exports.__esModule = true;
  8835. exports.default = void 0;
  8836. /**
  8837. * Contains helpers for safely splitting lists of CSS values,
  8838. * preserving parentheses and quotes.
  8839. *
  8840. * @example
  8841. * const list = postcss.list
  8842. *
  8843. * @namespace list
  8844. */
  8845. var list = {
  8846. split: function split(string, separators, last) {
  8847. var array = [];
  8848. var current = '';
  8849. var split = false;
  8850. var func = 0;
  8851. var quote = false;
  8852. var escape = false;
  8853. for (var i = 0; i < string.length; i++) {
  8854. var letter = string[i];
  8855. if (quote) {
  8856. if (escape) {
  8857. escape = false;
  8858. } else if (letter === '\\') {
  8859. escape = true;
  8860. } else if (letter === quote) {
  8861. quote = false;
  8862. }
  8863. } else if (letter === '"' || letter === '\'') {
  8864. quote = letter;
  8865. } else if (letter === '(') {
  8866. func += 1;
  8867. } else if (letter === ')') {
  8868. if (func > 0) func -= 1;
  8869. } else if (func === 0) {
  8870. if (separators.indexOf(letter) !== -1) split = true;
  8871. }
  8872. if (split) {
  8873. if (current !== '') array.push(current.trim());
  8874. current = '';
  8875. split = false;
  8876. } else {
  8877. current += letter;
  8878. }
  8879. }
  8880. if (last || current !== '') array.push(current.trim());
  8881. return array;
  8882. },
  8883. /**
  8884. * Safely splits space-separated values (such as those for `background`,
  8885. * `border-radius`, and other shorthand properties).
  8886. *
  8887. * @param {string} string Space-separated values.
  8888. *
  8889. * @return {string[]} Split values.
  8890. *
  8891. * @example
  8892. * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']
  8893. */
  8894. space: function space(string) {
  8895. var spaces = [' ', '\n', '\t'];
  8896. return list.split(string, spaces);
  8897. },
  8898. /**
  8899. * Safely splits comma-separated values (such as those for `transition-*`
  8900. * and `background` properties).
  8901. *
  8902. * @param {string} string Comma-separated values.
  8903. *
  8904. * @return {string[]} Split values.
  8905. *
  8906. * @example
  8907. * postcss.list.comma('black, linear-gradient(white, black)')
  8908. * //=> ['black', 'linear-gradient(white, black)']
  8909. */
  8910. comma: function comma(string) {
  8911. return list.split(string, [','], true);
  8912. }
  8913. };
  8914. var _default = list;
  8915. exports.default = _default;
  8916. module.exports = exports.default;
  8917. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpc3QuZXM2Il0sIm5hbWVzIjpbImxpc3QiLCJzcGxpdCIsInN0cmluZyIsInNlcGFyYXRvcnMiLCJsYXN0IiwiYXJyYXkiLCJjdXJyZW50IiwiZnVuYyIsInF1b3RlIiwiZXNjYXBlIiwiaSIsImxlbmd0aCIsImxldHRlciIsImluZGV4T2YiLCJwdXNoIiwidHJpbSIsInNwYWNlIiwic3BhY2VzIiwiY29tbWEiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7OztBQVNBLElBQUlBLElBQUksR0FBRztBQUVUQyxFQUFBQSxLQUZTLGlCQUVGQyxNQUZFLEVBRU1DLFVBRk4sRUFFa0JDLElBRmxCLEVBRXdCO0FBQy9CLFFBQUlDLEtBQUssR0FBRyxFQUFaO0FBQ0EsUUFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQSxRQUFJTCxLQUFLLEdBQUcsS0FBWjtBQUVBLFFBQUlNLElBQUksR0FBRyxDQUFYO0FBQ0EsUUFBSUMsS0FBSyxHQUFHLEtBQVo7QUFDQSxRQUFJQyxNQUFNLEdBQUcsS0FBYjs7QUFFQSxTQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdSLE1BQU0sQ0FBQ1MsTUFBM0IsRUFBbUNELENBQUMsRUFBcEMsRUFBd0M7QUFDdEMsVUFBSUUsTUFBTSxHQUFHVixNQUFNLENBQUNRLENBQUQsQ0FBbkI7O0FBRUEsVUFBSUYsS0FBSixFQUFXO0FBQ1QsWUFBSUMsTUFBSixFQUFZO0FBQ1ZBLFVBQUFBLE1BQU0sR0FBRyxLQUFUO0FBQ0QsU0FGRCxNQUVPLElBQUlHLE1BQU0sS0FBSyxJQUFmLEVBQXFCO0FBQzFCSCxVQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNELFNBRk0sTUFFQSxJQUFJRyxNQUFNLEtBQUtKLEtBQWYsRUFBc0I7QUFDM0JBLFVBQUFBLEtBQUssR0FBRyxLQUFSO0FBQ0Q7QUFDRixPQVJELE1BUU8sSUFBSUksTUFBTSxLQUFLLEdBQVgsSUFBa0JBLE1BQU0sS0FBSyxJQUFqQyxFQUF1QztBQUM1Q0osUUFBQUEsS0FBSyxHQUFHSSxNQUFSO0FBQ0QsT0FGTSxNQUVBLElBQUlBLE1BQU0sS0FBSyxHQUFmLEVBQW9CO0FBQ3pCTCxRQUFBQSxJQUFJLElBQUksQ0FBUjtBQUNELE9BRk0sTUFFQSxJQUFJSyxNQUFNLEtBQUssR0FBZixFQUFvQjtBQUN6QixZQUFJTCxJQUFJLEdBQUcsQ0FBWCxFQUFjQSxJQUFJLElBQUksQ0FBUjtBQUNmLE9BRk0sTUFFQSxJQUFJQSxJQUFJLEtBQUssQ0FBYixFQUFnQjtBQUNyQixZQUFJSixVQUFVLENBQUNVLE9BQVgsQ0FBbUJELE1BQW5CLE1BQStCLENBQUMsQ0FBcEMsRUFBdUNYLEtBQUssR0FBRyxJQUFSO0FBQ3hDOztBQUVELFVBQUlBLEtBQUosRUFBVztBQUNULFlBQUlLLE9BQU8sS0FBSyxFQUFoQixFQUFvQkQsS0FBSyxDQUFDUyxJQUFOLENBQVdSLE9BQU8sQ0FBQ1MsSUFBUixFQUFYO0FBQ3BCVCxRQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNBTCxRQUFBQSxLQUFLLEdBQUcsS0FBUjtBQUNELE9BSkQsTUFJTztBQUNMSyxRQUFBQSxPQUFPLElBQUlNLE1BQVg7QUFDRDtBQUNGOztBQUVELFFBQUlSLElBQUksSUFBSUUsT0FBTyxLQUFLLEVBQXhCLEVBQTRCRCxLQUFLLENBQUNTLElBQU4sQ0FBV1IsT0FBTyxDQUFDUyxJQUFSLEVBQVg7QUFDNUIsV0FBT1YsS0FBUDtBQUNELEdBM0NROztBQTZDVDs7Ozs7Ozs7Ozs7QUFXQVcsRUFBQUEsS0F4RFMsaUJBd0RGZCxNQXhERSxFQXdETTtBQUNiLFFBQUllLE1BQU0sR0FBRyxDQUFDLEdBQUQsRUFBTSxJQUFOLEVBQVksSUFBWixDQUFiO0FBQ0EsV0FBT2pCLElBQUksQ0FBQ0MsS0FBTCxDQUFXQyxNQUFYLEVBQW1CZSxNQUFuQixDQUFQO0FBQ0QsR0EzRFE7O0FBNkRUOzs7Ozs7Ozs7Ozs7QUFZQUMsRUFBQUEsS0F6RVMsaUJBeUVGaEIsTUF6RUUsRUF5RU07QUFDYixXQUFPRixJQUFJLENBQUNDLEtBQUwsQ0FBV0MsTUFBWCxFQUFtQixDQUFDLEdBQUQsQ0FBbkIsRUFBMEIsSUFBMUIsQ0FBUDtBQUNEO0FBM0VRLENBQVg7ZUErRWVGLEkiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRhaW5zIGhlbHBlcnMgZm9yIHNhZmVseSBzcGxpdHRpbmcgbGlzdHMgb2YgQ1NTIHZhbHVlcyxcbiAqIHByZXNlcnZpbmcgcGFyZW50aGVzZXMgYW5kIHF1b3Rlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbGlzdCA9IHBvc3Rjc3MubGlzdFxuICpcbiAqIEBuYW1lc3BhY2UgbGlzdFxuICovXG5sZXQgbGlzdCA9IHtcblxuICBzcGxpdCAoc3RyaW5nLCBzZXBhcmF0b3JzLCBsYXN0KSB7XG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBsZXQgY3VycmVudCA9ICcnXG4gICAgbGV0IHNwbGl0ID0gZmFsc2VcblxuICAgIGxldCBmdW5jID0gMFxuICAgIGxldCBxdW90ZSA9IGZhbHNlXG4gICAgbGV0IGVzY2FwZSA9IGZhbHNlXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGxldHRlciA9IHN0cmluZ1tpXVxuXG4gICAgICBpZiAocXVvdGUpIHtcbiAgICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICAgIGVzY2FwZSA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICBlc2NhcGUgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBxdW90ZSkge1xuICAgICAgICAgIHF1b3RlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsZXR0ZXIgPT09ICdcIicgfHwgbGV0dGVyID09PSAnXFwnJykge1xuICAgICAgICBxdW90ZSA9IGxldHRlclxuICAgICAgfSBlbHNlIGlmIChsZXR0ZXIgPT09ICcoJykge1xuICAgICAgICBmdW5jICs9IDFcbiAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSAnKScpIHtcbiAgICAgICAgaWYgKGZ1bmMgPiAwKSBmdW5jIC09IDFcbiAgICAgIH0gZWxzZSBpZiAoZnVuYyA9PT0gMCkge1xuICAgICAgICBpZiAoc2VwYXJhdG9ycy5pbmRleE9mKGxldHRlcikgIT09IC0xKSBzcGxpdCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNwbGl0KSB7XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSAnJykgYXJyYXkucHVzaChjdXJyZW50LnRyaW0oKSlcbiAgICAgICAgY3VycmVudCA9ICcnXG4gICAgICAgIHNwbGl0ID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gbGV0dGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhc3QgfHwgY3VycmVudCAhPT0gJycpIGFycmF5LnB1c2goY3VycmVudC50cmltKCkpXG4gICAgcmV0dXJuIGFycmF5XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNhZmVseSBzcGxpdHMgc3BhY2Utc2VwYXJhdGVkIHZhbHVlcyAoc3VjaCBhcyB0aG9zZSBmb3IgYGJhY2tncm91bmRgLFxuICAgKiBgYm9yZGVyLXJhZGl1c2AsIGFuZCBvdGhlciBzaG9ydGhhbmQgcHJvcGVydGllcykuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3BhY2Utc2VwYXJhdGVkIHZhbHVlcy5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nW119IFNwbGl0IHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcG9zdGNzcy5saXN0LnNwYWNlKCcxcHggY2FsYygxMCUgKyAxcHgpJykgLy89PiBbJzFweCcsICdjYWxjKDEwJSArIDFweCknXVxuICAgKi9cbiAgc3BhY2UgKHN0cmluZykge1xuICAgIGxldCBzcGFjZXMgPSBbJyAnLCAnXFxuJywgJ1xcdCddXG4gICAgcmV0dXJuIGxpc3Quc3BsaXQoc3RyaW5nLCBzcGFjZXMpXG4gIH0sXG5cbiAgLyoqXG4gICAqIFNhZmVseSBzcGxpdHMgY29tbWEtc2VwYXJhdGVkIHZhbHVlcyAoc3VjaCBhcyB0aG9zZSBmb3IgYHRyYW5zaXRpb24tKmBcbiAgICogYW5kIGBiYWNrZ3JvdW5kYCBwcm9wZXJ0aWVzKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBDb21tYS1zZXBhcmF0ZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gU3BsaXQgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwb3N0Y3NzLmxpc3QuY29tbWEoJ2JsYWNrLCBsaW5lYXItZ3JhZGllbnQod2hpdGUsIGJsYWNrKScpXG4gICAqIC8vPT4gWydibGFjaycsICdsaW5lYXItZ3JhZGllbnQod2hpdGUsIGJsYWNrKSddXG4gICAqL1xuICBjb21tYSAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpc3Quc3BsaXQoc3RyaW5nLCBbJywnXSwgdHJ1ZSlcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RcbiJdLCJmaWxlIjoibGlzdC5qcyJ9
  8918. /***/ }),
  8919. /* 44 */
  8920. /***/ (function(module, exports, __webpack_require__) {
  8921. "use strict";
  8922. exports.__esModule = true;
  8923. exports.default = void 0;
  8924. var _container = _interopRequireDefault(__webpack_require__(21));
  8925. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8926. function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
  8927. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  8928. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  8929. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  8930. /**
  8931. * Represents a CSS file and contains all its parsed nodes.
  8932. *
  8933. * @extends Container
  8934. *
  8935. * @example
  8936. * const root = postcss.parse('a{color:black} b{z-index:2}')
  8937. * root.type //=> 'root'
  8938. * root.nodes.length //=> 2
  8939. */
  8940. var Root = /*#__PURE__*/function (_Container) {
  8941. _inheritsLoose(Root, _Container);
  8942. function Root(defaults) {
  8943. var _this;
  8944. _this = _Container.call(this, defaults) || this;
  8945. _this.type = 'root';
  8946. if (!_this.nodes) _this.nodes = [];
  8947. return _this;
  8948. }
  8949. var _proto = Root.prototype;
  8950. _proto.removeChild = function removeChild(child, ignore) {
  8951. var index = this.index(child);
  8952. if (!ignore && index === 0 && this.nodes.length > 1) {
  8953. this.nodes[1].raws.before = this.nodes[index].raws.before;
  8954. }
  8955. return _Container.prototype.removeChild.call(this, child);
  8956. };
  8957. _proto.normalize = function normalize(child, sample, type) {
  8958. var nodes = _Container.prototype.normalize.call(this, child);
  8959. if (sample) {
  8960. if (type === 'prepend') {
  8961. if (this.nodes.length > 1) {
  8962. sample.raws.before = this.nodes[1].raws.before;
  8963. } else {
  8964. delete sample.raws.before;
  8965. }
  8966. } else if (this.first !== sample) {
  8967. for (var _iterator = _createForOfIteratorHelperLoose(nodes), _step; !(_step = _iterator()).done;) {
  8968. var node = _step.value;
  8969. node.raws.before = sample.raws.before;
  8970. }
  8971. }
  8972. }
  8973. return nodes;
  8974. }
  8975. /**
  8976. * Returns a {@link Result} instance representing the root’s CSS.
  8977. *
  8978. * @param {processOptions} [opts] Options with only `to` and `map` keys.
  8979. *
  8980. * @return {Result} Result with current root’s CSS.
  8981. *
  8982. * @example
  8983. * const root1 = postcss.parse(css1, { from: 'a.css' })
  8984. * const root2 = postcss.parse(css2, { from: 'b.css' })
  8985. * root1.append(root2)
  8986. * const result = root1.toResult({ to: 'all.css', map: true })
  8987. */
  8988. ;
  8989. _proto.toResult = function toResult(opts) {
  8990. if (opts === void 0) {
  8991. opts = {};
  8992. }
  8993. var LazyResult = __webpack_require__(37);
  8994. var Processor = __webpack_require__(36);
  8995. var lazy = new LazyResult(new Processor(), this, opts);
  8996. return lazy.stringify();
  8997. }
  8998. /**
  8999. * @memberof Root#
  9000. * @member {object} raws Information to generate byte-to-byte equal
  9001. * node string as it was in the origin input.
  9002. *
  9003. * Every parser saves its own properties,
  9004. * but the default CSS parser uses:
  9005. *
  9006. * * `after`: the space symbols after the last child to the end of file.
  9007. * * `semicolon`: is the last child has an (optional) semicolon.
  9008. *
  9009. * @example
  9010. * postcss.parse('a {}\n').raws //=> { after: '\n' }
  9011. * postcss.parse('a {}').raws //=> { after: '' }
  9012. */
  9013. ;
  9014. return Root;
  9015. }(_container.default);
  9016. var _default = Root;
  9017. exports.default = _default;
  9018. module.exports = exports.default;
  9019. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvb3QuZXM2Il0sIm5hbWVzIjpbIlJvb3QiLCJkZWZhdWx0cyIsInR5cGUiLCJub2RlcyIsInJlbW92ZUNoaWxkIiwiY2hpbGQiLCJpZ25vcmUiLCJpbmRleCIsImxlbmd0aCIsInJhd3MiLCJiZWZvcmUiLCJub3JtYWxpemUiLCJzYW1wbGUiLCJmaXJzdCIsIm5vZGUiLCJ0b1Jlc3VsdCIsIm9wdHMiLCJMYXp5UmVzdWx0IiwicmVxdWlyZSIsIlByb2Nlc3NvciIsImxhenkiLCJzdHJpbmdpZnkiLCJDb250YWluZXIiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7O0lBVU1BLEk7OztBQUNKLGdCQUFhQyxRQUFiLEVBQXVCO0FBQUE7O0FBQ3JCLGtDQUFNQSxRQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLE1BQVo7QUFDQSxRQUFJLENBQUMsTUFBS0MsS0FBVixFQUFpQixNQUFLQSxLQUFMLEdBQWEsRUFBYjtBQUhJO0FBSXRCOzs7O1NBRURDLFcsR0FBQSxxQkFBYUMsS0FBYixFQUFvQkMsTUFBcEIsRUFBNEI7QUFDMUIsUUFBSUMsS0FBSyxHQUFHLEtBQUtBLEtBQUwsQ0FBV0YsS0FBWCxDQUFaOztBQUVBLFFBQUksQ0FBQ0MsTUFBRCxJQUFXQyxLQUFLLEtBQUssQ0FBckIsSUFBMEIsS0FBS0osS0FBTCxDQUFXSyxNQUFYLEdBQW9CLENBQWxELEVBQXFEO0FBQ25ELFdBQUtMLEtBQUwsQ0FBVyxDQUFYLEVBQWNNLElBQWQsQ0FBbUJDLE1BQW5CLEdBQTRCLEtBQUtQLEtBQUwsQ0FBV0ksS0FBWCxFQUFrQkUsSUFBbEIsQ0FBdUJDLE1BQW5EO0FBQ0Q7O0FBRUQsZ0NBQWFOLFdBQWIsWUFBeUJDLEtBQXpCO0FBQ0QsRzs7U0FFRE0sUyxHQUFBLG1CQUFXTixLQUFYLEVBQWtCTyxNQUFsQixFQUEwQlYsSUFBMUIsRUFBZ0M7QUFDOUIsUUFBSUMsS0FBSyx3QkFBU1EsU0FBVCxZQUFtQk4sS0FBbkIsQ0FBVDs7QUFFQSxRQUFJTyxNQUFKLEVBQVk7QUFDVixVQUFJVixJQUFJLEtBQUssU0FBYixFQUF3QjtBQUN0QixZQUFJLEtBQUtDLEtBQUwsQ0FBV0ssTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUN6QkksVUFBQUEsTUFBTSxDQUFDSCxJQUFQLENBQVlDLE1BQVosR0FBcUIsS0FBS1AsS0FBTCxDQUFXLENBQVgsRUFBY00sSUFBZCxDQUFtQkMsTUFBeEM7QUFDRCxTQUZELE1BRU87QUFDTCxpQkFBT0UsTUFBTSxDQUFDSCxJQUFQLENBQVlDLE1BQW5CO0FBQ0Q7QUFDRixPQU5ELE1BTU8sSUFBSSxLQUFLRyxLQUFMLEtBQWVELE1BQW5CLEVBQTJCO0FBQ2hDLDZEQUFpQlQsS0FBakIsd0NBQXdCO0FBQUEsY0FBZlcsSUFBZTtBQUN0QkEsVUFBQUEsSUFBSSxDQUFDTCxJQUFMLENBQVVDLE1BQVYsR0FBbUJFLE1BQU0sQ0FBQ0gsSUFBUCxDQUFZQyxNQUEvQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxXQUFPUCxLQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O1NBYUFZLFEsR0FBQSxrQkFBVUMsSUFBVixFQUFzQjtBQUFBLFFBQVpBLElBQVk7QUFBWkEsTUFBQUEsSUFBWSxHQUFMLEVBQUs7QUFBQTs7QUFDcEIsUUFBSUMsVUFBVSxHQUFHQyxPQUFPLENBQUMsZUFBRCxDQUF4Qjs7QUFDQSxRQUFJQyxTQUFTLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQXZCOztBQUVBLFFBQUlFLElBQUksR0FBRyxJQUFJSCxVQUFKLENBQWUsSUFBSUUsU0FBSixFQUFmLEVBQWdDLElBQWhDLEVBQXNDSCxJQUF0QyxDQUFYO0FBQ0EsV0FBT0ksSUFBSSxDQUFDQyxTQUFMLEVBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUExRGlCQyxrQjs7ZUEyRUp0QixJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbnRhaW5lcidcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ1NTIGZpbGUgYW5kIGNvbnRhaW5zIGFsbCBpdHMgcGFyc2VkIG5vZGVzLlxuICpcbiAqIEBleHRlbmRzIENvbnRhaW5lclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYXtjb2xvcjpibGFja30gYnt6LWluZGV4OjJ9JylcbiAqIHJvb3QudHlwZSAgICAgICAgIC8vPT4gJ3Jvb3QnXG4gKiByb290Lm5vZGVzLmxlbmd0aCAvLz0+IDJcbiAqL1xuY2xhc3MgUm9vdCBleHRlbmRzIENvbnRhaW5lciB7XG4gIGNvbnN0cnVjdG9yIChkZWZhdWx0cykge1xuICAgIHN1cGVyKGRlZmF1bHRzKVxuICAgIHRoaXMudHlwZSA9ICdyb290J1xuICAgIGlmICghdGhpcy5ub2RlcykgdGhpcy5ub2RlcyA9IFtdXG4gIH1cblxuICByZW1vdmVDaGlsZCAoY2hpbGQsIGlnbm9yZSkge1xuICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXgoY2hpbGQpXG5cbiAgICBpZiAoIWlnbm9yZSAmJiBpbmRleCA9PT0gMCAmJiB0aGlzLm5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMubm9kZXNbMV0ucmF3cy5iZWZvcmUgPSB0aGlzLm5vZGVzW2luZGV4XS5yYXdzLmJlZm9yZVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5yZW1vdmVDaGlsZChjaGlsZClcbiAgfVxuXG4gIG5vcm1hbGl6ZSAoY2hpbGQsIHNhbXBsZSwgdHlwZSkge1xuICAgIGxldCBub2RlcyA9IHN1cGVyLm5vcm1hbGl6ZShjaGlsZClcblxuICAgIGlmIChzYW1wbGUpIHtcbiAgICAgIGlmICh0eXBlID09PSAncHJlcGVuZCcpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHNhbXBsZS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbMV0ucmF3cy5iZWZvcmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgc2FtcGxlLnJhd3MuYmVmb3JlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXJzdCAhPT0gc2FtcGxlKSB7XG4gICAgICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICBub2RlLnJhd3MuYmVmb3JlID0gc2FtcGxlLnJhd3MuYmVmb3JlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIFJlc3VsdH0gaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSByb2904oCZcyBDU1MuXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSBPcHRpb25zIHdpdGggb25seSBgdG9gIGFuZCBgbWFwYCBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZXN1bHR9IFJlc3VsdCB3aXRoIGN1cnJlbnQgcm9vdOKAmXMgQ1NTLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByb290MSA9IHBvc3Rjc3MucGFyc2UoY3NzMSwgeyBmcm9tOiAnYS5jc3MnIH0pXG4gICAqIGNvbnN0IHJvb3QyID0gcG9zdGNzcy5wYXJzZShjc3MyLCB7IGZyb206ICdiLmNzcycgfSlcbiAgICogcm9vdDEuYXBwZW5kKHJvb3QyKVxuICAgKiBjb25zdCByZXN1bHQgPSByb290MS50b1Jlc3VsdCh7IHRvOiAnYWxsLmNzcycsIG1hcDogdHJ1ZSB9KVxuICAgKi9cbiAgdG9SZXN1bHQgKG9wdHMgPSB7IH0pIHtcbiAgICBsZXQgTGF6eVJlc3VsdCA9IHJlcXVpcmUoJy4vbGF6eS1yZXN1bHQnKVxuICAgIGxldCBQcm9jZXNzb3IgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcicpXG5cbiAgICBsZXQgbGF6eSA9IG5ldyBMYXp5UmVzdWx0KG5ldyBQcm9jZXNzb3IoKSwgdGhpcywgb3B0cylcbiAgICByZXR1cm4gbGF6eS5zdHJpbmdpZnkoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBSb290I1xuICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICpcbiAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICpcbiAgICogKiBgYWZ0ZXJgOiB0aGUgc3BhY2Ugc3ltYm9scyBhZnRlciB0aGUgbGFzdCBjaGlsZCB0byB0aGUgZW5kIG9mIGZpbGUuXG4gICAqICogYHNlbWljb2xvbmA6IGlzIHRoZSBsYXN0IGNoaWxkIGhhcyBhbiAob3B0aW9uYWwpIHNlbWljb2xvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcG9zdGNzcy5wYXJzZSgnYSB7fVxcbicpLnJhd3MgLy89PiB7IGFmdGVyOiAnXFxuJyB9XG4gICAqIHBvc3Rjc3MucGFyc2UoJ2Ege30nKS5yYXdzICAgLy89PiB7IGFmdGVyOiAnJyB9XG4gICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb290XG4iXSwiZmlsZSI6InJvb3QuanMifQ==
  9020. /***/ }),
  9021. /* 45 */
  9022. /***/ (function(module, exports, __webpack_require__) {
  9023. "use strict";
  9024. var constants = __webpack_require__(24);
  9025. var PUNCTUATION = constants.PUNCTUATION;
  9026. var STOP_URL_RAW = constants.STOP_URL_RAW;
  9027. var TYPE = constants.TYPE;
  9028. var FULLSTOP = TYPE.FullStop;
  9029. var PLUSSIGN = TYPE.PlusSign;
  9030. var HYPHENMINUS = TYPE.HyphenMinus;
  9031. var PUNCTUATOR = TYPE.Punctuator;
  9032. var TAB = 9;
  9033. var N = 10;
  9034. var F = 12;
  9035. var R = 13;
  9036. var SPACE = 32;
  9037. var BACK_SLASH = 92;
  9038. var E = 101; // 'e'.charCodeAt(0)
  9039. function firstCharOffset(source) {
  9040. // detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)
  9041. if (source.charCodeAt(0) === 0xFEFF || // UTF-16BE
  9042. source.charCodeAt(0) === 0xFFFE) { // UTF-16LE
  9043. return 1;
  9044. }
  9045. return 0;
  9046. }
  9047. function isHex(code) {
  9048. return (code >= 48 && code <= 57) || // 0 .. 9
  9049. (code >= 65 && code <= 70) || // A .. F
  9050. (code >= 97 && code <= 102); // a .. f
  9051. }
  9052. function isNumber(code) {
  9053. return code >= 48 && code <= 57;
  9054. }
  9055. function isWhiteSpace(code) {
  9056. return code === SPACE || code === TAB || isNewline(code);
  9057. }
  9058. function isNewline(code) {
  9059. return code === R || code === N || code === F;
  9060. }
  9061. function getNewlineLength(source, offset, code) {
  9062. if (isNewline(code)) {
  9063. if (code === R && offset + 1 < source.length && source.charCodeAt(offset + 1) === N) {
  9064. return 2;
  9065. }
  9066. return 1;
  9067. }
  9068. return 0;
  9069. }
  9070. function cmpChar(testStr, offset, referenceCode) {
  9071. var code = testStr.charCodeAt(offset);
  9072. // code.toLowerCase() for A..Z
  9073. if (code >= 65 && code <= 90) {
  9074. code = code | 32;
  9075. }
  9076. return code === referenceCode;
  9077. }
  9078. function cmpStr(testStr, start, end, referenceStr) {
  9079. if (end - start !== referenceStr.length) {
  9080. return false;
  9081. }
  9082. if (start < 0 || end > testStr.length) {
  9083. return false;
  9084. }
  9085. for (var i = start; i < end; i++) {
  9086. var testCode = testStr.charCodeAt(i);
  9087. var refCode = referenceStr.charCodeAt(i - start);
  9088. // testCode.toLowerCase() for A..Z
  9089. if (testCode >= 65 && testCode <= 90) {
  9090. testCode = testCode | 32;
  9091. }
  9092. if (testCode !== refCode) {
  9093. return false;
  9094. }
  9095. }
  9096. return true;
  9097. }
  9098. function findWhiteSpaceStart(source, offset) {
  9099. while (offset >= 0 && isWhiteSpace(source.charCodeAt(offset))) {
  9100. offset--;
  9101. }
  9102. return offset + 1;
  9103. }
  9104. function findWhiteSpaceEnd(source, offset) {
  9105. while (offset < source.length && isWhiteSpace(source.charCodeAt(offset))) {
  9106. offset++;
  9107. }
  9108. return offset;
  9109. }
  9110. function findCommentEnd(source, offset) {
  9111. var commentEnd = source.indexOf('*/', offset);
  9112. if (commentEnd === -1) {
  9113. return source.length;
  9114. }
  9115. return commentEnd + 2;
  9116. }
  9117. function findStringEnd(source, offset, quote) {
  9118. for (; offset < source.length; offset++) {
  9119. var code = source.charCodeAt(offset);
  9120. // TODO: bad string
  9121. if (code === BACK_SLASH) {
  9122. offset++;
  9123. } else if (code === quote) {
  9124. offset++;
  9125. break;
  9126. }
  9127. }
  9128. return offset;
  9129. }
  9130. function findDecimalNumberEnd(source, offset) {
  9131. while (offset < source.length && isNumber(source.charCodeAt(offset))) {
  9132. offset++;
  9133. }
  9134. return offset;
  9135. }
  9136. function findNumberEnd(source, offset, allowFraction) {
  9137. var code;
  9138. offset = findDecimalNumberEnd(source, offset);
  9139. // fraction: .\d+
  9140. if (allowFraction && offset + 1 < source.length && source.charCodeAt(offset) === FULLSTOP) {
  9141. code = source.charCodeAt(offset + 1);
  9142. if (isNumber(code)) {
  9143. offset = findDecimalNumberEnd(source, offset + 1);
  9144. }
  9145. }
  9146. // exponent: e[+-]\d+
  9147. if (offset + 1 < source.length) {
  9148. if ((source.charCodeAt(offset) | 32) === E) { // case insensitive check for `e`
  9149. code = source.charCodeAt(offset + 1);
  9150. if (code === PLUSSIGN || code === HYPHENMINUS) {
  9151. if (offset + 2 < source.length) {
  9152. code = source.charCodeAt(offset + 2);
  9153. }
  9154. }
  9155. if (isNumber(code)) {
  9156. offset = findDecimalNumberEnd(source, offset + 2);
  9157. }
  9158. }
  9159. }
  9160. return offset;
  9161. }
  9162. // skip escaped unicode sequence that can ends with space
  9163. // [0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
  9164. function findEscapeEnd(source, offset) {
  9165. for (var i = 0; i < 7 && offset + i < source.length; i++) {
  9166. var code = source.charCodeAt(offset + i);
  9167. if (i !== 6 && isHex(code)) {
  9168. continue;
  9169. }
  9170. if (i > 0) {
  9171. offset += i - 1 + getNewlineLength(source, offset + i, code);
  9172. if (code === SPACE || code === TAB) {
  9173. offset++;
  9174. }
  9175. }
  9176. break;
  9177. }
  9178. return offset;
  9179. }
  9180. function findIdentifierEnd(source, offset) {
  9181. for (; offset < source.length; offset++) {
  9182. var code = source.charCodeAt(offset);
  9183. if (code === BACK_SLASH) {
  9184. offset = findEscapeEnd(source, offset + 1);
  9185. } else if (code < 0x80 && PUNCTUATION[code] === PUNCTUATOR) {
  9186. break;
  9187. }
  9188. }
  9189. return offset;
  9190. }
  9191. function findUrlRawEnd(source, offset) {
  9192. for (; offset < source.length; offset++) {
  9193. var code = source.charCodeAt(offset);
  9194. if (code === BACK_SLASH) {
  9195. offset = findEscapeEnd(source, offset + 1);
  9196. } else if (code < 0x80 && STOP_URL_RAW[code] === 1) {
  9197. break;
  9198. }
  9199. }
  9200. return offset;
  9201. }
  9202. module.exports = {
  9203. firstCharOffset: firstCharOffset,
  9204. isHex: isHex,
  9205. isNumber: isNumber,
  9206. isWhiteSpace: isWhiteSpace,
  9207. isNewline: isNewline,
  9208. getNewlineLength: getNewlineLength,
  9209. cmpChar: cmpChar,
  9210. cmpStr: cmpStr,
  9211. findWhiteSpaceStart: findWhiteSpaceStart,
  9212. findWhiteSpaceEnd: findWhiteSpaceEnd,
  9213. findCommentEnd: findCommentEnd,
  9214. findStringEnd: findStringEnd,
  9215. findDecimalNumberEnd: findDecimalNumberEnd,
  9216. findNumberEnd: findNumberEnd,
  9217. findEscapeEnd: findEscapeEnd,
  9218. findIdentifierEnd: findIdentifierEnd,
  9219. findUrlRawEnd: findUrlRawEnd
  9220. };
  9221. /***/ }),
  9222. /* 46 */
  9223. /***/ (function(module, exports, __webpack_require__) {
  9224. "use strict";
  9225. var createCustomError = __webpack_require__(23);
  9226. var generateGrammar = __webpack_require__(25);
  9227. function fromMatchResult(matchResult) {
  9228. var tokens = matchResult.tokens;
  9229. var longestMatch = matchResult.longestMatch;
  9230. var node = longestMatch < tokens.length ? tokens[longestMatch].node : null;
  9231. var mismatchOffset = 0;
  9232. var entries = 0;
  9233. var css = '';
  9234. for (var i = 0; i < tokens.length; i++) {
  9235. if (i === longestMatch) {
  9236. mismatchOffset = css.length;
  9237. }
  9238. if (node !== null && tokens[i].node === node) {
  9239. if (i <= longestMatch) {
  9240. entries++;
  9241. } else {
  9242. entries = 0;
  9243. }
  9244. }
  9245. css += tokens[i].value;
  9246. }
  9247. if (node === null) {
  9248. mismatchOffset = css.length;
  9249. }
  9250. return {
  9251. node: node,
  9252. css: css,
  9253. mismatchOffset: mismatchOffset,
  9254. last: node === null || entries > 1
  9255. };
  9256. }
  9257. function getLocation(node, point) {
  9258. var loc = node && node.loc && node.loc[point];
  9259. if (loc) {
  9260. return {
  9261. offset: loc.offset,
  9262. line: loc.line,
  9263. column: loc.column
  9264. };
  9265. }
  9266. return null;
  9267. }
  9268. var SyntaxReferenceError = function(type, referenceName) {
  9269. var error = createCustomError(
  9270. 'SyntaxReferenceError',
  9271. type + (referenceName ? ' `' + referenceName + '`' : '')
  9272. );
  9273. error.reference = referenceName;
  9274. return error;
  9275. };
  9276. var MatchError = function(message, lexer, syntax, node, matchResult) {
  9277. var error = createCustomError('SyntaxMatchError', message);
  9278. var details = fromMatchResult(matchResult);
  9279. var mismatchOffset = details.mismatchOffset || 0;
  9280. var badNode = details.node || node;
  9281. var end = getLocation(badNode, 'end');
  9282. var start = details.last ? end : getLocation(badNode, 'start');
  9283. var css = details.css;
  9284. error.rawMessage = message;
  9285. error.syntax = syntax ? generateGrammar(syntax) : '<generic>';
  9286. error.css = css;
  9287. error.mismatchOffset = mismatchOffset;
  9288. error.loc = {
  9289. source: (badNode && badNode.loc && badNode.loc.source) || '<unknown>',
  9290. start: start,
  9291. end: end
  9292. };
  9293. error.line = start ? start.line : undefined;
  9294. error.column = start ? start.column : undefined;
  9295. error.offset = start ? start.offset : undefined;
  9296. error.message = message + '\n' +
  9297. ' syntax: ' + error.syntax + '\n' +
  9298. ' value: ' + (error.css || '<empty string>') + '\n' +
  9299. ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';
  9300. return error;
  9301. };
  9302. module.exports = {
  9303. SyntaxReferenceError: SyntaxReferenceError,
  9304. MatchError: MatchError
  9305. };
  9306. /***/ }),
  9307. /* 47 */
  9308. /***/ (function(module, exports, __webpack_require__) {
  9309. var createCustomError = __webpack_require__(23);
  9310. var SyntaxParseError = function(message, input, offset) {
  9311. var error = createCustomError('SyntaxParseError', message);
  9312. error.input = input;
  9313. error.offset = offset;
  9314. error.rawMessage = message;
  9315. error.message = error.rawMessage + '\n' +
  9316. ' ' + error.input + '\n' +
  9317. '--' + new Array((error.offset || error.input.length) + 1).join('-') + '^';
  9318. return error;
  9319. };
  9320. module.exports = {
  9321. SyntaxParseError: SyntaxParseError
  9322. };
  9323. /***/ }),
  9324. /* 48 */
  9325. /***/ (function(module, exports, __webpack_require__) {
  9326. "use strict";
  9327. var noop = function() {};
  9328. function ensureFunction(value) {
  9329. return typeof value === 'function' ? value : noop;
  9330. }
  9331. module.exports = function(node, options, context) {
  9332. function walk(node) {
  9333. enter.call(context, node);
  9334. switch (node.type) {
  9335. case 'Group':
  9336. node.terms.forEach(walk);
  9337. break;
  9338. case 'Multiplier':
  9339. walk(node.term);
  9340. break;
  9341. case 'Type':
  9342. case 'Property':
  9343. case 'Keyword':
  9344. case 'AtKeyword':
  9345. case 'Function':
  9346. case 'String':
  9347. case 'Token':
  9348. case 'Comma':
  9349. break;
  9350. default:
  9351. throw new Error('Unknown type: ' + node.type);
  9352. }
  9353. leave.call(context, node);
  9354. }
  9355. var enter = noop;
  9356. var leave = noop;
  9357. if (typeof options === 'function') {
  9358. enter = options;
  9359. } else if (options) {
  9360. enter = ensureFunction(options.enter);
  9361. leave = ensureFunction(options.leave);
  9362. }
  9363. if (enter === noop && leave === noop) {
  9364. throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
  9365. }
  9366. walk(node, context);
  9367. };
  9368. /***/ }),
  9369. /* 49 */
  9370. /***/ (function(module, exports, __webpack_require__) {
  9371. var parse = __webpack_require__(27);
  9372. var MATCH = { type: 'Match' };
  9373. var MISMATCH = { type: 'Mismatch' };
  9374. var DISALLOW_EMPTY = { type: 'DisallowEmpty' };
  9375. var LEFTPARENTHESIS = 40; // (
  9376. var RIGHTPARENTHESIS = 41; // )
  9377. function createCondition(match, thenBranch, elseBranch) {
  9378. // reduce node count
  9379. if (thenBranch === MATCH && elseBranch === MISMATCH) {
  9380. return match;
  9381. }
  9382. if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {
  9383. return match;
  9384. }
  9385. if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {
  9386. thenBranch = match.then;
  9387. match = match.match;
  9388. }
  9389. return {
  9390. type: 'If',
  9391. match: match,
  9392. then: thenBranch,
  9393. else: elseBranch
  9394. };
  9395. }
  9396. function isFunctionType(name) {
  9397. return (
  9398. name.length > 2 &&
  9399. name.charCodeAt(name.length - 2) === LEFTPARENTHESIS &&
  9400. name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS
  9401. );
  9402. }
  9403. function isEnumCapatible(term) {
  9404. return (
  9405. term.type === 'Keyword' ||
  9406. term.type === 'AtKeyword' ||
  9407. term.type === 'Function' ||
  9408. term.type === 'Type' && isFunctionType(term.name)
  9409. );
  9410. }
  9411. function buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {
  9412. switch (combinator) {
  9413. case ' ':
  9414. // Juxtaposing components means that all of them must occur, in the given order.
  9415. //
  9416. // a b c
  9417. // =
  9418. // match a
  9419. // then match b
  9420. // then match c
  9421. // then MATCH
  9422. // else MISMATCH
  9423. // else MISMATCH
  9424. // else MISMATCH
  9425. var result = MATCH;
  9426. for (var i = terms.length - 1; i >= 0; i--) {
  9427. var term = terms[i];
  9428. result = createCondition(
  9429. term,
  9430. result,
  9431. MISMATCH
  9432. );
  9433. };
  9434. return result;
  9435. case '|':
  9436. // A bar (|) separates two or more alternatives: exactly one of them must occur.
  9437. //
  9438. // a | b | c
  9439. // =
  9440. // match a
  9441. // then MATCH
  9442. // else match b
  9443. // then MATCH
  9444. // else match c
  9445. // then MATCH
  9446. // else MISMATCH
  9447. var result = MISMATCH;
  9448. var map = null;
  9449. for (var i = terms.length - 1; i >= 0; i--) {
  9450. var term = terms[i];
  9451. // reduce sequence of keywords into a Enum
  9452. if (isEnumCapatible(term)) {
  9453. if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {
  9454. map = Object.create(null);
  9455. result = createCondition(
  9456. {
  9457. type: 'Enum',
  9458. map: map
  9459. },
  9460. MATCH,
  9461. result
  9462. );
  9463. }
  9464. if (map !== null) {
  9465. var key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();
  9466. if (key in map === false) {
  9467. map[key] = term;
  9468. continue;
  9469. }
  9470. }
  9471. }
  9472. map = null;
  9473. // create a new conditonal node
  9474. result = createCondition(
  9475. term,
  9476. MATCH,
  9477. result
  9478. );
  9479. };
  9480. return result;
  9481. case '&&':
  9482. // A double ampersand (&&) separates two or more components,
  9483. // all of which must occur, in any order.
  9484. // Use MatchOnce for groups with a large number of terms,
  9485. // since &&-groups produces at least N!-node trees
  9486. if (terms.length > 5) {
  9487. return {
  9488. type: 'MatchOnce',
  9489. terms: terms,
  9490. all: true
  9491. };
  9492. }
  9493. // Use a combination tree for groups with small number of terms
  9494. //
  9495. // a && b && c
  9496. // =
  9497. // match a
  9498. // then [b && c]
  9499. // else match b
  9500. // then [a && c]
  9501. // else match c
  9502. // then [a && b]
  9503. // else MISMATCH
  9504. //
  9505. // a && b
  9506. // =
  9507. // match a
  9508. // then match b
  9509. // then MATCH
  9510. // else MISMATCH
  9511. // else match b
  9512. // then match a
  9513. // then MATCH
  9514. // else MISMATCH
  9515. // else MISMATCH
  9516. var result = MISMATCH;
  9517. for (var i = terms.length - 1; i >= 0; i--) {
  9518. var term = terms[i];
  9519. var thenClause;
  9520. if (terms.length > 1) {
  9521. thenClause = buildGroupMatchGraph(
  9522. combinator,
  9523. terms.filter(function(newGroupTerm) {
  9524. return newGroupTerm !== term;
  9525. }),
  9526. false
  9527. );
  9528. } else {
  9529. thenClause = MATCH;
  9530. }
  9531. result = createCondition(
  9532. term,
  9533. thenClause,
  9534. result
  9535. );
  9536. };
  9537. return result;
  9538. case '||':
  9539. // A double bar (||) separates two or more options:
  9540. // one or more of them must occur, in any order.
  9541. // Use MatchOnce for groups with a large number of terms,
  9542. // since ||-groups produces at least N!-node trees
  9543. if (terms.length > 5) {
  9544. return {
  9545. type: 'MatchOnce',
  9546. terms: terms,
  9547. all: false
  9548. };;
  9549. }
  9550. // Use a combination tree for groups with small number of terms
  9551. //
  9552. // a || b || c
  9553. // =
  9554. // match a
  9555. // then [b || c]
  9556. // else match b
  9557. // then [a || c]
  9558. // else match c
  9559. // then [a || b]
  9560. // else MISMATCH
  9561. //
  9562. // a || b
  9563. // =
  9564. // match a
  9565. // then match b
  9566. // then MATCH
  9567. // else MATCH
  9568. // else match b
  9569. // then match a
  9570. // then MATCH
  9571. // else MATCH
  9572. // else MISMATCH
  9573. var result = atLeastOneTermMatched ? MATCH : MISMATCH;
  9574. for (var i = terms.length - 1; i >= 0; i--) {
  9575. var term = terms[i];
  9576. var thenClause;
  9577. if (terms.length > 1) {
  9578. thenClause = buildGroupMatchGraph(
  9579. combinator,
  9580. terms.filter(function(newGroupTerm) {
  9581. return newGroupTerm !== term;
  9582. }),
  9583. true
  9584. );
  9585. } else {
  9586. thenClause = MATCH;
  9587. }
  9588. result = createCondition(
  9589. term,
  9590. thenClause,
  9591. result
  9592. );
  9593. };
  9594. return result;
  9595. }
  9596. }
  9597. function buildMultiplierMatchGraph(node) {
  9598. var result = MATCH;
  9599. var matchTerm = buildMatchGraph(node.term);
  9600. if (node.max === 0) {
  9601. // disable repeating of empty match to prevent infinite loop
  9602. matchTerm = createCondition(
  9603. matchTerm,
  9604. DISALLOW_EMPTY,
  9605. MISMATCH
  9606. );
  9607. // an occurrence count is not limited, make a cycle;
  9608. // to collect more terms on each following matching mismatch
  9609. result = createCondition(
  9610. matchTerm,
  9611. null, // will be a loop
  9612. MISMATCH
  9613. );
  9614. result.then = createCondition(
  9615. MATCH,
  9616. MATCH,
  9617. result // make a loop
  9618. );
  9619. if (node.comma) {
  9620. result.then.else = createCondition(
  9621. { type: 'Comma', syntax: node },
  9622. result,
  9623. MISMATCH
  9624. );
  9625. }
  9626. } else {
  9627. // create a match node chain for [min .. max] interval with optional matches
  9628. for (var i = node.min || 1; i <= node.max; i++) {
  9629. if (node.comma && result !== MATCH) {
  9630. result = createCondition(
  9631. { type: 'Comma', syntax: node },
  9632. result,
  9633. MISMATCH
  9634. );
  9635. }
  9636. result = createCondition(
  9637. matchTerm,
  9638. createCondition(
  9639. MATCH,
  9640. MATCH,
  9641. result
  9642. ),
  9643. MISMATCH
  9644. );
  9645. }
  9646. }
  9647. if (node.min === 0) {
  9648. // allow zero match
  9649. result = createCondition(
  9650. MATCH,
  9651. MATCH,
  9652. result
  9653. );
  9654. } else {
  9655. // create a match node chain to collect [0 ... min - 1] required matches
  9656. for (var i = 0; i < node.min - 1; i++) {
  9657. if (node.comma && result !== MATCH) {
  9658. result = createCondition(
  9659. { type: 'Comma', syntax: node },
  9660. result,
  9661. MISMATCH
  9662. );
  9663. }
  9664. result = createCondition(
  9665. matchTerm,
  9666. result,
  9667. MISMATCH
  9668. );
  9669. }
  9670. }
  9671. return result;
  9672. }
  9673. function buildMatchGraph(node) {
  9674. if (typeof node === 'function') {
  9675. return {
  9676. type: 'Generic',
  9677. fn: node
  9678. };
  9679. }
  9680. switch (node.type) {
  9681. case 'Group':
  9682. var result = buildGroupMatchGraph(
  9683. node.combinator,
  9684. node.terms.map(buildMatchGraph),
  9685. false
  9686. );
  9687. if (node.disallowEmpty) {
  9688. result = createCondition(
  9689. result,
  9690. DISALLOW_EMPTY,
  9691. MISMATCH
  9692. );
  9693. }
  9694. return result;
  9695. case 'Multiplier':
  9696. return buildMultiplierMatchGraph(node);
  9697. case 'Type':
  9698. case 'Property':
  9699. return {
  9700. type: node.type,
  9701. name: node.name,
  9702. syntax: node
  9703. };
  9704. case 'Keyword':
  9705. return {
  9706. type: node.type,
  9707. name: node.name.toLowerCase(),
  9708. syntax: node
  9709. };
  9710. case 'AtKeyword':
  9711. return {
  9712. type: node.type,
  9713. name: '@' + node.name.toLowerCase(),
  9714. syntax: node
  9715. };
  9716. case 'Function':
  9717. return {
  9718. type: node.type,
  9719. name: node.name.toLowerCase() + '(',
  9720. syntax: node
  9721. };
  9722. case 'String':
  9723. // convert a one char length String to a Token
  9724. if (node.value.length === 3) {
  9725. return {
  9726. type: 'Token',
  9727. value: node.value.charAt(1),
  9728. syntax: node
  9729. };
  9730. }
  9731. // otherwise use it as is
  9732. return {
  9733. type: node.type,
  9734. value: node.value,
  9735. syntax: node
  9736. };
  9737. case 'Token':
  9738. return {
  9739. type: node.type,
  9740. value: node.value,
  9741. syntax: node
  9742. };
  9743. case 'Comma':
  9744. return {
  9745. type: node.type,
  9746. syntax: node
  9747. };
  9748. default:
  9749. throw new Error('Unknown node type:', node.type);
  9750. }
  9751. }
  9752. module.exports = {
  9753. MATCH: MATCH,
  9754. MISMATCH: MISMATCH,
  9755. DISALLOW_EMPTY: DISALLOW_EMPTY,
  9756. buildMatchGraph: function(syntaxTree, ref) {
  9757. if (typeof syntaxTree === 'string') {
  9758. syntaxTree = parse(syntaxTree);
  9759. }
  9760. return {
  9761. type: 'MatchGraph',
  9762. match: buildMatchGraph(syntaxTree),
  9763. syntax: ref || null,
  9764. source: syntaxTree
  9765. };
  9766. }
  9767. };
  9768. /***/ }),
  9769. /* 50 */
  9770. /***/ (function(module, exports, __webpack_require__) {
  9771. /* -*- Mode: js; js-indent-level: 2; -*- */
  9772. /*
  9773. * Copyright 2011 Mozilla Foundation and contributors
  9774. * Licensed under the New BSD license. See LICENSE or:
  9775. * http://opensource.org/licenses/BSD-3-Clause
  9776. */
  9777. var base64VLQ = __webpack_require__(51);
  9778. var util = __webpack_require__(9);
  9779. var ArraySet = __webpack_require__(52).ArraySet;
  9780. var MappingList = __webpack_require__(116).MappingList;
  9781. /**
  9782. * An instance of the SourceMapGenerator represents a source map which is
  9783. * being built incrementally. You may pass an object with the following
  9784. * properties:
  9785. *
  9786. * - file: The filename of the generated source.
  9787. * - sourceRoot: A root for all relative URLs in this source map.
  9788. */
  9789. function SourceMapGenerator(aArgs) {
  9790. if (!aArgs) {
  9791. aArgs = {};
  9792. }
  9793. this._file = util.getArg(aArgs, 'file', null);
  9794. this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  9795. this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  9796. this._sources = new ArraySet();
  9797. this._names = new ArraySet();
  9798. this._mappings = new MappingList();
  9799. this._sourcesContents = null;
  9800. }
  9801. SourceMapGenerator.prototype._version = 3;
  9802. /**
  9803. * Creates a new SourceMapGenerator based on a SourceMapConsumer
  9804. *
  9805. * @param aSourceMapConsumer The SourceMap.
  9806. */
  9807. SourceMapGenerator.fromSourceMap =
  9808. function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
  9809. var sourceRoot = aSourceMapConsumer.sourceRoot;
  9810. var generator = new SourceMapGenerator({
  9811. file: aSourceMapConsumer.file,
  9812. sourceRoot: sourceRoot
  9813. });
  9814. aSourceMapConsumer.eachMapping(function (mapping) {
  9815. var newMapping = {
  9816. generated: {
  9817. line: mapping.generatedLine,
  9818. column: mapping.generatedColumn
  9819. }
  9820. };
  9821. if (mapping.source != null) {
  9822. newMapping.source = mapping.source;
  9823. if (sourceRoot != null) {
  9824. newMapping.source = util.relative(sourceRoot, newMapping.source);
  9825. }
  9826. newMapping.original = {
  9827. line: mapping.originalLine,
  9828. column: mapping.originalColumn
  9829. };
  9830. if (mapping.name != null) {
  9831. newMapping.name = mapping.name;
  9832. }
  9833. }
  9834. generator.addMapping(newMapping);
  9835. });
  9836. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  9837. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  9838. if (content != null) {
  9839. generator.setSourceContent(sourceFile, content);
  9840. }
  9841. });
  9842. return generator;
  9843. };
  9844. /**
  9845. * Add a single mapping from original source line and column to the generated
  9846. * source's line and column for this source map being created. The mapping
  9847. * object should have the following properties:
  9848. *
  9849. * - generated: An object with the generated line and column positions.
  9850. * - original: An object with the original line and column positions.
  9851. * - source: The original source file (relative to the sourceRoot).
  9852. * - name: An optional original token name for this mapping.
  9853. */
  9854. SourceMapGenerator.prototype.addMapping =
  9855. function SourceMapGenerator_addMapping(aArgs) {
  9856. var generated = util.getArg(aArgs, 'generated');
  9857. var original = util.getArg(aArgs, 'original', null);
  9858. var source = util.getArg(aArgs, 'source', null);
  9859. var name = util.getArg(aArgs, 'name', null);
  9860. if (!this._skipValidation) {
  9861. this._validateMapping(generated, original, source, name);
  9862. }
  9863. if (source != null) {
  9864. source = String(source);
  9865. if (!this._sources.has(source)) {
  9866. this._sources.add(source);
  9867. }
  9868. }
  9869. if (name != null) {
  9870. name = String(name);
  9871. if (!this._names.has(name)) {
  9872. this._names.add(name);
  9873. }
  9874. }
  9875. this._mappings.add({
  9876. generatedLine: generated.line,
  9877. generatedColumn: generated.column,
  9878. originalLine: original != null && original.line,
  9879. originalColumn: original != null && original.column,
  9880. source: source,
  9881. name: name
  9882. });
  9883. };
  9884. /**
  9885. * Set the source content for a source file.
  9886. */
  9887. SourceMapGenerator.prototype.setSourceContent =
  9888. function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
  9889. var source = aSourceFile;
  9890. if (this._sourceRoot != null) {
  9891. source = util.relative(this._sourceRoot, source);
  9892. }
  9893. if (aSourceContent != null) {
  9894. // Add the source content to the _sourcesContents map.
  9895. // Create a new _sourcesContents map if the property is null.
  9896. if (!this._sourcesContents) {
  9897. this._sourcesContents = Object.create(null);
  9898. }
  9899. this._sourcesContents[util.toSetString(source)] = aSourceContent;
  9900. } else if (this._sourcesContents) {
  9901. // Remove the source file from the _sourcesContents map.
  9902. // If the _sourcesContents map is empty, set the property to null.
  9903. delete this._sourcesContents[util.toSetString(source)];
  9904. if (Object.keys(this._sourcesContents).length === 0) {
  9905. this._sourcesContents = null;
  9906. }
  9907. }
  9908. };
  9909. /**
  9910. * Applies the mappings of a sub-source-map for a specific source file to the
  9911. * source map being generated. Each mapping to the supplied source file is
  9912. * rewritten using the supplied source map. Note: The resolution for the
  9913. * resulting mappings is the minimium of this map and the supplied map.
  9914. *
  9915. * @param aSourceMapConsumer The source map to be applied.
  9916. * @param aSourceFile Optional. The filename of the source file.
  9917. * If omitted, SourceMapConsumer's file property will be used.
  9918. * @param aSourceMapPath Optional. The dirname of the path to the source map
  9919. * to be applied. If relative, it is relative to the SourceMapConsumer.
  9920. * This parameter is needed when the two source maps aren't in the same
  9921. * directory, and the source map to be applied contains relative source
  9922. * paths. If so, those relative source paths need to be rewritten
  9923. * relative to the SourceMapGenerator.
  9924. */
  9925. SourceMapGenerator.prototype.applySourceMap =
  9926. function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
  9927. var sourceFile = aSourceFile;
  9928. // If aSourceFile is omitted, we will use the file property of the SourceMap
  9929. if (aSourceFile == null) {
  9930. if (aSourceMapConsumer.file == null) {
  9931. throw new Error(
  9932. 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
  9933. 'or the source map\'s "file" property. Both were omitted.'
  9934. );
  9935. }
  9936. sourceFile = aSourceMapConsumer.file;
  9937. }
  9938. var sourceRoot = this._sourceRoot;
  9939. // Make "sourceFile" relative if an absolute Url is passed.
  9940. if (sourceRoot != null) {
  9941. sourceFile = util.relative(sourceRoot, sourceFile);
  9942. }
  9943. // Applying the SourceMap can add and remove items from the sources and
  9944. // the names array.
  9945. var newSources = new ArraySet();
  9946. var newNames = new ArraySet();
  9947. // Find mappings for the "sourceFile"
  9948. this._mappings.unsortedForEach(function (mapping) {
  9949. if (mapping.source === sourceFile && mapping.originalLine != null) {
  9950. // Check if it can be mapped by the source map, then update the mapping.
  9951. var original = aSourceMapConsumer.originalPositionFor({
  9952. line: mapping.originalLine,
  9953. column: mapping.originalColumn
  9954. });
  9955. if (original.source != null) {
  9956. // Copy mapping
  9957. mapping.source = original.source;
  9958. if (aSourceMapPath != null) {
  9959. mapping.source = util.join(aSourceMapPath, mapping.source)
  9960. }
  9961. if (sourceRoot != null) {
  9962. mapping.source = util.relative(sourceRoot, mapping.source);
  9963. }
  9964. mapping.originalLine = original.line;
  9965. mapping.originalColumn = original.column;
  9966. if (original.name != null) {
  9967. mapping.name = original.name;
  9968. }
  9969. }
  9970. }
  9971. var source = mapping.source;
  9972. if (source != null && !newSources.has(source)) {
  9973. newSources.add(source);
  9974. }
  9975. var name = mapping.name;
  9976. if (name != null && !newNames.has(name)) {
  9977. newNames.add(name);
  9978. }
  9979. }, this);
  9980. this._sources = newSources;
  9981. this._names = newNames;
  9982. // Copy sourcesContents of applied map.
  9983. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  9984. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  9985. if (content != null) {
  9986. if (aSourceMapPath != null) {
  9987. sourceFile = util.join(aSourceMapPath, sourceFile);
  9988. }
  9989. if (sourceRoot != null) {
  9990. sourceFile = util.relative(sourceRoot, sourceFile);
  9991. }
  9992. this.setSourceContent(sourceFile, content);
  9993. }
  9994. }, this);
  9995. };
  9996. /**
  9997. * A mapping can have one of the three levels of data:
  9998. *
  9999. * 1. Just the generated position.
  10000. * 2. The Generated position, original position, and original source.
  10001. * 3. Generated and original position, original source, as well as a name
  10002. * token.
  10003. *
  10004. * To maintain consistency, we validate that any new mapping being added falls
  10005. * in to one of these categories.
  10006. */
  10007. SourceMapGenerator.prototype._validateMapping =
  10008. function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
  10009. aName) {
  10010. // When aOriginal is truthy but has empty values for .line and .column,
  10011. // it is most likely a programmer error. In this case we throw a very
  10012. // specific error message to try to guide them the right way.
  10013. // For example: https://github.com/Polymer/polymer-bundler/pull/519
  10014. if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
  10015. throw new Error(
  10016. 'original.line and original.column are not numbers -- you probably meant to omit ' +
  10017. 'the original mapping entirely and only map the generated position. If so, pass ' +
  10018. 'null for the original mapping instead of an object with empty or null values.'
  10019. );
  10020. }
  10021. if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
  10022. && aGenerated.line > 0 && aGenerated.column >= 0
  10023. && !aOriginal && !aSource && !aName) {
  10024. // Case 1.
  10025. return;
  10026. }
  10027. else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
  10028. && aOriginal && 'line' in aOriginal && 'column' in aOriginal
  10029. && aGenerated.line > 0 && aGenerated.column >= 0
  10030. && aOriginal.line > 0 && aOriginal.column >= 0
  10031. && aSource) {
  10032. // Cases 2 and 3.
  10033. return;
  10034. }
  10035. else {
  10036. throw new Error('Invalid mapping: ' + JSON.stringify({
  10037. generated: aGenerated,
  10038. source: aSource,
  10039. original: aOriginal,
  10040. name: aName
  10041. }));
  10042. }
  10043. };
  10044. /**
  10045. * Serialize the accumulated mappings in to the stream of base 64 VLQs
  10046. * specified by the source map format.
  10047. */
  10048. SourceMapGenerator.prototype._serializeMappings =
  10049. function SourceMapGenerator_serializeMappings() {
  10050. var previousGeneratedColumn = 0;
  10051. var previousGeneratedLine = 1;
  10052. var previousOriginalColumn = 0;
  10053. var previousOriginalLine = 0;
  10054. var previousName = 0;
  10055. var previousSource = 0;
  10056. var result = '';
  10057. var next;
  10058. var mapping;
  10059. var nameIdx;
  10060. var sourceIdx;
  10061. var mappings = this._mappings.toArray();
  10062. for (var i = 0, len = mappings.length; i < len; i++) {
  10063. mapping = mappings[i];
  10064. next = ''
  10065. if (mapping.generatedLine !== previousGeneratedLine) {
  10066. previousGeneratedColumn = 0;
  10067. while (mapping.generatedLine !== previousGeneratedLine) {
  10068. next += ';';
  10069. previousGeneratedLine++;
  10070. }
  10071. }
  10072. else {
  10073. if (i > 0) {
  10074. if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
  10075. continue;
  10076. }
  10077. next += ',';
  10078. }
  10079. }
  10080. next += base64VLQ.encode(mapping.generatedColumn
  10081. - previousGeneratedColumn);
  10082. previousGeneratedColumn = mapping.generatedColumn;
  10083. if (mapping.source != null) {
  10084. sourceIdx = this._sources.indexOf(mapping.source);
  10085. next += base64VLQ.encode(sourceIdx - previousSource);
  10086. previousSource = sourceIdx;
  10087. // lines are stored 0-based in SourceMap spec version 3
  10088. next += base64VLQ.encode(mapping.originalLine - 1
  10089. - previousOriginalLine);
  10090. previousOriginalLine = mapping.originalLine - 1;
  10091. next += base64VLQ.encode(mapping.originalColumn
  10092. - previousOriginalColumn);
  10093. previousOriginalColumn = mapping.originalColumn;
  10094. if (mapping.name != null) {
  10095. nameIdx = this._names.indexOf(mapping.name);
  10096. next += base64VLQ.encode(nameIdx - previousName);
  10097. previousName = nameIdx;
  10098. }
  10099. }
  10100. result += next;
  10101. }
  10102. return result;
  10103. };
  10104. SourceMapGenerator.prototype._generateSourcesContent =
  10105. function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
  10106. return aSources.map(function (source) {
  10107. if (!this._sourcesContents) {
  10108. return null;
  10109. }
  10110. if (aSourceRoot != null) {
  10111. source = util.relative(aSourceRoot, source);
  10112. }
  10113. var key = util.toSetString(source);
  10114. return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
  10115. ? this._sourcesContents[key]
  10116. : null;
  10117. }, this);
  10118. };
  10119. /**
  10120. * Externalize the source map.
  10121. */
  10122. SourceMapGenerator.prototype.toJSON =
  10123. function SourceMapGenerator_toJSON() {
  10124. var map = {
  10125. version: this._version,
  10126. sources: this._sources.toArray(),
  10127. names: this._names.toArray(),
  10128. mappings: this._serializeMappings()
  10129. };
  10130. if (this._file != null) {
  10131. map.file = this._file;
  10132. }
  10133. if (this._sourceRoot != null) {
  10134. map.sourceRoot = this._sourceRoot;
  10135. }
  10136. if (this._sourcesContents) {
  10137. map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
  10138. }
  10139. return map;
  10140. };
  10141. /**
  10142. * Render the source map being generated to a string.
  10143. */
  10144. SourceMapGenerator.prototype.toString =
  10145. function SourceMapGenerator_toString() {
  10146. return JSON.stringify(this.toJSON());
  10147. };
  10148. exports.SourceMapGenerator = SourceMapGenerator;
  10149. /***/ }),
  10150. /* 51 */
  10151. /***/ (function(module, exports, __webpack_require__) {
  10152. /* -*- Mode: js; js-indent-level: 2; -*- */
  10153. /*
  10154. * Copyright 2011 Mozilla Foundation and contributors
  10155. * Licensed under the New BSD license. See LICENSE or:
  10156. * http://opensource.org/licenses/BSD-3-Clause
  10157. *
  10158. * Based on the Base 64 VLQ implementation in Closure Compiler:
  10159. * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
  10160. *
  10161. * Copyright 2011 The Closure Compiler Authors. All rights reserved.
  10162. * Redistribution and use in source and binary forms, with or without
  10163. * modification, are permitted provided that the following conditions are
  10164. * met:
  10165. *
  10166. * * Redistributions of source code must retain the above copyright
  10167. * notice, this list of conditions and the following disclaimer.
  10168. * * Redistributions in binary form must reproduce the above
  10169. * copyright notice, this list of conditions and the following
  10170. * disclaimer in the documentation and/or other materials provided
  10171. * with the distribution.
  10172. * * Neither the name of Google Inc. nor the names of its
  10173. * contributors may be used to endorse or promote products derived
  10174. * from this software without specific prior written permission.
  10175. *
  10176. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  10177. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  10178. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  10179. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  10180. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10181. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  10182. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  10183. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  10184. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  10185. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  10186. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  10187. */
  10188. var base64 = __webpack_require__(115);
  10189. // A single base 64 digit can contain 6 bits of data. For the base 64 variable
  10190. // length quantities we use in the source map spec, the first bit is the sign,
  10191. // the next four bits are the actual value, and the 6th bit is the
  10192. // continuation bit. The continuation bit tells us whether there are more
  10193. // digits in this value following this digit.
  10194. //
  10195. // Continuation
  10196. // | Sign
  10197. // | |
  10198. // V V
  10199. // 101011
  10200. var VLQ_BASE_SHIFT = 5;
  10201. // binary: 100000
  10202. var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
  10203. // binary: 011111
  10204. var VLQ_BASE_MASK = VLQ_BASE - 1;
  10205. // binary: 100000
  10206. var VLQ_CONTINUATION_BIT = VLQ_BASE;
  10207. /**
  10208. * Converts from a two-complement value to a value where the sign bit is
  10209. * placed in the least significant bit. For example, as decimals:
  10210. * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
  10211. * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
  10212. */
  10213. function toVLQSigned(aValue) {
  10214. return aValue < 0
  10215. ? ((-aValue) << 1) + 1
  10216. : (aValue << 1) + 0;
  10217. }
  10218. /**
  10219. * Converts to a two-complement value from a value where the sign bit is
  10220. * placed in the least significant bit. For example, as decimals:
  10221. * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
  10222. * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
  10223. */
  10224. function fromVLQSigned(aValue) {
  10225. var isNegative = (aValue & 1) === 1;
  10226. var shifted = aValue >> 1;
  10227. return isNegative
  10228. ? -shifted
  10229. : shifted;
  10230. }
  10231. /**
  10232. * Returns the base 64 VLQ encoded value.
  10233. */
  10234. exports.encode = function base64VLQ_encode(aValue) {
  10235. var encoded = "";
  10236. var digit;
  10237. var vlq = toVLQSigned(aValue);
  10238. do {
  10239. digit = vlq & VLQ_BASE_MASK;
  10240. vlq >>>= VLQ_BASE_SHIFT;
  10241. if (vlq > 0) {
  10242. // There are still more digits in this value, so we must make sure the
  10243. // continuation bit is marked.
  10244. digit |= VLQ_CONTINUATION_BIT;
  10245. }
  10246. encoded += base64.encode(digit);
  10247. } while (vlq > 0);
  10248. return encoded;
  10249. };
  10250. /**
  10251. * Decodes the next base 64 VLQ value from the given string and returns the
  10252. * value and the rest of the string via the out parameter.
  10253. */
  10254. exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  10255. var strLen = aStr.length;
  10256. var result = 0;
  10257. var shift = 0;
  10258. var continuation, digit;
  10259. do {
  10260. if (aIndex >= strLen) {
  10261. throw new Error("Expected more digits in base 64 VLQ value.");
  10262. }
  10263. digit = base64.decode(aStr.charCodeAt(aIndex++));
  10264. if (digit === -1) {
  10265. throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
  10266. }
  10267. continuation = !!(digit & VLQ_CONTINUATION_BIT);
  10268. digit &= VLQ_BASE_MASK;
  10269. result = result + (digit << shift);
  10270. shift += VLQ_BASE_SHIFT;
  10271. } while (continuation);
  10272. aOutParam.value = fromVLQSigned(result);
  10273. aOutParam.rest = aIndex;
  10274. };
  10275. /***/ }),
  10276. /* 52 */
  10277. /***/ (function(module, exports, __webpack_require__) {
  10278. /* -*- Mode: js; js-indent-level: 2; -*- */
  10279. /*
  10280. * Copyright 2011 Mozilla Foundation and contributors
  10281. * Licensed under the New BSD license. See LICENSE or:
  10282. * http://opensource.org/licenses/BSD-3-Clause
  10283. */
  10284. var util = __webpack_require__(9);
  10285. var has = Object.prototype.hasOwnProperty;
  10286. var hasNativeMap = typeof Map !== "undefined";
  10287. /**
  10288. * A data structure which is a combination of an array and a set. Adding a new
  10289. * member is O(1), testing for membership is O(1), and finding the index of an
  10290. * element is O(1). Removing elements from the set is not supported. Only
  10291. * strings are supported for membership.
  10292. */
  10293. function ArraySet() {
  10294. this._array = [];
  10295. this._set = hasNativeMap ? new Map() : Object.create(null);
  10296. }
  10297. /**
  10298. * Static method for creating ArraySet instances from an existing array.
  10299. */
  10300. ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  10301. var set = new ArraySet();
  10302. for (var i = 0, len = aArray.length; i < len; i++) {
  10303. set.add(aArray[i], aAllowDuplicates);
  10304. }
  10305. return set;
  10306. };
  10307. /**
  10308. * Return how many unique items are in this ArraySet. If duplicates have been
  10309. * added, than those do not count towards the size.
  10310. *
  10311. * @returns Number
  10312. */
  10313. ArraySet.prototype.size = function ArraySet_size() {
  10314. return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
  10315. };
  10316. /**
  10317. * Add the given string to this set.
  10318. *
  10319. * @param String aStr
  10320. */
  10321. ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  10322. var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
  10323. var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
  10324. var idx = this._array.length;
  10325. if (!isDuplicate || aAllowDuplicates) {
  10326. this._array.push(aStr);
  10327. }
  10328. if (!isDuplicate) {
  10329. if (hasNativeMap) {
  10330. this._set.set(aStr, idx);
  10331. } else {
  10332. this._set[sStr] = idx;
  10333. }
  10334. }
  10335. };
  10336. /**
  10337. * Is the given string a member of this set?
  10338. *
  10339. * @param String aStr
  10340. */
  10341. ArraySet.prototype.has = function ArraySet_has(aStr) {
  10342. if (hasNativeMap) {
  10343. return this._set.has(aStr);
  10344. } else {
  10345. var sStr = util.toSetString(aStr);
  10346. return has.call(this._set, sStr);
  10347. }
  10348. };
  10349. /**
  10350. * What is the index of the given string in the array?
  10351. *
  10352. * @param String aStr
  10353. */
  10354. ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  10355. if (hasNativeMap) {
  10356. var idx = this._set.get(aStr);
  10357. if (idx >= 0) {
  10358. return idx;
  10359. }
  10360. } else {
  10361. var sStr = util.toSetString(aStr);
  10362. if (has.call(this._set, sStr)) {
  10363. return this._set[sStr];
  10364. }
  10365. }
  10366. throw new Error('"' + aStr + '" is not in the set.');
  10367. };
  10368. /**
  10369. * What is the element at the given index?
  10370. *
  10371. * @param Number aIdx
  10372. */
  10373. ArraySet.prototype.at = function ArraySet_at(aIdx) {
  10374. if (aIdx >= 0 && aIdx < this._array.length) {
  10375. return this._array[aIdx];
  10376. }
  10377. throw new Error('No element indexed by ' + aIdx);
  10378. };
  10379. /**
  10380. * Returns the array representation of this set (which has the proper indices
  10381. * indicated by indexOf). Note that this is a copy of the internal array used
  10382. * for storing the members so that no one can mess with internal state.
  10383. */
  10384. ArraySet.prototype.toArray = function ArraySet_toArray() {
  10385. return this._array.slice();
  10386. };
  10387. exports.ArraySet = ArraySet;
  10388. /***/ }),
  10389. /* 53 */
  10390. /***/ (function(module, exports, __webpack_require__) {
  10391. var cmpChar = __webpack_require__(0).cmpChar;
  10392. var TYPE = __webpack_require__(0).TYPE;
  10393. var IDENTIFIER = TYPE.Identifier;
  10394. var STRING = TYPE.String;
  10395. var NUMBER = TYPE.Number;
  10396. var FUNCTION = TYPE.Function;
  10397. var URL = TYPE.Url;
  10398. var NUMBERSIGN = TYPE.NumberSign;
  10399. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  10400. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  10401. var PLUSSIGN = TYPE.PlusSign;
  10402. var HYPHENMINUS = TYPE.HyphenMinus;
  10403. var COMMA = TYPE.Comma;
  10404. var SOLIDUS = TYPE.Solidus;
  10405. var ASTERISK = TYPE.Asterisk;
  10406. var PERCENTSIGN = TYPE.PercentSign;
  10407. var BACKSLASH = TYPE.Backslash;
  10408. var U = 117; // 'u'.charCodeAt(0)
  10409. module.exports = function defaultRecognizer(context) {
  10410. switch (this.scanner.tokenType) {
  10411. case NUMBERSIGN:
  10412. return this.HexColor();
  10413. case COMMA:
  10414. context.space = null;
  10415. context.ignoreWSAfter = true;
  10416. return this.Operator();
  10417. case SOLIDUS:
  10418. case ASTERISK:
  10419. case PLUSSIGN:
  10420. case HYPHENMINUS:
  10421. return this.Operator();
  10422. case LEFTPARENTHESIS:
  10423. return this.Parentheses(this.readSequence, context.recognizer);
  10424. case LEFTSQUAREBRACKET:
  10425. return this.Brackets(this.readSequence, context.recognizer);
  10426. case STRING:
  10427. return this.String();
  10428. case NUMBER:
  10429. switch (this.scanner.lookupType(1)) {
  10430. case PERCENTSIGN:
  10431. return this.Percentage();
  10432. case IDENTIFIER:
  10433. // edge case: number with folowing \0 and \9 hack shouldn't to be a Dimension
  10434. if (cmpChar(this.scanner.source, this.scanner.tokenEnd, BACKSLASH)) {
  10435. return this.Number();
  10436. } else {
  10437. return this.Dimension();
  10438. }
  10439. default:
  10440. return this.Number();
  10441. }
  10442. case FUNCTION:
  10443. return this.Function(this.readSequence, context.recognizer);
  10444. case URL:
  10445. return this.Url();
  10446. case IDENTIFIER:
  10447. // check for unicode range, it should start with u+ or U+
  10448. if (cmpChar(this.scanner.source, this.scanner.tokenStart, U) &&
  10449. cmpChar(this.scanner.source, this.scanner.tokenStart + 1, PLUSSIGN)) {
  10450. return this.UnicodeRange();
  10451. } else {
  10452. return this.Identifier();
  10453. }
  10454. }
  10455. };
  10456. /***/ }),
  10457. /* 54 */
  10458. /***/ (function(module, exports) {
  10459. // https://drafts.csswg.org/css-images-4/#element-notation
  10460. // https://developer.mozilla.org/en-US/docs/Web/CSS/element
  10461. module.exports = function() {
  10462. this.scanner.skipSC();
  10463. var children = this.createSingleNodeList(
  10464. this.IdSelector()
  10465. );
  10466. this.scanner.skipSC();
  10467. return children;
  10468. };
  10469. /***/ }),
  10470. /* 55 */
  10471. /***/ (function(module, exports) {
  10472. module.exports = {
  10473. parse: function selectorList() {
  10474. return this.createSingleNodeList(
  10475. this.SelectorList()
  10476. );
  10477. }
  10478. };
  10479. /***/ }),
  10480. /* 56 */
  10481. /***/ (function(module, exports) {
  10482. var ALLOW_OF_CLAUSE = true;
  10483. module.exports = {
  10484. parse: function nthWithOfClause() {
  10485. return this.createSingleNodeList(
  10486. this.Nth(ALLOW_OF_CLAUSE)
  10487. );
  10488. }
  10489. };
  10490. /***/ }),
  10491. /* 57 */
  10492. /***/ (function(module, exports) {
  10493. var DISALLOW_OF_CLAUSE = false;
  10494. module.exports = {
  10495. parse: function nth() {
  10496. return this.createSingleNodeList(
  10497. this.Nth(DISALLOW_OF_CLAUSE)
  10498. );
  10499. }
  10500. };
  10501. /***/ }),
  10502. /* 58 */
  10503. /***/ (function(module, exports) {
  10504. function removeItemAndRedundantWhiteSpace(list, item) {
  10505. var prev = item.prev;
  10506. var next = item.next;
  10507. if (next !== null) {
  10508. if (next.data.type === 'WhiteSpace' && (prev === null || prev.data.type === 'WhiteSpace')) {
  10509. list.remove(next);
  10510. }
  10511. } else if (prev !== null && prev.data.type === 'WhiteSpace') {
  10512. list.remove(prev);
  10513. }
  10514. list.remove(item);
  10515. }
  10516. module.exports = function compressBorder(node) {
  10517. node.children.each(function(node, item, list) {
  10518. if (node.type === 'Identifier' && node.name.toLowerCase() === 'none') {
  10519. if (list.head === list.tail) {
  10520. // replace `none` for zero when `none` is a single term
  10521. item.data = {
  10522. type: 'Number',
  10523. loc: node.loc,
  10524. value: '0'
  10525. };
  10526. } else {
  10527. removeItemAndRedundantWhiteSpace(list, item);
  10528. }
  10529. }
  10530. });
  10531. };
  10532. /***/ }),
  10533. /* 59 */
  10534. /***/ (function(module, exports, __webpack_require__) {
  10535. module.exports = __webpack_require__(60)
  10536. /***/ }),
  10537. /* 60 */
  10538. /***/ (function(module, exports, __webpack_require__) {
  10539. /* WEBPACK VAR INJECTION */(function(global) {/* global Event */
  10540. const path = __webpack_require__(3)
  10541. const jComponent = __webpack_require__(31)
  10542. const _ = __webpack_require__(10)
  10543. const wxss = __webpack_require__(72)
  10544. const compile = __webpack_require__(227)
  10545. const injectPolyfill = __webpack_require__(228)
  10546. const injectDefinition = __webpack_require__(229)
  10547. const componentMap = {}
  10548. let nowLoad = null
  10549. /**
  10550. * 自定义组件构造器
  10551. */
  10552. global.Component = options => {
  10553. const component = nowLoad
  10554. const pathToIdMap = component.pathToIdMap
  10555. const definition = Object.assign({
  10556. id: component.id,
  10557. path: component.path,
  10558. template: component.wxml,
  10559. usingComponents: component.json.usingComponents,
  10560. tagName: component.tagName,
  10561. }, options)
  10562. definition.options = Object.assign({
  10563. classPrefix: component.tagName,
  10564. }, definition.options || {})
  10565. // 处理 relations
  10566. if (definition.relations) {
  10567. Object.keys(definition.relations).forEach(key => {
  10568. const value = definition.relations[key]
  10569. const componentPath = _.isAbsolute(key) ? key : path.join(path.dirname(component.path), key)
  10570. const id = pathToIdMap[componentPath]
  10571. if (id) {
  10572. // 将涉及到的自定义组件路径转成 id
  10573. value.target = id
  10574. definition.relations[id] = value
  10575. delete definition.relations[key]
  10576. }
  10577. })
  10578. }
  10579. jComponent.register(definition)
  10580. }
  10581. /**
  10582. * behavior 构造器
  10583. */
  10584. global.Behavior = definition => jComponent.behavior(definition)
  10585. /**
  10586. * 加载 behavior
  10587. */
  10588. function behavior(definition) {
  10589. if (typeof definition !== 'object') {
  10590. throw new Error('definition must be a object')
  10591. }
  10592. return jComponent.behavior(definition)
  10593. }
  10594. /* eslint-disable complexity */
  10595. /**
  10596. * 注册自定义组件
  10597. */
  10598. function register(componentPath, tagName, cache, hasRegisterCache) {
  10599. // 用于 wcc 编译器使用
  10600. window.__webview_engine_version__ = 0.02
  10601. if (typeof componentPath === 'object') {
  10602. // 直接传入定义对象
  10603. const definition = componentPath
  10604. return jComponent.register(definition)
  10605. }
  10606. if (typeof componentPath !== 'string') {
  10607. throw new Error('componentPath must be a string')
  10608. }
  10609. if (!tagName || typeof tagName !== 'string') {
  10610. tagName = 'main' // 默认标签名
  10611. }
  10612. const id = _.getId()
  10613. if (hasRegisterCache[componentPath]) return hasRegisterCache[componentPath]
  10614. hasRegisterCache[componentPath] = id
  10615. const component = {
  10616. id,
  10617. path: componentPath,
  10618. tagName,
  10619. json: _.readJson(`${componentPath}.json`),
  10620. }
  10621. if (!component.json) {
  10622. throw new Error(`invalid componentPath: ${componentPath}`)
  10623. }
  10624. // 先加载 using components
  10625. const rootPath = cache.options.rootPath
  10626. const usingComponents = component.json.usingComponents || {}
  10627. const overrideUsingComponents = cache.options.usingComponents || {}
  10628. Object.assign(usingComponents, overrideUsingComponents)
  10629. const usingComponentKeys = Object.keys(usingComponents)
  10630. for (let i = 0, len = usingComponentKeys.length; i < len; i++) {
  10631. const key = usingComponentKeys[i]
  10632. const value = usingComponents[key]
  10633. const usingPath = _.isAbsolute(value) ? path.join(rootPath, value) : path.join(path.dirname(componentPath), value)
  10634. if (_.readFile(`${usingPath}.json`)) {
  10635. // 文件路径
  10636. const id = register(usingPath, key, cache, hasRegisterCache)
  10637. usingComponents[key] = id
  10638. }
  10639. }
  10640. // 读取自定义组件的静态内容
  10641. component.wxml = compile.getWxml(componentPath, cache.options)
  10642. component.wxss = wxss.getContent(`${componentPath}.wxss`)
  10643. // 存入需要执行的自定义组件 js
  10644. cache.needRunJsList.push([componentPath, component])
  10645. // 保存追加了已编译的 wxss
  10646. cache.wxss.push(wxss.compile(component.wxss, {
  10647. prefix: tagName,
  10648. ...cache.options,
  10649. }))
  10650. return component.id
  10651. }
  10652. /**
  10653. * 加载自定义组件
  10654. */
  10655. function load(componentPath, tagName, options = {}) {
  10656. if (typeof tagName === 'object') {
  10657. options = tagName
  10658. tagName = ''
  10659. }
  10660. if (typeof componentPath === 'string') {
  10661. options = Object.assign({
  10662. compiler: 'official', // official - 官方编译器、simulate - 纯 js 实现的模拟编译器
  10663. rootPath: path.dirname(componentPath), // 项目根路径
  10664. }, options)
  10665. } else {
  10666. options = Object.assign({
  10667. compiler: 'simulate',
  10668. rootPath: '',
  10669. }, options)
  10670. }
  10671. const cache = {
  10672. wxss: [],
  10673. options,
  10674. needRunJsList: [],
  10675. }
  10676. const hasRegisterCache = {}
  10677. const id = register(componentPath, tagName, cache, hasRegisterCache)
  10678. // 执行自定义组件 js
  10679. cache.needRunJsList.forEach(item => {
  10680. const oldLoad = nowLoad
  10681. nowLoad = item[1] // nowLoad 用于执行用户代码调用 Component 构造器时注入额外的参数给 j-component
  10682. nowLoad.pathToIdMap = hasRegisterCache
  10683. _.runJs(item[0])
  10684. nowLoad = oldLoad
  10685. })
  10686. // 存入缓存
  10687. componentMap[id] = cache
  10688. return id
  10689. }
  10690. /**
  10691. * 渲染自定义组件
  10692. */
  10693. function render(id, properties) {
  10694. if (!id) throw new Error('you need to pass the componentId')
  10695. const cache = componentMap[id]
  10696. if (cache) {
  10697. // 注入 wxss
  10698. wxss.insert(cache.wxss, id)
  10699. }
  10700. return jComponent.create(id, properties)
  10701. }
  10702. /**
  10703. * 比较 dom 节点是否符合某个 html 结构
  10704. */
  10705. function match(dom, html) {
  10706. if (!(dom instanceof window.Element) || !html || typeof html !== 'string') return false
  10707. // 干掉一些换行符,以免生成不必要的 TextNode
  10708. html = html.trim()
  10709. .replace(/(>)[\n\r\s\t]+(<)/g, '$1$2')
  10710. const a = dom.cloneNode()
  10711. const b = dom.cloneNode()
  10712. a.innerHTML = dom.innerHTML
  10713. b.innerHTML = html
  10714. return a.isEqualNode(b)
  10715. }
  10716. /**
  10717. * 让线程等待一段时间再执行
  10718. */
  10719. function sleep(time = 0) {
  10720. return new Promise(resolve => {
  10721. setTimeout(() => {
  10722. resolve()
  10723. }, time)
  10724. })
  10725. }
  10726. /**
  10727. * 模拟滚动
  10728. */
  10729. function scroll(comp, destOffset = 0, times = 20, propName = 'scrollTop') {
  10730. if (!comp || !comp.dom) throw new Error('invalid params')
  10731. if (typeof times !== 'number' || times <= 0) times = 1
  10732. destOffset = destOffset < 0 ? 0 : destOffset
  10733. const dom = comp.dom
  10734. const delta = destOffset - dom[propName]
  10735. // eslint-disable-next-line no-bitwise
  10736. const unit = ~~(delta / times)
  10737. const env = _.getEnv()
  10738. if (env === 'nodejs') {
  10739. for (let i = 0; i < times; i++) {
  10740. // nodejs 环境
  10741. setTimeout(() => {
  10742. if (i === times - 1) dom[propName] = destOffset
  10743. else dom[propName] += unit
  10744. // 模拟异步触发
  10745. dom.dispatchEvent(new Event('scroll', {bubbles: true, cancelable: false}))
  10746. }, 0)
  10747. }
  10748. } else {
  10749. // 浏览器
  10750. dom[propName] = destOffset
  10751. }
  10752. }
  10753. injectPolyfill()
  10754. injectDefinition()
  10755. module.exports = {
  10756. behavior,
  10757. load,
  10758. render,
  10759. match,
  10760. sleep,
  10761. scroll,
  10762. }
  10763. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  10764. /***/ }),
  10765. /* 61 */
  10766. /***/ (function(module, exports, __webpack_require__) {
  10767. /* WEBPACK VAR INJECTION */(function(global) {const exparser = __webpack_require__(4)
  10768. const ComponentManager = __webpack_require__(62)
  10769. const RootComponent = __webpack_require__(70)
  10770. const _ = __webpack_require__(5)
  10771. module.exports = {
  10772. /**
  10773. * 注册组件
  10774. */
  10775. register(definition = {}) {
  10776. const componentManager = new ComponentManager(definition)
  10777. return componentManager.id
  10778. },
  10779. /**
  10780. * 注册 behavior
  10781. */
  10782. behavior(definition) {
  10783. definition.is = _.getId(true)
  10784. definition.options = {
  10785. lazyRegistration: true,
  10786. publicProperties: true,
  10787. }
  10788. _.adjustExparserDefinition(definition)
  10789. definition.definitionFilter = exparser.Behavior.callDefinitionFilter(definition)
  10790. exparser.registerBehavior(definition)
  10791. return definition.is
  10792. },
  10793. /**
  10794. * 创建组件实例
  10795. */
  10796. create(id, properties) {
  10797. const componentManager = _.cache(id)
  10798. if (!componentManager) return
  10799. return new RootComponent(componentManager, properties)
  10800. },
  10801. }
  10802. global.wxFormField = module.exports.behavior({
  10803. id: 'wx://form-field',
  10804. properties: {
  10805. name: {
  10806. type: String
  10807. },
  10808. value: {
  10809. type: null
  10810. }
  10811. }
  10812. })
  10813. global.wxFormFieldGroup = module.exports.behavior({
  10814. is: 'wx://form-field-group',
  10815. })
  10816. global.wxFormFieldButton = module.exports.behavior({
  10817. is: 'wx://form-field-button',
  10818. listeners: {
  10819. formSubmit(data) {
  10820. this.triggerEvent('formSubmit', data, {bubbles: true})
  10821. },
  10822. formReset(data) {
  10823. this.triggerEvent('formReset', data, {bubbles: true})
  10824. },
  10825. }
  10826. })
  10827. global.wxComponentExport = module.exports.behavior({
  10828. is: 'wx://component-export',
  10829. definitionFilter(def) {
  10830. if (typeof def.export === 'function') {
  10831. if (typeof def.methods === 'object') {
  10832. def.methods.__export__ = def.export
  10833. } else {
  10834. def.methods = {
  10835. __export__: def.export,
  10836. }
  10837. }
  10838. }
  10839. }
  10840. })
  10841. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  10842. /***/ }),
  10843. /* 62 */
  10844. /***/ (function(module, exports, __webpack_require__) {
  10845. /* WEBPACK VAR INJECTION */(function(global) {const exparser = __webpack_require__(4)
  10846. const compile = __webpack_require__(63)
  10847. const transform = __webpack_require__(67)
  10848. const diff = __webpack_require__(68)
  10849. const render = __webpack_require__(13)
  10850. const _ = __webpack_require__(5)
  10851. const SelectorQuery = __webpack_require__(69)
  10852. const IntersectionObserver = __webpack_require__(33)
  10853. const PATH_TO_ID_MAP = []
  10854. class ComponentManager {
  10855. constructor(definition) {
  10856. this.id = definition.id || _.getId(true)
  10857. this.path = _.normalizeAbsolute(definition.path)
  10858. this.definition = definition
  10859. if (definition.tagName) _.setTagName(this.id, definition.tagName) // 保存标签名
  10860. if (this.path) PATH_TO_ID_MAP[this.path] = this.id // 保存 path 到 id 的映射
  10861. const template = definition.template
  10862. this.data = {}
  10863. this.generateFunc = typeof template === 'function' ? transform(template, definition.usingComponents || {}) : compile(template, this.data, definition.usingComponents || {}) // 解析编译模板
  10864. this.exparserDef = this.registerToExparser()
  10865. _.cache(this.id, this)
  10866. }
  10867. /**
  10868. * 注册 exparser 组件
  10869. */
  10870. registerToExparser() {
  10871. const definition = this.definition
  10872. const options = definition.options || {}
  10873. const usingComponents = definition.usingComponents || {}
  10874. const using = Object.keys(usingComponents).map(key => usingComponents[key])
  10875. let methods = {}
  10876. definition.behaviors = definition.behaviors || []
  10877. definition.behaviors = definition.behaviors.map((item) => {
  10878. // 支持内置 behavior
  10879. if (item === 'wx://component-export') {
  10880. return global.wxComponentExport
  10881. } else if (item === 'wx://form-field') {
  10882. return global.wxFormField
  10883. } else if (item === 'wx://form-field-group') {
  10884. return global.wxFormFieldGroup
  10885. } else if (item === 'wx://form-field-button') {
  10886. return global.wxFormFieldButton
  10887. }
  10888. return item
  10889. })
  10890. _.adjustExparserDefinition(definition)
  10891. const path = this.path
  10892. const definitionFilter = exparser.Behavior.callDefinitionFilter(definition)
  10893. const exparserDef = {
  10894. is: this.id,
  10895. using,
  10896. generics: [], // TODO
  10897. template: {
  10898. func: this.generateFunc,
  10899. data: this.data,
  10900. },
  10901. properties: definition.properties,
  10902. data: definition.data,
  10903. methods: definition.methods,
  10904. behaviors: definition.behaviors,
  10905. created: definition.created,
  10906. attached: definition.attached,
  10907. ready: definition.ready,
  10908. moved: definition.moved,
  10909. detached: definition.detached,
  10910. saved: definition.saved,
  10911. restored: definition.restored,
  10912. relations: definition.relations,
  10913. externalClasses: definition.externalClasses,
  10914. options: {
  10915. domain: `${options.writeOnly ? 'wo://' : ''}/`,
  10916. writeOnly: options.writeOnly || false,
  10917. allowInWriteOnly: false,
  10918. lazyRegistration: true,
  10919. classPrefix: options.classPrefix || '',
  10920. addGlobalClass: false,
  10921. templateEngine: TemplateEngine,
  10922. renderingMode: 'full',
  10923. multipleSlots: options.multipleSlots || false,
  10924. publicProperties: true,
  10925. reflectToAttributes: false,
  10926. writeFieldsToNode: false,
  10927. writeIdToDOM: false,
  10928. virtualHost: options.virtualHost || undefined,
  10929. },
  10930. lifetimes: definition.lifetimes,
  10931. pageLifetimes: definition.pageLifetimes,
  10932. observers: definition.observers,
  10933. definitionFilter,
  10934. initiator() {
  10935. // 更新方法调用者,即自定义组件中的 this
  10936. const caller = Object.create(this, {
  10937. data: {
  10938. get: () => this.data,
  10939. set: newData => this.data = newData,
  10940. configurable: true
  10941. },
  10942. })
  10943. const originalSetData = caller.setData
  10944. const getSelectComponentResult = selected => {
  10945. const selectedFilter = exparser.Component.getMethod(selected, '__export__')
  10946. const defaultResult = exparser.Element.getMethodCaller(selected)
  10947. if (selectedFilter) {
  10948. const res = selectedFilter.call(exparser.Element.getMethodCaller(selected), caller)
  10949. return res === undefined ? defaultResult : res
  10950. }
  10951. return defaultResult
  10952. }
  10953. caller._exparserNode = this // 存入原本对应的 exparserNode 实例
  10954. caller.properties = caller.data
  10955. caller.selectComponent = selector => {
  10956. const exparserNode = this.shadowRoot.querySelector(selector)
  10957. return getSelectComponentResult(exparserNode)
  10958. }
  10959. caller.selectAllComponents = selector => {
  10960. const exparserNodes = this.shadowRoot.querySelectorAll(selector)
  10961. return exparserNodes.map(item => getSelectComponentResult(item))
  10962. }
  10963. caller.createSelectorQuery = () => new SelectorQuery(caller)
  10964. caller.createIntersectionObserver = options => new IntersectionObserver(caller, options)
  10965. caller.setData = (data, callback) => {
  10966. if (!originalSetData || typeof originalSetData !== 'function') return
  10967. originalSetData.call(this, data)
  10968. if (typeof callback === 'function') {
  10969. // 模拟异步情况
  10970. Promise.resolve().then(callback).catch(console.error)
  10971. }
  10972. }
  10973. caller.getRelationNodes = relationKey => {
  10974. if (!path || !relationKey) return null
  10975. const id = PATH_TO_ID_MAP[_.relativeToAbsolute(path, relationKey)]
  10976. if (!id) return null
  10977. const res = this.getRelationNodes(id)
  10978. if (!res) return null
  10979. return res.map(exparserNode => exparser.Element.getMethodCaller(exparserNode))
  10980. }
  10981. Object.keys(methods).forEach(name => caller[name] = methods[name])
  10982. exparser.Element.setMethodCaller(this, caller)
  10983. },
  10984. }
  10985. const exparserReg = exparser.registerElement(exparserDef)
  10986. exparser.Behavior.prepare(exparserReg.behavior)
  10987. methods = exparserReg.behavior.methods
  10988. return exparserReg
  10989. }
  10990. }
  10991. /**
  10992. * exparser 的模板引擎封装
  10993. */
  10994. class TemplateEngine {
  10995. static create(behavior, initValues) {
  10996. const templateEngine = new TemplateEngine()
  10997. const data = Object.assign({}, initValues, behavior.template.data)
  10998. templateEngine._data = data
  10999. templateEngine._generateFunc = behavior.template.func
  11000. return templateEngine
  11001. }
  11002. static collectIdMapAndSlots(exparserNode, idMap, slots) {
  11003. const children = exparserNode.childNodes
  11004. for (const child of children) {
  11005. if (child instanceof exparser.TextNode) continue
  11006. if (child.__id) idMap[child.__id] = child
  11007. if (child.__slotName !== undefined) slots[child.__slotName] = child
  11008. TemplateEngine.collectIdMapAndSlots(child, idMap, slots)
  11009. }
  11010. }
  11011. createInstance(exparserNode, properties = {}) {
  11012. this._data = Object.assign(this._data, properties)
  11013. this._vt = this._generateFunc({data: this._data}) // 生成虚拟树
  11014. const instance = new TemplateEngineInstance()
  11015. instance._generateFunc = this._generateFunc
  11016. instance._vt = this._vt
  11017. instance.data = _.copy(this._data)
  11018. instance.idMap = {}
  11019. instance.slots = {}
  11020. instance.shadowRoot = render.renderExparserNode(instance._vt, exparserNode, null) // 渲染成 exparser 树
  11021. instance.shadowRoot._vt = instance._vt
  11022. instance.listeners = []
  11023. TemplateEngine.collectIdMapAndSlots(instance.shadowRoot, instance.idMap, instance.slots)
  11024. return instance
  11025. }
  11026. }
  11027. /**
  11028. * exparser 的模板引擎实例
  11029. */
  11030. class TemplateEngineInstance {
  11031. /**
  11032. * 当遇到组件更新时,会触发此方法
  11033. */
  11034. updateValues(exparserNode, data, changedPaths, changedValues, changes) {
  11035. const newVt = this._generateFunc({data}) // 生成新虚拟树
  11036. // 合并到方法调用者的 data 中
  11037. const callerData = exparser.Element.getMethodCaller(exparserNode).data
  11038. const hasOwnProperty = Object.prototype.hasOwnProperty
  11039. for (const changeInfo of changes) {
  11040. if (!changeInfo) continue
  11041. const path = changeInfo[0]
  11042. const newData = changeInfo[1]
  11043. let currentData = callerData
  11044. let currentPath = path[0]
  11045. // 检查更新路径
  11046. for (let i = 1, len = path.length; i < len; i++) {
  11047. const nextPath = path[i]
  11048. const currentValue = currentData[currentPath]
  11049. if (!hasOwnProperty.call(currentData, currentPath)) {
  11050. // 不存在,则进行初始化
  11051. if (typeof nextPath === 'number' && isFinite(nextPath)) {
  11052. // 数组
  11053. if (!Array.isArray(currentValue)) currentData[currentPath] = []
  11054. } else if (currentValue === null || typeof currentValue !== 'object' || Array.isArray(currentValue)) {
  11055. // 对象
  11056. currentData[currentPath] = {}
  11057. }
  11058. }
  11059. currentData = currentData[currentPath]
  11060. currentPath = nextPath
  11061. }
  11062. const oldData = currentData[currentPath]
  11063. currentData[currentPath] = _.copy(newData)
  11064. changedValues = [currentData[currentPath], oldData]
  11065. }
  11066. // 应用更新
  11067. diff.diffVt(this._vt, newVt)
  11068. this._vt = newVt
  11069. }
  11070. }
  11071. module.exports = ComponentManager
  11072. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  11073. /***/ }),
  11074. /* 63 */
  11075. /***/ (function(module, exports, __webpack_require__) {
  11076. const parse = __webpack_require__(64)
  11077. const VirtualNode = __webpack_require__(65)
  11078. const expr = __webpack_require__(32)
  11079. const _ = __webpack_require__(5)
  11080. const CONSTANT = __webpack_require__(6)
  11081. /**
  11082. * 过滤属性
  11083. */
  11084. function filterAttrs(attrs) {
  11085. const statement = {}
  11086. const event = {}
  11087. const normalAttrs = []
  11088. for (const attr of attrs) {
  11089. const name = attr.name
  11090. const value = attr.value || ''
  11091. if (name === 'wx:if') {
  11092. statement.if = expr.getExpression(value)
  11093. } else if (name === 'wx:elif') {
  11094. statement.elif = expr.getExpression(value)
  11095. } else if (name === 'wx:else') {
  11096. statement.else = true
  11097. } else if (name === 'wx:for') {
  11098. statement.for = expr.getExpression(value)
  11099. } else if (name === 'wx:for-item') {
  11100. statement.forItem = value
  11101. } else if (name === 'wx:for-index') {
  11102. statement.forIndex = value
  11103. } else if (name === 'wx:key') {
  11104. statement.forKey = value
  11105. } else {
  11106. const eventObj = _.parseEvent(name, value)
  11107. if (eventObj) {
  11108. // 事件绑定
  11109. event[eventObj.name] = eventObj
  11110. } else {
  11111. // 普通属性
  11112. normalAttrs.push(attr)
  11113. }
  11114. }
  11115. }
  11116. return {
  11117. statement,
  11118. event,
  11119. normalAttrs,
  11120. }
  11121. }
  11122. module.exports = function (template, data, usingComponents) {
  11123. if (!template || typeof template !== 'string' || !template.trim()) throw new Error('invalid template')
  11124. template = template.trim()
  11125. // 根节点
  11126. const rootNode = new VirtualNode({
  11127. type: CONSTANT.TYPE_ROOT,
  11128. componentManager: this,
  11129. data,
  11130. })
  11131. const stack = [rootNode]
  11132. stack.last = function () {
  11133. return this[this.length - 1]
  11134. }
  11135. parse(template, {
  11136. start: (tagName, attrs, unary) => {
  11137. let type
  11138. let componentManager
  11139. let id = ''
  11140. if (tagName === 'slot') {
  11141. type = CONSTANT.TYPE_SLOT
  11142. } else if (tagName === 'template') {
  11143. type = CONSTANT.TYPE_TEMPLATE
  11144. tagName = 'virtual'
  11145. } else if (tagName === 'block') {
  11146. type = CONSTANT.TYPE_BLOCK
  11147. } else if (tagName === 'import') {
  11148. type = CONSTANT.TYPE_IMPORT
  11149. } else if (tagName === 'include') {
  11150. type = CONSTANT.TYPE_INCLUDE
  11151. } else if (tagName === 'wxs') {
  11152. type = CONSTANT.TYPE_WXS
  11153. } else if (_.isHtmlTag(tagName)) {
  11154. type = CONSTANT.TYPE_NATIVE
  11155. id = tagName
  11156. } else {
  11157. type = CONSTANT.TYPE_COMPONENT
  11158. id = usingComponents[tagName]
  11159. componentManager = id ? _.cache(id) : _.cache(tagName)
  11160. if (!componentManager) throw new Error(`component ${tagName} not found`)
  11161. else id = componentManager.id
  11162. }
  11163. const {statement, event, normalAttrs} = filterAttrs(attrs)
  11164. const parent = stack.last()
  11165. const node = new VirtualNode({
  11166. type,
  11167. tagName,
  11168. componentId: id,
  11169. attrs: normalAttrs,
  11170. event,
  11171. generics: {}, // TODO
  11172. componentManager,
  11173. root: rootNode,
  11174. })
  11175. let appendNode = node
  11176. // for 语句
  11177. if (statement.for) {
  11178. const itemNode = new VirtualNode({
  11179. type: CONSTANT.TYPE_FORITEM,
  11180. tagName: 'virtual',
  11181. statement: {
  11182. forItem: statement.forItem || 'item',
  11183. forIndex: statement.forIndex || 'index',
  11184. forKey: statement.forKey,
  11185. },
  11186. children: [node],
  11187. root: rootNode,
  11188. })
  11189. node.setParent(itemNode, 0) // 更新父节点
  11190. const forNode = new VirtualNode({
  11191. type: CONSTANT.TYPE_FOR,
  11192. tagName: 'wx:for',
  11193. statement: {
  11194. for: statement.for,
  11195. },
  11196. children: [itemNode],
  11197. root: rootNode,
  11198. })
  11199. itemNode.setParent(forNode, 0) // 更新父节点
  11200. appendNode = forNode
  11201. }
  11202. // 条件语句
  11203. if (statement.if || statement.elif || statement.else) {
  11204. const ifNode = new VirtualNode({
  11205. type: CONSTANT.TYPE_IF,
  11206. tagName: 'wx:if',
  11207. statement: {
  11208. if: statement.if,
  11209. elif: statement.elif,
  11210. else: statement.else,
  11211. },
  11212. children: [node],
  11213. root: rootNode,
  11214. })
  11215. node.setParent(ifNode, 0) // 更新父节点
  11216. appendNode = ifNode
  11217. }
  11218. if (!unary) {
  11219. stack.push(node)
  11220. }
  11221. appendNode.setParent(parent, parent.children.length) // 更新父节点
  11222. parent.appendChild(appendNode)
  11223. },
  11224. // eslint-disable-next-line no-unused-vars
  11225. end: tagName => {
  11226. stack.pop()
  11227. },
  11228. text: content => {
  11229. content = content.trim()
  11230. if (!content) return
  11231. const parent = stack.last()
  11232. if (parent.type === CONSTANT.TYPE_WXS) {
  11233. // wxs 节点
  11234. parent.setWxsContent(content)
  11235. } else {
  11236. // 文本节点
  11237. parent.appendChild(new VirtualNode({
  11238. type: CONSTANT.TYPE_TEXT,
  11239. content: content.replace(/[\n\r\t\s]+/g, ' '),
  11240. parent,
  11241. index: parent.children.length,
  11242. componentManager: this,
  11243. root: rootNode,
  11244. }))
  11245. }
  11246. },
  11247. })
  11248. if (stack.length !== 1) throw new Error(`build ast error: ${template}`)
  11249. return rootNode.generate.bind(rootNode)
  11250. }
  11251. /***/ }),
  11252. /* 64 */
  11253. /***/ (function(module, exports) {
  11254. /**
  11255. * 感谢 John Resig
  11256. * 源码:https://johnresig.com/files/htmlparser.js
  11257. */
  11258. const startTagReg = /^<([-A-Za-z0-9_]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/
  11259. const endTagReg = /^<\/([-A-Za-z0-9_]+)[^>]*>/
  11260. const attrReg = /([-A-Za-z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g
  11261. module.exports = function (content, handler = {}) {
  11262. const stack = []
  11263. let last = content
  11264. stack.last = function () {
  11265. return this[this.length - 1]
  11266. }
  11267. while (content) {
  11268. let isText = true
  11269. if (!stack.last() || stack.last() !== 'wxs') {
  11270. if (content.indexOf('<!--') === 0) {
  11271. // 注释
  11272. const index = content.indexOf('-->')
  11273. if (index >= 0) {
  11274. content = content.substring(index + 3)
  11275. isText = false
  11276. }
  11277. } else if (content.indexOf('</') === 0) {
  11278. // 结束标签
  11279. const match = content.match(endTagReg)
  11280. if (match) {
  11281. content = content.substring(match[0].length)
  11282. match[0].replace(endTagReg, parseEndTag)
  11283. isText = false
  11284. }
  11285. } else if (content.indexOf('<') === 0) {
  11286. // 开始标签
  11287. const match = content.match(startTagReg)
  11288. if (match) {
  11289. content = content.substring(match[0].length)
  11290. match[0].replace(startTagReg, parseStartTag)
  11291. isText = false
  11292. }
  11293. }
  11294. if (isText) {
  11295. const index = content.indexOf('<')
  11296. const text = index < 0 ? content : content.substring(0, index)
  11297. content = index < 0 ? '' : content.substring(index)
  11298. if (handler.text) handler.text(text)
  11299. }
  11300. } else {
  11301. const execRes = (new RegExp(`</${stack.last()}[^>]*>`)).exec(content)
  11302. if (execRes) {
  11303. let text = content.substring(0, execRes.index)
  11304. content = content.substring(execRes.index + execRes[0].length)
  11305. text = text.replace(/<!--(.*?)-->/g, '')
  11306. if (text && handler.text) handler.text(text)
  11307. }
  11308. parseEndTag('', stack.last())
  11309. }
  11310. if (content === last) throw new Error(`parse error: ${content}`)
  11311. last = content
  11312. }
  11313. // 清空保留的标签
  11314. parseEndTag()
  11315. function parseStartTag(tag, tagName, rest, unary) {
  11316. unary = !!unary
  11317. if (!unary) stack.push(tagName)
  11318. if (handler.start) {
  11319. const attrs = []
  11320. rest.replace(attrReg, (all, $1, $2, $3, $4) => {
  11321. attrs.push({
  11322. name: $1,
  11323. value: $2 !== undefined ? $2 : $3 !== undefined ? $3 : $4 !== undefined ? $4 : true,
  11324. })
  11325. })
  11326. if (handler.start) handler.start(tagName, attrs, unary)
  11327. }
  11328. }
  11329. function parseEndTag(tag, tagName) {
  11330. let pos
  11331. if (!tagName) {
  11332. pos = 0
  11333. } else {
  11334. // 找到最近的同类型开始标签
  11335. for (pos = stack.length - 1; pos >= 0; pos--) {
  11336. if (stack[pos] === tagName) break
  11337. }
  11338. }
  11339. if (pos >= 0) {
  11340. // 关闭所有的开始标签,并让其出栈
  11341. for (let i = stack.length - 1; i >= pos; i--) {
  11342. if (handler.end) handler.end(stack[i])
  11343. }
  11344. stack.length = pos
  11345. }
  11346. }
  11347. }
  11348. /***/ }),
  11349. /* 65 */
  11350. /***/ (function(module, exports, __webpack_require__) {
  11351. const expr = __webpack_require__(32)
  11352. const CONSTANT = __webpack_require__(6)
  11353. class VirtualNode {
  11354. constructor(options = {}) {
  11355. this.type = options.type
  11356. this.tagName = options.tagName || ''
  11357. this.componentId = options.componentId
  11358. this.root = options.root || this // 根节点的 root 是自己
  11359. this.parent = options.parent
  11360. this.index = options.index || 0
  11361. this.content = options.content && expr.getExpression(options.content)
  11362. this.attrs = options.attrs || []
  11363. this.event = options.event || {}
  11364. this.statement = options.statement || {} // if/for 语句
  11365. this.children = options.children || []
  11366. this.generics = options.generics
  11367. this.componentManager = options.componentManager // 所属的 componentManager 实例
  11368. // 根节点用
  11369. this.data = options.data || {}
  11370. // wxs 节点用
  11371. this.wxsModuleName = ''
  11372. // slot 节点用
  11373. this.slotName = ''
  11374. this.checkAttrs()
  11375. }
  11376. /**
  11377. * 检查属性
  11378. */
  11379. checkAttrs() {
  11380. const type = this.type
  11381. const attrs = this.attrs
  11382. const filterAttrs = []
  11383. for (const attr of attrs) {
  11384. const name = attr.name
  11385. const value = attr.value
  11386. if (type === CONSTANT.TYPE_WXS && name === 'module') {
  11387. // wxs 模块
  11388. this.wxsModuleName = value || ''
  11389. } else if (type === CONSTANT.TYPE_SLOT && name === 'name') {
  11390. // slot 名
  11391. this.slotName = value || ''
  11392. } else {
  11393. if (value && typeof value === 'string') attr.value = expr.getExpression(value)
  11394. filterAttrs.push(attr)
  11395. }
  11396. }
  11397. this.attrs = filterAttrs
  11398. }
  11399. /**
  11400. * 设置父节点
  11401. */
  11402. setParent(parent, index = 0) {
  11403. if (!parent) return
  11404. this.parent = parent
  11405. this.index = index
  11406. }
  11407. /**
  11408. * 添加子节点
  11409. */
  11410. appendChild(node) {
  11411. this.children.push(node)
  11412. }
  11413. /**
  11414. * 设置 wxs 内容并转换成函数
  11415. */
  11416. setWxsContent(content) {
  11417. if (!this.wxsModuleName) return
  11418. // eslint-disable-next-line no-new-func
  11419. const func = new Function('require', 'module', content)
  11420. const req = () => {} // require function
  11421. const mod = {exports: {}} // modules
  11422. func.call(null, req, mod)
  11423. this.root.data[this.wxsModuleName] = mod.exports // set in root's data
  11424. }
  11425. /**
  11426. * 获取下一个兄弟节点
  11427. */
  11428. nextSibling() {
  11429. return this.parent && this.parent.children[this.index + 1]
  11430. }
  11431. /**
  11432. * 获取前一个兄弟节点
  11433. */
  11434. previousSibling() {
  11435. return this.parent && this.parent.children[this.index - 1]
  11436. }
  11437. /**
  11438. * 检查 if 语句
  11439. */
  11440. checkIf(data) {
  11441. const statement = this.statement
  11442. if (!statement.if) return true
  11443. return expr.calcExpression(statement.if, data)
  11444. }
  11445. /**
  11446. * 检查 elif 语句
  11447. */
  11448. checkElif(data) {
  11449. const statement = this.statement
  11450. if (!statement.elif) return true
  11451. return this.checkPreviousCondition(data) ? false : expr.calcExpression(statement.elif, data)
  11452. }
  11453. /**
  11454. * 检查 else 语句
  11455. */
  11456. checkElse(data) {
  11457. const statement = this.statement
  11458. if (!statement.else) return true
  11459. return !this.checkPreviousCondition(data)
  11460. }
  11461. /**
  11462. * 检查前一个条件语句
  11463. */
  11464. checkPreviousCondition(data) {
  11465. let previousSibling = this.previousSibling()
  11466. while (previousSibling) {
  11467. const statement = previousSibling.statement
  11468. if (previousSibling.type !== CONSTANT.TYPE_IF) return false // not if node
  11469. if (!statement.if && !statement.elif) return false // not have condition statement
  11470. if (statement.if) return previousSibling.checkIf(data)
  11471. if (statement.elif) {
  11472. if (!previousSibling.checkElif(data)) {
  11473. previousSibling = previousSibling.previousSibling()
  11474. } else {
  11475. return true
  11476. }
  11477. }
  11478. }
  11479. return false
  11480. }
  11481. /**
  11482. * 生成虚拟树
  11483. */
  11484. generate(options = {}) {
  11485. const data = options.data || {}
  11486. const statement = this.statement
  11487. let key = options.key || ''
  11488. options.data = data
  11489. delete options.key // 不能跨组件传递
  11490. // 检查 include 节点
  11491. if (this.type === CONSTANT.TYPE_INCLUDE) {
  11492. return null
  11493. }
  11494. // 检查 import 节点
  11495. if (this.type === CONSTANT.TYPE_IMPORT) {
  11496. return null
  11497. }
  11498. // 检查 template 节点
  11499. if (this.type === CONSTANT.TYPE_TEMPLATE) {
  11500. return null
  11501. }
  11502. // 检查 wxs 节点
  11503. if (this.type === CONSTANT.TYPE_WXS) {
  11504. return null
  11505. }
  11506. // 检查 if / elif / else 语句
  11507. if (this.type === CONSTANT.TYPE_IF && (!this.checkIf(data) || !this.checkElif(data) || !this.checkElse(data))) {
  11508. return null
  11509. }
  11510. let children = []
  11511. // 检查子节点
  11512. if (this.children && this.children.length) {
  11513. if (this.type === CONSTANT.TYPE_FOR) {
  11514. // 检查 for 语句
  11515. const list = expr.calcExpression(statement.for, data) || []
  11516. options.extra = options.extra || {}
  11517. for (let i = 0, len = list.length; i < len; i++) {
  11518. const {forItem: bakItem, forIndex: bakIndex} = options.extra
  11519. options.extra.forItem = list[i]
  11520. options.extra.forIndex = i
  11521. // eslint-disable-next-line no-loop-func
  11522. this.children.forEach(node => {
  11523. const vt = node.generate(options)
  11524. children.push(vt)
  11525. })
  11526. options.extra.forItem = bakItem
  11527. options.extra.forIndex = bakIndex
  11528. }
  11529. } else if (this.type === CONSTANT.TYPE_FORITEM) {
  11530. // 检查 for 子节点
  11531. options.extra = options.extra || {}
  11532. const {forItem, forIndex} = options.extra
  11533. const {forItem: bakItem, forIndex: bakIndex} = data
  11534. data[statement.forItem] = forItem // list item
  11535. data[statement.forIndex] = forIndex // list index
  11536. if (statement.forKey) key = statement.forKey === '*this' ? forItem : forItem[statement.forKey] // list key
  11537. children = this.children.map(node => node.generate(options))
  11538. data[statement.forItem] = bakItem
  11539. data[statement.forIndex] = bakIndex
  11540. } else {
  11541. // 其他节点
  11542. children = this.children.map(node => node.generate(options))
  11543. }
  11544. }
  11545. // 过滤子节点
  11546. const filterChildren = []
  11547. for (const child of children) {
  11548. if (!child) continue
  11549. if (child.type === CONSTANT.TYPE_BLOCK) {
  11550. // block 节点
  11551. const grandChildren = child.children
  11552. for (const grandChild of grandChildren) {
  11553. filterChildren.push(grandChild)
  11554. }
  11555. } else {
  11556. filterChildren.push(child)
  11557. }
  11558. }
  11559. // 检查属性
  11560. const attrs = []
  11561. for (const {name, value} of this.attrs) {
  11562. attrs.push({
  11563. name,
  11564. value: value ? expr.calcExpression(value, data) : value,
  11565. })
  11566. }
  11567. // 计算内容
  11568. let content = expr.calcExpression(this.content, data)
  11569. content = content !== undefined ? String(content) : ''
  11570. return {
  11571. type: this.type,
  11572. tagName: this.tagName,
  11573. componentId: this.componentId,
  11574. content, // 文本节点的内容
  11575. key, // 节点的 key,diff 用
  11576. children: filterChildren,
  11577. generics: this.generics,
  11578. attrs,
  11579. event: this.event,
  11580. slotName: this.slotName, // slot 节点的 name 属性
  11581. }
  11582. }
  11583. }
  11584. module.exports = VirtualNode
  11585. /***/ }),
  11586. /* 66 */
  11587. /***/ (function(module, exports) {
  11588. const ESCAPE = {
  11589. 'n': '\n',
  11590. 'f': '\f',
  11591. 'r': '\r',
  11592. 't': '\t',
  11593. 'v': '\v',
  11594. };
  11595. const CONSTANTS = {
  11596. 'null': data => null,
  11597. 'true': data => true,
  11598. 'false': data => false,
  11599. 'undefined': data => undefined,
  11600. }
  11601. const OPERATORS = {
  11602. '+': (data, a, b) => a(data) + b(data),
  11603. '-': (data, a, b) => a(data) - b(data),
  11604. '*': (data, a, b) => a(data) * b(data),
  11605. '/': (data, a, b) => a(data) / b(data),
  11606. '%': (data, a, b) => a(data) % b(data),
  11607. '===': (data, a, b) => a(data) === b(data),
  11608. '!==': (data, a, b) => a(data) !== b(data),
  11609. '==': (data, a, b) => a(data) == b(data),
  11610. '!=': (data, a, b) => a(data) != b(data),
  11611. '<': (data, a, b) => a(data) < b(data),
  11612. '>': (data, a, b) => a(data) > b(data),
  11613. '<=': (data, a, b) => a(data) <= b(data),
  11614. '>=': (data, a, b) => a(data) >= b(data),
  11615. '&&': (data, a, b) => a(data) && b(data),
  11616. '||': (data, a, b) => a(data) || b(data),
  11617. '!': (data, a) => !a(data),
  11618. };
  11619. function isNumber(char) {
  11620. return char >= '0' && char <= '9' && typeof char === 'string';
  11621. }
  11622. function isExpOperator(char) {
  11623. return (char === '-' || char === '+' || isNumber(char));
  11624. }
  11625. function isIdent(char) {
  11626. return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$';
  11627. }
  11628. class Expression {
  11629. constructor(content) {
  11630. if (!content) throw new Error('invalid expression');
  11631. this.content = content;
  11632. }
  11633. lex() {
  11634. let content = this.content;
  11635. let length = content.length;
  11636. let index = 0;
  11637. let tokens = [];
  11638. while (index < length) {
  11639. let char = content.charAt(index);
  11640. if (char === '"' || char === '\'') {
  11641. // 字符串
  11642. let start = ++index;
  11643. let escape = false;
  11644. let value = '';
  11645. let token;
  11646. while (index < length) {
  11647. let c = content.charAt(index);
  11648. if (escape) {
  11649. if (c === 'u') {
  11650. let hex = content.substring(index + 1, index + 5);
  11651. if (!hex.match(/[\da-f]{4}/i)) {
  11652. throw new Error(`invalid expression: ${content}, invalid unicode escape [\\u${hex}]`);
  11653. }
  11654. index += 4;
  11655. value += String.fromCharCode(parseInt(hex, 16));
  11656. } else {
  11657. let rep = ESCAPE[c];
  11658. value = value + (rep || c);
  11659. }
  11660. escape = false;
  11661. } else if (c === '\\') {
  11662. escape = true;
  11663. } else if (c === char) {
  11664. index++;
  11665. token = {
  11666. index: start,
  11667. constant: true,
  11668. text: char + value + char,
  11669. value,
  11670. };
  11671. break;
  11672. } else {
  11673. value += c;
  11674. }
  11675. index++;
  11676. }
  11677. if (!token) {
  11678. throw new Error(`invalid expression: ${content}`);
  11679. } else {
  11680. tokens.push(token);
  11681. }
  11682. } else if (isNumber(char) || (char === '.' && isNumber(content.charAt(index + 1)))) {
  11683. // 数字
  11684. let start = index;
  11685. let value = '';
  11686. while (index < length) {
  11687. let c = content.charAt(index).toLowerCase();
  11688. if (c === '.' || isNumber(c)) {
  11689. value += c;
  11690. } else {
  11691. let c2 = content.charAt(index + 1);
  11692. if (c === 'e' && isExpOperator(c2)) {
  11693. value += c;
  11694. } else if (isExpOperator(c) && c2 && isNumber(c2) && value.charAt(value.length - 1) === 'e') {
  11695. value += c;
  11696. } else if (isExpOperator(c) && (!c2 || !isNumber(c2)) && value.charAt(value.length - 1) == 'e') {
  11697. throw new Error(`invalid expression: ${content}`);
  11698. } else {
  11699. break;
  11700. }
  11701. }
  11702. index++;
  11703. }
  11704. tokens.push({
  11705. index: start,
  11706. constant: true,
  11707. text: value,
  11708. value: Number(value),
  11709. })
  11710. } else if (isIdent(char)) {
  11711. // 标识符
  11712. let start = index;
  11713. while (index < length) {
  11714. let c = content.charAt(index);
  11715. if (!(isIdent(c) || isNumber(c))) {
  11716. break;
  11717. }
  11718. index++;
  11719. }
  11720. tokens.push({
  11721. index: start,
  11722. text: content.slice(start, index),
  11723. identifier: true
  11724. });
  11725. } else if ('(){}[].,;:?'.indexOf(char) >= 0) {
  11726. // 边界
  11727. tokens.push({
  11728. index,
  11729. text: char
  11730. });
  11731. index++;
  11732. } else if (char === ' ' || char === '\r' || char === '\t' || char === '\n' || char === '\v' || char === '\u00A0') {
  11733. // 空格
  11734. index++;
  11735. } else {
  11736. // 操作符
  11737. let char2 = char + content.charAt(index + 1);
  11738. let char3 = char2 + content.charAt(index + 2);
  11739. let op1 = OPERATORS[char];
  11740. let op2 = OPERATORS[char2];
  11741. let op3 = OPERATORS[char3];
  11742. if (op1 || op2 || op3) {
  11743. let text = op3 ? char3 : op2 ? char2 : char;
  11744. tokens.push({
  11745. index: index,
  11746. text,
  11747. operator: true
  11748. });
  11749. index += text.length;
  11750. } else {
  11751. throw new Error(`invalid expression: ${content}`);
  11752. }
  11753. }
  11754. }
  11755. this.tokens = tokens;
  11756. return tokens;
  11757. }
  11758. parse() {
  11759. let tokens = this.lex();
  11760. let func;
  11761. let token = tokens[0];
  11762. let text = token.text;
  11763. if (tokens.length > 0 && text !== '}' && text !== ')' && text !== ']') {
  11764. func = this.expression();
  11765. }
  11766. return data => func && func(data);
  11767. }
  11768. expect(text) {
  11769. let tokens = this.tokens;
  11770. let token = tokens[0];
  11771. if (!text || text === (token && token.text)) {
  11772. return tokens.shift();
  11773. }
  11774. }
  11775. consume(text) {
  11776. if (!this.tokens.length) throw new Error(`parse expression error: ${this.content}`);
  11777. let token = this.expect(text);
  11778. if (!token) throw new Error(`parse expression error: ${this.content}`);
  11779. return token;
  11780. }
  11781. expression() {
  11782. return this.ternary();
  11783. }
  11784. ternary() {
  11785. let left = this.logicalOR();
  11786. let token;
  11787. if (token = this.expect('?')) {
  11788. let middle = this.expression();
  11789. this.consume(':')
  11790. let right = this.expression();
  11791. return data => left(data) ? middle(data) : right(data);
  11792. }
  11793. return left;
  11794. }
  11795. binary(left, op, right) {
  11796. let fn = OPERATORS[op];
  11797. return data => fn(data, left, right);
  11798. }
  11799. unary() {
  11800. let token;
  11801. if (this.expect('+')) {
  11802. return this.primary();
  11803. } else if (token = this.expect('-')) {
  11804. return this.binary(data => 0, token.text, this.unary());
  11805. } else if (token = this.expect('!')) {
  11806. let fn = OPERATORS[token.text];
  11807. let right = this.unary();
  11808. return data => fn(data, right);
  11809. } else {
  11810. return this.primary();
  11811. }
  11812. }
  11813. logicalOR() {
  11814. let left = this.logicalAND();
  11815. let token;
  11816. while (token = this.expect('||')) {
  11817. left = this.binary(left, token.text, this.logicalAND());
  11818. }
  11819. return left;
  11820. }
  11821. logicalAND() {
  11822. let left = this.equality();
  11823. let token;
  11824. while (token = this.expect('&&')) {
  11825. left = this.binary(left, token.text, this.equality());
  11826. }
  11827. return left;
  11828. }
  11829. equality() {
  11830. let left = this.relational();
  11831. let token;
  11832. while (token = this.expect('==') || this.expect('!=') || this.expect('===') || this.expect('!==')) {
  11833. left = this.binary(left, token.text, this.relational());
  11834. }
  11835. return left;
  11836. }
  11837. relational() {
  11838. let left = this.additive();
  11839. let token;
  11840. while (token = this.expect('<') || this.expect('>') || this.expect('<=') || this.expect('>=')) {
  11841. left = this.binary(left, token.text, this.additive());
  11842. }
  11843. return left;
  11844. }
  11845. additive() {
  11846. let left = this.multiplicative();
  11847. let token;
  11848. while (token = this.expect('+') || this.expect('-')) {
  11849. left = this.binary(left, token.text, this.multiplicative());
  11850. }
  11851. return left;
  11852. }
  11853. multiplicative() {
  11854. let left = this.unary();
  11855. let token;
  11856. while (token = this.expect('*') || this.expect('/') || this.expect('%')) {
  11857. left = this.binary(left, token.text, this.unary());
  11858. }
  11859. return left;
  11860. }
  11861. primary() {
  11862. let token = this.tokens[0];
  11863. let primary;
  11864. if (this.expect('(')) {
  11865. primary = this.expression();
  11866. this.consume(')');
  11867. } else if (this.expect('[')) {
  11868. primary = this.array();
  11869. } else if (this.expect('{')) {
  11870. primary = this.object();
  11871. } else if (token.identifier && token.text in CONSTANTS) {
  11872. primary = CONSTANTS[this.consume().text];
  11873. } else if (token.identifier) {
  11874. primary = this.identifier();
  11875. } else if (token.constant) {
  11876. primary = this.constant();
  11877. } else {
  11878. throw new Error(`parse expression error: ${this.content}`);
  11879. }
  11880. let next;
  11881. let context;
  11882. while (next = this.expect('(') || this.expect('[') || this.expect('.')) {
  11883. if (next.text === '(') {
  11884. primary = this.functionCall(primary, context);
  11885. context = null;
  11886. } else if (next.text === '[') {
  11887. context = primary;
  11888. primary = this.objectIndex(primary);
  11889. } else {
  11890. context = primary;
  11891. primary = this.fieldAccess(primary);
  11892. }
  11893. }
  11894. return primary;
  11895. }
  11896. fieldAccess(object) {
  11897. let getter = this.identifier();
  11898. return data => {
  11899. let o = object(data);
  11900. return o && getter(o);
  11901. };
  11902. }
  11903. objectIndex(object) {
  11904. let indexFn = this.expression();
  11905. this.consume(']');
  11906. return data => {
  11907. let o = object(data);
  11908. let key = indexFn(data) + '';
  11909. return o && o[key];
  11910. };
  11911. }
  11912. functionCall(func, context) {
  11913. let args = [];
  11914. if (this.tokens[0].text !== ')') {
  11915. do {
  11916. args.push(this.expression());
  11917. } while (this.expect(','));
  11918. }
  11919. this.consume(')');
  11920. return data => {
  11921. let callContext = context && context(data);
  11922. let fn = func(data, callContext);
  11923. return fn && fn.apply(callContext, args.length ? args.map(arg => arg(data)) : null);
  11924. };
  11925. }
  11926. array() {
  11927. let elements = [];
  11928. let token = this.tokens[0];
  11929. if (token.text !== ']') {
  11930. do {
  11931. if (this.tokens[0].text === ']') break;
  11932. elements.push(this.expression());
  11933. } while (this.expect(','));
  11934. }
  11935. this.consume(']');
  11936. return data => elements.map(element => element(data));
  11937. }
  11938. object() {
  11939. let keys = [];
  11940. let values = [];
  11941. let token = this.tokens[0];
  11942. if (token.text !== '}') {
  11943. do {
  11944. token = this.tokens[0];
  11945. if (token.text === '}') break;
  11946. token = this.consume();
  11947. if (token.constant) {
  11948. keys.push(token.value);
  11949. } else if (token.identifier) {
  11950. keys.push(token.text);
  11951. } else {
  11952. throw new Error(`parse expression error: ${this.content}`);
  11953. }
  11954. this.consume(':');
  11955. values.push(this.expression());
  11956. } while (this.expect(','));
  11957. }
  11958. this.consume('}');
  11959. return data => {
  11960. let object = {};
  11961. for (let i = 0, length = values.length; i < length; i++) {
  11962. object[keys[i]] = values[i](data);
  11963. }
  11964. return object;
  11965. };
  11966. }
  11967. identifier() {
  11968. let id = this.consume().text;
  11969. let token = this.tokens[0];
  11970. let token2 = this.tokens[1];
  11971. let token3 = this.tokens[2];
  11972. // 连续读取 . 操作符后的非函数调用标识符
  11973. while (token && token.text === '.' && token2 && token2.identifier && token3 && token3.text !== '(') {
  11974. id += this.consume().text + this.consume().text;
  11975. token = this.tokens[0];
  11976. token2 = this.tokens[1];
  11977. token3 = this.tokens[2];
  11978. }
  11979. return data => {
  11980. let elements = id.split('.');
  11981. let key;
  11982. for (let i = 0; elements.length > 1; i++) {
  11983. key = elements.shift();
  11984. data = data[key];
  11985. if (!data) break;
  11986. }
  11987. key = elements.shift();
  11988. return data && data[key];
  11989. };
  11990. }
  11991. constant() {
  11992. let value = this.consume().value;
  11993. return data => value;
  11994. }
  11995. }
  11996. module.exports = Expression;
  11997. /***/ }),
  11998. /* 67 */
  11999. /***/ (function(module, exports, __webpack_require__) {
  12000. const CONSTANT = __webpack_require__(6)
  12001. const _ = __webpack_require__(5)
  12002. /**
  12003. * 过滤属性
  12004. */
  12005. function filterAttrs(attrs = {}) {
  12006. const event = {}
  12007. const normalAttrs = []
  12008. let slotName = ''
  12009. const attrsKeyList = Object.keys(attrs)
  12010. for (const name of attrsKeyList) {
  12011. const value = attrs[name] === undefined ? '' : attrs[name]
  12012. const eventObj = _.parseEvent(name, value)
  12013. if (eventObj) {
  12014. // 事件绑定
  12015. event[eventObj.name] = eventObj
  12016. } else {
  12017. // 普通属性
  12018. if (name === 'name') slotName = value
  12019. normalAttrs.push({name, value})
  12020. }
  12021. }
  12022. return {
  12023. event,
  12024. normalAttrs,
  12025. slotName,
  12026. }
  12027. }
  12028. /**
  12029. * 将 wcc 输出转化成 j-component 需要的结构
  12030. */
  12031. function transformCompileResTree(obj, parent, usingComponents) {
  12032. let node = null
  12033. // 特别注意:使用 wcc 编译,不会产生 import、block、include、wxs、native(小程序不支持 div 等标签);template 节点会当作 if 节点处理
  12034. if (typeof obj === 'string' || (typeof obj === 'number' && obj % 1 === 0)) {
  12035. // 文本节点
  12036. node = {
  12037. type: CONSTANT.TYPE_TEXT,
  12038. tagName: '',
  12039. componentId: '',
  12040. content: '' + obj, // 文本节点的内容
  12041. key: '', // 节点的 key,diff 用
  12042. children: [],
  12043. generics: [],
  12044. attrs: [],
  12045. event: {},
  12046. slotName: '', // slot 节点的 name 属性
  12047. }
  12048. } else {
  12049. // 其他节点
  12050. const children = []
  12051. const {
  12052. tag, wxKey, wxXCkey, attr
  12053. } = obj
  12054. const tagName = tag.indexOf('wx-') === 0 && (tag === 'wx-slot' || !_.isOfficialTag(tag)) ? tag.substr(3) : tag
  12055. const key = wxKey !== undefined && wxKey !== null ? '' + wxKey : undefined
  12056. const {event, normalAttrs, slotName} = filterAttrs(attr)
  12057. const isIf = wxXCkey === 1 || wxXCkey === 3
  12058. const isFor = wxXCkey === 2 || wxXCkey === 4
  12059. const isSlot = tagName === 'slot'
  12060. const isRoot = tagName === 'shadow'
  12061. let type = isRoot ? CONSTANT.TYPE_ROOT : isIf ? CONSTANT.TYPE_IF : isFor ? CONSTANT.TYPE_FOR : isSlot ? CONSTANT.TYPE_SLOT : CONSTANT.TYPE_COMPONENT
  12062. if (parent && parent.type === CONSTANT.TYPE_FOR) {
  12063. type = CONSTANT.TYPE_FORITEM
  12064. }
  12065. node = {
  12066. type,
  12067. tagName,
  12068. componentId: usingComponents[tagName] || tagName,
  12069. content: '', // 文本节点的内容
  12070. key, // 节点的 key,diff 用
  12071. children,
  12072. generics: obj.generics,
  12073. attrs: normalAttrs,
  12074. event,
  12075. slotName: isSlot ? slotName : '', // slot 节点的 name 属性
  12076. }
  12077. obj.children.forEach(child => children.push(transformCompileResTree(child, node, usingComponents)))
  12078. }
  12079. return node
  12080. }
  12081. module.exports = function (generateFunc, usingComponents) {
  12082. return function (options = {}) {
  12083. const data = options.data || {}
  12084. const compileRes = generateFunc(data)
  12085. if (compileRes.type !== CONSTANT.TYPE_ROOT && (compileRes.tag === 'wx-page' || compileRes.tag === 'shadow')) {
  12086. // 进行 wcc 编译结果的转化
  12087. compileRes.tag = 'shadow'
  12088. return transformCompileResTree(compileRes, null, usingComponents)
  12089. } else {
  12090. return compileRes
  12091. }
  12092. }
  12093. }
  12094. /***/ }),
  12095. /* 68 */
  12096. /***/ (function(module, exports, __webpack_require__) {
  12097. const exparser = __webpack_require__(4)
  12098. const render = __webpack_require__(13)
  12099. const CONSTANT = __webpack_require__(6)
  12100. /**
  12101. * diff 两棵虚拟树
  12102. */
  12103. function diffVt(oldVt, newVt) {
  12104. const node = oldVt.exparserNode
  12105. const parent = node.parentNode
  12106. newVt.exparserNode = node // 更新新虚拟树的 exparser 节点
  12107. if (!newVt) {
  12108. // 删除
  12109. if (parent) parent.removeChild(node)
  12110. } else if (oldVt.type === CONSTANT.TYPE_TEXT) {
  12111. // 更新文本节点
  12112. if (newVt.type !== CONSTANT.TYPE_TEXT || newVt.content !== oldVt.content) {
  12113. if (parent) {
  12114. const newNode = render.renderExparserNode(newVt, null, parent.ownerShadowRoot)
  12115. newNode._vt = newVt
  12116. parent.replaceChild(newNode, node)
  12117. }
  12118. }
  12119. } else {
  12120. // 更新其他节点
  12121. // eslint-disable-next-line no-lonely-if
  12122. if (newVt.type === CONSTANT.TYPE_TEXT) {
  12123. // 新节点是文本节点
  12124. if (parent) {
  12125. const newNode = render.renderExparserNode(newVt, null, parent.ownerShadowRoot)
  12126. newNode._vt = newVt
  12127. parent.replaceChild(newNode, node)
  12128. }
  12129. } else if (newVt.type === oldVt.type && newVt.componentId === oldVt.componentId && newVt.key === oldVt.key) {
  12130. // 检查属性
  12131. const attrs = diffAttrs(oldVt.attrs, newVt.attrs)
  12132. if (attrs) {
  12133. // 更新属性
  12134. newVt.attrs = attrs
  12135. render.updateAttrs(node, attrs)
  12136. }
  12137. // 检查事件
  12138. Object.keys(oldVt.event).forEach(key => {
  12139. const {name, isCapture, id} = oldVt.event[key]
  12140. exparser.removeListenerFromElement(node, name, id, {capture: isCapture})
  12141. })
  12142. render.updateEvent(node, newVt.event)
  12143. // 检查子节点
  12144. const oldChildren = oldVt.children
  12145. const newChildren = newVt.children
  12146. const diffs = diffList(oldChildren, newChildren)
  12147. // diff 子节点树
  12148. for (let i = 0, len = oldChildren.length; i < len; i++) {
  12149. const oldChild = oldChildren[i]
  12150. const newChild = diffs.children[i]
  12151. if (newChild) diffVt(oldChild, newChild)
  12152. }
  12153. if (diffs.moves) {
  12154. // 子节点的删除/插入/重排
  12155. let {inserts} = diffs.moves
  12156. const {removes} = diffs.moves
  12157. const children = node.childNodes
  12158. inserts = inserts.map(({oldIndex, index}) => {
  12159. const newNode = children[oldIndex] || render.renderExparserNode(newChildren[index], null, node.ownerShadowRoot)
  12160. newNode._vt = newChildren[index]
  12161. return {
  12162. newNode,
  12163. index,
  12164. }
  12165. })
  12166. removes.forEach(index => node.removeChild(children[index]))
  12167. inserts.forEach(({newNode, index}) => node.insertBefore(newNode, children[index]))
  12168. }
  12169. node._vt = newVt
  12170. } else if (parent) {
  12171. const newNode = render.renderExparserNode(newVt, null, parent.ownerShadowRoot)
  12172. newNode._vt = newVt
  12173. parent.replaceChild(newNode, node)
  12174. }
  12175. }
  12176. }
  12177. /**
  12178. * diff 属性
  12179. */
  12180. function diffAttrs(oldAttrs, newAttrs) {
  12181. const oldAttrsMap = {}
  12182. const newAttrsMap = {}
  12183. const retAttrs = []
  12184. let isChange = false
  12185. oldAttrs.forEach(attr => oldAttrsMap[attr.name] = attr.value)
  12186. for (const attr of newAttrs) {
  12187. // 添加/更新
  12188. newAttrsMap[attr.name] = attr.value
  12189. retAttrs.push(attr)
  12190. if (oldAttrsMap[attr.name] === undefined || oldAttrsMap[attr.name] !== attr.value) isChange = true
  12191. }
  12192. for (const attr of oldAttrs) {
  12193. if (newAttrsMap[attr.name] === undefined) {
  12194. // 删除
  12195. attr.value = undefined
  12196. retAttrs.push(attr)
  12197. isChange = true
  12198. }
  12199. }
  12200. return isChange ? retAttrs : false
  12201. }
  12202. /**
  12203. * diff 列表
  12204. */
  12205. function diffList(oldList, newList) {
  12206. const oldKeyMap = {} // 旧列表的 key-index 映射表
  12207. const newKeyMap = {} // 新列表的 key-index 映射表
  12208. const oldFreeList = [] // 旧列表中没有 key 的项的 index 列表
  12209. const newFreeList = [] // 新列表中没有 key 的项的 index 列表
  12210. oldList.forEach((item, index) => {
  12211. if (item.key) {
  12212. // 拥有 key
  12213. if (Object.prototype.hasOwnProperty.call(oldKeyMap, item.key)) item.key = ''
  12214. else oldKeyMap[item.key] = index
  12215. } else {
  12216. // 没有 key
  12217. oldFreeList.push(index)
  12218. }
  12219. })
  12220. newList.forEach((item, index) => {
  12221. if (item.key) {
  12222. // 拥有 key
  12223. if (Object.prototype.hasOwnProperty.call(newKeyMap, item.key)) newFreeList.push(index)
  12224. else newKeyMap[item.key] = index
  12225. } else {
  12226. // 没有 key
  12227. newFreeList.push(index)
  12228. }
  12229. })
  12230. const children = []
  12231. let removes = []
  12232. const inserts = []
  12233. // 检查旧列表
  12234. for (let i = 0, j = 0; i < oldList.length; i++) {
  12235. const item = oldList[i]
  12236. const key = item.key
  12237. if (key) {
  12238. if (Object.prototype.hasOwnProperty.call(newKeyMap, key)) {
  12239. // 在新列表中存在
  12240. children.push(newList[newKeyMap[key]])
  12241. } else {
  12242. // 需要从新列表中删除
  12243. removes.push(i)
  12244. children.push(null)
  12245. }
  12246. } else if (j < newFreeList.length) {
  12247. // 在新列表中存在
  12248. children.push(newList[newFreeList[j++]])
  12249. } else {
  12250. // 需要从新列表中删除
  12251. removes.push(i)
  12252. children.push(null)
  12253. }
  12254. }
  12255. removes = removes.reverse() // 从尾往头进行删除
  12256. // 检查新列表
  12257. const hasCheckIndexMap = {}
  12258. for (let i = 0, j = 0, k = 0, len = newList.length; i < len; i++) {
  12259. const item = newList[i]
  12260. const key = item.key
  12261. while (children[j] === null || hasCheckIndexMap[j]) j++ // 跳过已被删除/检查的项
  12262. if (key) {
  12263. if (Object.prototype.hasOwnProperty.call(oldKeyMap, key) && children[j]) {
  12264. // 在旧列表中存在
  12265. if (children[j].key === key) {
  12266. // 拥有同样的 key
  12267. j++
  12268. } else {
  12269. // 拥有不同的 key
  12270. const oldIndex = oldKeyMap[key]
  12271. hasCheckIndexMap[oldIndex] = true
  12272. if (oldIndex !== i) inserts.push({oldIndex, index: i})
  12273. }
  12274. } else {
  12275. // 插入新项
  12276. inserts.push({oldIndex: -1, index: i})
  12277. }
  12278. } else if (k < oldFreeList.length) {
  12279. // 在旧列表中存在
  12280. const oldIndex = oldFreeList[k++]
  12281. hasCheckIndexMap[oldIndex] = true
  12282. if (oldIndex !== i) inserts.push({oldIndex, index: i})
  12283. } else {
  12284. // 插入新项
  12285. inserts.push({oldIndex: -1, index: i})
  12286. }
  12287. }
  12288. return {
  12289. children,
  12290. moves: {removes, inserts},
  12291. }
  12292. }
  12293. module.exports = {
  12294. diffVt,
  12295. diffAttrs,
  12296. diffList,
  12297. }
  12298. /***/ }),
  12299. /* 69 */
  12300. /***/ (function(module, exports, __webpack_require__) {
  12301. const exparser = __webpack_require__(4)
  12302. class NodesRef {
  12303. constructor(selectorQuery, exparserNode, selector, isSelectSingle) {
  12304. this._selectorQuery = selectorQuery
  12305. this._exparserNode = exparserNode
  12306. this._selector = selector
  12307. this._isSelectSingle = isSelectSingle
  12308. }
  12309. boundingClientRect(callback) {
  12310. return this._selectorQuery._push(this._selector, this._exparserNode, this._isSelectSingle, {
  12311. id: true,
  12312. dataset: true,
  12313. rect: true,
  12314. size: true,
  12315. }, callback)
  12316. }
  12317. scrollOffset(callback) {
  12318. return this._selectorQuery._push(this._selector, this._exparserNode, this._isSelectSingle, {
  12319. id: true,
  12320. dataset: true,
  12321. scrollOffset: true,
  12322. }, callback)
  12323. }
  12324. context(callback) {
  12325. return this._selectorQuery._push(this._selector, this._exparserNode, this._isSelectSingle, {
  12326. context: true,
  12327. }, callback)
  12328. }
  12329. fields(fields, callback) {
  12330. return this._selectorQuery._push(this._selector, this._exparserNode, this._isSelectSingle, fields, callback)
  12331. }
  12332. }
  12333. class SelectorQuery {
  12334. constructor(compInst) {
  12335. this._exparserNode = compInst && compInst._exparserNode || null
  12336. this._queue = []
  12337. this._queueCallback = []
  12338. }
  12339. _push(selector, exparserNode, isSelectSingle, fields, callback) {
  12340. this._queue.push({
  12341. selector,
  12342. exparserNode,
  12343. isSelectSingle,
  12344. fields,
  12345. })
  12346. this._queueCallback.push(callback || null)
  12347. return this
  12348. }
  12349. in(compInst) {
  12350. if (!compInst || typeof compInst !== 'object') {
  12351. throw new Error('invalid params')
  12352. }
  12353. this._exparserNode = compInst._exparserNode
  12354. return this
  12355. }
  12356. select(selector) {
  12357. return new NodesRef(this, this._exparserNode, selector, true)
  12358. }
  12359. selectAll(selector) {
  12360. return new NodesRef(this, this._exparserNode, selector, false)
  12361. }
  12362. selectViewport() {
  12363. return new NodesRef(this, 0, '', false)
  12364. }
  12365. exec(callback) {
  12366. Promise.resolve().then(() => {
  12367. const res = []
  12368. this._queue.forEach((item, index) => {
  12369. const {
  12370. selector, exparserNode, isSelectSingle, fields
  12371. } = item
  12372. if (exparserNode === 0) {
  12373. const itemRes = {}
  12374. if (fields.id) {
  12375. itemRes.id = ''
  12376. }
  12377. if (fields.dataset) {
  12378. itemRes.dataset = {}
  12379. }
  12380. if (fields.rect) {
  12381. itemRes.left = 0
  12382. itemRes.right = 0
  12383. itemRes.top = 0
  12384. itemRes.bottom = 0
  12385. }
  12386. if (fields.size) {
  12387. itemRes.width = document.documentElement.clientWidth
  12388. itemRes.height = document.documentElement.clientHeight
  12389. }
  12390. if (fields.scrollOffset) {
  12391. itemRes.scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || 0
  12392. itemRes.scrollTop = document.documentElement.scrollTop || document.body.scrollTop || 0
  12393. }
  12394. res.push(itemRes)
  12395. } else {
  12396. const shadowRoot = exparserNode.shadowRoot
  12397. const nodes = isSelectSingle ? [shadowRoot.querySelector(selector)] : shadowRoot.querySelectorAll(selector)
  12398. const itemResList = []
  12399. for (const node of nodes) {
  12400. if (!node) continue
  12401. const itemRes = {}
  12402. if (fields.id) {
  12403. itemRes.id = node.id || ''
  12404. }
  12405. if (fields.dataset) {
  12406. itemRes.dataset = Object.assign({}, node.dataset || {})
  12407. }
  12408. if (fields.rect || fields.size) {
  12409. const rect = node.$$.getBoundingClientRect()
  12410. if (fields.rect) {
  12411. itemRes.left = rect.left
  12412. itemRes.right = rect.right
  12413. itemRes.top = rect.top
  12414. itemRes.bottom = rect.bottom
  12415. }
  12416. if (fields.size) {
  12417. itemRes.width = rect.width
  12418. itemRes.height = rect.height
  12419. }
  12420. }
  12421. if (fields.properties) {
  12422. fields.properties.forEach(name => {
  12423. name = name.replace(/-([a-z])/g, (all, $1) => $1.toUpperCase())
  12424. if (exparser.Component.hasPublicProperty(node, name)) {
  12425. itemRes[name] = node.data[name]
  12426. }
  12427. })
  12428. }
  12429. if (fields.scrollOffset) {
  12430. itemRes.scrollLeft = node.$$.scrollLeft || 0
  12431. itemRes.scrollTop = node.$$.scrollTop || 0
  12432. }
  12433. if (fields.computedStyle && fields.computedStyle.length) {
  12434. const style = window.getComputedStyle(node.$$)
  12435. fields.computedStyle.forEach(key => {
  12436. if (key && style[key] !== undefined) itemRes[key] = style[key]
  12437. })
  12438. }
  12439. if (fields.context) {
  12440. itemRes.context = {} // TODO
  12441. }
  12442. itemResList.push(itemRes)
  12443. }
  12444. res.push(isSelectSingle ? (itemResList[0] || null) : itemResList)
  12445. }
  12446. if (typeof this._queueCallback[index] === 'function') this._queueCallback[index].call(this, res[index])
  12447. })
  12448. if (typeof callback === 'function') callback.call(this, res)
  12449. // reset
  12450. this._queue = []
  12451. this._queueCallback = []
  12452. }).catch(console.error)
  12453. }
  12454. }
  12455. module.exports = SelectorQuery
  12456. /***/ }),
  12457. /* 70 */
  12458. /***/ (function(module, exports, __webpack_require__) {
  12459. const exparser = __webpack_require__(4)
  12460. const _ = __webpack_require__(5)
  12461. const IntersectionObserver = __webpack_require__(33)
  12462. const CONSTANT = __webpack_require__(6)
  12463. const render = __webpack_require__(13)
  12464. const MOVE_DELTA = 10
  12465. const LONGPRESS_TIME = 350
  12466. const SCROLL_PROTECTED = 150
  12467. const NATIVE_TOUCH_EVENT = ['touchstart', 'touchmove', 'touchend', 'touchcancel']
  12468. /**
  12469. * 遍历 exparser 树
  12470. */
  12471. function dfsExparserTree(node, callback, fromTopToBottom) {
  12472. if (node instanceof exparser.Component) {
  12473. if (fromTopToBottom) callback(node)
  12474. if (node.shadowRoot instanceof exparser.Element) dfsExparserTree(node.shadowRoot, callback, fromTopToBottom)
  12475. if (!fromTopToBottom) callback(node)
  12476. }
  12477. node.childNodes.forEach(child => {
  12478. if (child instanceof exparser.Element) dfsExparserTree(child, callback, fromTopToBottom)
  12479. })
  12480. }
  12481. /**
  12482. * 用于 miniprogram-simulate/jest-snapshot-plugin 的识别
  12483. */
  12484. const JSONSymbol = typeof Symbol === 'function' && Symbol.for ? Symbol.for('j-component.json') : 0xd846fe
  12485. /**
  12486. * 序列化 exparser 树节点上绑定的事件监听
  12487. */
  12488. function exparserNodeEventToJSON(node) {
  12489. return node._vt ? node._vt.event : {}
  12490. }
  12491. /**
  12492. * 序列化 exparser 树节点的属性
  12493. */
  12494. function exparserNodeAttrsToJSON(node) {
  12495. const attrs = []
  12496. const vt = node._vt
  12497. if (vt) {
  12498. vt.attrs.forEach(attr => {
  12499. if (!exparser.Component.hasPublicProperty(node, _.dashToCamelCase(attr.name))) {
  12500. attrs.push(attr)
  12501. }
  12502. })
  12503. }
  12504. return attrs
  12505. }
  12506. /**
  12507. * 将 exparser 树转换为 JSON 对象
  12508. */
  12509. function exparserTreeToJSON(node) {
  12510. const _inner = (node, array) => {
  12511. let children = array
  12512. const vt = node._vt
  12513. if (vt) {
  12514. if (vt.type === CONSTANT.TYPE_TEXT) {
  12515. array.push(vt.content)
  12516. } else if (vt.type === CONSTANT.TYPE_NATIVE || vt.type === CONSTANT.TYPE_COMPONENT) {
  12517. children = []
  12518. const child = {
  12519. tagName: _.getTagName(vt.componentId || vt.tagName) || vt.tagName,
  12520. event: exparserNodeEventToJSON(node),
  12521. attrs: exparserNodeAttrsToJSON(node),
  12522. children,
  12523. }
  12524. Object.defineProperty(child, '$$typeof', {
  12525. get() {
  12526. return JSONSymbol
  12527. }
  12528. })
  12529. array.push(child)
  12530. }
  12531. }
  12532. (node.__wxSlotChildren || []).forEach(child => _inner(child, children))
  12533. return array
  12534. }
  12535. return _inner(node, [])[0]
  12536. }
  12537. class Component {
  12538. constructor(exparserNode) {
  12539. this._exparserNode = exparserNode
  12540. }
  12541. get dom() {
  12542. return this._exparserNode.$$
  12543. }
  12544. get data() {
  12545. const caller = exparser.Element.getMethodCaller(this._exparserNode)
  12546. return caller && caller.data
  12547. }
  12548. get instance() {
  12549. return exparser.Element.getMethodCaller(this._exparserNode)
  12550. }
  12551. /**
  12552. * 触发事件
  12553. */
  12554. dispatchEvent(eventName, options = {}) {
  12555. const dom = this.dom
  12556. if (NATIVE_TOUCH_EVENT.indexOf(eventName) >= 0) {
  12557. // native touch event
  12558. let touches = options.touches
  12559. let changedTouches = options.changedTouches
  12560. if (eventName === 'touchstart' || eventName === 'touchmove') {
  12561. touches = touches || [{x: 0, y: 0}]
  12562. changedTouches = changedTouches || [{x: 0, y: 0}]
  12563. } else if (eventName === 'touchend' || eventName === 'touchcancel') {
  12564. touches = touches || []
  12565. changedTouches = changedTouches || [{x: 0, y: 0}]
  12566. }
  12567. const touchEvent = new TouchEvent(eventName, {
  12568. cancelable: true,
  12569. bubbles: true,
  12570. touches: touches.map(touch => new Touch({
  12571. identifier: _.getId(),
  12572. target: dom,
  12573. clientX: touch.x,
  12574. clientY: touch.y,
  12575. pageX: touch.x,
  12576. pageY: touch.y,
  12577. })),
  12578. targetTouches: [],
  12579. changedTouches: changedTouches.map(touch => new Touch({
  12580. identifier: _.getId(),
  12581. target: dom,
  12582. clientX: touch.x,
  12583. clientY: touch.y,
  12584. pageX: touch.x,
  12585. pageY: touch.y,
  12586. })),
  12587. })
  12588. // 模拟异步情况
  12589. Promise.resolve().then(() => {
  12590. dom.dispatchEvent(touchEvent)
  12591. }).catch(console.error)
  12592. } else {
  12593. // 自定义事件
  12594. const customEvent = new CustomEvent(eventName, options)
  12595. // 模拟异步情况
  12596. Promise.resolve().then(() => {
  12597. dom.dispatchEvent(customEvent)
  12598. if (customEvent.target.__wxElement) {
  12599. exparser.Event.dispatchEvent(customEvent.target.__wxElement, exparser.Event.create(eventName, options.detail || {}, {
  12600. originalEvent: customEvent,
  12601. bubbles: true,
  12602. capturePhase: true,
  12603. composed: true,
  12604. extraFields: {
  12605. touches: options.touches || {},
  12606. changedTouches: options.changedTouches || {},
  12607. },
  12608. }))
  12609. }
  12610. }).catch(console.error)
  12611. }
  12612. }
  12613. /**
  12614. * 监听组件事件
  12615. */
  12616. addEventListener(eventName, handler, capture = false) {
  12617. if (typeof capture === 'object') capture = !!capture.capture
  12618. this._exparserNode.addListener(eventName, handler, {capture})
  12619. }
  12620. /**
  12621. * 取消监听组件事件
  12622. */
  12623. removeEventListener(eventName, handler, capture = false) {
  12624. if (typeof capture === 'object') capture = !!capture.capture
  12625. this._exparserNode.removeListener(eventName, handler, {capture})
  12626. }
  12627. /**
  12628. * 选取第一个符合的子组件节点
  12629. */
  12630. querySelector(selector) {
  12631. const shadowRoot = this._exparserNode.shadowRoot
  12632. const selExparserNode = shadowRoot && shadowRoot.querySelector(selector)
  12633. if (selExparserNode) {
  12634. return selExparserNode.__componentNode__ ? selExparserNode.__componentNode__ : new Component(selExparserNode)
  12635. }
  12636. }
  12637. /**
  12638. * 选取所有符合的子组件节点
  12639. */
  12640. querySelectorAll(selector) {
  12641. const shadowRoot = this._exparserNode.shadowRoot
  12642. const selExparserNodes = shadowRoot.querySelectorAll(selector) || []
  12643. return selExparserNodes.map(selExparserNode => (selExparserNode.__componentNode__ ? selExparserNode.__componentNode__ : new Component(selExparserNode)))
  12644. }
  12645. /**
  12646. * 小程序自定义组件的 setData 方法
  12647. */
  12648. setData(data, callback) {
  12649. const caller = exparser.Element.getMethodCaller(this._exparserNode)
  12650. if (caller && typeof caller.setData === 'function') caller.setData(data)
  12651. if (typeof callback === 'function') {
  12652. // 模拟异步情况
  12653. Promise.resolve().then(callback).catch(console.error)
  12654. }
  12655. }
  12656. /**
  12657. * 触发生命周期
  12658. */
  12659. triggerLifeTime(lifeTime, ...args) {
  12660. this._exparserNode.triggerLifeTime(lifeTime, args)
  12661. }
  12662. /**
  12663. * 触发页面生命周期
  12664. */
  12665. triggerPageLifeTime(lifeTime, ...args) {
  12666. this._exparserNode.triggerPageLifeTime(lifeTime, args)
  12667. }
  12668. /**
  12669. * 生成JSON
  12670. */
  12671. toJSON() {
  12672. return exparserTreeToJSON(this._exparserNode)
  12673. }
  12674. }
  12675. class RootComponent extends Component {
  12676. constructor(componentManager, properties) {
  12677. super()
  12678. const id = componentManager.id
  12679. const tagName = _.getTagName(id)
  12680. const exparserDef = componentManager.exparserDef
  12681. this._exparserNode = exparser.createElement(tagName || id, exparserDef) // create exparser node and render
  12682. this._isTapCancel = false
  12683. this._lastScrollTime = 0
  12684. const attrs = Object.keys(properties || {}).map(key => ({name: key, value: properties[key]}))
  12685. if (attrs.length) {
  12686. // 对齐 observer 逻辑,走 updateAttr 来更新 property
  12687. render.updateAttrs(this._exparserNode, attrs)
  12688. }
  12689. this._exparserNode._vt = {
  12690. type: CONSTANT.TYPE_COMPONENT,
  12691. tagName: tagName || 'main',
  12692. attrs,
  12693. event: {},
  12694. children: []
  12695. }
  12696. this.parentNode = null
  12697. this._bindEvent()
  12698. }
  12699. get dom() {
  12700. return _.getDom(this._exparserNode)
  12701. }
  12702. /**
  12703. * 初始化事件
  12704. */
  12705. _bindEvent() {
  12706. const dom = this.dom
  12707. // touch 事件
  12708. dom.addEventListener('touchstart', evt => {
  12709. this._triggerExparserEvent(evt, 'touchstart')
  12710. if (this._touchstartEvt || evt.defaultPrevented) return
  12711. if (evt.touches.length === 1) {
  12712. if (this._longpressTimer) this._longpressTimer = clearTimeout(this._longpressTimer)
  12713. this._touchstartX = evt.touches[0].pageX
  12714. this._touchstartY = evt.touches[0].pageY
  12715. this._touchstartEvt = evt
  12716. if ((+new Date()) - this._lastScrollTime < SCROLL_PROTECTED) {
  12717. // 滚动中
  12718. this._isTapCancel = true
  12719. this._lastScrollTime = 0 // 只检查一次
  12720. } else {
  12721. this._isTapCancel = false
  12722. this._longpressTimer = setTimeout(() => {
  12723. this._isTapCancel = true // 取消后续的 tap
  12724. this._triggerExparserEvent(evt, 'longpress', {x: this._touchstartX, y: this._touchstartY})
  12725. }, LONGPRESS_TIME)
  12726. }
  12727. }
  12728. }, {capture: true, passive: false})
  12729. dom.addEventListener('touchmove', evt => {
  12730. this._triggerExparserEvent(evt, 'touchmove')
  12731. if (!this._touchstartEvt) return
  12732. if (evt.touches.length === 1) {
  12733. if (!(Math.abs(evt.touches[0].pageX - this._touchstartX) < MOVE_DELTA && Math.abs(evt.touches[0].pageY - this._touchstartY) < MOVE_DELTA)) {
  12734. // is moving
  12735. if (this._longpressTimer) this._longpressTimer = clearTimeout(this._longpressTimer)
  12736. this._isTapCancel = true
  12737. }
  12738. }
  12739. }, {capture: true, passive: false})
  12740. dom.addEventListener('touchend', evt => {
  12741. this._triggerExparserEvent(evt, 'touchend')
  12742. if (!this._touchstartEvt) return
  12743. if (evt.touches.length === 0) {
  12744. if (this._longpressTimer) this._longpressTimer = clearTimeout(this._longpressTimer)
  12745. if (!this._isTapCancel) this._triggerExparserEvent(this._touchstartEvt, 'tap', {x: evt.changedTouches[0].pageX, y: evt.changedTouches[0].pageY})
  12746. }
  12747. this._touchstartEvt = null // 重置 touchStart 事件
  12748. }, {capture: true, passive: false})
  12749. dom.addEventListener('touchcancel', evt => {
  12750. this._triggerExparserEvent(evt, 'touchcancel')
  12751. if (!this._touchstartEvt) return
  12752. if (this._longpressTimer) this._longpressTimer = clearTimeout(this._longpressTimer)
  12753. this._touchstartEvt = null // 重置 touchStart 事件
  12754. }, {capture: true, passive: false})
  12755. // 其他事件
  12756. dom.addEventListener('scroll', evt => {
  12757. // 触发 intersectionObserver
  12758. const listenInfoMap = this._exparserNode._listenInfoMap || {}
  12759. Object.keys(listenInfoMap).forEach(key => {
  12760. const listenInfo = listenInfoMap[key]
  12761. IntersectionObserver.updateTargetIntersection(listenInfo)
  12762. })
  12763. this._lastScrollTime = +new Date()
  12764. this._triggerExparserEvent(evt, 'scroll')
  12765. }, {capture: true, passive: false})
  12766. // eslint-disable-next-line no-unused-vars
  12767. dom.addEventListener('blur', evt => {
  12768. if (this._longpressTimer) this._longpressTimer = clearTimeout(this._longpressTimer)
  12769. }, {capture: true, passive: false})
  12770. }
  12771. /**
  12772. * 触发 exparser 节点事件
  12773. */
  12774. _triggerExparserEvent(evt, name, detail = {}) {
  12775. Promise.resolve().then(() => {
  12776. exparser.Event.dispatchEvent(evt.target, exparser.Event.create(name, detail, {
  12777. originalEvent: evt,
  12778. bubbles: true,
  12779. capturePhase: true,
  12780. composed: true,
  12781. extraFields: {
  12782. touches: evt.touches || {},
  12783. changedTouches: evt.changedTouches || {},
  12784. },
  12785. }))
  12786. }).catch(console.error)
  12787. }
  12788. /**
  12789. * 添加
  12790. */
  12791. attach(parent) {
  12792. parent.appendChild(this.dom)
  12793. this.parentNode = parent
  12794. exparser.Element.pretendAttached(this._exparserNode)
  12795. dfsExparserTree(this._exparserNode, node => node.triggerLifeTime('ready'))
  12796. }
  12797. /**
  12798. * 移除
  12799. */
  12800. detach() {
  12801. if (!this.parentNode) return
  12802. this.parentNode.removeChild(this.dom)
  12803. this.parentNode = null
  12804. exparser.Element.pretendDetached(this._exparserNode)
  12805. }
  12806. }
  12807. module.exports = RootComponent
  12808. /***/ }),
  12809. /* 71 */
  12810. /***/ (function(module, exports) {
  12811. /***/ }),
  12812. /* 72 */
  12813. /***/ (function(module, exports, __webpack_require__) {
  12814. const postcss = __webpack_require__(73)
  12815. const path = __webpack_require__(3)
  12816. const less = __webpack_require__(95)
  12817. const csso = __webpack_require__(96)
  12818. const _ = __webpack_require__(10)
  12819. const wxssCache = {}
  12820. /**
  12821. * 追加 class 前缀插件
  12822. */
  12823. const addClassPrefixPlugin = function(prefix = '') {
  12824. return postcss.plugin('addClassPrefix', () => root => {
  12825. // eslint-disable-next-line consistent-return
  12826. root.walk(child => {
  12827. if (child.type === 'rule') {
  12828. const selectors = []
  12829. child.selectors.forEach(selector => {
  12830. // 处理 class 选择器
  12831. selectors.push(selector.replace(/(.)?\.([-_a-zA-Z0-9]+)/igs, (all, $1, $2) => (/\d/.test($1) ? all : `${$1 || ''}.${prefix}--${$2}`)))
  12832. })
  12833. child.selectors = selectors
  12834. }
  12835. })
  12836. })
  12837. }
  12838. /**
  12839. * 获取 import 列表
  12840. */
  12841. function getImportList(wxss, filePath) {
  12842. const reg = /@import\s+(?:(?:"([^"]+)")|(?:'([^']+)'));/ig
  12843. const importList = []
  12844. let execRes = reg.exec(wxss)
  12845. while (execRes && (execRes[1] || execRes[2])) {
  12846. importList.push({
  12847. code: execRes[0],
  12848. path: path.join(path.dirname(filePath), execRes[1] || execRes[2]),
  12849. })
  12850. execRes = reg.exec(wxss)
  12851. }
  12852. return importList
  12853. }
  12854. /**
  12855. * 获取 wxss 内容
  12856. */
  12857. function getContent(filePath) {
  12858. // 判断缓存
  12859. if (wxssCache[filePath]) {
  12860. return wxssCache[filePath]
  12861. }
  12862. let wxss = _.readFile(filePath)
  12863. if (wxss) {
  12864. const importList = getImportList(wxss, filePath)
  12865. importList.forEach(item => {
  12866. wxss = wxss.replace(item.code, getContent(item.path))
  12867. })
  12868. }
  12869. // 缓存 wxss
  12870. wxssCache[filePath] = wxss || ''
  12871. return wxssCache[filePath]
  12872. }
  12873. /**
  12874. * 编译 wxss
  12875. */
  12876. function compile(wxss, options = {}) {
  12877. if (options.less) {
  12878. less.render(wxss, (err, output) => {
  12879. if (!err) wxss = output.css
  12880. })
  12881. }
  12882. wxss = postcss([addClassPrefixPlugin(options.prefix)]).process(wxss, {
  12883. from: undefined, // 主要是不想看到那个 warning
  12884. map: null,
  12885. }).css
  12886. // 压缩
  12887. return csso.minify(wxss, {restructure: false}).css
  12888. }
  12889. /**
  12890. * 插入 wxss
  12891. */
  12892. function insert(wxss, id) {
  12893. if (!Array.isArray(wxss)) {
  12894. wxss = [wxss]
  12895. }
  12896. // 删除已插入的
  12897. document.querySelectorAll(`style#${id}`).forEach(style => {
  12898. style.parentNode.removeChild(style)
  12899. })
  12900. const style = document.createElement('style')
  12901. style.type = 'text/css'
  12902. style.id = id
  12903. style.innerHTML = _.transformRpx(wxss.join(''))
  12904. const head = document.getElementsByTagName('head')
  12905. if (head && head.length) head.item(0).appendChild(style)
  12906. }
  12907. module.exports = {
  12908. getContent,
  12909. compile,
  12910. insert,
  12911. }
  12912. /***/ }),
  12913. /* 73 */
  12914. /***/ (function(module, exports, __webpack_require__) {
  12915. "use strict";
  12916. exports.__esModule = true;
  12917. exports.default = void 0;
  12918. var _declaration = _interopRequireDefault(__webpack_require__(15));
  12919. var _processor = _interopRequireDefault(__webpack_require__(36));
  12920. var _stringify = _interopRequireDefault(__webpack_require__(17));
  12921. var _comment = _interopRequireDefault(__webpack_require__(19));
  12922. var _atRule = _interopRequireDefault(__webpack_require__(20));
  12923. var _vendor = _interopRequireDefault(__webpack_require__(94));
  12924. var _parse = _interopRequireDefault(__webpack_require__(18));
  12925. var _list = _interopRequireDefault(__webpack_require__(43));
  12926. var _rule = _interopRequireDefault(__webpack_require__(22));
  12927. var _root = _interopRequireDefault(__webpack_require__(44));
  12928. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  12929. /**
  12930. * Create a new {@link Processor} instance that will apply `plugins`
  12931. * as CSS processors.
  12932. *
  12933. * @param {Array.<Plugin|pluginFunction>|Processor} plugins PostCSS plugins.
  12934. * See {@link Processor#use} for plugin format.
  12935. *
  12936. * @return {Processor} Processor to process multiple CSS.
  12937. *
  12938. * @example
  12939. * import postcss from 'postcss'
  12940. *
  12941. * postcss(plugins).process(css, { from, to }).then(result => {
  12942. * console.log(result.css)
  12943. * })
  12944. *
  12945. * @namespace postcss
  12946. */
  12947. function postcss() {
  12948. for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
  12949. plugins[_key] = arguments[_key];
  12950. }
  12951. if (plugins.length === 1 && Array.isArray(plugins[0])) {
  12952. plugins = plugins[0];
  12953. }
  12954. return new _processor.default(plugins);
  12955. }
  12956. /**
  12957. * Creates a PostCSS plugin with a standard API.
  12958. *
  12959. * The newly-wrapped function will provide both the name and PostCSS
  12960. * version of the plugin.
  12961. *
  12962. * ```js
  12963. * const processor = postcss([replace])
  12964. * processor.plugins[0].postcssPlugin //=> 'postcss-replace'
  12965. * processor.plugins[0].postcssVersion //=> '6.0.0'
  12966. * ```
  12967. *
  12968. * The plugin function receives 2 arguments: {@link Root}
  12969. * and {@link Result} instance. The function should mutate the provided
  12970. * `Root` node. Alternatively, you can create a new `Root` node
  12971. * and override the `result.root` property.
  12972. *
  12973. * ```js
  12974. * const cleaner = postcss.plugin('postcss-cleaner', () => {
  12975. * return (root, result) => {
  12976. * result.root = postcss.root()
  12977. * }
  12978. * })
  12979. * ```
  12980. *
  12981. * As a convenience, plugins also expose a `process` method so that you can use
  12982. * them as standalone tools.
  12983. *
  12984. * ```js
  12985. * cleaner.process(css, processOpts, pluginOpts)
  12986. * // This is equivalent to:
  12987. * postcss([ cleaner(pluginOpts) ]).process(css, processOpts)
  12988. * ```
  12989. *
  12990. * Asynchronous plugins should return a `Promise` instance.
  12991. *
  12992. * ```js
  12993. * postcss.plugin('postcss-import', () => {
  12994. * return (root, result) => {
  12995. * return new Promise( (resolve, reject) => {
  12996. * fs.readFile('base.css', (base) => {
  12997. * root.prepend(base)
  12998. * resolve()
  12999. * })
  13000. * })
  13001. * }
  13002. * })
  13003. * ```
  13004. *
  13005. * Add warnings using the {@link Node#warn} method.
  13006. * Send data to other plugins using the {@link Result#messages} array.
  13007. *
  13008. * ```js
  13009. * postcss.plugin('postcss-caniuse-test', () => {
  13010. * return (root, result) => {
  13011. * root.walkDecls(decl => {
  13012. * if (!caniuse.support(decl.prop)) {
  13013. * decl.warn(result, 'Some browsers do not support ' + decl.prop)
  13014. * }
  13015. * })
  13016. * }
  13017. * })
  13018. * ```
  13019. *
  13020. * @param {string} name PostCSS plugin name. Same as in `name`
  13021. * property in `package.json`. It will be saved
  13022. * in `plugin.postcssPlugin` property.
  13023. * @param {function} initializer Will receive plugin options
  13024. * and should return {@link pluginFunction}
  13025. *
  13026. * @return {Plugin} PostCSS plugin.
  13027. */
  13028. postcss.plugin = function plugin(name, initializer) {
  13029. function creator() {
  13030. var transformer = initializer.apply(void 0, arguments);
  13031. transformer.postcssPlugin = name;
  13032. transformer.postcssVersion = new _processor.default().version;
  13033. return transformer;
  13034. }
  13035. var cache;
  13036. Object.defineProperty(creator, 'postcss', {
  13037. get: function get() {
  13038. if (!cache) cache = creator();
  13039. return cache;
  13040. }
  13041. });
  13042. creator.process = function (css, processOpts, pluginOpts) {
  13043. return postcss([creator(pluginOpts)]).process(css, processOpts);
  13044. };
  13045. return creator;
  13046. };
  13047. /**
  13048. * Default function to convert a node tree into a CSS string.
  13049. *
  13050. * @param {Node} node Start node for stringifing. Usually {@link Root}.
  13051. * @param {builder} builder Function to concatenate CSS from node’s parts
  13052. * or generate string and source map.
  13053. *
  13054. * @return {void}
  13055. *
  13056. * @function
  13057. */
  13058. postcss.stringify = _stringify.default;
  13059. /**
  13060. * Parses source css and returns a new {@link Root} node,
  13061. * which contains the source CSS nodes.
  13062. *
  13063. * @param {string|toString} css String with input CSS or any object
  13064. * with toString() method, like a Buffer
  13065. * @param {processOptions} [opts] Options with only `from` and `map` keys.
  13066. *
  13067. * @return {Root} PostCSS AST.
  13068. *
  13069. * @example
  13070. * // Simple CSS concatenation with source map support
  13071. * const root1 = postcss.parse(css1, { from: file1 })
  13072. * const root2 = postcss.parse(css2, { from: file2 })
  13073. * root1.append(root2).toResult().css
  13074. *
  13075. * @function
  13076. */
  13077. postcss.parse = _parse.default;
  13078. /**
  13079. * Contains the {@link vendor} module.
  13080. *
  13081. * @type {vendor}
  13082. *
  13083. * @example
  13084. * postcss.vendor.unprefixed('-moz-tab') //=> ['tab']
  13085. */
  13086. postcss.vendor = _vendor.default;
  13087. /**
  13088. * Contains the {@link list} module.
  13089. *
  13090. * @member {list}
  13091. *
  13092. * @example
  13093. * postcss.list.space('5px calc(10% + 5px)') //=> ['5px', 'calc(10% + 5px)']
  13094. */
  13095. postcss.list = _list.default;
  13096. /**
  13097. * Creates a new {@link Comment} node.
  13098. *
  13099. * @param {object} [defaults] Properties for the new node.
  13100. *
  13101. * @return {Comment} New comment node
  13102. *
  13103. * @example
  13104. * postcss.comment({ text: 'test' })
  13105. */
  13106. postcss.comment = function (defaults) {
  13107. return new _comment.default(defaults);
  13108. };
  13109. /**
  13110. * Creates a new {@link AtRule} node.
  13111. *
  13112. * @param {object} [defaults] Properties for the new node.
  13113. *
  13114. * @return {AtRule} new at-rule node
  13115. *
  13116. * @example
  13117. * postcss.atRule({ name: 'charset' }).toString() //=> "@charset"
  13118. */
  13119. postcss.atRule = function (defaults) {
  13120. return new _atRule.default(defaults);
  13121. };
  13122. /**
  13123. * Creates a new {@link Declaration} node.
  13124. *
  13125. * @param {object} [defaults] Properties for the new node.
  13126. *
  13127. * @return {Declaration} new declaration node
  13128. *
  13129. * @example
  13130. * postcss.decl({ prop: 'color', value: 'red' }).toString() //=> "color: red"
  13131. */
  13132. postcss.decl = function (defaults) {
  13133. return new _declaration.default(defaults);
  13134. };
  13135. /**
  13136. * Creates a new {@link Rule} node.
  13137. *
  13138. * @param {object} [defaults] Properties for the new node.
  13139. *
  13140. * @return {Rule} new rule node
  13141. *
  13142. * @example
  13143. * postcss.rule({ selector: 'a' }).toString() //=> "a {\n}"
  13144. */
  13145. postcss.rule = function (defaults) {
  13146. return new _rule.default(defaults);
  13147. };
  13148. /**
  13149. * Creates a new {@link Root} node.
  13150. *
  13151. * @param {object} [defaults] Properties for the new node.
  13152. *
  13153. * @return {Root} new root node.
  13154. *
  13155. * @example
  13156. * postcss.root({ after: '\n' }).toString() //=> "\n"
  13157. */
  13158. postcss.root = function (defaults) {
  13159. return new _root.default(defaults);
  13160. };
  13161. var _default = postcss;
  13162. exports.default = _default;
  13163. module.exports = exports.default;
  13164. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBvc3Rjc3MuZXM2Il0sIm5hbWVzIjpbInBvc3Rjc3MiLCJwbHVnaW5zIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiUHJvY2Vzc29yIiwicGx1Z2luIiwibmFtZSIsImluaXRpYWxpemVyIiwiY3JlYXRvciIsInRyYW5zZm9ybWVyIiwicG9zdGNzc1BsdWdpbiIsInBvc3Rjc3NWZXJzaW9uIiwidmVyc2lvbiIsImNhY2hlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJwcm9jZXNzIiwiY3NzIiwicHJvY2Vzc09wdHMiLCJwbHVnaW5PcHRzIiwic3RyaW5naWZ5IiwicGFyc2UiLCJ2ZW5kb3IiLCJsaXN0IiwiY29tbWVudCIsImRlZmF1bHRzIiwiQ29tbWVudCIsImF0UnVsZSIsIkF0UnVsZSIsImRlY2wiLCJEZWNsYXJhdGlvbiIsInJ1bGUiLCJSdWxlIiwicm9vdCIsIlJvb3QiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLFNBQVNBLE9BQVQsR0FBOEI7QUFBQSxvQ0FBVEMsT0FBUztBQUFUQSxJQUFBQSxPQUFTO0FBQUE7O0FBQzVCLE1BQUlBLE9BQU8sQ0FBQ0MsTUFBUixLQUFtQixDQUFuQixJQUF3QkMsS0FBSyxDQUFDQyxPQUFOLENBQWNILE9BQU8sQ0FBQyxDQUFELENBQXJCLENBQTVCLEVBQXVEO0FBQ3JEQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQyxDQUFELENBQWpCO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJSSxrQkFBSixDQUFjSixPQUFkLENBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdFQUQsT0FBTyxDQUFDTSxNQUFSLEdBQWlCLFNBQVNBLE1BQVQsQ0FBaUJDLElBQWpCLEVBQXVCQyxXQUF2QixFQUFvQztBQUNuRCxXQUFTQyxPQUFULEdBQTJCO0FBQ3pCLFFBQUlDLFdBQVcsR0FBR0YsV0FBVyxNQUFYLG1CQUFsQjtBQUNBRSxJQUFBQSxXQUFXLENBQUNDLGFBQVosR0FBNEJKLElBQTVCO0FBQ0FHLElBQUFBLFdBQVcsQ0FBQ0UsY0FBWixHQUE4QixJQUFJUCxrQkFBSixFQUFELENBQWtCUSxPQUEvQztBQUNBLFdBQU9ILFdBQVA7QUFDRDs7QUFFRCxNQUFJSSxLQUFKO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQlAsT0FBdEIsRUFBK0IsU0FBL0IsRUFBMEM7QUFDeENRLElBQUFBLEdBRHdDLGlCQUNqQztBQUNMLFVBQUksQ0FBQ0gsS0FBTCxFQUFZQSxLQUFLLEdBQUdMLE9BQU8sRUFBZjtBQUNaLGFBQU9LLEtBQVA7QUFDRDtBQUp1QyxHQUExQzs7QUFPQUwsRUFBQUEsT0FBTyxDQUFDUyxPQUFSLEdBQWtCLFVBQVVDLEdBQVYsRUFBZUMsV0FBZixFQUE0QkMsVUFBNUIsRUFBd0M7QUFDeEQsV0FBT3JCLE9BQU8sQ0FBQyxDQUFDUyxPQUFPLENBQUNZLFVBQUQsQ0FBUixDQUFELENBQVAsQ0FBK0JILE9BQS9CLENBQXVDQyxHQUF2QyxFQUE0Q0MsV0FBNUMsQ0FBUDtBQUNELEdBRkQ7O0FBSUEsU0FBT1gsT0FBUDtBQUNELENBckJEO0FBdUJBOzs7Ozs7Ozs7Ozs7O0FBV0FULE9BQU8sQ0FBQ3NCLFNBQVIsR0FBb0JBLGtCQUFwQjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBdEIsT0FBTyxDQUFDdUIsS0FBUixHQUFnQkEsY0FBaEI7QUFFQTs7Ozs7Ozs7O0FBUUF2QixPQUFPLENBQUN3QixNQUFSLEdBQWlCQSxlQUFqQjtBQUVBOzs7Ozs7Ozs7QUFRQXhCLE9BQU8sQ0FBQ3lCLElBQVIsR0FBZUEsYUFBZjtBQUVBOzs7Ozs7Ozs7OztBQVVBekIsT0FBTyxDQUFDMEIsT0FBUixHQUFrQixVQUFBQyxRQUFRO0FBQUEsU0FBSSxJQUFJQyxnQkFBSixDQUFZRCxRQUFaLENBQUo7QUFBQSxDQUExQjtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTNCLE9BQU8sQ0FBQzZCLE1BQVIsR0FBaUIsVUFBQUYsUUFBUTtBQUFBLFNBQUksSUFBSUcsZUFBSixDQUFXSCxRQUFYLENBQUo7QUFBQSxDQUF6QjtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTNCLE9BQU8sQ0FBQytCLElBQVIsR0FBZSxVQUFBSixRQUFRO0FBQUEsU0FBSSxJQUFJSyxvQkFBSixDQUFnQkwsUUFBaEIsQ0FBSjtBQUFBLENBQXZCO0FBRUE7Ozs7Ozs7Ozs7OztBQVVBM0IsT0FBTyxDQUFDaUMsSUFBUixHQUFlLFVBQUFOLFFBQVE7QUFBQSxTQUFJLElBQUlPLGFBQUosQ0FBU1AsUUFBVCxDQUFKO0FBQUEsQ0FBdkI7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUEzQixPQUFPLENBQUNtQyxJQUFSLEdBQWUsVUFBQVIsUUFBUTtBQUFBLFNBQUksSUFBSVMsYUFBSixDQUFTVCxRQUFULENBQUo7QUFBQSxDQUF2Qjs7ZUFFZTNCLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVjbGFyYXRpb24gZnJvbSAnLi9kZWNsYXJhdGlvbidcbmltcG9ydCBQcm9jZXNzb3IgZnJvbSAnLi9wcm9jZXNzb3InXG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJy4vc3RyaW5naWZ5J1xuaW1wb3J0IENvbW1lbnQgZnJvbSAnLi9jb21tZW50J1xuaW1wb3J0IEF0UnVsZSBmcm9tICcuL2F0LXJ1bGUnXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vdmVuZG9yJ1xuaW1wb3J0IHBhcnNlIGZyb20gJy4vcGFyc2UnXG5pbXBvcnQgbGlzdCBmcm9tICcuL2xpc3QnXG5pbXBvcnQgUnVsZSBmcm9tICcuL3J1bGUnXG5pbXBvcnQgUm9vdCBmcm9tICcuL3Jvb3QnXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHtAbGluayBQcm9jZXNzb3J9IGluc3RhbmNlIHRoYXQgd2lsbCBhcHBseSBgcGx1Z2luc2BcbiAqIGFzIENTUyBwcm9jZXNzb3JzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPFBsdWdpbnxwbHVnaW5GdW5jdGlvbj58UHJvY2Vzc29yfSBwbHVnaW5zIFBvc3RDU1MgcGx1Z2lucy5cbiAqICAgICAgICBTZWUge0BsaW5rIFByb2Nlc3NvciN1c2V9IGZvciBwbHVnaW4gZm9ybWF0LlxuICpcbiAqIEByZXR1cm4ge1Byb2Nlc3Nvcn0gUHJvY2Vzc29yIHRvIHByb2Nlc3MgbXVsdGlwbGUgQ1NTLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJ1xuICpcbiAqIHBvc3Rjc3MocGx1Z2lucykucHJvY2Vzcyhjc3MsIHsgZnJvbSwgdG8gfSkudGhlbihyZXN1bHQgPT4ge1xuICogICBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKVxuICogfSlcbiAqXG4gKiBAbmFtZXNwYWNlIHBvc3Rjc3NcbiAqL1xuZnVuY3Rpb24gcG9zdGNzcyAoLi4ucGx1Z2lucykge1xuICBpZiAocGx1Z2lucy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShwbHVnaW5zWzBdKSkge1xuICAgIHBsdWdpbnMgPSBwbHVnaW5zWzBdXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9jZXNzb3IocGx1Z2lucylcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUG9zdENTUyBwbHVnaW4gd2l0aCBhIHN0YW5kYXJkIEFQSS5cbiAqXG4gKiBUaGUgbmV3bHktd3JhcHBlZCBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYm90aCB0aGUgbmFtZSBhbmQgUG9zdENTU1xuICogdmVyc2lvbiBvZiB0aGUgcGx1Z2luLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwcm9jZXNzb3IgPSBwb3N0Y3NzKFtyZXBsYWNlXSlcbiAqIHByb2Nlc3Nvci5wbHVnaW5zWzBdLnBvc3Rjc3NQbHVnaW4gIC8vPT4gJ3Bvc3Rjc3MtcmVwbGFjZSdcbiAqIHByb2Nlc3Nvci5wbHVnaW5zWzBdLnBvc3Rjc3NWZXJzaW9uIC8vPT4gJzYuMC4wJ1xuICogYGBgXG4gKlxuICogVGhlIHBsdWdpbiBmdW5jdGlvbiByZWNlaXZlcyAyIGFyZ3VtZW50czoge0BsaW5rIFJvb3R9XG4gKiBhbmQge0BsaW5rIFJlc3VsdH0gaW5zdGFuY2UuIFRoZSBmdW5jdGlvbiBzaG91bGQgbXV0YXRlIHRoZSBwcm92aWRlZFxuICogYFJvb3RgIG5vZGUuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgbmV3IGBSb290YCBub2RlXG4gKiBhbmQgb3ZlcnJpZGUgdGhlIGByZXN1bHQucm9vdGAgcHJvcGVydHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGNsZWFuZXIgPSBwb3N0Y3NzLnBsdWdpbigncG9zdGNzcy1jbGVhbmVyJywgKCkgPT4ge1xuICogICByZXR1cm4gKHJvb3QsIHJlc3VsdCkgPT4ge1xuICogICAgIHJlc3VsdC5yb290ID0gcG9zdGNzcy5yb290KClcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICpcbiAqIEFzIGEgY29udmVuaWVuY2UsIHBsdWdpbnMgYWxzbyBleHBvc2UgYSBgcHJvY2Vzc2AgbWV0aG9kIHNvIHRoYXQgeW91IGNhbiB1c2VcbiAqIHRoZW0gYXMgc3RhbmRhbG9uZSB0b29scy5cbiAqXG4gKiBgYGBqc1xuICogY2xlYW5lci5wcm9jZXNzKGNzcywgcHJvY2Vzc09wdHMsIHBsdWdpbk9wdHMpXG4gKiAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86XG4gKiBwb3N0Y3NzKFsgY2xlYW5lcihwbHVnaW5PcHRzKSBdKS5wcm9jZXNzKGNzcywgcHJvY2Vzc09wdHMpXG4gKiBgYGBcbiAqXG4gKiBBc3luY2hyb25vdXMgcGx1Z2lucyBzaG91bGQgcmV0dXJuIGEgYFByb21pc2VgIGluc3RhbmNlLlxuICpcbiAqIGBgYGpzXG4gKiBwb3N0Y3NzLnBsdWdpbigncG9zdGNzcy1pbXBvcnQnLCAoKSA9PiB7XG4gKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gKiAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gKiAgICAgICBmcy5yZWFkRmlsZSgnYmFzZS5jc3MnLCAoYmFzZSkgPT4ge1xuICogICAgICAgICByb290LnByZXBlbmQoYmFzZSlcbiAqICAgICAgICAgcmVzb2x2ZSgpXG4gKiAgICAgICB9KVxuICogICAgIH0pXG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBBZGQgd2FybmluZ3MgdXNpbmcgdGhlIHtAbGluayBOb2RlI3dhcm59IG1ldGhvZC5cbiAqIFNlbmQgZGF0YSB0byBvdGhlciBwbHVnaW5zIHVzaW5nIHRoZSB7QGxpbmsgUmVzdWx0I21lc3NhZ2VzfSBhcnJheS5cbiAqXG4gKiBgYGBqc1xuICogcG9zdGNzcy5wbHVnaW4oJ3Bvc3Rjc3MtY2FuaXVzZS10ZXN0JywgKCkgPT4ge1xuICogICByZXR1cm4gKHJvb3QsIHJlc3VsdCkgPT4ge1xuICogICAgIHJvb3Qud2Fsa0RlY2xzKGRlY2wgPT4ge1xuICogICAgICAgaWYgKCFjYW5pdXNlLnN1cHBvcnQoZGVjbC5wcm9wKSkge1xuICogICAgICAgICBkZWNsLndhcm4ocmVzdWx0LCAnU29tZSBicm93c2VycyBkbyBub3Qgc3VwcG9ydCAnICsgZGVjbC5wcm9wKVxuICogICAgICAgfVxuICogICAgIH0pXG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICBQb3N0Q1NTIHBsdWdpbiBuYW1lLiBTYW1lIGFzIGluIGBuYW1lYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgaW4gYHBhY2thZ2UuanNvbmAuIEl0IHdpbGwgYmUgc2F2ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGBwbHVnaW4ucG9zdGNzc1BsdWdpbmAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpbml0aWFsaXplciBXaWxsIHJlY2VpdmUgcGx1Z2luIG9wdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzaG91bGQgcmV0dXJuIHtAbGluayBwbHVnaW5GdW5jdGlvbn1cbiAqXG4gKiBAcmV0dXJuIHtQbHVnaW59IFBvc3RDU1MgcGx1Z2luLlxuICovXG5wb3N0Y3NzLnBsdWdpbiA9IGZ1bmN0aW9uIHBsdWdpbiAobmFtZSwgaW5pdGlhbGl6ZXIpIHtcbiAgZnVuY3Rpb24gY3JlYXRvciAoLi4uYXJncykge1xuICAgIGxldCB0cmFuc2Zvcm1lciA9IGluaXRpYWxpemVyKC4uLmFyZ3MpXG4gICAgdHJhbnNmb3JtZXIucG9zdGNzc1BsdWdpbiA9IG5hbWVcbiAgICB0cmFuc2Zvcm1lci5wb3N0Y3NzVmVyc2lvbiA9IChuZXcgUHJvY2Vzc29yKCkpLnZlcnNpb25cbiAgICByZXR1cm4gdHJhbnNmb3JtZXJcbiAgfVxuXG4gIGxldCBjYWNoZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRvciwgJ3Bvc3Rjc3MnLCB7XG4gICAgZ2V0ICgpIHtcbiAgICAgIGlmICghY2FjaGUpIGNhY2hlID0gY3JlYXRvcigpXG4gICAgICByZXR1cm4gY2FjaGVcbiAgICB9XG4gIH0pXG5cbiAgY3JlYXRvci5wcm9jZXNzID0gZnVuY3Rpb24gKGNzcywgcHJvY2Vzc09wdHMsIHBsdWdpbk9wdHMpIHtcbiAgICByZXR1cm4gcG9zdGNzcyhbY3JlYXRvcihwbHVnaW5PcHRzKV0pLnByb2Nlc3MoY3NzLCBwcm9jZXNzT3B0cylcbiAgfVxuXG4gIHJldHVybiBjcmVhdG9yXG59XG5cbi8qKlxuICogRGVmYXVsdCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgbm9kZSB0cmVlIGludG8gYSBDU1Mgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICAgICBTdGFydCBub2RlIGZvciBzdHJpbmdpZmluZy4gVXN1YWxseSB7QGxpbmsgUm9vdH0uXG4gKiBAcGFyYW0ge2J1aWxkZXJ9IGJ1aWxkZXIgRnVuY3Rpb24gdG8gY29uY2F0ZW5hdGUgQ1NTIGZyb20gbm9kZeKAmXMgcGFydHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBnZW5lcmF0ZSBzdHJpbmcgYW5kIHNvdXJjZSBtYXAuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb25cbiAqL1xucG9zdGNzcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcblxuLyoqXG4gKiBQYXJzZXMgc291cmNlIGNzcyBhbmQgcmV0dXJucyBhIG5ldyB7QGxpbmsgUm9vdH0gbm9kZSxcbiAqIHdoaWNoIGNvbnRhaW5zIHRoZSBzb3VyY2UgQ1NTIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHRvU3RyaW5nfSBjc3MgICBTdHJpbmcgd2l0aCBpbnB1dCBDU1Mgb3IgYW55IG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdG9TdHJpbmcoKSBtZXRob2QsIGxpa2UgYSBCdWZmZXJcbiAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSBPcHRpb25zIHdpdGggb25seSBgZnJvbWAgYW5kIGBtYXBgIGtleXMuXG4gKlxuICogQHJldHVybiB7Um9vdH0gUG9zdENTUyBBU1QuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbXBsZSBDU1MgY29uY2F0ZW5hdGlvbiB3aXRoIHNvdXJjZSBtYXAgc3VwcG9ydFxuICogY29uc3Qgcm9vdDEgPSBwb3N0Y3NzLnBhcnNlKGNzczEsIHsgZnJvbTogZmlsZTEgfSlcbiAqIGNvbnN0IHJvb3QyID0gcG9zdGNzcy5wYXJzZShjc3MyLCB7IGZyb206IGZpbGUyIH0pXG4gKiByb290MS5hcHBlbmQocm9vdDIpLnRvUmVzdWx0KCkuY3NzXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbnBvc3Rjc3MucGFyc2UgPSBwYXJzZVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSB7QGxpbmsgdmVuZG9yfSBtb2R1bGUuXG4gKlxuICogQHR5cGUge3ZlbmRvcn1cbiAqXG4gKiBAZXhhbXBsZVxuICogcG9zdGNzcy52ZW5kb3IudW5wcmVmaXhlZCgnLW1vei10YWInKSAvLz0+IFsndGFiJ11cbiAqL1xucG9zdGNzcy52ZW5kb3IgPSB2ZW5kb3JcblxuLyoqXG4gKiBDb250YWlucyB0aGUge0BsaW5rIGxpc3R9IG1vZHVsZS5cbiAqXG4gKiBAbWVtYmVyIHtsaXN0fVxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzLmxpc3Quc3BhY2UoJzVweCBjYWxjKDEwJSArIDVweCknKSAvLz0+IFsnNXB4JywgJ2NhbGMoMTAlICsgNXB4KSddXG4gKi9cbnBvc3Rjc3MubGlzdCA9IGxpc3RcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBDb21tZW50fSBub2RlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVmYXVsdHNdIFByb3BlcnRpZXMgZm9yIHRoZSBuZXcgbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHtDb21tZW50fSBOZXcgY29tbWVudCBub2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3MuY29tbWVudCh7IHRleHQ6ICd0ZXN0JyB9KVxuICovXG5wb3N0Y3NzLmNvbW1lbnQgPSBkZWZhdWx0cyA9PiBuZXcgQ29tbWVudChkZWZhdWx0cylcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBBdFJ1bGV9IG5vZGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtkZWZhdWx0c10gUHJvcGVydGllcyBmb3IgdGhlIG5ldyBub2RlLlxuICpcbiAqIEByZXR1cm4ge0F0UnVsZX0gbmV3IGF0LXJ1bGUgbm9kZVxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzLmF0UnVsZSh7IG5hbWU6ICdjaGFyc2V0JyB9KS50b1N0cmluZygpIC8vPT4gXCJAY2hhcnNldFwiXG4gKi9cbnBvc3Rjc3MuYXRSdWxlID0gZGVmYXVsdHMgPT4gbmV3IEF0UnVsZShkZWZhdWx0cylcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBEZWNsYXJhdGlvbn0gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSBQcm9wZXJ0aWVzIGZvciB0aGUgbmV3IG5vZGUuXG4gKlxuICogQHJldHVybiB7RGVjbGFyYXRpb259IG5ldyBkZWNsYXJhdGlvbiBub2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3MuZGVjbCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAncmVkJyB9KS50b1N0cmluZygpIC8vPT4gXCJjb2xvcjogcmVkXCJcbiAqL1xucG9zdGNzcy5kZWNsID0gZGVmYXVsdHMgPT4gbmV3IERlY2xhcmF0aW9uKGRlZmF1bHRzKVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFJ1bGV9IG5vZGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtkZWZhdWx0c10gUHJvcGVydGllcyBmb3IgdGhlIG5ldyBub2RlLlxuICpcbiAqIEByZXR1cm4ge1J1bGV9IG5ldyBydWxlIG5vZGVcbiAqXG4gKiBAZXhhbXBsZVxuICogcG9zdGNzcy5ydWxlKHsgc2VsZWN0b3I6ICdhJyB9KS50b1N0cmluZygpIC8vPT4gXCJhIHtcXG59XCJcbiAqL1xucG9zdGNzcy5ydWxlID0gZGVmYXVsdHMgPT4gbmV3IFJ1bGUoZGVmYXVsdHMpXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUm9vdH0gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSBQcm9wZXJ0aWVzIGZvciB0aGUgbmV3IG5vZGUuXG4gKlxuICogQHJldHVybiB7Um9vdH0gbmV3IHJvb3Qgbm9kZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogcG9zdGNzcy5yb290KHsgYWZ0ZXI6ICdcXG4nIH0pLnRvU3RyaW5nKCkgLy89PiBcIlxcblwiXG4gKi9cbnBvc3Rjc3Mucm9vdCA9IGRlZmF1bHRzID0+IG5ldyBSb290KGRlZmF1bHRzKVxuXG5leHBvcnQgZGVmYXVsdCBwb3N0Y3NzXG4iXSwiZmlsZSI6InBvc3Rjc3MuanMifQ==
  13165. /***/ }),
  13166. /* 74 */
  13167. /***/ (function(module, exports) {
  13168. var x=String;
  13169. var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};
  13170. module.exports=create();
  13171. module.exports.createColors = create;
  13172. /***/ }),
  13173. /* 75 */
  13174. /***/ (function(module, exports) {
  13175. /* (ignored) */
  13176. /***/ }),
  13177. /* 76 */
  13178. /***/ (function(module, exports, __webpack_require__) {
  13179. "use strict";
  13180. /* WEBPACK VAR INJECTION */(function(Buffer) {
  13181. exports.__esModule = true;
  13182. exports.default = void 0;
  13183. var _sourceMap = _interopRequireDefault(__webpack_require__(39));
  13184. var _path = _interopRequireDefault(__webpack_require__(3));
  13185. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  13186. function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
  13187. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  13188. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  13189. var MapGenerator = /*#__PURE__*/function () {
  13190. function MapGenerator(stringify, root, opts) {
  13191. this.stringify = stringify;
  13192. this.mapOpts = opts.map || {};
  13193. this.root = root;
  13194. this.opts = opts;
  13195. }
  13196. var _proto = MapGenerator.prototype;
  13197. _proto.isMap = function isMap() {
  13198. if (typeof this.opts.map !== 'undefined') {
  13199. return !!this.opts.map;
  13200. }
  13201. return this.previous().length > 0;
  13202. };
  13203. _proto.previous = function previous() {
  13204. var _this = this;
  13205. if (!this.previousMaps) {
  13206. this.previousMaps = [];
  13207. this.root.walk(function (node) {
  13208. if (node.source && node.source.input.map) {
  13209. var map = node.source.input.map;
  13210. if (_this.previousMaps.indexOf(map) === -1) {
  13211. _this.previousMaps.push(map);
  13212. }
  13213. }
  13214. });
  13215. }
  13216. return this.previousMaps;
  13217. };
  13218. _proto.isInline = function isInline() {
  13219. if (typeof this.mapOpts.inline !== 'undefined') {
  13220. return this.mapOpts.inline;
  13221. }
  13222. var annotation = this.mapOpts.annotation;
  13223. if (typeof annotation !== 'undefined' && annotation !== true) {
  13224. return false;
  13225. }
  13226. if (this.previous().length) {
  13227. return this.previous().some(function (i) {
  13228. return i.inline;
  13229. });
  13230. }
  13231. return true;
  13232. };
  13233. _proto.isSourcesContent = function isSourcesContent() {
  13234. if (typeof this.mapOpts.sourcesContent !== 'undefined') {
  13235. return this.mapOpts.sourcesContent;
  13236. }
  13237. if (this.previous().length) {
  13238. return this.previous().some(function (i) {
  13239. return i.withContent();
  13240. });
  13241. }
  13242. return true;
  13243. };
  13244. _proto.clearAnnotation = function clearAnnotation() {
  13245. if (this.mapOpts.annotation === false) return;
  13246. var node;
  13247. for (var i = this.root.nodes.length - 1; i >= 0; i--) {
  13248. node = this.root.nodes[i];
  13249. if (node.type !== 'comment') continue;
  13250. if (node.text.indexOf('# sourceMappingURL=') === 0) {
  13251. this.root.removeChild(i);
  13252. }
  13253. }
  13254. };
  13255. _proto.setSourcesContent = function setSourcesContent() {
  13256. var _this2 = this;
  13257. var already = {};
  13258. this.root.walk(function (node) {
  13259. if (node.source) {
  13260. var from = node.source.input.from;
  13261. if (from && !already[from]) {
  13262. already[from] = true;
  13263. var relative = _this2.relative(from);
  13264. _this2.map.setSourceContent(relative, node.source.input.css);
  13265. }
  13266. }
  13267. });
  13268. };
  13269. _proto.applyPrevMaps = function applyPrevMaps() {
  13270. for (var _iterator = _createForOfIteratorHelperLoose(this.previous()), _step; !(_step = _iterator()).done;) {
  13271. var prev = _step.value;
  13272. var from = this.relative(prev.file);
  13273. var root = prev.root || _path.default.dirname(prev.file);
  13274. var map = void 0;
  13275. if (this.mapOpts.sourcesContent === false) {
  13276. map = new _sourceMap.default.SourceMapConsumer(prev.text);
  13277. if (map.sourcesContent) {
  13278. map.sourcesContent = map.sourcesContent.map(function () {
  13279. return null;
  13280. });
  13281. }
  13282. } else {
  13283. map = prev.consumer();
  13284. }
  13285. this.map.applySourceMap(map, from, this.relative(root));
  13286. }
  13287. };
  13288. _proto.isAnnotation = function isAnnotation() {
  13289. if (this.isInline()) {
  13290. return true;
  13291. }
  13292. if (typeof this.mapOpts.annotation !== 'undefined') {
  13293. return this.mapOpts.annotation;
  13294. }
  13295. if (this.previous().length) {
  13296. return this.previous().some(function (i) {
  13297. return i.annotation;
  13298. });
  13299. }
  13300. return true;
  13301. };
  13302. _proto.toBase64 = function toBase64(str) {
  13303. if (Buffer) {
  13304. return Buffer.from(str).toString('base64');
  13305. }
  13306. return window.btoa(unescape(encodeURIComponent(str)));
  13307. };
  13308. _proto.addAnnotation = function addAnnotation() {
  13309. var content;
  13310. if (this.isInline()) {
  13311. content = 'data:application/json;base64,' + this.toBase64(this.map.toString());
  13312. } else if (typeof this.mapOpts.annotation === 'string') {
  13313. content = this.mapOpts.annotation;
  13314. } else {
  13315. content = this.outputFile() + '.map';
  13316. }
  13317. var eol = '\n';
  13318. if (this.css.indexOf('\r\n') !== -1) eol = '\r\n';
  13319. this.css += eol + '/*# sourceMappingURL=' + content + ' */';
  13320. };
  13321. _proto.outputFile = function outputFile() {
  13322. if (this.opts.to) {
  13323. return this.relative(this.opts.to);
  13324. }
  13325. if (this.opts.from) {
  13326. return this.relative(this.opts.from);
  13327. }
  13328. return 'to.css';
  13329. };
  13330. _proto.generateMap = function generateMap() {
  13331. this.generateString();
  13332. if (this.isSourcesContent()) this.setSourcesContent();
  13333. if (this.previous().length > 0) this.applyPrevMaps();
  13334. if (this.isAnnotation()) this.addAnnotation();
  13335. if (this.isInline()) {
  13336. return [this.css];
  13337. }
  13338. return [this.css, this.map];
  13339. };
  13340. _proto.relative = function relative(file) {
  13341. if (file.indexOf('<') === 0) return file;
  13342. if (/^\w+:\/\//.test(file)) return file;
  13343. var from = this.opts.to ? _path.default.dirname(this.opts.to) : '.';
  13344. if (typeof this.mapOpts.annotation === 'string') {
  13345. from = _path.default.dirname(_path.default.resolve(from, this.mapOpts.annotation));
  13346. }
  13347. file = _path.default.relative(from, file);
  13348. if (_path.default.sep === '\\') {
  13349. return file.replace(/\\/g, '/');
  13350. }
  13351. return file;
  13352. };
  13353. _proto.sourcePath = function sourcePath(node) {
  13354. if (this.mapOpts.from) {
  13355. return this.mapOpts.from;
  13356. }
  13357. return this.relative(node.source.input.from);
  13358. };
  13359. _proto.generateString = function generateString() {
  13360. var _this3 = this;
  13361. this.css = '';
  13362. this.map = new _sourceMap.default.SourceMapGenerator({
  13363. file: this.outputFile()
  13364. });
  13365. var line = 1;
  13366. var column = 1;
  13367. var lines, last;
  13368. this.stringify(this.root, function (str, node, type) {
  13369. _this3.css += str;
  13370. if (node && type !== 'end') {
  13371. if (node.source && node.source.start) {
  13372. _this3.map.addMapping({
  13373. source: _this3.sourcePath(node),
  13374. generated: {
  13375. line: line,
  13376. column: column - 1
  13377. },
  13378. original: {
  13379. line: node.source.start.line,
  13380. column: node.source.start.column - 1
  13381. }
  13382. });
  13383. } else {
  13384. _this3.map.addMapping({
  13385. source: '<no source>',
  13386. original: {
  13387. line: 1,
  13388. column: 0
  13389. },
  13390. generated: {
  13391. line: line,
  13392. column: column - 1
  13393. }
  13394. });
  13395. }
  13396. }
  13397. lines = str.match(/\n/g);
  13398. if (lines) {
  13399. line += lines.length;
  13400. last = str.lastIndexOf('\n');
  13401. column = str.length - last;
  13402. } else {
  13403. column += str.length;
  13404. }
  13405. if (node && type !== 'start') {
  13406. var p = node.parent || {
  13407. raws: {}
  13408. };
  13409. if (node.type !== 'decl' || node !== p.last || p.raws.semicolon) {
  13410. if (node.source && node.source.end) {
  13411. _this3.map.addMapping({
  13412. source: _this3.sourcePath(node),
  13413. generated: {
  13414. line: line,
  13415. column: column - 2
  13416. },
  13417. original: {
  13418. line: node.source.end.line,
  13419. column: node.source.end.column - 1
  13420. }
  13421. });
  13422. } else {
  13423. _this3.map.addMapping({
  13424. source: '<no source>',
  13425. original: {
  13426. line: 1,
  13427. column: 0
  13428. },
  13429. generated: {
  13430. line: line,
  13431. column: column - 1
  13432. }
  13433. });
  13434. }
  13435. }
  13436. }
  13437. });
  13438. };
  13439. _proto.generate = function generate() {
  13440. this.clearAnnotation();
  13441. if (this.isMap()) {
  13442. return this.generateMap();
  13443. }
  13444. var result = '';
  13445. this.stringify(this.root, function (i) {
  13446. result += i;
  13447. });
  13448. return [result];
  13449. };
  13450. return MapGenerator;
  13451. }();
  13452. var _default = MapGenerator;
  13453. exports.default = _default;
  13454. module.exports = exports.default;
  13455. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hcC1nZW5lcmF0b3IuZXM2Il0sIm5hbWVzIjpbIk1hcEdlbmVyYXRvciIsInN0cmluZ2lmeSIsInJvb3QiLCJvcHRzIiwibWFwT3B0cyIsIm1hcCIsImlzTWFwIiwicHJldmlvdXMiLCJsZW5ndGgiLCJwcmV2aW91c01hcHMiLCJ3YWxrIiwibm9kZSIsInNvdXJjZSIsImlucHV0IiwiaW5kZXhPZiIsInB1c2giLCJpc0lubGluZSIsImlubGluZSIsImFubm90YXRpb24iLCJzb21lIiwiaSIsImlzU291cmNlc0NvbnRlbnQiLCJzb3VyY2VzQ29udGVudCIsIndpdGhDb250ZW50IiwiY2xlYXJBbm5vdGF0aW9uIiwibm9kZXMiLCJ0eXBlIiwidGV4dCIsInJlbW92ZUNoaWxkIiwic2V0U291cmNlc0NvbnRlbnQiLCJhbHJlYWR5IiwiZnJvbSIsInJlbGF0aXZlIiwic2V0U291cmNlQ29udGVudCIsImNzcyIsImFwcGx5UHJldk1hcHMiLCJwcmV2IiwiZmlsZSIsInBhdGgiLCJkaXJuYW1lIiwibW96aWxsYSIsIlNvdXJjZU1hcENvbnN1bWVyIiwiY29uc3VtZXIiLCJhcHBseVNvdXJjZU1hcCIsImlzQW5ub3RhdGlvbiIsInRvQmFzZTY0Iiwic3RyIiwiQnVmZmVyIiwidG9TdHJpbmciLCJ3aW5kb3ciLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhZGRBbm5vdGF0aW9uIiwiY29udGVudCIsIm91dHB1dEZpbGUiLCJlb2wiLCJ0byIsImdlbmVyYXRlTWFwIiwiZ2VuZXJhdGVTdHJpbmciLCJ0ZXN0IiwicmVzb2x2ZSIsInNlcCIsInJlcGxhY2UiLCJzb3VyY2VQYXRoIiwiU291cmNlTWFwR2VuZXJhdG9yIiwibGluZSIsImNvbHVtbiIsImxpbmVzIiwibGFzdCIsInN0YXJ0IiwiYWRkTWFwcGluZyIsImdlbmVyYXRlZCIsIm9yaWdpbmFsIiwibWF0Y2giLCJsYXN0SW5kZXhPZiIsInAiLCJwYXJlbnQiLCJyYXdzIiwic2VtaWNv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YUFBcEI7QUFLRDtBQUNGO0FBQ0Y7QUFDRixLQXBERDtBQXFERCxHOztTQUVEYyxRLEdBQUEsb0JBQVk7QUFDVixTQUFLekQsZUFBTDs7QUFFQSxRQUFJLEtBQUtsQixLQUFMLEVBQUosRUFBa0I7QUFDaEIsYUFBTyxLQUFLb0QsV0FBTCxFQUFQO0FBQ0Q7O0FBRUQsUUFBSXdCLE1BQU0sR0FBRyxFQUFiO0FBQ0EsU0FBS2pGLFNBQUwsQ0FBZSxLQUFLQyxJQUFwQixFQUEwQixVQUFBa0IsQ0FBQyxFQUFJO0FBQzdCOEQsTUFBQUEsTUFBTSxJQUFJOUQsQ0FBVjtBQUNELEtBRkQ7QUFHQSxXQUFPLENBQUM4RCxNQUFELENBQVA7QUFDRCxHOzs7OztlQUdZbEYsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb3ppbGxhIGZyb20gJ3NvdXJjZS1tYXAnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5jbGFzcyBNYXBHZW5lcmF0b3Ige1xuICBjb25zdHJ1Y3RvciAoc3RyaW5naWZ5LCByb290LCBvcHRzKSB7XG4gICAgdGhpcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcbiAgICB0aGlzLm1hcE9wdHMgPSBvcHRzLm1hcCB8fCB7IH1cbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgdGhpcy5vcHRzID0gb3B0c1xuICB9XG5cbiAgaXNNYXAgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLm1hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3B0cy5tYXBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5sZW5ndGggPiAwXG4gIH1cblxuICBwcmV2aW91cyAoKSB7XG4gICAgaWYgKCF0aGlzLnByZXZpb3VzTWFwcykge1xuICAgICAgdGhpcy5wcmV2aW91c01hcHMgPSBbXVxuICAgICAgdGhpcy5yb290LndhbGsobm9kZSA9PiB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSAmJiBub2RlLnNvdXJjZS5pbnB1dC5tYXApIHtcbiAgICAgICAgICBsZXQgbWFwID0gbm9kZS5zb3VyY2UuaW5wdXQubWFwXG4gICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNNYXBzLmluZGV4T2YobWFwKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNNYXBzLnB1c2gobWFwKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c01hcHNcbiAgfVxuXG4gIGlzSW5saW5lICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMubWFwT3B0cy5pbmxpbmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLmlubGluZVxuICAgIH1cblxuICAgIGxldCBhbm5vdGF0aW9uID0gdGhpcy5tYXBPcHRzLmFubm90YXRpb25cbiAgICBpZiAodHlwZW9mIGFubm90YXRpb24gIT09ICd1bmRlZmluZWQnICYmIGFubm90YXRpb24gIT09IHRydWUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXZpb3VzKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2aW91cygpLnNvbWUoaSA9PiBpLmlubGluZSlcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlzU291cmNlc0NvbnRlbnQgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLnNvdXJjZXNDb250ZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudFxuICAgIH1cbiAgICBpZiAodGhpcy5wcmV2aW91cygpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5zb21lKGkgPT4gaS53aXRoQ29udGVudCgpKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY2xlYXJBbm5vdGF0aW9uICgpIHtcbiAgICBpZiAodGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09IGZhbHNlKSByZXR1cm5cblxuICAgIGxldCBub2RlXG4gICAgZm9yIChsZXQgaSA9IHRoaXMucm9vdC5ub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbm9kZSA9IHRoaXMucm9vdC5ub2Rlc1tpXVxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ2NvbW1lbnQnKSBjb250aW51ZVxuICAgICAgaWYgKG5vZGUudGV4dC5pbmRleE9mKCcjIHNvdXJjZU1hcHBpbmdVUkw9JykgPT09IDApIHtcbiAgICAgICAgdGhpcy5yb290LnJlbW92ZUNoaWxkKGkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0U291cmNlc0NvbnRlbnQgKCkge1xuICAgIGxldCBhbHJlYWR5ID0geyB9XG4gICAgdGhpcy5yb290LndhbGsobm9kZSA9PiB7XG4gICAgICBpZiAobm9kZS5zb3VyY2UpIHtcbiAgICAgICAgbGV0IGZyb20gPSBub2RlLnNvdXJjZS5pbnB1dC5mcm9tXG4gICAgICAgIGlmIChmcm9tICYmICFhbHJlYWR5W2Zyb21dKSB7XG4gICAgICAgICAgYWxyZWFkeVtmcm9tXSA9IHRydWVcbiAgICAgICAgICBsZXQgcmVsYXRpdmUgPSB0aGlzLnJlbGF0aXZlKGZyb20pXG4gICAgICAgICAgdGhpcy5tYXAuc2V0U291cmNlQ29udGVudChyZWxhdGl2ZSwgbm9kZS5zb3VyY2UuaW5wdXQuY3NzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFwcGx5UHJldk1hcHMgKCkge1xuICAgIGZvciAobGV0IHByZXYgb2YgdGhpcy5wcmV2aW91cygpKSB7XG4gICAgICBsZXQgZnJvbSA9IHRoaXMucmVsYXRpdmUocHJldi5maWxlKVxuICAgICAgbGV0IHJvb3QgPSBwcmV2LnJvb3QgfHwgcGF0aC5kaXJuYW1lKHByZXYuZmlsZSlcbiAgICAgIGxldCBtYXBcblxuICAgICAgaWYgKHRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWFwID0gbmV3IG1vemlsbGEuU291cmNlTWFwQ29uc3VtZXIocHJldi50ZXh0KVxuICAgICAgICBpZiAobWFwLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICAgICAgbWFwLnNvdXJjZXNDb250ZW50ID0gbWFwLnNvdXJjZXNDb250ZW50Lm1hcCgoKSA9PiBudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXAgPSBwcmV2LmNvbnN1bWVyKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuYXBwbHlTb3VyY2VNYXAobWFwLCBmcm9tLCB0aGlzLnJlbGF0aXZlKHJvb3QpKVxuICAgIH1cbiAgfVxuXG4gIGlzQW5ub3RhdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvblxuICAgIH1cbiAgICBpZiAodGhpcy5wcmV2aW91cygpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5zb21lKGkgPT4gaS5hbm5vdGF0aW9uKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgdG9CYXNlNjQgKHN0cikge1xuICAgIGlmIChCdWZmZXIpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIH1cbiAgICByZXR1cm4gd2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKVxuICB9XG5cbiAgYWRkQW5ub3RhdGlvbiAoKSB7XG4gICAgbGV0IGNvbnRlbnRcblxuICAgIGlmICh0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIGNvbnRlbnQgPSAnZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICtcbiAgICAgICAgICAgICAgICB0aGlzLnRvQmFzZTY0KHRoaXMubWFwLnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tYXBPcHRzLmFubm90YXRpb25cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMub3V0cHV0RmlsZSgpICsgJy5tYXAnXG4gICAgfVxuXG4gICAgbGV0IGVvbCA9ICdcXG4nXG4gICAgaWYgKHRoaXMuY3NzLmluZGV4T2YoJ1xcclxcbicpICE9PSAtMSkgZW9sID0gJ1xcclxcbidcblxuICAgIHRoaXMuY3NzICs9IGVvbCArICcvKiMgc291cmNlTWFwcGluZ1VSTD0nICsgY29udGVudCArICcgKi8nXG4gIH1cblxuICBvdXRwdXRGaWxlICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSh0aGlzLm9wdHMudG8pXG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuZnJvbSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUodGhpcy5vcHRzLmZyb20pXG4gICAgfVxuICAgIHJldHVybiAndG8uY3NzJ1xuICB9XG5cbiAgZ2VuZXJhdGVNYXAgKCkge1xuICAgIHRoaXMuZ2VuZXJhdGVTdHJpbmcoKVxuICAgIGlmICh0aGlzLmlzU291cmNlc0NvbnRlbnQoKSkgdGhpcy5zZXRTb3VyY2VzQ29udGVudCgpXG4gICAgaWYgKHRoaXMucHJldmlvdXMoKS5sZW5ndGggPiAwKSB0aGlzLmFwcGx5UHJldk1hcHMoKVxuICAgIGlmICh0aGlzLmlzQW5ub3RhdGlvbigpKSB0aGlzLmFkZEFubm90YXRpb24oKVxuXG4gICAgaWYgKHRoaXMuaXNJbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIFt0aGlzLmNzc11cbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmNzcywgdGhpcy5tYXBdXG4gIH1cblxuICByZWxhdGl2ZSAoZmlsZSkge1xuICAgIGlmIChmaWxlLmluZGV4T2YoJzwnKSA9PT0gMCkgcmV0dXJuIGZpbGVcbiAgICBpZiAoL15cXHcrOlxcL1xcLy8udGVzdChmaWxlKSkgcmV0dXJuIGZpbGVcblxuICAgIGxldCBmcm9tID0gdGhpcy5vcHRzLnRvID8gcGF0aC5kaXJuYW1lKHRoaXMub3B0cy50bykgOiAnLidcblxuICAgIGlmICh0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcm9tID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShmcm9tLCB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbikpXG4gICAgfVxuXG4gICAgZmlsZSA9IHBhdGgucmVsYXRpdmUoZnJvbSwgZmlsZSlcbiAgICBpZiAocGF0aC5zZXAgPT09ICdcXFxcJykge1xuICAgICAgcmV0dXJuIGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgfVxuICAgIHJldHVybiBmaWxlXG4gIH1cblxuICBzb3VyY2VQYXRoIChub2RlKSB7XG4gICAgaWYgKHRoaXMubWFwT3B0cy5mcm9tKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLmZyb21cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmUobm9kZS5zb3VyY2UuaW5wdXQuZnJvbSlcbiAgfVxuXG4gIGdlbmVyYXRlU3RyaW5nICgpIHtcbiAgICB0aGlzLmNzcyA9ICcnXG4gICAgdGhpcy5tYXAgPSBuZXcgbW96aWxsYS5Tb3VyY2VNYXBHZW5lcmF0b3IoeyBmaWxlOiB0aGlzLm91dHB1dEZpbGUoKSB9KVxuXG4gICAgbGV0IGxpbmUgPSAxXG4gICAgbGV0IGNvbHVtbiA9IDFcblxuICAgIGxldCBsaW5lcywgbGFzdFxuICAgIHRoaXMuc3RyaW5naWZ5KHRoaXMucm9vdCwgKHN0ciwgbm9kZSwgdHlwZSkgPT4ge1xuICAgICAgdGhpcy5jc3MgKz0gc3RyXG5cbiAgICAgIGlmIChub2RlICYmIHR5cGUgIT09ICdlbmQnKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSAmJiBub2RlLnNvdXJjZS5zdGFydCkge1xuICAgICAgICAgIHRoaXMubWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVBhdGgobm9kZSksXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHsgbGluZSwgY29sdW1uOiBjb2x1bW4gLSAxIH0sXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBub2RlLnNvdXJjZS5zdGFydC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG5vZGUuc291cmNlLnN0YXJ0LmNvbHVtbiAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiAnPG5vIHNvdXJjZT4nLFxuICAgICAgICAgICAgb3JpZ2luYWw6IHsgbGluZTogMSwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHsgbGluZSwgY29sdW1uOiBjb2x1bW4gLSAxIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpbmVzID0gc3RyLm1hdGNoKC9cXG4vZylcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBsaW5lICs9IGxpbmVzLmxlbmd0aFxuICAgICAgICBsYXN0ID0gc3RyLmxhc3RJbmRleE9mKCdcXG4nKVxuICAgICAgICBjb2x1bW4gPSBzdHIubGVuZ3RoIC0gbGFzdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uICs9IHN0ci5sZW5ndGhcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgJiYgdHlwZSAhPT0gJ3N0YXJ0Jykge1xuICAgICAgICBsZXQgcCA9IG5vZGUucGFyZW50IHx8IHsgcmF3czogeyB9IH1cbiAgICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ2RlY2wnIHx8IG5vZGUgIT09IHAubGFzdCB8fCBwLnJhd3Muc2VtaWNvbG9uKSB7XG4gICAgICAgICAgaWYgKG5vZGUuc291cmNlICYmIG5vZGUuc291cmNlLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VQYXRoKG5vZGUpLFxuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHsgbGluZSwgY29sdW1uOiBjb2x1bW4gLSAyIH0sXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICAgICAgbGluZTogbm9kZS5zb3VyY2UuZW5kLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBub2RlLnNvdXJjZS5lbmQuY29sdW1uIC0gMVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICAgICAgc291cmNlOiAnPG5vIHNvdXJjZT4nLFxuICAgICAgICAgICAgICBvcmlnaW5hbDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkOiB7IGxpbmUsIGNvbHVtbjogY29sdW1uIC0gMSB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZW5lcmF0ZSAoKSB7XG4gICAgdGhpcy5jbGVhckFubm90YXRpb24oKVxuXG4gICAgaWYgKHRoaXMuaXNNYXAoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVNYXAoKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIHRoaXMuc3RyaW5naWZ5KHRoaXMucm9vdCwgaSA9PiB7XG4gICAgICByZXN1bHQgKz0gaVxuICAgIH0pXG4gICAgcmV0dXJuIFtyZXN1bHRdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwR2VuZXJhdG9yXG4iXSwiZmlsZSI6Im1hcC1nZW5lcmF0b3IuanMifQ==
  13456. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(38).Buffer))
  13457. /***/ }),
  13458. /* 77 */
  13459. /***/ (function(module, exports, __webpack_require__) {
  13460. "use strict";
  13461. exports.byteLength = byteLength
  13462. exports.toByteArray = toByteArray
  13463. exports.fromByteArray = fromByteArray
  13464. var lookup = []
  13465. var revLookup = []
  13466. var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
  13467. var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  13468. for (var i = 0, len = code.length; i < len; ++i) {
  13469. lookup[i] = code[i]
  13470. revLookup[code.charCodeAt(i)] = i
  13471. }
  13472. // Support decoding URL-safe base64 strings, as Node.js does.
  13473. // See: https://en.wikipedia.org/wiki/Base64#URL_applications
  13474. revLookup['-'.charCodeAt(0)] = 62
  13475. revLookup['_'.charCodeAt(0)] = 63
  13476. function getLens (b64) {
  13477. var len = b64.length
  13478. if (len % 4 > 0) {
  13479. throw new Error('Invalid string. Length must be a multiple of 4')
  13480. }
  13481. // Trim off extra bytes after placeholder bytes are found
  13482. // See: https://github.com/beatgammit/base64-js/issues/42
  13483. var validLen = b64.indexOf('=')
  13484. if (validLen === -1) validLen = len
  13485. var placeHoldersLen = validLen === len
  13486. ? 0
  13487. : 4 - (validLen % 4)
  13488. return [validLen, placeHoldersLen]
  13489. }
  13490. // base64 is 4/3 + up to two characters of the original data
  13491. function byteLength (b64) {
  13492. var lens = getLens(b64)
  13493. var validLen = lens[0]
  13494. var placeHoldersLen = lens[1]
  13495. return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
  13496. }
  13497. function _byteLength (b64, validLen, placeHoldersLen) {
  13498. return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
  13499. }
  13500. function toByteArray (b64) {
  13501. var tmp
  13502. var lens = getLens(b64)
  13503. var validLen = lens[0]
  13504. var placeHoldersLen = lens[1]
  13505. var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
  13506. var curByte = 0
  13507. // if there are placeholders, only get up to the last complete 4 chars
  13508. var len = placeHoldersLen > 0
  13509. ? validLen - 4
  13510. : validLen
  13511. var i
  13512. for (i = 0; i < len; i += 4) {
  13513. tmp =
  13514. (revLookup[b64.charCodeAt(i)] << 18) |
  13515. (revLookup[b64.charCodeAt(i + 1)] << 12) |
  13516. (revLookup[b64.charCodeAt(i + 2)] << 6) |
  13517. revLookup[b64.charCodeAt(i + 3)]
  13518. arr[curByte++] = (tmp >> 16) & 0xFF
  13519. arr[curByte++] = (tmp >> 8) & 0xFF
  13520. arr[curByte++] = tmp & 0xFF
  13521. }
  13522. if (placeHoldersLen === 2) {
  13523. tmp =
  13524. (revLookup[b64.charCodeAt(i)] << 2) |
  13525. (revLookup[b64.charCodeAt(i + 1)] >> 4)
  13526. arr[curByte++] = tmp & 0xFF
  13527. }
  13528. if (placeHoldersLen === 1) {
  13529. tmp =
  13530. (revLookup[b64.charCodeAt(i)] << 10) |
  13531. (revLookup[b64.charCodeAt(i + 1)] << 4) |
  13532. (revLookup[b64.charCodeAt(i + 2)] >> 2)
  13533. arr[curByte++] = (tmp >> 8) & 0xFF
  13534. arr[curByte++] = tmp & 0xFF
  13535. }
  13536. return arr
  13537. }
  13538. function tripletToBase64 (num) {
  13539. return lookup[num >> 18 & 0x3F] +
  13540. lookup[num >> 12 & 0x3F] +
  13541. lookup[num >> 6 & 0x3F] +
  13542. lookup[num & 0x3F]
  13543. }
  13544. function encodeChunk (uint8, start, end) {
  13545. var tmp
  13546. var output = []
  13547. for (var i = start; i < end; i += 3) {
  13548. tmp =
  13549. ((uint8[i] << 16) & 0xFF0000) +
  13550. ((uint8[i + 1] << 8) & 0xFF00) +
  13551. (uint8[i + 2] & 0xFF)
  13552. output.push(tripletToBase64(tmp))
  13553. }
  13554. return output.join('')
  13555. }
  13556. function fromByteArray (uint8) {
  13557. var tmp
  13558. var len = uint8.length
  13559. var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  13560. var parts = []
  13561. var maxChunkLength = 16383 // must be multiple of 3
  13562. // go through the array every three bytes, we'll deal with trailing stuff later
  13563. for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
  13564. parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
  13565. }
  13566. // pad the end with zeros, but make sure to not forget the extra bytes
  13567. if (extraBytes === 1) {
  13568. tmp = uint8[len - 1]
  13569. parts.push(
  13570. lookup[tmp >> 2] +
  13571. lookup[(tmp << 4) & 0x3F] +
  13572. '=='
  13573. )
  13574. } else if (extraBytes === 2) {
  13575. tmp = (uint8[len - 2] << 8) + uint8[len - 1]
  13576. parts.push(
  13577. lookup[tmp >> 10] +
  13578. lookup[(tmp >> 4) & 0x3F] +
  13579. lookup[(tmp << 2) & 0x3F] +
  13580. '='
  13581. )
  13582. }
  13583. return parts.join('')
  13584. }
  13585. /***/ }),
  13586. /* 78 */
  13587. /***/ (function(module, exports) {
  13588. /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
  13589. exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  13590. var e, m
  13591. var eLen = (nBytes * 8) - mLen - 1
  13592. var eMax = (1 << eLen) - 1
  13593. var eBias = eMax >> 1
  13594. var nBits = -7
  13595. var i = isLE ? (nBytes - 1) : 0
  13596. var d = isLE ? -1 : 1
  13597. var s = buffer[offset + i]
  13598. i += d
  13599. e = s & ((1 << (-nBits)) - 1)
  13600. s >>= (-nBits)
  13601. nBits += eLen
  13602. for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
  13603. m = e & ((1 << (-nBits)) - 1)
  13604. e >>= (-nBits)
  13605. nBits += mLen
  13606. for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
  13607. if (e === 0) {
  13608. e = 1 - eBias
  13609. } else if (e === eMax) {
  13610. return m ? NaN : ((s ? -1 : 1) * Infinity)
  13611. } else {
  13612. m = m + Math.pow(2, mLen)
  13613. e = e - eBias
  13614. }
  13615. return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
  13616. }
  13617. exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  13618. var e, m, c
  13619. var eLen = (nBytes * 8) - mLen - 1
  13620. var eMax = (1 << eLen) - 1
  13621. var eBias = eMax >> 1
  13622. var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  13623. var i = isLE ? 0 : (nBytes - 1)
  13624. var d = isLE ? 1 : -1
  13625. var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
  13626. value = Math.abs(value)
  13627. if (isNaN(value) || value === Infinity) {
  13628. m = isNaN(value) ? 1 : 0
  13629. e = eMax
  13630. } else {
  13631. e = Math.floor(Math.log(value) / Math.LN2)
  13632. if (value * (c = Math.pow(2, -e)) < 1) {
  13633. e--
  13634. c *= 2
  13635. }
  13636. if (e + eBias >= 1) {
  13637. value += rt / c
  13638. } else {
  13639. value += rt * Math.pow(2, 1 - eBias)
  13640. }
  13641. if (value * c >= 2) {
  13642. e++
  13643. c /= 2
  13644. }
  13645. if (e + eBias >= eMax) {
  13646. m = 0
  13647. e = eMax
  13648. } else if (e + eBias >= 1) {
  13649. m = ((value * c) - 1) * Math.pow(2, mLen)
  13650. e = e + eBias
  13651. } else {
  13652. m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
  13653. e = 0
  13654. }
  13655. }
  13656. for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
  13657. e = (e << mLen) | m
  13658. eLen += mLen
  13659. for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
  13660. buffer[offset + i - d] |= s * 128
  13661. }
  13662. /***/ }),
  13663. /* 79 */
  13664. /***/ (function(module, exports) {
  13665. var toString = {}.toString;
  13666. module.exports = Array.isArray || function (arr) {
  13667. return toString.call(arr) == '[object Array]';
  13668. };
  13669. /***/ }),
  13670. /* 80 */
  13671. /***/ (function(module, exports) {
  13672. /* -*- Mode: js; js-indent-level: 2; -*- */
  13673. /*
  13674. * Copyright 2011 Mozilla Foundation and contributors
  13675. * Licensed under the New BSD license. See LICENSE or:
  13676. * http://opensource.org/licenses/BSD-3-Clause
  13677. */
  13678. var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
  13679. /**
  13680. * Encode an integer in the range of 0 to 63 to a single base 64 digit.
  13681. */
  13682. exports.encode = function (number) {
  13683. if (0 <= number && number < intToCharMap.length) {
  13684. return intToCharMap[number];
  13685. }
  13686. throw new TypeError("Must be between 0 and 63: " + number);
  13687. };
  13688. /**
  13689. * Decode a single base 64 character code digit to an integer. Returns -1 on
  13690. * failure.
  13691. */
  13692. exports.decode = function (charCode) {
  13693. var bigA = 65; // 'A'
  13694. var bigZ = 90; // 'Z'
  13695. var littleA = 97; // 'a'
  13696. var littleZ = 122; // 'z'
  13697. var zero = 48; // '0'
  13698. var nine = 57; // '9'
  13699. var plus = 43; // '+'
  13700. var slash = 47; // '/'
  13701. var littleOffset = 26;
  13702. var numberOffset = 52;
  13703. // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  13704. if (bigA <= charCode && charCode <= bigZ) {
  13705. return (charCode - bigA);
  13706. }
  13707. // 26 - 51: abcdefghijklmnopqrstuvwxyz
  13708. if (littleA <= charCode && charCode <= littleZ) {
  13709. return (charCode - littleA + littleOffset);
  13710. }
  13711. // 52 - 61: 0123456789
  13712. if (zero <= charCode && charCode <= nine) {
  13713. return (charCode - zero + numberOffset);
  13714. }
  13715. // 62: +
  13716. if (charCode == plus) {
  13717. return 62;
  13718. }
  13719. // 63: /
  13720. if (charCode == slash) {
  13721. return 63;
  13722. }
  13723. // Invalid base64 digit.
  13724. return -1;
  13725. };
  13726. /***/ }),
  13727. /* 81 */
  13728. /***/ (function(module, exports, __webpack_require__) {
  13729. /* -*- Mode: js; js-indent-level: 2; -*- */
  13730. /*
  13731. * Copyright 2014 Mozilla Foundation and contributors
  13732. * Licensed under the New BSD license. See LICENSE or:
  13733. * http://opensource.org/licenses/BSD-3-Clause
  13734. */
  13735. var util = __webpack_require__(8);
  13736. /**
  13737. * Determine whether mappingB is after mappingA with respect to generated
  13738. * position.
  13739. */
  13740. function generatedPositionAfter(mappingA, mappingB) {
  13741. // Optimized for most common case
  13742. var lineA = mappingA.generatedLine;
  13743. var lineB = mappingB.generatedLine;
  13744. var columnA = mappingA.generatedColumn;
  13745. var columnB = mappingB.generatedColumn;
  13746. return lineB > lineA || lineB == lineA && columnB >= columnA ||
  13747. util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
  13748. }
  13749. /**
  13750. * A data structure to provide a sorted view of accumulated mappings in a
  13751. * performance conscious manner. It trades a neglibable overhead in general
  13752. * case for a large speedup in case of mappings being added in order.
  13753. */
  13754. function MappingList() {
  13755. this._array = [];
  13756. this._sorted = true;
  13757. // Serves as infimum
  13758. this._last = {generatedLine: -1, generatedColumn: 0};
  13759. }
  13760. /**
  13761. * Iterate through internal items. This method takes the same arguments that
  13762. * `Array.prototype.forEach` takes.
  13763. *
  13764. * NOTE: The order of the mappings is NOT guaranteed.
  13765. */
  13766. MappingList.prototype.unsortedForEach =
  13767. function MappingList_forEach(aCallback, aThisArg) {
  13768. this._array.forEach(aCallback, aThisArg);
  13769. };
  13770. /**
  13771. * Add the given source mapping.
  13772. *
  13773. * @param Object aMapping
  13774. */
  13775. MappingList.prototype.add = function MappingList_add(aMapping) {
  13776. if (generatedPositionAfter(this._last, aMapping)) {
  13777. this._last = aMapping;
  13778. this._array.push(aMapping);
  13779. } else {
  13780. this._sorted = false;
  13781. this._array.push(aMapping);
  13782. }
  13783. };
  13784. /**
  13785. * Returns the flat, sorted array of mappings. The mappings are sorted by
  13786. * generated position.
  13787. *
  13788. * WARNING: This method returns internal data without copying, for
  13789. * performance. The return value must NOT be mutated, and should be treated as
  13790. * an immutable borrow. If you want to take ownership, you must make your own
  13791. * copy.
  13792. */
  13793. MappingList.prototype.toArray = function MappingList_toArray() {
  13794. if (!this._sorted) {
  13795. this._array.sort(util.compareByGeneratedPositionsInflated);
  13796. this._sorted = true;
  13797. }
  13798. return this._array;
  13799. };
  13800. exports.MappingList = MappingList;
  13801. /***/ }),
  13802. /* 82 */
  13803. /***/ (function(module, exports, __webpack_require__) {
  13804. /* -*- Mode: js; js-indent-level: 2; -*- */
  13805. /*
  13806. * Copyright 2011 Mozilla Foundation and contributors
  13807. * Licensed under the New BSD license. See LICENSE or:
  13808. * http://opensource.org/licenses/BSD-3-Clause
  13809. */
  13810. var util = __webpack_require__(8);
  13811. var binarySearch = __webpack_require__(83);
  13812. var ArraySet = __webpack_require__(42).ArraySet;
  13813. var base64VLQ = __webpack_require__(41);
  13814. var quickSort = __webpack_require__(84).quickSort;
  13815. function SourceMapConsumer(aSourceMap, aSourceMapURL) {
  13816. var sourceMap = aSourceMap;
  13817. if (typeof aSourceMap === 'string') {
  13818. sourceMap = util.parseSourceMapInput(aSourceMap);
  13819. }
  13820. return sourceMap.sections != null
  13821. ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
  13822. : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
  13823. }
  13824. SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
  13825. return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
  13826. }
  13827. /**
  13828. * The version of the source mapping spec that we are consuming.
  13829. */
  13830. SourceMapConsumer.prototype._version = 3;
  13831. // `__generatedMappings` and `__originalMappings` are arrays that hold the
  13832. // parsed mapping coordinates from the source map's "mappings" attribute. They
  13833. // are lazily instantiated, accessed via the `_generatedMappings` and
  13834. // `_originalMappings` getters respectively, and we only parse the mappings
  13835. // and create these arrays once queried for a source location. We jump through
  13836. // these hoops because there can be many thousands of mappings, and parsing
  13837. // them is expensive, so we only want to do it if we must.
  13838. //
  13839. // Each object in the arrays is of the form:
  13840. //
  13841. // {
  13842. // generatedLine: The line number in the generated code,
  13843. // generatedColumn: The column number in the generated code,
  13844. // source: The path to the original source file that generated this
  13845. // chunk of code,
  13846. // originalLine: The line number in the original source that
  13847. // corresponds to this chunk of generated code,
  13848. // originalColumn: The column number in the original source that
  13849. // corresponds to this chunk of generated code,
  13850. // name: The name of the original symbol which generated this chunk of
  13851. // code.
  13852. // }
  13853. //
  13854. // All properties except for `generatedLine` and `generatedColumn` can be
  13855. // `null`.
  13856. //
  13857. // `_generatedMappings` is ordered by the generated positions.
  13858. //
  13859. // `_originalMappings` is ordered by the original positions.
  13860. SourceMapConsumer.prototype.__generatedMappings = null;
  13861. Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
  13862. configurable: true,
  13863. enumerable: true,
  13864. get: function () {
  13865. if (!this.__generatedMappings) {
  13866. this._parseMappings(this._mappings, this.sourceRoot);
  13867. }
  13868. return this.__generatedMappings;
  13869. }
  13870. });
  13871. SourceMapConsumer.prototype.__originalMappings = null;
  13872. Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
  13873. configurable: true,
  13874. enumerable: true,
  13875. get: function () {
  13876. if (!this.__originalMappings) {
  13877. this._parseMappings(this._mappings, this.sourceRoot);
  13878. }
  13879. return this.__originalMappings;
  13880. }
  13881. });
  13882. SourceMapConsumer.prototype._charIsMappingSeparator =
  13883. function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
  13884. var c = aStr.charAt(index);
  13885. return c === ";" || c === ",";
  13886. };
  13887. /**
  13888. * Parse the mappings in a string in to a data structure which we can easily
  13889. * query (the ordered arrays in the `this.__generatedMappings` and
  13890. * `this.__originalMappings` properties).
  13891. */
  13892. SourceMapConsumer.prototype._parseMappings =
  13893. function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  13894. throw new Error("Subclasses must implement _parseMappings");
  13895. };
  13896. SourceMapConsumer.GENERATED_ORDER = 1;
  13897. SourceMapConsumer.ORIGINAL_ORDER = 2;
  13898. SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
  13899. SourceMapConsumer.LEAST_UPPER_BOUND = 2;
  13900. /**
  13901. * Iterate over each mapping between an original source/line/column and a
  13902. * generated line/column in this source map.
  13903. *
  13904. * @param Function aCallback
  13905. * The function that is called with each mapping.
  13906. * @param Object aContext
  13907. * Optional. If specified, this object will be the value of `this` every
  13908. * time that `aCallback` is called.
  13909. * @param aOrder
  13910. * Either `SourceMapConsumer.GENERATED_ORDER` or
  13911. * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
  13912. * iterate over the mappings sorted by the generated file's line/column
  13913. * order or the original's source/line/column order, respectively. Defaults to
  13914. * `SourceMapConsumer.GENERATED_ORDER`.
  13915. */
  13916. SourceMapConsumer.prototype.eachMapping =
  13917. function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
  13918. var context = aContext || null;
  13919. var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
  13920. var mappings;
  13921. switch (order) {
  13922. case SourceMapConsumer.GENERATED_ORDER:
  13923. mappings = this._generatedMappings;
  13924. break;
  13925. case SourceMapConsumer.ORIGINAL_ORDER:
  13926. mappings = this._originalMappings;
  13927. break;
  13928. default:
  13929. throw new Error("Unknown order of iteration.");
  13930. }
  13931. var sourceRoot = this.sourceRoot;
  13932. mappings.map(function (mapping) {
  13933. var source = mapping.source === null ? null : this._sources.at(mapping.source);
  13934. source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
  13935. return {
  13936. source: source,
  13937. generatedLine: mapping.generatedLine,
  13938. generatedColumn: mapping.generatedColumn,
  13939. originalLine: mapping.originalLine,
  13940. originalColumn: mapping.originalColumn,
  13941. name: mapping.name === null ? null : this._names.at(mapping.name)
  13942. };
  13943. }, this).forEach(aCallback, context);
  13944. };
  13945. /**
  13946. * Returns all generated line and column information for the original source,
  13947. * line, and column provided. If no column is provided, returns all mappings
  13948. * corresponding to a either the line we are searching for or the next
  13949. * closest line that has any mappings. Otherwise, returns all mappings
  13950. * corresponding to the given line and either the column we are searching for
  13951. * or the next closest column that has any offsets.
  13952. *
  13953. * The only argument is an object with the following properties:
  13954. *
  13955. * - source: The filename of the original source.
  13956. * - line: The line number in the original source. The line number is 1-based.
  13957. * - column: Optional. the column number in the original source.
  13958. * The column number is 0-based.
  13959. *
  13960. * and an array of objects is returned, each with the following properties:
  13961. *
  13962. * - line: The line number in the generated source, or null. The
  13963. * line number is 1-based.
  13964. * - column: The column number in the generated source, or null.
  13965. * The column number is 0-based.
  13966. */
  13967. SourceMapConsumer.prototype.allGeneratedPositionsFor =
  13968. function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
  13969. var line = util.getArg(aArgs, 'line');
  13970. // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
  13971. // returns the index of the closest mapping less than the needle. By
  13972. // setting needle.originalColumn to 0, we thus find the last mapping for
  13973. // the given line, provided such a mapping exists.
  13974. var needle = {
  13975. source: util.getArg(aArgs, 'source'),
  13976. originalLine: line,
  13977. originalColumn: util.getArg(aArgs, 'column', 0)
  13978. };
  13979. needle.source = this._findSourceIndex(needle.source);
  13980. if (needle.source < 0) {
  13981. return [];
  13982. }
  13983. var mappings = [];
  13984. var index = this._findMapping(needle,
  13985. this._originalMappings,
  13986. "originalLine",
  13987. "originalColumn",
  13988. util.compareByOriginalPositions,
  13989. binarySearch.LEAST_UPPER_BOUND);
  13990. if (index >= 0) {
  13991. var mapping = this._originalMappings[index];
  13992. if (aArgs.column === undefined) {
  13993. var originalLine = mapping.originalLine;
  13994. // Iterate until either we run out of mappings, or we run into
  13995. // a mapping for a different line than the one we found. Since
  13996. // mappings are sorted, this is guaranteed to find all mappings for
  13997. // the line we found.
  13998. while (mapping && mapping.originalLine === originalLine) {
  13999. mappings.push({
  14000. line: util.getArg(mapping, 'generatedLine', null),
  14001. column: util.getArg(mapping, 'generatedColumn', null),
  14002. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  14003. });
  14004. mapping = this._originalMappings[++index];
  14005. }
  14006. } else {
  14007. var originalColumn = mapping.originalColumn;
  14008. // Iterate until either we run out of mappings, or we run into
  14009. // a mapping for a different line than the one we were searching for.
  14010. // Since mappings are sorted, this is guaranteed to find all mappings for
  14011. // the line we are searching for.
  14012. while (mapping &&
  14013. mapping.originalLine === line &&
  14014. mapping.originalColumn == originalColumn) {
  14015. mappings.push({
  14016. line: util.getArg(mapping, 'generatedLine', null),
  14017. column: util.getArg(mapping, 'generatedColumn', null),
  14018. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  14019. });
  14020. mapping = this._originalMappings[++index];
  14021. }
  14022. }
  14023. }
  14024. return mappings;
  14025. };
  14026. exports.SourceMapConsumer = SourceMapConsumer;
  14027. /**
  14028. * A BasicSourceMapConsumer instance represents a parsed source map which we can
  14029. * query for information about the original file positions by giving it a file
  14030. * position in the generated source.
  14031. *
  14032. * The first parameter is the raw source map (either as a JSON string, or
  14033. * already parsed to an object). According to the spec, source maps have the
  14034. * following attributes:
  14035. *
  14036. * - version: Which version of the source map spec this map is following.
  14037. * - sources: An array of URLs to the original source files.
  14038. * - names: An array of identifiers which can be referrenced by individual mappings.
  14039. * - sourceRoot: Optional. The URL root from which all sources are relative.
  14040. * - sourcesContent: Optional. An array of contents of the original source files.
  14041. * - mappings: A string of base64 VLQs which contain the actual mappings.
  14042. * - file: Optional. The generated file this source map is associated with.
  14043. *
  14044. * Here is an example source map, taken from the source map spec[0]:
  14045. *
  14046. * {
  14047. * version : 3,
  14048. * file: "out.js",
  14049. * sourceRoot : "",
  14050. * sources: ["foo.js", "bar.js"],
  14051. * names: ["src", "maps", "are", "fun"],
  14052. * mappings: "AA,AB;;ABCDE;"
  14053. * }
  14054. *
  14055. * The second parameter, if given, is a string whose value is the URL
  14056. * at which the source map was found. This URL is used to compute the
  14057. * sources array.
  14058. *
  14059. * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
  14060. */
  14061. function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
  14062. var sourceMap = aSourceMap;
  14063. if (typeof aSourceMap === 'string') {
  14064. sourceMap = util.parseSourceMapInput(aSourceMap);
  14065. }
  14066. var version = util.getArg(sourceMap, 'version');
  14067. var sources = util.getArg(sourceMap, 'sources');
  14068. // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
  14069. // requires the array) to play nice here.
  14070. var names = util.getArg(sourceMap, 'names', []);
  14071. var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  14072. var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  14073. var mappings = util.getArg(sourceMap, 'mappings');
  14074. var file = util.getArg(sourceMap, 'file', null);
  14075. // Once again, Sass deviates from the spec and supplies the version as a
  14076. // string rather than a number, so we use loose equality checking here.
  14077. if (version != this._version) {
  14078. throw new Error('Unsupported version: ' + version);
  14079. }
  14080. if (sourceRoot) {
  14081. sourceRoot = util.normalize(sourceRoot);
  14082. }
  14083. sources = sources
  14084. .map(String)
  14085. // Some source maps produce relative source paths like "./foo.js" instead of
  14086. // "foo.js". Normalize these first so that future comparisons will succeed.
  14087. // See bugzil.la/1090768.
  14088. .map(util.normalize)
  14089. // Always ensure that absolute sources are internally stored relative to
  14090. // the source root, if the source root is absolute. Not doing this would
  14091. // be particularly problematic when the source root is a prefix of the
  14092. // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
  14093. .map(function (source) {
  14094. return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
  14095. ? util.relative(sourceRoot, source)
  14096. : source;
  14097. });
  14098. // Pass `true` below to allow duplicate names and sources. While source maps
  14099. // are intended to be compressed and deduplicated, the TypeScript compiler
  14100. // sometimes generates source maps with duplicates in them. See Github issue
  14101. // #72 and bugzil.la/889492.
  14102. this._names = ArraySet.fromArray(names.map(String), true);
  14103. this._sources = ArraySet.fromArray(sources, true);
  14104. this._absoluteSources = this._sources.toArray().map(function (s) {
  14105. return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
  14106. });
  14107. this.sourceRoot = sourceRoot;
  14108. this.sourcesContent = sourcesContent;
  14109. this._mappings = mappings;
  14110. this._sourceMapURL = aSourceMapURL;
  14111. this.file = file;
  14112. }
  14113. BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
  14114. BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
  14115. /**
  14116. * Utility function to find the index of a source. Returns -1 if not
  14117. * found.
  14118. */
  14119. BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
  14120. var relativeSource = aSource;
  14121. if (this.sourceRoot != null) {
  14122. relativeSource = util.relative(this.sourceRoot, relativeSource);
  14123. }
  14124. if (this._sources.has(relativeSource)) {
  14125. return this._sources.indexOf(relativeSource);
  14126. }
  14127. // Maybe aSource is an absolute URL as returned by |sources|. In
  14128. // this case we can't simply undo the transform.
  14129. var i;
  14130. for (i = 0; i < this._absoluteSources.length; ++i) {
  14131. if (this._absoluteSources[i] == aSource) {
  14132. return i;
  14133. }
  14134. }
  14135. return -1;
  14136. };
  14137. /**
  14138. * Create a BasicSourceMapConsumer from a SourceMapGenerator.
  14139. *
  14140. * @param SourceMapGenerator aSourceMap
  14141. * The source map that will be consumed.
  14142. * @param String aSourceMapURL
  14143. * The URL at which the source map can be found (optional)
  14144. * @returns BasicSourceMapConsumer
  14145. */
  14146. BasicSourceMapConsumer.fromSourceMap =
  14147. function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
  14148. var smc = Object.create(BasicSourceMapConsumer.prototype);
  14149. var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
  14150. var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
  14151. smc.sourceRoot = aSourceMap._sourceRoot;
  14152. smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
  14153. smc.sourceRoot);
  14154. smc.file = aSourceMap._file;
  14155. smc._sourceMapURL = aSourceMapURL;
  14156. smc._absoluteSources = smc._sources.toArray().map(function (s) {
  14157. return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
  14158. });
  14159. // Because we are modifying the entries (by converting string sources and
  14160. // names to indices into the sources and names ArraySets), we have to make
  14161. // a copy of the entry or else bad things happen. Shared mutable state
  14162. // strikes again! See github issue #191.
  14163. var generatedMappings = aSourceMap._mappings.toArray().slice();
  14164. var destGeneratedMappings = smc.__generatedMappings = [];
  14165. var destOriginalMappings = smc.__originalMappings = [];
  14166. for (var i = 0, length = generatedMappings.length; i < length; i++) {
  14167. var srcMapping = generatedMappings[i];
  14168. var destMapping = new Mapping;
  14169. destMapping.generatedLine = srcMapping.generatedLine;
  14170. destMapping.generatedColumn = srcMapping.generatedColumn;
  14171. if (srcMapping.source) {
  14172. destMapping.source = sources.indexOf(srcMapping.source);
  14173. destMapping.originalLine = srcMapping.originalLine;
  14174. destMapping.originalColumn = srcMapping.originalColumn;
  14175. if (srcMapping.name) {
  14176. destMapping.name = names.indexOf(srcMapping.name);
  14177. }
  14178. destOriginalMappings.push(destMapping);
  14179. }
  14180. destGeneratedMappings.push(destMapping);
  14181. }
  14182. quickSort(smc.__originalMappings, util.compareByOriginalPositions);
  14183. return smc;
  14184. };
  14185. /**
  14186. * The version of the source mapping spec that we are consuming.
  14187. */
  14188. BasicSourceMapConsumer.prototype._version = 3;
  14189. /**
  14190. * The list of original sources.
  14191. */
  14192. Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
  14193. get: function () {
  14194. return this._absoluteSources.slice();
  14195. }
  14196. });
  14197. /**
  14198. * Provide the JIT with a nice shape / hidden class.
  14199. */
  14200. function Mapping() {
  14201. this.generatedLine = 0;
  14202. this.generatedColumn = 0;
  14203. this.source = null;
  14204. this.originalLine = null;
  14205. this.originalColumn = null;
  14206. this.name = null;
  14207. }
  14208. /**
  14209. * Parse the mappings in a string in to a data structure which we can easily
  14210. * query (the ordered arrays in the `this.__generatedMappings` and
  14211. * `this.__originalMappings` properties).
  14212. */
  14213. BasicSourceMapConsumer.prototype._parseMappings =
  14214. function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  14215. var generatedLine = 1;
  14216. var previousGeneratedColumn = 0;
  14217. var previousOriginalLine = 0;
  14218. var previousOriginalColumn = 0;
  14219. var previousSource = 0;
  14220. var previousName = 0;
  14221. var length = aStr.length;
  14222. var index = 0;
  14223. var cachedSegments = {};
  14224. var temp = {};
  14225. var originalMappings = [];
  14226. var generatedMappings = [];
  14227. var mapping, str, segment, end, value;
  14228. while (index < length) {
  14229. if (aStr.charAt(index) === ';') {
  14230. generatedLine++;
  14231. index++;
  14232. previousGeneratedColumn = 0;
  14233. }
  14234. else if (aStr.charAt(index) === ',') {
  14235. index++;
  14236. }
  14237. else {
  14238. mapping = new Mapping();
  14239. mapping.generatedLine = generatedLine;
  14240. // Because each offset is encoded relative to the previous one,
  14241. // many segments often have the same encoding. We can exploit this
  14242. // fact by caching the parsed variable length fields of each segment,
  14243. // allowing us to avoid a second parse if we encounter the same
  14244. // segment again.
  14245. for (end = index; end < length; end++) {
  14246. if (this._charIsMappingSeparator(aStr, end)) {
  14247. break;
  14248. }
  14249. }
  14250. str = aStr.slice(index, end);
  14251. segment = cachedSegments[str];
  14252. if (segment) {
  14253. index += str.length;
  14254. } else {
  14255. segment = [];
  14256. while (index < end) {
  14257. base64VLQ.decode(aStr, index, temp);
  14258. value = temp.value;
  14259. index = temp.rest;
  14260. segment.push(value);
  14261. }
  14262. if (segment.length === 2) {
  14263. throw new Error('Found a source, but no line and column');
  14264. }
  14265. if (segment.length === 3) {
  14266. throw new Error('Found a source and line, but no column');
  14267. }
  14268. cachedSegments[str] = segment;
  14269. }
  14270. // Generated column.
  14271. mapping.generatedColumn = previousGeneratedColumn + segment[0];
  14272. previousGeneratedColumn = mapping.generatedColumn;
  14273. if (segment.length > 1) {
  14274. // Original source.
  14275. mapping.source = previousSource + segment[1];
  14276. previousSource += segment[1];
  14277. // Original line.
  14278. mapping.originalLine = previousOriginalLine + segment[2];
  14279. previousOriginalLine = mapping.originalLine;
  14280. // Lines are stored 0-based
  14281. mapping.originalLine += 1;
  14282. // Original column.
  14283. mapping.originalColumn = previousOriginalColumn + segment[3];
  14284. previousOriginalColumn = mapping.originalColumn;
  14285. if (segment.length > 4) {
  14286. // Original name.
  14287. mapping.name = previousName + segment[4];
  14288. previousName += segment[4];
  14289. }
  14290. }
  14291. generatedMappings.push(mapping);
  14292. if (typeof mapping.originalLine === 'number') {
  14293. originalMappings.push(mapping);
  14294. }
  14295. }
  14296. }
  14297. quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
  14298. this.__generatedMappings = generatedMappings;
  14299. quickSort(originalMappings, util.compareByOriginalPositions);
  14300. this.__originalMappings = originalMappings;
  14301. };
  14302. /**
  14303. * Find the mapping that best matches the hypothetical "needle" mapping that
  14304. * we are searching for in the given "haystack" of mappings.
  14305. */
  14306. BasicSourceMapConsumer.prototype._findMapping =
  14307. function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
  14308. aColumnName, aComparator, aBias) {
  14309. // To return the position we are searching for, we must first find the
  14310. // mapping for the given position and then return the opposite position it
  14311. // points to. Because the mappings are sorted, we can use binary search to
  14312. // find the best mapping.
  14313. if (aNeedle[aLineName] <= 0) {
  14314. throw new TypeError('Line must be greater than or equal to 1, got '
  14315. + aNeedle[aLineName]);
  14316. }
  14317. if (aNeedle[aColumnName] < 0) {
  14318. throw new TypeError('Column must be greater than or equal to 0, got '
  14319. + aNeedle[aColumnName]);
  14320. }
  14321. return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
  14322. };
  14323. /**
  14324. * Compute the last column for each generated mapping. The last column is
  14325. * inclusive.
  14326. */
  14327. BasicSourceMapConsumer.prototype.computeColumnSpans =
  14328. function SourceMapConsumer_computeColumnSpans() {
  14329. for (var index = 0; index < this._generatedMappings.length; ++index) {
  14330. var mapping = this._generatedMappings[index];
  14331. // Mappings do not contain a field for the last generated columnt. We
  14332. // can come up with an optimistic estimate, however, by assuming that
  14333. // mappings are contiguous (i.e. given two consecutive mappings, the
  14334. // first mapping ends where the second one starts).
  14335. if (index + 1 < this._generatedMappings.length) {
  14336. var nextMapping = this._generatedMappings[index + 1];
  14337. if (mapping.generatedLine === nextMapping.generatedLine) {
  14338. mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
  14339. continue;
  14340. }
  14341. }
  14342. // The last mapping for each line spans the entire line.
  14343. mapping.lastGeneratedColumn = Infinity;
  14344. }
  14345. };
  14346. /**
  14347. * Returns the original source, line, and column information for the generated
  14348. * source's line and column positions provided. The only argument is an object
  14349. * with the following properties:
  14350. *
  14351. * - line: The line number in the generated source. The line number
  14352. * is 1-based.
  14353. * - column: The column number in the generated source. The column
  14354. * number is 0-based.
  14355. * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
  14356. * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
  14357. * closest element that is smaller than or greater than the one we are
  14358. * searching for, respectively, if the exact element cannot be found.
  14359. * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
  14360. *
  14361. * and an object is returned with the following properties:
  14362. *
  14363. * - source: The original source file, or null.
  14364. * - line: The line number in the original source, or null. The
  14365. * line number is 1-based.
  14366. * - column: The column number in the original source, or null. The
  14367. * column number is 0-based.
  14368. * - name: The original identifier, or null.
  14369. */
  14370. BasicSourceMapConsumer.prototype.originalPositionFor =
  14371. function SourceMapConsumer_originalPositionFor(aArgs) {
  14372. var needle = {
  14373. generatedLine: util.getArg(aArgs, 'line'),
  14374. generatedColumn: util.getArg(aArgs, 'column')
  14375. };
  14376. var index = this._findMapping(
  14377. needle,
  14378. this._generatedMappings,
  14379. "generatedLine",
  14380. "generatedColumn",
  14381. util.compareByGeneratedPositionsDeflated,
  14382. util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
  14383. );
  14384. if (index >= 0) {
  14385. var mapping = this._generatedMappings[index];
  14386. if (mapping.generatedLine === needle.generatedLine) {
  14387. var source = util.getArg(mapping, 'source', null);
  14388. if (source !== null) {
  14389. source = this._sources.at(source);
  14390. source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
  14391. }
  14392. var name = util.getArg(mapping, 'name', null);
  14393. if (name !== null) {
  14394. name = this._names.at(name);
  14395. }
  14396. return {
  14397. source: source,
  14398. line: util.getArg(mapping, 'originalLine', null),
  14399. column: util.getArg(mapping, 'originalColumn', null),
  14400. name: name
  14401. };
  14402. }
  14403. }
  14404. return {
  14405. source: null,
  14406. line: null,
  14407. column: null,
  14408. name: null
  14409. };
  14410. };
  14411. /**
  14412. * Return true if we have the source content for every source in the source
  14413. * map, false otherwise.
  14414. */
  14415. BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
  14416. function BasicSourceMapConsumer_hasContentsOfAllSources() {
  14417. if (!this.sourcesContent) {
  14418. return false;
  14419. }
  14420. return this.sourcesContent.length >= this._sources.size() &&
  14421. !this.sourcesContent.some(function (sc) { return sc == null; });
  14422. };
  14423. /**
  14424. * Returns the original source content. The only argument is the url of the
  14425. * original source file. Returns null if no original source content is
  14426. * available.
  14427. */
  14428. BasicSourceMapConsumer.prototype.sourceContentFor =
  14429. function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
  14430. if (!this.sourcesContent) {
  14431. return null;
  14432. }
  14433. var index = this._findSourceIndex(aSource);
  14434. if (index >= 0) {
  14435. return this.sourcesContent[index];
  14436. }
  14437. var relativeSource = aSource;
  14438. if (this.sourceRoot != null) {
  14439. relativeSource = util.relative(this.sourceRoot, relativeSource);
  14440. }
  14441. var url;
  14442. if (this.sourceRoot != null
  14443. && (url = util.urlParse(this.sourceRoot))) {
  14444. // XXX: file:// URIs and absolute paths lead to unexpected behavior for
  14445. // many users. We can help them out when they expect file:// URIs to
  14446. // behave like it would if they were running a local HTTP server. See
  14447. // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
  14448. var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
  14449. if (url.scheme == "file"
  14450. && this._sources.has(fileUriAbsPath)) {
  14451. return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
  14452. }
  14453. if ((!url.path || url.path == "/")
  14454. && this._sources.has("/" + relativeSource)) {
  14455. return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
  14456. }
  14457. }
  14458. // This function is used recursively from
  14459. // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
  14460. // don't want to throw if we can't find the source - we just want to
  14461. // return null, so we provide a flag to exit gracefully.
  14462. if (nullOnMissing) {
  14463. return null;
  14464. }
  14465. else {
  14466. throw new Error('"' + relativeSource + '" is not in the SourceMap.');
  14467. }
  14468. };
  14469. /**
  14470. * Returns the generated line and column information for the original source,
  14471. * line, and column positions provided. The only argument is an object with
  14472. * the following properties:
  14473. *
  14474. * - source: The filename of the original source.
  14475. * - line: The line number in the original source. The line number
  14476. * is 1-based.
  14477. * - column: The column number in the original source. The column
  14478. * number is 0-based.
  14479. * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
  14480. * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
  14481. * closest element that is smaller than or greater than the one we are
  14482. * searching for, respectively, if the exact element cannot be found.
  14483. * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
  14484. *
  14485. * and an object is returned with the following properties:
  14486. *
  14487. * - line: The line number in the generated source, or null. The
  14488. * line number is 1-based.
  14489. * - column: The column number in the generated source, or null.
  14490. * The column number is 0-based.
  14491. */
  14492. BasicSourceMapConsumer.prototype.generatedPositionFor =
  14493. function SourceMapConsumer_generatedPositionFor(aArgs) {
  14494. var source = util.getArg(aArgs, 'source');
  14495. source = this._findSourceIndex(source);
  14496. if (source < 0) {
  14497. return {
  14498. line: null,
  14499. column: null,
  14500. lastColumn: null
  14501. };
  14502. }
  14503. var needle = {
  14504. source: source,
  14505. originalLine: util.getArg(aArgs, 'line'),
  14506. originalColumn: util.getArg(aArgs, 'column')
  14507. };
  14508. var index = this._findMapping(
  14509. needle,
  14510. this._originalMappings,
  14511. "originalLine",
  14512. "originalColumn",
  14513. util.compareByOriginalPositions,
  14514. util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
  14515. );
  14516. if (index >= 0) {
  14517. var mapping = this._originalMappings[index];
  14518. if (mapping.source === needle.source) {
  14519. return {
  14520. line: util.getArg(mapping, 'generatedLine', null),
  14521. column: util.getArg(mapping, 'generatedColumn', null),
  14522. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  14523. };
  14524. }
  14525. }
  14526. return {
  14527. line: null,
  14528. column: null,
  14529. lastColumn: null
  14530. };
  14531. };
  14532. exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
  14533. /**
  14534. * An IndexedSourceMapConsumer instance represents a parsed source map which
  14535. * we can query for information. It differs from BasicSourceMapConsumer in
  14536. * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
  14537. * input.
  14538. *
  14539. * The first parameter is a raw source map (either as a JSON string, or already
  14540. * parsed to an object). According to the spec for indexed source maps, they
  14541. * have the following attributes:
  14542. *
  14543. * - version: Which version of the source map spec this map is following.
  14544. * - file: Optional. The generated file this source map is associated with.
  14545. * - sections: A list of section definitions.
  14546. *
  14547. * Each value under the "sections" field has two fields:
  14548. * - offset: The offset into the original specified at which this section
  14549. * begins to apply, defined as an object with a "line" and "column"
  14550. * field.
  14551. * - map: A source map definition. This source map could also be indexed,
  14552. * but doesn't have to be.
  14553. *
  14554. * Instead of the "map" field, it's also possible to have a "url" field
  14555. * specifying a URL to retrieve a source map from, but that's currently
  14556. * unsupported.
  14557. *
  14558. * Here's an example source map, taken from the source map spec[0], but
  14559. * modified to omit a section which uses the "url" field.
  14560. *
  14561. * {
  14562. * version : 3,
  14563. * file: "app.js",
  14564. * sections: [{
  14565. * offset: {line:100, column:10},
  14566. * map: {
  14567. * version : 3,
  14568. * file: "section.js",
  14569. * sources: ["foo.js", "bar.js"],
  14570. * names: ["src", "maps", "are", "fun"],
  14571. * mappings: "AAAA,E;;ABCDE;"
  14572. * }
  14573. * }],
  14574. * }
  14575. *
  14576. * The second parameter, if given, is a string whose value is the URL
  14577. * at which the source map was found. This URL is used to compute the
  14578. * sources array.
  14579. *
  14580. * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
  14581. */
  14582. function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
  14583. var sourceMap = aSourceMap;
  14584. if (typeof aSourceMap === 'string') {
  14585. sourceMap = util.parseSourceMapInput(aSourceMap);
  14586. }
  14587. var version = util.getArg(sourceMap, 'version');
  14588. var sections = util.getArg(sourceMap, 'sections');
  14589. if (version != this._version) {
  14590. throw new Error('Unsupported version: ' + version);
  14591. }
  14592. this._sources = new ArraySet();
  14593. this._names = new ArraySet();
  14594. var lastOffset = {
  14595. line: -1,
  14596. column: 0
  14597. };
  14598. this._sections = sections.map(function (s) {
  14599. if (s.url) {
  14600. // The url field will require support for asynchronicity.
  14601. // See https://github.com/mozilla/source-map/issues/16
  14602. throw new Error('Support for url field in sections not implemented.');
  14603. }
  14604. var offset = util.getArg(s, 'offset');
  14605. var offsetLine = util.getArg(offset, 'line');
  14606. var offsetColumn = util.getArg(offset, 'column');
  14607. if (offsetLine < lastOffset.line ||
  14608. (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
  14609. throw new Error('Section offsets must be ordered and non-overlapping.');
  14610. }
  14611. lastOffset = offset;
  14612. return {
  14613. generatedOffset: {
  14614. // The offset fields are 0-based, but we use 1-based indices when
  14615. // encoding/decoding from VLQ.
  14616. generatedLine: offsetLine + 1,
  14617. generatedColumn: offsetColumn + 1
  14618. },
  14619. consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
  14620. }
  14621. });
  14622. }
  14623. IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
  14624. IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
  14625. /**
  14626. * The version of the source mapping spec that we are consuming.
  14627. */
  14628. IndexedSourceMapConsumer.prototype._version = 3;
  14629. /**
  14630. * The list of original sources.
  14631. */
  14632. Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
  14633. get: function () {
  14634. var sources = [];
  14635. for (var i = 0; i < this._sections.length; i++) {
  14636. for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
  14637. sources.push(this._sections[i].consumer.sources[j]);
  14638. }
  14639. }
  14640. return sources;
  14641. }
  14642. });
  14643. /**
  14644. * Returns the original source, line, and column information for the generated
  14645. * source's line and column positions provided. The only argument is an object
  14646. * with the following properties:
  14647. *
  14648. * - line: The line number in the generated source. The line number
  14649. * is 1-based.
  14650. * - column: The column number in the generated source. The column
  14651. * number is 0-based.
  14652. *
  14653. * and an object is returned with the following properties:
  14654. *
  14655. * - source: The original source file, or null.
  14656. * - line: The line number in the original source, or null. The
  14657. * line number is 1-based.
  14658. * - column: The column number in the original source, or null. The
  14659. * column number is 0-based.
  14660. * - name: The original identifier, or null.
  14661. */
  14662. IndexedSourceMapConsumer.prototype.originalPositionFor =
  14663. function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
  14664. var needle = {
  14665. generatedLine: util.getArg(aArgs, 'line'),
  14666. generatedColumn: util.getArg(aArgs, 'column')
  14667. };
  14668. // Find the section containing the generated position we're trying to map
  14669. // to an original position.
  14670. var sectionIndex = binarySearch.search(needle, this._sections,
  14671. function(needle, section) {
  14672. var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
  14673. if (cmp) {
  14674. return cmp;
  14675. }
  14676. return (needle.generatedColumn -
  14677. section.generatedOffset.generatedColumn);
  14678. });
  14679. var section = this._sections[sectionIndex];
  14680. if (!section) {
  14681. return {
  14682. source: null,
  14683. line: null,
  14684. column: null,
  14685. name: null
  14686. };
  14687. }
  14688. return section.consumer.originalPositionFor({
  14689. line: needle.generatedLine -
  14690. (section.generatedOffset.generatedLine - 1),
  14691. column: needle.generatedColumn -
  14692. (section.generatedOffset.generatedLine === needle.generatedLine
  14693. ? section.generatedOffset.generatedColumn - 1
  14694. : 0),
  14695. bias: aArgs.bias
  14696. });
  14697. };
  14698. /**
  14699. * Return true if we have the source content for every source in the source
  14700. * map, false otherwise.
  14701. */
  14702. IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
  14703. function IndexedSourceMapConsumer_hasContentsOfAllSources() {
  14704. return this._sections.every(function (s) {
  14705. return s.consumer.hasContentsOfAllSources();
  14706. });
  14707. };
  14708. /**
  14709. * Returns the original source content. The only argument is the url of the
  14710. * original source file. Returns null if no original source content is
  14711. * available.
  14712. */
  14713. IndexedSourceMapConsumer.prototype.sourceContentFor =
  14714. function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
  14715. for (var i = 0; i < this._sections.length; i++) {
  14716. var section = this._sections[i];
  14717. var content = section.consumer.sourceContentFor(aSource, true);
  14718. if (content) {
  14719. return content;
  14720. }
  14721. }
  14722. if (nullOnMissing) {
  14723. return null;
  14724. }
  14725. else {
  14726. throw new Error('"' + aSource + '" is not in the SourceMap.');
  14727. }
  14728. };
  14729. /**
  14730. * Returns the generated line and column information for the original source,
  14731. * line, and column positions provided. The only argument is an object with
  14732. * the following properties:
  14733. *
  14734. * - source: The filename of the original source.
  14735. * - line: The line number in the original source. The line number
  14736. * is 1-based.
  14737. * - column: The column number in the original source. The column
  14738. * number is 0-based.
  14739. *
  14740. * and an object is returned with the following properties:
  14741. *
  14742. * - line: The line number in the generated source, or null. The
  14743. * line number is 1-based.
  14744. * - column: The column number in the generated source, or null.
  14745. * The column number is 0-based.
  14746. */
  14747. IndexedSourceMapConsumer.prototype.generatedPositionFor =
  14748. function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
  14749. for (var i = 0; i < this._sections.length; i++) {
  14750. var section = this._sections[i];
  14751. // Only consider this section if the requested source is in the list of
  14752. // sources of the consumer.
  14753. if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
  14754. continue;
  14755. }
  14756. var generatedPosition = section.consumer.generatedPositionFor(aArgs);
  14757. if (generatedPosition) {
  14758. var ret = {
  14759. line: generatedPosition.line +
  14760. (section.generatedOffset.generatedLine - 1),
  14761. column: generatedPosition.column +
  14762. (section.generatedOffset.generatedLine === generatedPosition.line
  14763. ? section.generatedOffset.generatedColumn - 1
  14764. : 0)
  14765. };
  14766. return ret;
  14767. }
  14768. }
  14769. return {
  14770. line: null,
  14771. column: null
  14772. };
  14773. };
  14774. /**
  14775. * Parse the mappings in a string in to a data structure which we can easily
  14776. * query (the ordered arrays in the `this.__generatedMappings` and
  14777. * `this.__originalMappings` properties).
  14778. */
  14779. IndexedSourceMapConsumer.prototype._parseMappings =
  14780. function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  14781. this.__generatedMappings = [];
  14782. this.__originalMappings = [];
  14783. for (var i = 0; i < this._sections.length; i++) {
  14784. var section = this._sections[i];
  14785. var sectionMappings = section.consumer._generatedMappings;
  14786. for (var j = 0; j < sectionMappings.length; j++) {
  14787. var mapping = sectionMappings[j];
  14788. var source = section.consumer._sources.at(mapping.source);
  14789. source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
  14790. this._sources.add(source);
  14791. source = this._sources.indexOf(source);
  14792. var name = null;
  14793. if (mapping.name) {
  14794. name = section.consumer._names.at(mapping.name);
  14795. this._names.add(name);
  14796. name = this._names.indexOf(name);
  14797. }
  14798. // The mappings coming from the consumer for the section have
  14799. // generated positions relative to the start of the section, so we
  14800. // need to offset them to be relative to the start of the concatenated
  14801. // generated file.
  14802. var adjustedMapping = {
  14803. source: source,
  14804. generatedLine: mapping.generatedLine +
  14805. (section.generatedOffset.generatedLine - 1),
  14806. generatedColumn: mapping.generatedColumn +
  14807. (section.generatedOffset.generatedLine === mapping.generatedLine
  14808. ? section.generatedOffset.generatedColumn - 1
  14809. : 0),
  14810. originalLine: mapping.originalLine,
  14811. originalColumn: mapping.originalColumn,
  14812. name: name
  14813. };
  14814. this.__generatedMappings.push(adjustedMapping);
  14815. if (typeof adjustedMapping.originalLine === 'number') {
  14816. this.__originalMappings.push(adjustedMapping);
  14817. }
  14818. }
  14819. }
  14820. quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
  14821. quickSort(this.__originalMappings, util.compareByOriginalPositions);
  14822. };
  14823. exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
  14824. /***/ }),
  14825. /* 83 */
  14826. /***/ (function(module, exports) {
  14827. /* -*- Mode: js; js-indent-level: 2; -*- */
  14828. /*
  14829. * Copyright 2011 Mozilla Foundation and contributors
  14830. * Licensed under the New BSD license. See LICENSE or:
  14831. * http://opensource.org/licenses/BSD-3-Clause
  14832. */
  14833. exports.GREATEST_LOWER_BOUND = 1;
  14834. exports.LEAST_UPPER_BOUND = 2;
  14835. /**
  14836. * Recursive implementation of binary search.
  14837. *
  14838. * @param aLow Indices here and lower do not contain the needle.
  14839. * @param aHigh Indices here and higher do not contain the needle.
  14840. * @param aNeedle The element being searched for.
  14841. * @param aHaystack The non-empty array being searched.
  14842. * @param aCompare Function which takes two elements and returns -1, 0, or 1.
  14843. * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
  14844. * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
  14845. * closest element that is smaller than or greater than the one we are
  14846. * searching for, respectively, if the exact element cannot be found.
  14847. */
  14848. function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
  14849. // This function terminates when one of the following is true:
  14850. //
  14851. // 1. We find the exact element we are looking for.
  14852. //
  14853. // 2. We did not find the exact element, but we can return the index of
  14854. // the next-closest element.
  14855. //
  14856. // 3. We did not find the exact element, and there is no next-closest
  14857. // element than the one we are searching for, so we return -1.
  14858. var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  14859. var cmp = aCompare(aNeedle, aHaystack[mid], true);
  14860. if (cmp === 0) {
  14861. // Found the element we are looking for.
  14862. return mid;
  14863. }
  14864. else if (cmp > 0) {
  14865. // Our needle is greater than aHaystack[mid].
  14866. if (aHigh - mid > 1) {
  14867. // The element is in the upper half.
  14868. return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
  14869. }
  14870. // The exact needle element was not found in this haystack. Determine if
  14871. // we are in termination case (3) or (2) and return the appropriate thing.
  14872. if (aBias == exports.LEAST_UPPER_BOUND) {
  14873. return aHigh < aHaystack.length ? aHigh : -1;
  14874. } else {
  14875. return mid;
  14876. }
  14877. }
  14878. else {
  14879. // Our needle is less than aHaystack[mid].
  14880. if (mid - aLow > 1) {
  14881. // The element is in the lower half.
  14882. return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
  14883. }
  14884. // we are in termination case (3) or (2) and return the appropriate thing.
  14885. if (aBias == exports.LEAST_UPPER_BOUND) {
  14886. return mid;
  14887. } else {
  14888. return aLow < 0 ? -1 : aLow;
  14889. }
  14890. }
  14891. }
  14892. /**
  14893. * This is an implementation of binary search which will always try and return
  14894. * the index of the closest element if there is no exact hit. This is because
  14895. * mappings between original and generated line/col pairs are single points,
  14896. * and there is an implicit region between each of them, so a miss just means
  14897. * that you aren't on the very start of a region.
  14898. *
  14899. * @param aNeedle The element you are looking for.
  14900. * @param aHaystack The array that is being searched.
  14901. * @param aCompare A function which takes the needle and an element in the
  14902. * array and returns -1, 0, or 1 depending on whether the needle is less
  14903. * than, equal to, or greater than the element, respectively.
  14904. * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
  14905. * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
  14906. * closest element that is smaller than or greater than the one we are
  14907. * searching for, respectively, if the exact element cannot be found.
  14908. * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
  14909. */
  14910. exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
  14911. if (aHaystack.length === 0) {
  14912. return -1;
  14913. }
  14914. var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
  14915. aCompare, aBias || exports.GREATEST_LOWER_BOUND);
  14916. if (index < 0) {
  14917. return -1;
  14918. }
  14919. // We have found either the exact element, or the next-closest element than
  14920. // the one we are searching for. However, there may be more than one such
  14921. // element. Make sure we always return the smallest of these.
  14922. while (index - 1 >= 0) {
  14923. if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
  14924. break;
  14925. }
  14926. --index;
  14927. }
  14928. return index;
  14929. };
  14930. /***/ }),
  14931. /* 84 */
  14932. /***/ (function(module, exports) {
  14933. /* -*- Mode: js; js-indent-level: 2; -*- */
  14934. /*
  14935. * Copyright 2011 Mozilla Foundation and contributors
  14936. * Licensed under the New BSD license. See LICENSE or:
  14937. * http://opensource.org/licenses/BSD-3-Clause
  14938. */
  14939. // It turns out that some (most?) JavaScript engines don't self-host
  14940. // `Array.prototype.sort`. This makes sense because C++ will likely remain
  14941. // faster than JS when doing raw CPU-intensive sorting. However, when using a
  14942. // custom comparator function, calling back and forth between the VM's C++ and
  14943. // JIT'd JS is rather slow *and* loses JIT type information, resulting in
  14944. // worse generated code for the comparator function than would be optimal. In
  14945. // fact, when sorting with a comparator, these costs outweigh the benefits of
  14946. // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
  14947. // a ~3500ms mean speed-up in `bench/bench.html`.
  14948. /**
  14949. * Swap the elements indexed by `x` and `y` in the array `ary`.
  14950. *
  14951. * @param {Array} ary
  14952. * The array.
  14953. * @param {Number} x
  14954. * The index of the first item.
  14955. * @param {Number} y
  14956. * The index of the second item.
  14957. */
  14958. function swap(ary, x, y) {
  14959. var temp = ary[x];
  14960. ary[x] = ary[y];
  14961. ary[y] = temp;
  14962. }
  14963. /**
  14964. * Returns a random integer within the range `low .. high` inclusive.
  14965. *
  14966. * @param {Number} low
  14967. * The lower bound on the range.
  14968. * @param {Number} high
  14969. * The upper bound on the range.
  14970. */
  14971. function randomIntInRange(low, high) {
  14972. return Math.round(low + (Math.random() * (high - low)));
  14973. }
  14974. /**
  14975. * The Quick Sort algorithm.
  14976. *
  14977. * @param {Array} ary
  14978. * An array to sort.
  14979. * @param {function} comparator
  14980. * Function to use to compare two items.
  14981. * @param {Number} p
  14982. * Start index of the array
  14983. * @param {Number} r
  14984. * End index of the array
  14985. */
  14986. function doQuickSort(ary, comparator, p, r) {
  14987. // If our lower bound is less than our upper bound, we (1) partition the
  14988. // array into two pieces and (2) recurse on each half. If it is not, this is
  14989. // the empty array and our base case.
  14990. if (p < r) {
  14991. // (1) Partitioning.
  14992. //
  14993. // The partitioning chooses a pivot between `p` and `r` and moves all
  14994. // elements that are less than or equal to the pivot to the before it, and
  14995. // all the elements that are greater than it after it. The effect is that
  14996. // once partition is done, the pivot is in the exact place it will be when
  14997. // the array is put in sorted order, and it will not need to be moved
  14998. // again. This runs in O(n) time.
  14999. // Always choose a random pivot so that an input array which is reverse
  15000. // sorted does not cause O(n^2) running time.
  15001. var pivotIndex = randomIntInRange(p, r);
  15002. var i = p - 1;
  15003. swap(ary, pivotIndex, r);
  15004. var pivot = ary[r];
  15005. // Immediately after `j` is incremented in this loop, the following hold
  15006. // true:
  15007. //
  15008. // * Every element in `ary[p .. i]` is less than or equal to the pivot.
  15009. //
  15010. // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
  15011. for (var j = p; j < r; j++) {
  15012. if (comparator(ary[j], pivot) <= 0) {
  15013. i += 1;
  15014. swap(ary, i, j);
  15015. }
  15016. }
  15017. swap(ary, i + 1, j);
  15018. var q = i + 1;
  15019. // (2) Recurse on each half.
  15020. doQuickSort(ary, comparator, p, q - 1);
  15021. doQuickSort(ary, comparator, q + 1, r);
  15022. }
  15023. }
  15024. /**
  15025. * Sort the given array in-place with the given comparator function.
  15026. *
  15027. * @param {Array} ary
  15028. * An array to sort.
  15029. * @param {function} comparator
  15030. * Function to use to compare two items.
  15031. */
  15032. exports.quickSort = function (ary, comparator) {
  15033. doQuickSort(ary, comparator, 0, ary.length - 1);
  15034. };
  15035. /***/ }),
  15036. /* 85 */
  15037. /***/ (function(module, exports, __webpack_require__) {
  15038. /* -*- Mode: js; js-indent-level: 2; -*- */
  15039. /*
  15040. * Copyright 2011 Mozilla Foundation and contributors
  15041. * Licensed under the New BSD license. See LICENSE or:
  15042. * http://opensource.org/licenses/BSD-3-Clause
  15043. */
  15044. var SourceMapGenerator = __webpack_require__(40).SourceMapGenerator;
  15045. var util = __webpack_require__(8);
  15046. // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
  15047. // operating systems these days (capturing the result).
  15048. var REGEX_NEWLINE = /(\r?\n)/;
  15049. // Newline character code for charCodeAt() comparisons
  15050. var NEWLINE_CODE = 10;
  15051. // Private symbol for identifying `SourceNode`s when multiple versions of
  15052. // the source-map library are loaded. This MUST NOT CHANGE across
  15053. // versions!
  15054. var isSourceNode = "$$$isSourceNode$$$";
  15055. /**
  15056. * SourceNodes provide a way to abstract over interpolating/concatenating
  15057. * snippets of generated JavaScript source code while maintaining the line and
  15058. * column information associated with the original source code.
  15059. *
  15060. * @param aLine The original line number.
  15061. * @param aColumn The original column number.
  15062. * @param aSource The original source's filename.
  15063. * @param aChunks Optional. An array of strings which are snippets of
  15064. * generated JS, or other SourceNodes.
  15065. * @param aName The original identifier.
  15066. */
  15067. function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  15068. this.children = [];
  15069. this.sourceContents = {};
  15070. this.line = aLine == null ? null : aLine;
  15071. this.column = aColumn == null ? null : aColumn;
  15072. this.source = aSource == null ? null : aSource;
  15073. this.name = aName == null ? null : aName;
  15074. this[isSourceNode] = true;
  15075. if (aChunks != null) this.add(aChunks);
  15076. }
  15077. /**
  15078. * Creates a SourceNode from generated code and a SourceMapConsumer.
  15079. *
  15080. * @param aGeneratedCode The generated code
  15081. * @param aSourceMapConsumer The SourceMap for the generated code
  15082. * @param aRelativePath Optional. The path that relative sources in the
  15083. * SourceMapConsumer should be relative to.
  15084. */
  15085. SourceNode.fromStringWithSourceMap =
  15086. function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
  15087. // The SourceNode we want to fill with the generated code
  15088. // and the SourceMap
  15089. var node = new SourceNode();
  15090. // All even indices of this array are one line of the generated code,
  15091. // while all odd indices are the newlines between two adjacent lines
  15092. // (since `REGEX_NEWLINE` captures its match).
  15093. // Processed fragments are accessed by calling `shiftNextLine`.
  15094. var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
  15095. var remainingLinesIndex = 0;
  15096. var shiftNextLine = function() {
  15097. var lineContents = getNextLine();
  15098. // The last line of a file might not have a newline.
  15099. var newLine = getNextLine() || "";
  15100. return lineContents + newLine;
  15101. function getNextLine() {
  15102. return remainingLinesIndex < remainingLines.length ?
  15103. remainingLines[remainingLinesIndex++] : undefined;
  15104. }
  15105. };
  15106. // We need to remember the position of "remainingLines"
  15107. var lastGeneratedLine = 1, lastGeneratedColumn = 0;
  15108. // The generate SourceNodes we need a code range.
  15109. // To extract it current and last mapping is used.
  15110. // Here we store the last mapping.
  15111. var lastMapping = null;
  15112. aSourceMapConsumer.eachMapping(function (mapping) {
  15113. if (lastMapping !== null) {
  15114. // We add the code from "lastMapping" to "mapping":
  15115. // First check if there is a new line in between.
  15116. if (lastGeneratedLine < mapping.generatedLine) {
  15117. // Associate first line with "lastMapping"
  15118. addMappingWithCode(lastMapping, shiftNextLine());
  15119. lastGeneratedLine++;
  15120. lastGeneratedColumn = 0;
  15121. // The remaining code is added without mapping
  15122. } else {
  15123. // There is no new line in between.
  15124. // Associate the code between "lastGeneratedColumn" and
  15125. // "mapping.generatedColumn" with "lastMapping"
  15126. var nextLine = remainingLines[remainingLinesIndex] || '';
  15127. var code = nextLine.substr(0, mapping.generatedColumn -
  15128. lastGeneratedColumn);
  15129. remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
  15130. lastGeneratedColumn);
  15131. lastGeneratedColumn = mapping.generatedColumn;
  15132. addMappingWithCode(lastMapping, code);
  15133. // No more remaining code, continue
  15134. lastMapping = mapping;
  15135. return;
  15136. }
  15137. }
  15138. // We add the generated code until the first mapping
  15139. // to the SourceNode without any mapping.
  15140. // Each line is added as separate string.
  15141. while (lastGeneratedLine < mapping.generatedLine) {
  15142. node.add(shiftNextLine());
  15143. lastGeneratedLine++;
  15144. }
  15145. if (lastGeneratedColumn < mapping.generatedColumn) {
  15146. var nextLine = remainingLines[remainingLinesIndex] || '';
  15147. node.add(nextLine.substr(0, mapping.generatedColumn));
  15148. remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
  15149. lastGeneratedColumn = mapping.generatedColumn;
  15150. }
  15151. lastMapping = mapping;
  15152. }, this);
  15153. // We have processed all mappings.
  15154. if (remainingLinesIndex < remainingLines.length) {
  15155. if (lastMapping) {
  15156. // Associate the remaining code in the current line with "lastMapping"
  15157. addMappingWithCode(lastMapping, shiftNextLine());
  15158. }
  15159. // and add the remaining lines without any mapping
  15160. node.add(remainingLines.splice(remainingLinesIndex).join(""));
  15161. }
  15162. // Copy sourcesContent into SourceNode
  15163. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  15164. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  15165. if (content != null) {
  15166. if (aRelativePath != null) {
  15167. sourceFile = util.join(aRelativePath, sourceFile);
  15168. }
  15169. node.setSourceContent(sourceFile, content);
  15170. }
  15171. });
  15172. return node;
  15173. function addMappingWithCode(mapping, code) {
  15174. if (mapping === null || mapping.source === undefined) {
  15175. node.add(code);
  15176. } else {
  15177. var source = aRelativePath
  15178. ? util.join(aRelativePath, mapping.source)
  15179. : mapping.source;
  15180. node.add(new SourceNode(mapping.originalLine,
  15181. mapping.originalColumn,
  15182. source,
  15183. code,
  15184. mapping.name));
  15185. }
  15186. }
  15187. };
  15188. /**
  15189. * Add a chunk of generated JS to this source node.
  15190. *
  15191. * @param aChunk A string snippet of generated JS code, another instance of
  15192. * SourceNode, or an array where each member is one of those things.
  15193. */
  15194. SourceNode.prototype.add = function SourceNode_add(aChunk) {
  15195. if (Array.isArray(aChunk)) {
  15196. aChunk.forEach(function (chunk) {
  15197. this.add(chunk);
  15198. }, this);
  15199. }
  15200. else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  15201. if (aChunk) {
  15202. this.children.push(aChunk);
  15203. }
  15204. }
  15205. else {
  15206. throw new TypeError(
  15207. "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
  15208. );
  15209. }
  15210. return this;
  15211. };
  15212. /**
  15213. * Add a chunk of generated JS to the beginning of this source node.
  15214. *
  15215. * @param aChunk A string snippet of generated JS code, another instance of
  15216. * SourceNode, or an array where each member is one of those things.
  15217. */
  15218. SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  15219. if (Array.isArray(aChunk)) {
  15220. for (var i = aChunk.length-1; i >= 0; i--) {
  15221. this.prepend(aChunk[i]);
  15222. }
  15223. }
  15224. else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  15225. this.children.unshift(aChunk);
  15226. }
  15227. else {
  15228. throw new TypeError(
  15229. "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
  15230. );
  15231. }
  15232. return this;
  15233. };
  15234. /**
  15235. * Walk over the tree of JS snippets in this node and its children. The
  15236. * walking function is called once for each snippet of JS and is passed that
  15237. * snippet and the its original associated source's line/column location.
  15238. *
  15239. * @param aFn The traversal function.
  15240. */
  15241. SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  15242. var chunk;
  15243. for (var i = 0, len = this.children.length; i < len; i++) {
  15244. chunk = this.children[i];
  15245. if (chunk[isSourceNode]) {
  15246. chunk.walk(aFn);
  15247. }
  15248. else {
  15249. if (chunk !== '') {
  15250. aFn(chunk, { source: this.source,
  15251. line: this.line,
  15252. column: this.column,
  15253. name: this.name });
  15254. }
  15255. }
  15256. }
  15257. };
  15258. /**
  15259. * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
  15260. * each of `this.children`.
  15261. *
  15262. * @param aSep The separator.
  15263. */
  15264. SourceNode.prototype.join = function SourceNode_join(aSep) {
  15265. var newChildren;
  15266. var i;
  15267. var len = this.children.length;
  15268. if (len > 0) {
  15269. newChildren = [];
  15270. for (i = 0; i < len-1; i++) {
  15271. newChildren.push(this.children[i]);
  15272. newChildren.push(aSep);
  15273. }
  15274. newChildren.push(this.children[i]);
  15275. this.children = newChildren;
  15276. }
  15277. return this;
  15278. };
  15279. /**
  15280. * Call String.prototype.replace on the very right-most source snippet. Useful
  15281. * for trimming whitespace from the end of a source node, etc.
  15282. *
  15283. * @param aPattern The pattern to replace.
  15284. * @param aReplacement The thing to replace the pattern with.
  15285. */
  15286. SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  15287. var lastChild = this.children[this.children.length - 1];
  15288. if (lastChild[isSourceNode]) {
  15289. lastChild.replaceRight(aPattern, aReplacement);
  15290. }
  15291. else if (typeof lastChild === 'string') {
  15292. this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  15293. }
  15294. else {
  15295. this.children.push(''.replace(aPattern, aReplacement));
  15296. }
  15297. return this;
  15298. };
  15299. /**
  15300. * Set the source content for a source file. This will be added to the SourceMapGenerator
  15301. * in the sourcesContent field.
  15302. *
  15303. * @param aSourceFile The filename of the source file
  15304. * @param aSourceContent The content of the source file
  15305. */
  15306. SourceNode.prototype.setSourceContent =
  15307. function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
  15308. this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  15309. };
  15310. /**
  15311. * Walk over the tree of SourceNodes. The walking function is called for each
  15312. * source file content and is passed the filename and source content.
  15313. *
  15314. * @param aFn The traversal function.
  15315. */
  15316. SourceNode.prototype.walkSourceContents =
  15317. function SourceNode_walkSourceContents(aFn) {
  15318. for (var i = 0, len = this.children.length; i < len; i++) {
  15319. if (this.children[i][isSourceNode]) {
  15320. this.children[i].walkSourceContents(aFn);
  15321. }
  15322. }
  15323. var sources = Object.keys(this.sourceContents);
  15324. for (var i = 0, len = sources.length; i < len; i++) {
  15325. aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
  15326. }
  15327. };
  15328. /**
  15329. * Return the string representation of this source node. Walks over the tree
  15330. * and concatenates all the various snippets together to one string.
  15331. */
  15332. SourceNode.prototype.toString = function SourceNode_toString() {
  15333. var str = "";
  15334. this.walk(function (chunk) {
  15335. str += chunk;
  15336. });
  15337. return str;
  15338. };
  15339. /**
  15340. * Returns the string representation of this source node along with a source
  15341. * map.
  15342. */
  15343. SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  15344. var generated = {
  15345. code: "",
  15346. line: 1,
  15347. column: 0
  15348. };
  15349. var map = new SourceMapGenerator(aArgs);
  15350. var sourceMappingActive = false;
  15351. var lastOriginalSource = null;
  15352. var lastOriginalLine = null;
  15353. var lastOriginalColumn = null;
  15354. var lastOriginalName = null;
  15355. this.walk(function (chunk, original) {
  15356. generated.code += chunk;
  15357. if (original.source !== null
  15358. && original.line !== null
  15359. && original.column !== null) {
  15360. if(lastOriginalSource !== original.source
  15361. || lastOriginalLine !== original.line
  15362. || lastOriginalColumn !== original.column
  15363. || lastOriginalName !== original.name) {
  15364. map.addMapping({
  15365. source: original.source,
  15366. original: {
  15367. line: original.line,
  15368. column: original.column
  15369. },
  15370. generated: {
  15371. line: generated.line,
  15372. column: generated.column
  15373. },
  15374. name: original.name
  15375. });
  15376. }
  15377. lastOriginalSource = original.source;
  15378. lastOriginalLine = original.line;
  15379. lastOriginalColumn = original.column;
  15380. lastOriginalName = original.name;
  15381. sourceMappingActive = true;
  15382. } else if (sourceMappingActive) {
  15383. map.addMapping({
  15384. generated: {
  15385. line: generated.line,
  15386. column: generated.column
  15387. }
  15388. });
  15389. lastOriginalSource = null;
  15390. sourceMappingActive = false;
  15391. }
  15392. for (var idx = 0, length = chunk.length; idx < length; idx++) {
  15393. if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
  15394. generated.line++;
  15395. generated.column = 0;
  15396. // Mappings end at eol
  15397. if (idx + 1 === length) {
  15398. lastOriginalSource = null;
  15399. sourceMappingActive = false;
  15400. } else if (sourceMappingActive) {
  15401. map.addMapping({
  15402. source: original.source,
  15403. original: {
  15404. line: original.line,
  15405. column: original.column
  15406. },
  15407. generated: {
  15408. line: generated.line,
  15409. column: generated.column
  15410. },
  15411. name: original.name
  15412. });
  15413. }
  15414. } else {
  15415. generated.column++;
  15416. }
  15417. }
  15418. });
  15419. this.walkSourceContents(function (sourceFile, sourceContent) {
  15420. map.setSourceContent(sourceFile, sourceContent);
  15421. });
  15422. return { code: generated.code, map: map };
  15423. };
  15424. exports.SourceNode = SourceNode;
  15425. /***/ }),
  15426. /* 86 */
  15427. /***/ (function(module, exports, __webpack_require__) {
  15428. "use strict";
  15429. exports.__esModule = true;
  15430. exports.default = warnOnce;
  15431. var printed = {};
  15432. function warnOnce(message) {
  15433. if (printed[message]) return;
  15434. printed[message] = true;
  15435. if (typeof console !== 'undefined' && console.warn) {
  15436. console.warn(message);
  15437. }
  15438. }
  15439. module.exports = exports.default;
  15440. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhcm4tb25jZS5lczYiXSwibmFtZXMiOlsicHJpbnRlZCIsIndhcm5PbmNlIiwibWVzc2FnZSIsImNvbnNvbGUiLCJ3YXJuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBSUEsT0FBTyxHQUFHLEVBQWQ7O0FBRWUsU0FBU0MsUUFBVCxDQUFtQkMsT0FBbkIsRUFBNEI7QUFDekMsTUFBSUYsT0FBTyxDQUFDRSxPQUFELENBQVgsRUFBc0I7QUFDdEJGLEVBQUFBLE9BQU8sQ0FBQ0UsT0FBRCxDQUFQLEdBQW1CLElBQW5COztBQUVBLE1BQUksT0FBT0MsT0FBUCxLQUFtQixXQUFuQixJQUFrQ0EsT0FBTyxDQUFDQyxJQUE5QyxFQUFvRDtBQUNsREQsSUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWFGLE9BQWI7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsibGV0IHByaW50ZWQgPSB7IH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2Fybk9uY2UgKG1lc3NhZ2UpIHtcbiAgaWYgKHByaW50ZWRbbWVzc2FnZV0pIHJldHVyblxuICBwcmludGVkW21lc3NhZ2VdID0gdHJ1ZVxuXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiJdLCJmaWxlIjoid2Fybi1vbmNlLmpzIn0=
  15441. /***/ }),
  15442. /* 87 */
  15443. /***/ (function(module, exports, __webpack_require__) {
  15444. "use strict";
  15445. exports.__esModule = true;
  15446. exports.default = void 0;
  15447. var _warning = _interopRequireDefault(__webpack_require__(88));
  15448. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  15449. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  15450. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  15451. /**
  15452. * Provides the result of the PostCSS transformations.
  15453. *
  15454. * A Result instance is returned by {@link LazyResult#then}
  15455. * or {@link Root#toResult} methods.
  15456. *
  15457. * @example
  15458. * postcss([autoprefixer]).process(css).then(result => {
  15459. * console.log(result.css)
  15460. * })
  15461. *
  15462. * @example
  15463. * const result2 = postcss.parse(css).toResult()
  15464. */
  15465. var Result = /*#__PURE__*/function () {
  15466. /**
  15467. * @param {Processor} processor Processor used for this transformation.
  15468. * @param {Root} root Root node after all transformations.
  15469. * @param {processOptions} opts Options from the {@link Processor#process}
  15470. * or {@link Root#toResult}.
  15471. */
  15472. function Result(processor, root, opts) {
  15473. /**
  15474. * The Processor instance used for this transformation.
  15475. *
  15476. * @type {Processor}
  15477. *
  15478. * @example
  15479. * for (const plugin of result.processor.plugins) {
  15480. * if (plugin.postcssPlugin === 'postcss-bad') {
  15481. * throw 'postcss-good is incompatible with postcss-bad'
  15482. * }
  15483. * })
  15484. */
  15485. this.processor = processor;
  15486. /**
  15487. * Contains messages from plugins (e.g., warnings or custom messages).
  15488. * Each message should have type and plugin properties.
  15489. *
  15490. * @type {Message[]}
  15491. *
  15492. * @example
  15493. * postcss.plugin('postcss-min-browser', () => {
  15494. * return (root, result) => {
  15495. * const browsers = detectMinBrowsersByCanIUse(root)
  15496. * result.messages.push({
  15497. * type: 'min-browser',
  15498. * plugin: 'postcss-min-browser',
  15499. * browsers
  15500. * })
  15501. * }
  15502. * })
  15503. */
  15504. this.messages = [];
  15505. /**
  15506. * Root node after all transformations.
  15507. *
  15508. * @type {Root}
  15509. *
  15510. * @example
  15511. * root.toResult().root === root
  15512. */
  15513. this.root = root;
  15514. /**
  15515. * Options from the {@link Processor#process} or {@link Root#toResult} call
  15516. * that produced this Result instance.
  15517. *
  15518. * @type {processOptions}
  15519. *
  15520. * @example
  15521. * root.toResult(opts).opts === opts
  15522. */
  15523. this.opts = opts;
  15524. /**
  15525. * A CSS string representing of {@link Result#root}.
  15526. *
  15527. * @type {string}
  15528. *
  15529. * @example
  15530. * postcss.parse('a{}').toResult().css //=> "a{}"
  15531. */
  15532. this.css = undefined;
  15533. /**
  15534. * An instance of `SourceMapGenerator` class from the `source-map` library,
  15535. * representing changes to the {@link Result#root} instance.
  15536. *
  15537. * @type {SourceMapGenerator}
  15538. *
  15539. * @example
  15540. * result.map.toJSON() //=> { version: 3, file: 'a.css', … }
  15541. *
  15542. * @example
  15543. * if (result.map) {
  15544. * fs.writeFileSync(result.opts.to + '.map', result.map.toString())
  15545. * }
  15546. */
  15547. this.map = undefined;
  15548. }
  15549. /**
  15550. * Returns for @{link Result#css} content.
  15551. *
  15552. * @example
  15553. * result + '' === result.css
  15554. *
  15555. * @return {string} String representing of {@link Result#root}.
  15556. */
  15557. var _proto = Result.prototype;
  15558. _proto.toString = function toString() {
  15559. return this.css;
  15560. }
  15561. /**
  15562. * Creates an instance of {@link Warning} and adds it
  15563. * to {@link Result#messages}.
  15564. *
  15565. * @param {string} text Warning message.
  15566. * @param {Object} [opts] Warning options.
  15567. * @param {Node} opts.node CSS node that caused the warning.
  15568. * @param {string} opts.word Word in CSS source that caused the warning.
  15569. * @param {number} opts.index Index in CSS node string that caused
  15570. * the warning.
  15571. * @param {string} opts.plugin Name of the plugin that created
  15572. * this warning. {@link Result#warn} fills
  15573. * this property automatically.
  15574. *
  15575. * @return {Warning} Created warning.
  15576. */
  15577. ;
  15578. _proto.warn = function warn(text, opts) {
  15579. if (opts === void 0) {
  15580. opts = {};
  15581. }
  15582. if (!opts.plugin) {
  15583. if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
  15584. opts.plugin = this.lastPlugin.postcssPlugin;
  15585. }
  15586. }
  15587. var warning = new _warning.default(text, opts);
  15588. this.messages.push(warning);
  15589. return warning;
  15590. }
  15591. /**
  15592. * Returns warnings from plugins. Filters {@link Warning} instances
  15593. * from {@link Result#messages}.
  15594. *
  15595. * @example
  15596. * result.warnings().forEach(warn => {
  15597. * console.warn(warn.toString())
  15598. * })
  15599. *
  15600. * @return {Warning[]} Warnings from plugins.
  15601. */
  15602. ;
  15603. _proto.warnings = function warnings() {
  15604. return this.messages.filter(function (i) {
  15605. return i.type === 'warning';
  15606. });
  15607. }
  15608. /**
  15609. * An alias for the {@link Result#css} property.
  15610. * Use it with syntaxes that generate non-CSS output.
  15611. *
  15612. * @type {string}
  15613. *
  15614. * @example
  15615. * result.css === result.content
  15616. */
  15617. ;
  15618. _createClass(Result, [{
  15619. key: "content",
  15620. get: function get() {
  15621. return this.css;
  15622. }
  15623. }]);
  15624. return Result;
  15625. }();
  15626. var _default = Result;
  15627. /**
  15628. * @typedef {object} Message
  15629. * @property {string} type Message type.
  15630. * @property {string} plugin Source PostCSS plugin name.
  15631. */
  15632. exports.default = _default;
  15633. module.exports = exports.default;
  15634. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc3VsdC5lczYiXSwibmFtZXMiOlsiUmVzdWx0IiwicHJvY2Vzc29yIiwicm9vdCIsIm9wdHMiLCJtZXNzYWdlcyIsImNzcyIsInVuZGVmaW5lZCIsIm1hcCIsInRvU3RyaW5nIiwid2FybiIsInRleHQiLCJwbHVnaW4iLCJsYXN0UGx1Z2luIiwicG9zdGNzc1BsdWdpbiIsIndhcm5pbmciLCJXYXJuaW5nIiwicHVzaCIsIndhcm5pbmdzIiwiZmlsdGVyIiwiaSIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O0lBY01BLE07QUFDSjs7Ozs7O0FBTUEsa0JBQWFDLFNBQWIsRUFBd0JDLElBQXhCLEVBQThCQyxJQUE5QixFQUFvQztBQUNsQzs7Ozs7Ozs7Ozs7O0FBWUEsU0FBS0YsU0FBTCxHQUFpQkEsU0FBakI7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFLRyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0E7Ozs7Ozs7OztBQVFBLFNBQUtGLElBQUwsR0FBWUEsSUFBWjtBQUNBOzs7Ozs7Ozs7O0FBU0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0E7Ozs7Ozs7OztBQVFBLFNBQUtFLEdBQUwsR0FBV0MsU0FBWDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFLQyxHQUFMLEdBQVdELFNBQVg7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7U0FRQUUsUSxHQUFBLG9CQUFZO0FBQ1YsV0FBTyxLQUFLSCxHQUFaO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JBSSxJLEdBQUEsY0FBTUMsSUFBTixFQUFZUCxJQUFaLEVBQXdCO0FBQUEsUUFBWkEsSUFBWTtBQUFaQSxNQUFBQSxJQUFZLEdBQUwsRUFBSztBQUFBOztBQUN0QixRQUFJLENBQUNBLElBQUksQ0FBQ1EsTUFBVixFQUFrQjtBQUNoQixVQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQkMsYUFBdkMsRUFBc0Q7QUFDcERWLFFBQUFBLElBQUksQ0FBQ1EsTUFBTCxHQUFjLEtBQUtDLFVBQUwsQ0FBZ0JDLGFBQTlCO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJQyxPQUFPLEdBQUcsSUFBSUMsZ0JBQUosQ0FBWUwsSUFBWixFQUFrQlAsSUFBbEIsQ0FBZDtBQUNBLFNBQUtDLFFBQUwsQ0FBY1ksSUFBZCxDQUFtQkYsT0FBbkI7QUFFQSxXQUFPQSxPQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OztTQVdBRyxRLEdBQUEsb0JBQVk7QUFDVixXQUFPLEtBQUtiLFFBQUwsQ0FBY2MsTUFBZCxDQUFxQixVQUFBQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVcsU0FBZjtBQUFBLEtBQXRCLENBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7O3dCQVNlO0FBQ2IsYUFBTyxLQUFLZixHQUFaO0FBQ0Q7Ozs7OztlQUdZTCxNO0FBRWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2FybmluZyBmcm9tICcuL3dhcm5pbmcnXG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlc3VsdCBvZiB0aGUgUG9zdENTUyB0cmFuc2Zvcm1hdGlvbnMuXG4gKlxuICogQSBSZXN1bHQgaW5zdGFuY2UgaXMgcmV0dXJuZWQgYnkge0BsaW5rIExhenlSZXN1bHQjdGhlbn1cbiAqIG9yIHtAbGluayBSb290I3RvUmVzdWx0fSBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzKFthdXRvcHJlZml4ZXJdKS5wcm9jZXNzKGNzcykudGhlbihyZXN1bHQgPT4ge1xuICogIGNvbnNvbGUubG9nKHJlc3VsdC5jc3MpXG4gKiB9KVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQyID0gcG9zdGNzcy5wYXJzZShjc3MpLnRvUmVzdWx0KClcbiAqL1xuY2xhc3MgUmVzdWx0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UHJvY2Vzc29yfSBwcm9jZXNzb3IgUHJvY2Vzc29yIHVzZWQgZm9yIHRoaXMgdHJhbnNmb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7Um9vdH0gICAgICByb290ICAgICAgUm9vdCBub2RlIGFmdGVyIGFsbCB0cmFuc2Zvcm1hdGlvbnMuXG4gICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IG9wdHMgT3B0aW9ucyBmcm9tIHRoZSB7QGxpbmsgUHJvY2Vzc29yI3Byb2Nlc3N9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ige0BsaW5rIFJvb3QjdG9SZXN1bHR9LlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHByb2Nlc3Nvciwgcm9vdCwgb3B0cykge1xuICAgIC8qKlxuICAgICAqIFRoZSBQcm9jZXNzb3IgaW5zdGFuY2UgdXNlZCBmb3IgdGhpcyB0cmFuc2Zvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtQcm9jZXNzb3J9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGZvciAoY29uc3QgcGx1Z2luIG9mIHJlc3VsdC5wcm9jZXNzb3IucGx1Z2lucykge1xuICAgICAqICAgaWYgKHBsdWdpbi5wb3N0Y3NzUGx1Z2luID09PSAncG9zdGNzcy1iYWQnKSB7XG4gICAgICogICAgIHRocm93ICdwb3N0Y3NzLWdvb2QgaXMgaW5jb21wYXRpYmxlIHdpdGggcG9zdGNzcy1iYWQnXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKi9cbiAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvclxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIG1lc3NhZ2VzIGZyb20gcGx1Z2lucyAoZS5nLiwgd2FybmluZ3Mgb3IgY3VzdG9tIG1lc3NhZ2VzKS5cbiAgICAgKiBFYWNoIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgdHlwZSBhbmQgcGx1Z2luIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWVzc2FnZVtdfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBwb3N0Y3NzLnBsdWdpbigncG9zdGNzcy1taW4tYnJvd3NlcicsICgpID0+IHtcbiAgICAgKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gICAgICogICAgIGNvbnN0IGJyb3dzZXJzID0gZGV0ZWN0TWluQnJvd3NlcnNCeUNhbklVc2Uocm9vdClcbiAgICAgKiAgICAgcmVzdWx0Lm1lc3NhZ2VzLnB1c2goe1xuICAgICAqICAgICAgIHR5cGU6ICdtaW4tYnJvd3NlcicsXG4gICAgICogICAgICAgcGx1Z2luOiAncG9zdGNzcy1taW4tYnJvd3NlcicsXG4gICAgICogICAgICAgYnJvd3NlcnNcbiAgICAgKiAgICAgfSlcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZXMgPSBbXVxuICAgIC8qKlxuICAgICAqIFJvb3Qgbm9kZSBhZnRlciBhbGwgdHJhbnNmb3JtYXRpb25zLlxuICAgICAqXG4gICAgICogQHR5cGUge1Jvb3R9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3QudG9SZXN1bHQoKS5yb290ID09PSByb290XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgZnJvbSB0aGUge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfSBvciB7QGxpbmsgUm9vdCN0b1Jlc3VsdH0gY2FsbFxuICAgICAqIHRoYXQgcHJvZHVjZWQgdGhpcyBSZXN1bHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7cHJvY2Vzc09wdGlvbnN9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3QudG9SZXN1bHQob3B0cykub3B0cyA9PT0gb3B0c1xuICAgICAqL1xuICAgIHRoaXMub3B0cyA9IG9wdHNcbiAgICAvKipcbiAgICAgKiBBIENTUyBzdHJpbmcgcmVwcmVzZW50aW5nIG9mIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBwb3N0Y3NzLnBhcnNlKCdhe30nKS50b1Jlc3VsdCgpLmNzcyAvLz0+IFwiYXt9XCJcbiAgICAgKi9cbiAgICB0aGlzLmNzcyA9IHVuZGVmaW5lZFxuICAgIC8qKlxuICAgICAqIEFuIGluc3RhbmNlIG9mIGBTb3VyY2VNYXBHZW5lcmF0b3JgIGNsYXNzIGZyb20gdGhlIGBzb3VyY2UtbWFwYCBsaWJyYXJ5LFxuICAgICAqIHJlcHJlc2VudGluZyBjaGFuZ2VzIHRvIHRoZSB7QGxpbmsgUmVzdWx0I3Jvb3R9IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge1NvdXJjZU1hcEdlbmVyYXRvcn1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVzdWx0Lm1hcC50b0pTT04oKSAvLz0+IHsgdmVyc2lvbjogMywgZmlsZTogJ2EuY3NzJywg4oCmIH1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogaWYgKHJlc3VsdC5tYXApIHtcbiAgICAgKiAgIGZzLndyaXRlRmlsZVN5bmMocmVzdWx0Lm9wdHMudG8gKyAnLm1hcCcsIHJlc3VsdC5tYXAudG9TdHJpbmcoKSlcbiAgICAgKiB9XG4gICAgICovXG4gICAgdGhpcy5tYXAgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGZvciBAe2xpbmsgUmVzdWx0I2Nzc30gY29udGVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcmVzdWx0ICsgJycgPT09IHJlc3VsdC5jc3NcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBTdHJpbmcgcmVwcmVzZW50aW5nIG9mIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAqL1xuICB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgV2FybmluZ30gYW5kIGFkZHMgaXRcbiAgICogdG8ge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICAgICAgICBXYXJuaW5nIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gICAgICBXYXJuaW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7Tm9kZX0gICBvcHRzLm5vZGUgICBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud29yZCAgIFdvcmQgaW4gQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuaW5kZXggIEluZGV4IGluIENTUyBub2RlIHN0cmluZyB0aGF0IGNhdXNlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHdhcm5pbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBsdWdpbiBOYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdhcm5pbmcuIHtAbGluayBSZXN1bHQjd2Fybn0gZmlsbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHkgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHJldHVybiB7V2FybmluZ30gQ3JlYXRlZCB3YXJuaW5nLlxuICAgKi9cbiAgd2FybiAodGV4dCwgb3B0cyA9IHsgfSkge1xuICAgIGlmICghb3B0cy5wbHVnaW4pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RQbHVnaW4gJiYgdGhpcy5sYXN0UGx1Z2luLnBvc3Rjc3NQbHVnaW4pIHtcbiAgICAgICAgb3B0cy5wbHVnaW4gPSB0aGlzLmxhc3RQbHVnaW4ucG9zdGNzc1BsdWdpblxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3YXJuaW5nID0gbmV3IFdhcm5pbmcodGV4dCwgb3B0cylcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2god2FybmluZylcblxuICAgIHJldHVybiB3YXJuaW5nXG4gIH1cblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHdhcm5pbmdzIGZyb20gcGx1Z2lucy4gRmlsdGVycyB7QGxpbmsgV2FybmluZ30gaW5zdGFuY2VzXG4gICAgICogZnJvbSB7QGxpbmsgUmVzdWx0I21lc3NhZ2VzfS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVzdWx0Lndhcm5pbmdzKCkuZm9yRWFjaCh3YXJuID0+IHtcbiAgICAgKiAgIGNvbnNvbGUud2Fybih3YXJuLnRvU3RyaW5nKCkpXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmdbXX0gV2FybmluZ3MgZnJvbSBwbHVnaW5zLlxuICAgICAqL1xuICB3YXJuaW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZXMuZmlsdGVyKGkgPT4gaS50eXBlID09PSAnd2FybmluZycpXG4gIH1cblxuICAvKipcbiAgICogQW4gYWxpYXMgZm9yIHRoZSB7QGxpbmsgUmVzdWx0I2Nzc30gcHJvcGVydHkuXG4gICAqIFVzZSBpdCB3aXRoIHN5bnRheGVzIHRoYXQgZ2VuZXJhdGUgbm9uLUNTUyBvdXRwdXQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJlc3VsdC5jc3MgPT09IHJlc3VsdC5jb250ZW50XG4gICAqL1xuICBnZXQgY29udGVudCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzdWx0XG5cbi8qKlxuICogQHR5cGVkZWYgIHtvYmplY3R9IE1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlICAgTWVzc2FnZSB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsdWdpbiBTb3VyY2UgUG9zdENTUyBwbHVnaW4gbmFtZS5cbiAqL1xuIl0sImZpbGUiOiJyZXN1bHQuanMifQ==
  15635. /***/ }),
  15636. /* 88 */
  15637. /***/ (function(module, exports, __webpack_require__) {
  15638. "use strict";
  15639. exports.__esModule = true;
  15640. exports.default = void 0;
  15641. /**
  15642. * Represents a plugin’s warning. It can be created using {@link Node#warn}.
  15643. *
  15644. * @example
  15645. * if (decl.important) {
  15646. * decl.warn(result, 'Avoid !important', { word: '!important' })
  15647. * }
  15648. */
  15649. var Warning = /*#__PURE__*/function () {
  15650. /**
  15651. * @param {string} text Warning message.
  15652. * @param {Object} [opts] Warning options.
  15653. * @param {Node} opts.node CSS node that caused the warning.
  15654. * @param {string} opts.word Word in CSS source that caused the warning.
  15655. * @param {number} opts.index Index in CSS node string that caused
  15656. * the warning.
  15657. * @param {string} opts.plugin Name of the plugin that created
  15658. * this warning. {@link Result#warn} fills
  15659. * this property automatically.
  15660. */
  15661. function Warning(text, opts) {
  15662. if (opts === void 0) {
  15663. opts = {};
  15664. }
  15665. /**
  15666. * Type to filter warnings from {@link Result#messages}.
  15667. * Always equal to `"warning"`.
  15668. *
  15669. * @type {string}
  15670. *
  15671. * @example
  15672. * const nonWarning = result.messages.filter(i => i.type !== 'warning')
  15673. */
  15674. this.type = 'warning';
  15675. /**
  15676. * The warning message.
  15677. *
  15678. * @type {string}
  15679. *
  15680. * @example
  15681. * warning.text //=> 'Try to avoid !important'
  15682. */
  15683. this.text = text;
  15684. if (opts.node && opts.node.source) {
  15685. var pos = opts.node.positionBy(opts);
  15686. /**
  15687. * Line in the input file with this warning’s source.
  15688. * @type {number}
  15689. *
  15690. * @example
  15691. * warning.line //=> 5
  15692. */
  15693. this.line = pos.line;
  15694. /**
  15695. * Column in the input file with this warning’s source.
  15696. *
  15697. * @type {number}
  15698. *
  15699. * @example
  15700. * warning.column //=> 6
  15701. */
  15702. this.column = pos.column;
  15703. }
  15704. for (var opt in opts) {
  15705. this[opt] = opts[opt];
  15706. }
  15707. }
  15708. /**
  15709. * Returns a warning position and message.
  15710. *
  15711. * @example
  15712. * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'
  15713. *
  15714. * @return {string} Warning position and message.
  15715. */
  15716. var _proto = Warning.prototype;
  15717. _proto.toString = function toString() {
  15718. if (this.node) {
  15719. return this.node.error(this.text, {
  15720. plugin: this.plugin,
  15721. index: this.index,
  15722. word: this.word
  15723. }).message;
  15724. }
  15725. if (this.plugin) {
  15726. return this.plugin + ': ' + this.text;
  15727. }
  15728. return this.text;
  15729. }
  15730. /**
  15731. * @memberof Warning#
  15732. * @member {string} plugin The name of the plugin that created
  15733. * it will fill this property automatically.
  15734. * this warning. When you call {@link Node#warn}
  15735. *
  15736. * @example
  15737. * warning.plugin //=> 'postcss-important'
  15738. */
  15739. /**
  15740. * @memberof Warning#
  15741. * @member {Node} node Contains the CSS node that caused the warning.
  15742. *
  15743. * @example
  15744. * warning.node.toString() //=> 'color: white !important'
  15745. */
  15746. ;
  15747. return Warning;
  15748. }();
  15749. var _default = Warning;
  15750. exports.default = _default;
  15751. module.exports = exports.default;
  15752. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhcm5pbmcuZXM2Il0sIm5hbWVzIjpbIldhcm5pbmciLCJ0ZXh0Iiwib3B0cyIsInR5cGUiLCJub2RlIiwic291cmNlIiwicG9zIiwicG9zaXRpb25CeSIsImxpbmUiLCJjb2x1bW4iLCJvcHQiLCJ0b1N0cmluZyIsImVycm9yIiwicGx1Z2luIiwiaW5kZXgiLCJ3b3JkIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7SUFRTUEsTztBQUNKOzs7Ozs7Ozs7OztBQVdBLG1CQUFhQyxJQUFiLEVBQW1CQyxJQUFuQixFQUErQjtBQUFBLFFBQVpBLElBQVk7QUFBWkEsTUFBQUEsSUFBWSxHQUFMLEVBQUs7QUFBQTs7QUFDN0I7Ozs7Ozs7OztBQVNBLFNBQUtDLElBQUwsR0FBWSxTQUFaO0FBQ0E7Ozs7Ozs7OztBQVFBLFNBQUtGLElBQUwsR0FBWUEsSUFBWjs7QUFFQSxRQUFJQyxJQUFJLENBQUNFLElBQUwsSUFBYUYsSUFBSSxDQUFDRSxJQUFMLENBQVVDLE1BQTNCLEVBQW1DO0FBQ2pDLFVBQUlDLEdBQUcsR0FBR0osSUFBSSxDQUFDRSxJQUFMLENBQVVHLFVBQVYsQ0FBcUJMLElBQXJCLENBQVY7QUFDQTs7Ozs7Ozs7QUFPQSxXQUFLTSxJQUFMLEdBQVlGLEdBQUcsQ0FBQ0UsSUFBaEI7QUFDQTs7Ozs7Ozs7O0FBUUEsV0FBS0MsTUFBTCxHQUFjSCxHQUFHLENBQUNHLE1BQWxCO0FBQ0Q7O0FBRUQsU0FBSyxJQUFJQyxHQUFULElBQWdCUixJQUFoQjtBQUFzQixXQUFLUSxHQUFMLElBQVlSLElBQUksQ0FBQ1EsR0FBRCxDQUFoQjtBQUF0QjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7OztTQVFBQyxRLEdBQUEsb0JBQVk7QUFDVixRQUFJLEtBQUtQLElBQVQsRUFBZTtBQUNiLGFBQU8sS0FBS0EsSUFBTCxDQUFVUSxLQUFWLENBQWdCLEtBQUtYLElBQXJCLEVBQTJCO0FBQ2hDWSxRQUFBQSxNQUFNLEVBQUUsS0FBS0EsTUFEbUI7QUFFaENDLFFBQUFBLEtBQUssRUFBRSxLQUFLQSxLQUZvQjtBQUdoQ0MsUUFBQUEsSUFBSSxFQUFFLEtBQUtBO0FBSHFCLE9BQTNCLEVBSUpDLE9BSkg7QUFLRDs7QUFFRCxRQUFJLEtBQUtILE1BQVQsRUFBaUI7QUFDZixhQUFPLEtBQUtBLE1BQUwsR0FBYyxJQUFkLEdBQXFCLEtBQUtaLElBQWpDO0FBQ0Q7O0FBRUQsV0FBTyxLQUFLQSxJQUFaO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7Ozs7ZUFTYUQsTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwcmVzZW50cyBhIHBsdWdpbuKAmXMgd2FybmluZy4gSXQgY2FuIGJlIGNyZWF0ZWQgdXNpbmcge0BsaW5rIE5vZGUjd2Fybn0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGlmIChkZWNsLmltcG9ydGFudCkge1xuICogICBkZWNsLndhcm4ocmVzdWx0LCAnQXZvaWQgIWltcG9ydGFudCcsIHsgd29yZDogJyFpbXBvcnRhbnQnIH0pXG4gKiB9XG4gKi9cbmNsYXNzIFdhcm5pbmcge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgICAgICAgIFdhcm5pbmcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAgICAgIFdhcm5pbmcgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtOb2RlfSAgIG9wdHMubm9kZSAgIENTUyBub2RlIHRoYXQgY2F1c2VkIHRoZSB3YXJuaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy53b3JkICAgV29yZCBpbiBDU1Mgc291cmNlIHRoYXQgY2F1c2VkIHRoZSB3YXJuaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5pbmRleCAgSW5kZXggaW4gQ1NTIG5vZGUgc3RyaW5nIHRoYXQgY2F1c2VkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMucGx1Z2luIE5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNyZWF0ZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2FybmluZy4ge0BsaW5rIFJlc3VsdCN3YXJufSBmaWxsc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwcm9wZXJ0eSBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHRleHQsIG9wdHMgPSB7IH0pIHtcbiAgICAvKipcbiAgICAgKiBUeXBlIHRvIGZpbHRlciB3YXJuaW5ncyBmcm9tIHtAbGluayBSZXN1bHQjbWVzc2FnZXN9LlxuICAgICAqIEFsd2F5cyBlcXVhbCB0byBgXCJ3YXJuaW5nXCJgLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgbm9uV2FybmluZyA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoaSA9PiBpLnR5cGUgIT09ICd3YXJuaW5nJylcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSAnd2FybmluZydcbiAgICAvKipcbiAgICAgKiBUaGUgd2FybmluZyBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogd2FybmluZy50ZXh0IC8vPT4gJ1RyeSB0byBhdm9pZCAhaW1wb3J0YW50J1xuICAgICAqL1xuICAgIHRoaXMudGV4dCA9IHRleHRcblxuICAgIGlmIChvcHRzLm5vZGUgJiYgb3B0cy5ub2RlLnNvdXJjZSkge1xuICAgICAgbGV0IHBvcyA9IG9wdHMubm9kZS5wb3NpdGlvbkJ5KG9wdHMpXG4gICAgICAvKipcbiAgICAgICAqIExpbmUgaW4gdGhlIGlucHV0IGZpbGUgd2l0aCB0aGlzIHdhcm5pbmfigJlzIHNvdXJjZS5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqIHdhcm5pbmcubGluZSAvLz0+IDVcbiAgICAgICAqL1xuICAgICAgdGhpcy5saW5lID0gcG9zLmxpbmVcbiAgICAgIC8qKlxuICAgICAgICogQ29sdW1uIGluIHRoZSBpbnB1dCBmaWxlIHdpdGggdGhpcyB3YXJuaW5n4oCZcyBzb3VyY2UuXG4gICAgICAgKlxuICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICogd2FybmluZy5jb2x1bW4gLy89PiA2XG4gICAgICAgKi9cbiAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtblxuICAgIH1cblxuICAgIGZvciAobGV0IG9wdCBpbiBvcHRzKSB0aGlzW29wdF0gPSBvcHRzW29wdF1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgd2FybmluZyBwb3NpdGlvbiBhbmQgbWVzc2FnZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogd2FybmluZy50b1N0cmluZygpIC8vPT4gJ3Bvc3Rjc3MtbGludDphLmNzczoxMDoxNDogQXZvaWQgIWltcG9ydGFudCdcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBXYXJuaW5nIHBvc2l0aW9uIGFuZCBtZXNzYWdlLlxuICAgKi9cbiAgdG9TdHJpbmcgKCkge1xuICAgIGlmICh0aGlzLm5vZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuZXJyb3IodGhpcy50ZXh0LCB7XG4gICAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICB3b3JkOiB0aGlzLndvcmRcbiAgICAgIH0pLm1lc3NhZ2VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wbHVnaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbiArICc6ICcgKyB0aGlzLnRleHRcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXh0XG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIFdhcm5pbmcjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gcGx1Z2luIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgZmlsbCB0aGlzIHByb3BlcnR5IGF1dG9tYXRpY2FsbHkuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2FybmluZy4gV2hlbiB5b3UgY2FsbCB7QGxpbmsgTm9kZSN3YXJufVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB3YXJuaW5nLnBsdWdpbiAvLz0+ICdwb3N0Y3NzLWltcG9ydGFudCdcbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBXYXJuaW5nI1xuICAgKiBAbWVtYmVyIHtOb2RlfSBub2RlIENvbnRhaW5zIHRoZSBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogd2FybmluZy5ub2RlLnRvU3RyaW5nKCkgLy89PiAnY29sb3I6IHdoaXRlICFpbXBvcnRhbnQnXG4gICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBXYXJuaW5nXG4iXSwiZmlsZSI6Indhcm5pbmcuanMifQ==
  15753. /***/ }),
  15754. /* 89 */
  15755. /***/ (function(module, exports, __webpack_require__) {
  15756. "use strict";
  15757. exports.__esModule = true;
  15758. exports.default = void 0;
  15759. var _declaration = _interopRequireDefault(__webpack_require__(15));
  15760. var _tokenize = _interopRequireDefault(__webpack_require__(90));
  15761. var _comment = _interopRequireDefault(__webpack_require__(19));
  15762. var _atRule = _interopRequireDefault(__webpack_require__(20));
  15763. var _root = _interopRequireDefault(__webpack_require__(44));
  15764. var _rule = _interopRequireDefault(__webpack_require__(22));
  15765. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  15766. var Parser = /*#__PURE__*/function () {
  15767. function Parser(input) {
  15768. this.input = input;
  15769. this.root = new _root.default();
  15770. this.current = this.root;
  15771. this.spaces = '';
  15772. this.semicolon = false;
  15773. this.createTokenizer();
  15774. this.root.source = {
  15775. input: input,
  15776. start: {
  15777. line: 1,
  15778. column: 1
  15779. }
  15780. };
  15781. }
  15782. var _proto = Parser.prototype;
  15783. _proto.createTokenizer = function createTokenizer() {
  15784. this.tokenizer = (0, _tokenize.default)(this.input);
  15785. };
  15786. _proto.parse = function parse() {
  15787. var token;
  15788. while (!this.tokenizer.endOfFile()) {
  15789. token = this.tokenizer.nextToken();
  15790. switch (token[0]) {
  15791. case 'space':
  15792. this.spaces += token[1];
  15793. break;
  15794. case ';':
  15795. this.freeSemicolon(token);
  15796. break;
  15797. case '}':
  15798. this.end(token);
  15799. break;
  15800. case 'comment':
  15801. this.comment(token);
  15802. break;
  15803. case 'at-word':
  15804. this.atrule(token);
  15805. break;
  15806. case '{':
  15807. this.emptyRule(token);
  15808. break;
  15809. default:
  15810. this.other(token);
  15811. break;
  15812. }
  15813. }
  15814. this.endFile();
  15815. };
  15816. _proto.comment = function comment(token) {
  15817. var node = new _comment.default();
  15818. this.init(node, token[2], token[3]);
  15819. node.source.end = {
  15820. line: token[4],
  15821. column: token[5]
  15822. };
  15823. var text = token[1].slice(2, -2);
  15824. if (/^\s*$/.test(text)) {
  15825. node.text = '';
  15826. node.raws.left = text;
  15827. node.raws.right = '';
  15828. } else {
  15829. var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
  15830. node.text = match[2];
  15831. node.raws.left = match[1];
  15832. node.raws.right = match[3];
  15833. }
  15834. };
  15835. _proto.emptyRule = function emptyRule(token) {
  15836. var node = new _rule.default();
  15837. this.init(node, token[2], token[3]);
  15838. node.selector = '';
  15839. node.raws.between = '';
  15840. this.current = node;
  15841. };
  15842. _proto.other = function other(start) {
  15843. var end = false;
  15844. var type = null;
  15845. var colon = false;
  15846. var bracket = null;
  15847. var brackets = [];
  15848. var tokens = [];
  15849. var token = start;
  15850. while (token) {
  15851. type = token[0];
  15852. tokens.push(token);
  15853. if (type === '(' || type === '[') {
  15854. if (!bracket) bracket = token;
  15855. brackets.push(type === '(' ? ')' : ']');
  15856. } else if (brackets.length === 0) {
  15857. if (type === ';') {
  15858. if (colon) {
  15859. this.decl(tokens);
  15860. return;
  15861. } else {
  15862. break;
  15863. }
  15864. } else if (type === '{') {
  15865. this.rule(tokens);
  15866. return;
  15867. } else if (type === '}') {
  15868. this.tokenizer.back(tokens.pop());
  15869. end = true;
  15870. break;
  15871. } else if (type === ':') {
  15872. colon = true;
  15873. }
  15874. } else if (type === brackets[brackets.length - 1]) {
  15875. brackets.pop();
  15876. if (brackets.length === 0) bracket = null;
  15877. }
  15878. token = this.tokenizer.nextToken();
  15879. }
  15880. if (this.tokenizer.endOfFile()) end = true;
  15881. if (brackets.length > 0) this.unclosedBracket(bracket);
  15882. if (end && colon) {
  15883. while (tokens.length) {
  15884. token = tokens[tokens.length - 1][0];
  15885. if (token !== 'space' && token !== 'comment') break;
  15886. this.tokenizer.back(tokens.pop());
  15887. }
  15888. this.decl(tokens);
  15889. } else {
  15890. this.unknownWord(tokens);
  15891. }
  15892. };
  15893. _proto.rule = function rule(tokens) {
  15894. tokens.pop();
  15895. var node = new _rule.default();
  15896. this.init(node, tokens[0][2], tokens[0][3]);
  15897. node.raws.between = this.spacesAndCommentsFromEnd(tokens);
  15898. this.raw(node, 'selector', tokens);
  15899. this.current = node;
  15900. };
  15901. _proto.decl = function decl(tokens) {
  15902. var node = new _declaration.default();
  15903. this.init(node);
  15904. var last = tokens[tokens.length - 1];
  15905. if (last[0] === ';') {
  15906. this.semicolon = true;
  15907. tokens.pop();
  15908. }
  15909. if (last[4]) {
  15910. node.source.end = {
  15911. line: last[4],
  15912. column: last[5]
  15913. };
  15914. } else {
  15915. node.source.end = {
  15916. line: last[2],
  15917. column: last[3]
  15918. };
  15919. }
  15920. while (tokens[0][0] !== 'word') {
  15921. if (tokens.length === 1) this.unknownWord(tokens);
  15922. node.raws.before += tokens.shift()[1];
  15923. }
  15924. node.source.start = {
  15925. line: tokens[0][2],
  15926. column: tokens[0][3]
  15927. };
  15928. node.prop = '';
  15929. while (tokens.length) {
  15930. var type = tokens[0][0];
  15931. if (type === ':' || type === 'space' || type === 'comment') {
  15932. break;
  15933. }
  15934. node.prop += tokens.shift()[1];
  15935. }
  15936. node.raws.between = '';
  15937. var token;
  15938. while (tokens.length) {
  15939. token = tokens.shift();
  15940. if (token[0] === ':') {
  15941. node.raws.between += token[1];
  15942. break;
  15943. } else {
  15944. if (token[0] === 'word' && /\w/.test(token[1])) {
  15945. this.unknownWord([token]);
  15946. }
  15947. node.raws.between += token[1];
  15948. }
  15949. }
  15950. if (node.prop[0] === '_' || node.prop[0] === '*') {
  15951. node.raws.before += node.prop[0];
  15952. node.prop = node.prop.slice(1);
  15953. }
  15954. node.raws.between += this.spacesAndCommentsFromStart(tokens);
  15955. this.precheckMissedSemicolon(tokens);
  15956. for (var i = tokens.length - 1; i > 0; i--) {
  15957. token = tokens[i];
  15958. if (token[1].toLowerCase() === '!important') {
  15959. node.important = true;
  15960. var string = this.stringFrom(tokens, i);
  15961. string = this.spacesFromEnd(tokens) + string;
  15962. if (string !== ' !important') node.raws.important = string;
  15963. break;
  15964. } else if (token[1].toLowerCase() === 'important') {
  15965. var cache = tokens.slice(0);
  15966. var str = '';
  15967. for (var j = i; j > 0; j--) {
  15968. var _type = cache[j][0];
  15969. if (str.trim().indexOf('!') === 0 && _type !== 'space') {
  15970. break;
  15971. }
  15972. str = cache.pop()[1] + str;
  15973. }
  15974. if (str.trim().indexOf('!') === 0) {
  15975. node.important = true;
  15976. node.raws.important = str;
  15977. tokens = cache;
  15978. }
  15979. }
  15980. if (token[0] !== 'space' && token[0] !== 'comment') {
  15981. break;
  15982. }
  15983. }
  15984. this.raw(node, 'value', tokens);
  15985. if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens);
  15986. };
  15987. _proto.atrule = function atrule(token) {
  15988. var node = new _atRule.default();
  15989. node.name = token[1].slice(1);
  15990. if (node.name === '') {
  15991. this.unnamedAtrule(node, token);
  15992. }
  15993. this.init(node, token[2], token[3]);
  15994. var prev;
  15995. var shift;
  15996. var last = false;
  15997. var open = false;
  15998. var params = [];
  15999. while (!this.tokenizer.endOfFile()) {
  16000. token = this.tokenizer.nextToken();
  16001. if (token[0] === ';') {
  16002. node.source.end = {
  16003. line: token[2],
  16004. column: token[3]
  16005. };
  16006. this.semicolon = true;
  16007. break;
  16008. } else if (token[0] === '{') {
  16009. open = true;
  16010. break;
  16011. } else if (token[0] === '}') {
  16012. if (params.length > 0) {
  16013. shift = params.length - 1;
  16014. prev = params[shift];
  16015. while (prev && prev[0] === 'space') {
  16016. prev = params[--shift];
  16017. }
  16018. if (prev) {
  16019. node.source.end = {
  16020. line: prev[4],
  16021. column: prev[5]
  16022. };
  16023. }
  16024. }
  16025. this.end(token);
  16026. break;
  16027. } else {
  16028. params.push(token);
  16029. }
  16030. if (this.tokenizer.endOfFile()) {
  16031. last = true;
  16032. break;
  16033. }
  16034. }
  16035. node.raws.between = this.spacesAndCommentsFromEnd(params);
  16036. if (params.length) {
  16037. node.raws.afterName = this.spacesAndCommentsFromStart(params);
  16038. this.raw(node, 'params', params);
  16039. if (last) {
  16040. token = params[params.length - 1];
  16041. node.source.end = {
  16042. line: token[4],
  16043. column: token[5]
  16044. };
  16045. this.spaces = node.raws.between;
  16046. node.raws.between = '';
  16047. }
  16048. } else {
  16049. node.raws.afterName = '';
  16050. node.params = '';
  16051. }
  16052. if (open) {
  16053. node.nodes = [];
  16054. this.current = node;
  16055. }
  16056. };
  16057. _proto.end = function end(token) {
  16058. if (this.current.nodes && this.current.nodes.length) {
  16059. this.current.raws.semicolon = this.semicolon;
  16060. }
  16061. this.semicolon = false;
  16062. this.current.raws.after = (this.current.raws.after || '') + this.spaces;
  16063. this.spaces = '';
  16064. if (this.current.parent) {
  16065. this.current.source.end = {
  16066. line: token[2],
  16067. column: token[3]
  16068. };
  16069. this.current = this.current.parent;
  16070. } else {
  16071. this.unexpectedClose(token);
  16072. }
  16073. };
  16074. _proto.endFile = function endFile() {
  16075. if (this.current.parent) this.unclosedBlock();
  16076. if (this.current.nodes && this.current.nodes.length) {
  16077. this.current.raws.semicolon = this.semicolon;
  16078. }
  16079. this.current.raws.after = (this.current.raws.after || '') + this.spaces;
  16080. };
  16081. _proto.freeSemicolon = function freeSemicolon(token) {
  16082. this.spaces += token[1];
  16083. if (this.current.nodes) {
  16084. var prev = this.current.nodes[this.current.nodes.length - 1];
  16085. if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
  16086. prev.raws.ownSemicolon = this.spaces;
  16087. this.spaces = '';
  16088. }
  16089. }
  16090. } // Helpers
  16091. ;
  16092. _proto.init = function init(node, line, column) {
  16093. this.current.push(node);
  16094. node.source = {
  16095. start: {
  16096. line: line,
  16097. column: column
  16098. },
  16099. input: this.input
  16100. };
  16101. node.raws.before = this.spaces;
  16102. this.spaces = '';
  16103. if (node.type !== 'comment') this.semicolon = false;
  16104. };
  16105. _proto.raw = function raw(node, prop, tokens) {
  16106. var token, type;
  16107. var length = tokens.length;
  16108. var value = '';
  16109. var clean = true;
  16110. var next, prev;
  16111. var pattern = /^([.|#])?([\w])+/i;
  16112. for (var i = 0; i < length; i += 1) {
  16113. token = tokens[i];
  16114. type = token[0];
  16115. if (type === 'comment' && node.type === 'rule') {
  16116. prev = tokens[i - 1];
  16117. next = tokens[i + 1];
  16118. if (prev[0] !== 'space' && next[0] !== 'space' && pattern.test(prev[1]) && pattern.test(next[1])) {
  16119. value += token[1];
  16120. } else {
  16121. clean = false;
  16122. }
  16123. continue;
  16124. }
  16125. if (type === 'comment' || type === 'space' && i === length - 1) {
  16126. clean = false;
  16127. } else {
  16128. value += token[1];
  16129. }
  16130. }
  16131. if (!clean) {
  16132. var raw = tokens.reduce(function (all, i) {
  16133. return all + i[1];
  16134. }, '');
  16135. node.raws[prop] = {
  16136. value: value,
  16137. raw: raw
  16138. };
  16139. }
  16140. node[prop] = value;
  16141. };
  16142. _proto.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {
  16143. var lastTokenType;
  16144. var spaces = '';
  16145. while (tokens.length) {
  16146. lastTokenType = tokens[tokens.length - 1][0];
  16147. if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;
  16148. spaces = tokens.pop()[1] + spaces;
  16149. }
  16150. return spaces;
  16151. };
  16152. _proto.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {
  16153. var next;
  16154. var spaces = '';
  16155. while (tokens.length) {
  16156. next = tokens[0][0];
  16157. if (next !== 'space' && next !== 'comment') break;
  16158. spaces += tokens.shift()[1];
  16159. }
  16160. return spaces;
  16161. };
  16162. _proto.spacesFromEnd = function spacesFromEnd(tokens) {
  16163. var lastTokenType;
  16164. var spaces = '';
  16165. while (tokens.length) {
  16166. lastTokenType = tokens[tokens.length - 1][0];
  16167. if (lastTokenType !== 'space') break;
  16168. spaces = tokens.pop()[1] + spaces;
  16169. }
  16170. return spaces;
  16171. };
  16172. _proto.stringFrom = function stringFrom(tokens, from) {
  16173. var result = '';
  16174. for (var i = from; i < tokens.length; i++) {
  16175. result += tokens[i][1];
  16176. }
  16177. tokens.splice(from, tokens.length - from);
  16178. return result;
  16179. };
  16180. _proto.colon = function colon(tokens) {
  16181. var brackets = 0;
  16182. var token, type, prev;
  16183. for (var i = 0; i < tokens.length; i++) {
  16184. token = tokens[i];
  16185. type = token[0];
  16186. if (type === '(') {
  16187. brackets += 1;
  16188. }
  16189. if (type === ')') {
  16190. brackets -= 1;
  16191. }
  16192. if (brackets === 0 && type === ':') {
  16193. if (!prev) {
  16194. this.doubleColon(token);
  16195. } else if (prev[0] === 'word' && prev[1] === 'progid') {
  16196. continue;
  16197. } else {
  16198. return i;
  16199. }
  16200. }
  16201. prev = token;
  16202. }
  16203. return false;
  16204. } // Errors
  16205. ;
  16206. _proto.unclosedBracket = function unclosedBracket(bracket) {
  16207. throw this.input.error('Unclosed bracket', bracket[2], bracket[3]);
  16208. };
  16209. _proto.unknownWord = function unknownWord(tokens) {
  16210. throw this.input.error('Unknown word', tokens[0][2], tokens[0][3]);
  16211. };
  16212. _proto.unexpectedClose = function unexpectedClose(token) {
  16213. throw this.input.error('Unexpected }', token[2], token[3]);
  16214. };
  16215. _proto.unclosedBlock = function unclosedBlock() {
  16216. var pos = this.current.source.start;
  16217. throw this.input.error('Unclosed block', pos.line, pos.column);
  16218. };
  16219. _proto.doubleColon = function doubleColon(token) {
  16220. throw this.input.error('Double colon', token[2], token[3]);
  16221. };
  16222. _proto.unnamedAtrule = function unnamedAtrule(node, token) {
  16223. throw this.input.error('At-rule without name', token[2], token[3]);
  16224. };
  16225. _proto.precheckMissedSemicolon = function precheckMissedSemicolon()
  16226. /* tokens */
  16227. {// Hook for Safe Parser
  16228. };
  16229. _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {
  16230. var colon = this.colon(tokens);
  16231. if (colon === false) return;
  16232. var founded = 0;
  16233. var token;
  16234. for (var j = colon - 1; j >= 0; j--) {
  16235. token = tokens[j];
  16236. if (token[0] !== 'space') {
  16237. founded += 1;
  16238. if (founded === 2) break;
  16239. }
  16240. }
  16241. throw this.input.error('Missed semicolon', token[2], token[3]);
  16242. };
  16243. return Parser;
  16244. }();
  16245. exports.default = Parser;
  16246. module.exports = exports.default;
  16247. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci5lczYiXSwibmFtZXMiOlsiUGFyc2VyIiwiaW5wdXQiLCJyb290IiwiUm9vdCIsImN1cnJlbnQiLCJzcGFjZXMiLCJzZW1pY29sb24iLCJjcmVhdGVUb2tlbml6ZXIiLCJzb3VyY2UiLCJzdGFydCIsImxpbmUiLCJjb2x1bW4iLCJ0b2tlbml6ZXIiLCJwYXJzZSIsInRva2VuIiwiZW5kT2ZGaWxlIiwibmV4dFRva2VuIiwiZnJlZVNlbWljb2xvbiIsImVuZCIsImNvbW1lbnQiLCJhdHJ1bGUiLCJlbXB0eVJ1bGUiLCJvdGhlciIsImVuZEZpbGUiLCJub2RlIiwiQ29tbWVudCIsImluaXQiLCJ0ZXh0Iiwic2xpY2UiLCJ0ZXN0IiwicmF3cyIsImxlZnQiLCJyaWdodCIsIm1hdGNoIiwiUnVsZSIsInNlbGVjdG9yIiwiYmV0d2VlbiIsInR5cGUiLCJjb2xvbiIsImJyYWNrZXQiLCJicmFja2V0cyIsInRva2VucyIsInB1c2giLCJsZW5ndGgiLCJkZWNsIiwicnVsZSIsImJhY2siLCJwb3AiLCJ1bmNsb3NlZEJyYWNrZXQiLCJ1bmtub3duV29yZCIsInNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZCIsInJhdyIsIkRlY2xhcmF0aW9uIiwibGFzdCIsImJlZm9yZSIsInNoaWZ0IiwicHJvcCIsInNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0IiwicHJlY2hlY2tNaXNzZWRTZW1pY29sb24iLCJpIiwidG9Mb3dlckNhc2UiLCJpbXBvcnRhbnQiLCJzdHJpbmciLCJzdHJpbmdGcm9tIiwic3BhY2VzRnJvbUVuZCIsImNhY2hlIiwic3RyIiwiaiIsInRyaW0iLCJpbmRleE9mIiwidmFsdWUiLCJjaGVja01pc3NlZFNlbWljb2xvbiIsIkF0UnVsZSIsIm5hbWUiLCJ1bm5hbWVkQXRydWxlIiwicHJldiIsIm9wZW4iLCJwYXJhbXMiLCJhZnRlck5hbWUiLCJub2RlcyIsImFmdGVyIiwicGFyZW50IiwidW5leHBlY3RlZENsb3NlIiwidW5jbG9zZWRCbG9jayIsIm93blNlbWljb2xvbiIsImNsZWFuIiwibmV4dCIsInBhdHRlcm4iLCJyZWR1Y2UiLCJhbGwiLCJsYXN0VG9rZW5UeXBlIiwiZnJvbSIsInJlc3VsdCIsInNwbGljZSIsImRvdWJsZUNvbG9uIiwiZXJyb3IiLCJwb3MiLCJmb3VuZGVkIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0lBRXFCQSxNO0FBQ25CLGtCQUFhQyxLQUFiLEVBQW9CO0FBQ2xCLFNBQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUVBLFNBQUtDLElBQUwsR0FBWSxJQUFJQyxhQUFKLEVBQVo7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0YsSUFBcEI7QUFDQSxTQUFLRyxNQUFMLEdBQWMsRUFBZDtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFFQSxTQUFLQyxlQUFMO0FBQ0EsU0FBS0wsSUFBTCxDQUFVTSxNQUFWLEdBQW1CO0FBQUVQLE1BQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTUSxNQUFBQSxLQUFLLEVBQUU7QUFBRUMsUUFBQUEsSUFBSSxFQUFFLENBQVI7QUFBV0MsUUFBQUEsTUFBTSxFQUFFO0FBQW5CO0FBQWhCLEtBQW5CO0FBQ0Q7Ozs7U0FFREosZSxHQUFBLDJCQUFtQjtBQUNqQixTQUFLSyxTQUFMLEdBQWlCLHVCQUFVLEtBQUtYLEtBQWYsQ0FBakI7QUFDRCxHOztTQUVEWSxLLEdBQUEsaUJBQVM7QUFDUCxRQUFJQyxLQUFKOztBQUNBLFdBQU8sQ0FBQyxLQUFLRixTQUFMLENBQWVHLFNBQWYsRUFBUixFQUFvQztBQUNsQ0QsTUFBQUEsS0FBSyxHQUFHLEtBQUtGLFNBQUwsQ0FBZUksU0FBZixFQUFSOztBQUVBLGNBQVFGLEtBQUssQ0FBQyxDQUFELENBQWI7QUFDRSxhQUFLLE9BQUw7QUFDRSxlQUFLVCxNQUFMLElBQWVTLEtBQUssQ0FBQyxDQUFELENBQXBCO0FBQ0E7O0FBRUYsYUFBSyxHQUFMO0FBQ0UsZUFBS0csYUFBTCxDQUFtQkgsS0FBbkI7QUFD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LENBQWhCLEVBQW1CO0FBQ3BCO0FBQ0Y7O0FBQ0QsVUFBTSxLQUFLaEcsS0FBTCxDQUFXOEYsS0FBWCxDQUFpQixrQkFBakIsRUFBcUNqRixLQUFLLENBQUMsQ0FBRCxDQUExQyxFQUErQ0EsS0FBSyxDQUFDLENBQUQsQ0FBcEQsQ0FBTjtBQUNELEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVjbGFyYXRpb24gZnJvbSAnLi9kZWNsYXJhdGlvbidcbmltcG9ydCB0b2tlbml6ZXIgZnJvbSAnLi90b2tlbml6ZSdcbmltcG9ydCBDb21tZW50IGZyb20gJy4vY29tbWVudCdcbmltcG9ydCBBdFJ1bGUgZnJvbSAnLi9hdC1ydWxlJ1xuaW1wb3J0IFJvb3QgZnJvbSAnLi9yb290J1xuaW1wb3J0IFJ1bGUgZnJvbSAnLi9ydWxlJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoaW5wdXQpIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcblxuICAgIHRoaXMucm9vdCA9IG5ldyBSb290KClcbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnJvb3RcbiAgICB0aGlzLnNwYWNlcyA9ICcnXG4gICAgdGhpcy5zZW1pY29sb24gPSBmYWxzZVxuXG4gICAgdGhpcy5jcmVhdGVUb2tlbml6ZXIoKVxuICAgIHRoaXMucm9vdC5zb3VyY2UgPSB7IGlucHV0LCBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDEgfSB9XG4gIH1cblxuICBjcmVhdGVUb2tlbml6ZXIgKCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVyKHRoaXMuaW5wdXQpXG4gIH1cblxuICBwYXJzZSAoKSB7XG4gICAgbGV0IHRva2VuXG4gICAgd2hpbGUgKCF0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSkge1xuICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKVxuXG4gICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7XG4gICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICB0aGlzLnNwYWNlcyArPSB0b2tlblsxXVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnOyc6XG4gICAgICAgICAgdGhpcy5mcmVlU2VtaWNvbG9uKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgdGhpcy5lbmQodG9rZW4pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICB0aGlzLmNvbW1lbnQodG9rZW4pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhdC13b3JkJzpcbiAgICAgICAgICB0aGlzLmF0cnVsZSh0b2tlbilcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgIHRoaXMuZW1wdHlSdWxlKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLm90aGVyKHRva2VuKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5kRmlsZSgpXG4gIH1cblxuICBjb21tZW50ICh0b2tlbikge1xuICAgIGxldCBub2RlID0gbmV3IENvbW1lbnQoKVxuICAgIHRoaXMuaW5pdChub2RlLCB0b2tlblsyXSwgdG9rZW5bM10pXG4gICAgbm9kZS5zb3VyY2UuZW5kID0geyBsaW5lOiB0b2tlbls0XSwgY29sdW1uOiB0b2tlbls1XSB9XG5cbiAgICBsZXQgdGV4dCA9IHRva2VuWzFdLnNsaWNlKDIsIC0yKVxuICAgIGlmICgvXlxccyokLy50ZXN0KHRleHQpKSB7XG4gICAgICBub2RlLnRleHQgPSAnJ1xuICAgICAgbm9kZS5yYXdzLmxlZnQgPSB0ZXh0XG4gICAgICBub2RlLnJhd3MucmlnaHQgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eKFxccyopKFteXSpbXlxcc10pKFxccyopJC8pXG4gICAgICBub2RlLnRleHQgPSBtYXRjaFsyXVxuICAgICAgbm9kZS5yYXdzLmxlZnQgPSBtYXRjaFsxXVxuICAgICAgbm9kZS5yYXdzLnJpZ2h0ID0gbWF0Y2hbM11cbiAgICB9XG4gIH1cblxuICBlbXB0eVJ1bGUgKHRva2VuKSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgUnVsZSgpXG4gICAgdGhpcy5pbml0KG5vZGUsIHRva2VuWzJdLCB0b2tlblszXSlcbiAgICBub2RlLnNlbGVjdG9yID0gJydcbiAgICBub2RlLnJhd3MuYmV0d2VlbiA9ICcnXG4gICAgdGhpcy5jdXJyZW50ID0gbm9kZVxuICB9XG5cbiAgb3RoZXIgKHN0YXJ0KSB7XG4gICAgbGV0IGVuZCA9IGZhbHNlXG4gICAgbGV0IHR5cGUgPSBudWxsXG4gICAgbGV0IGNvbG9uID0gZmFsc2VcbiAgICBsZXQgYnJhY2tldCA9IG51bGxcbiAgICBsZXQgYnJhY2tldHMgPSBbXVxuXG4gICAgbGV0IHRva2VucyA9IFtdXG4gICAgbGV0IHRva2VuID0gc3RhcnRcbiAgICB3aGlsZSAodG9rZW4pIHtcbiAgICAgIHR5cGUgPSB0b2tlblswXVxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pXG5cbiAgICAgIGlmICh0eXBlID09PSAnKCcgfHwgdHlwZSA9PT0gJ1snKSB7XG4gICAgICAgIGlmICghYnJhY2tldCkgYnJhY2tldCA9IHRva2VuXG4gICAgICAgIGJyYWNrZXRzLnB1c2godHlwZSA9PT0gJygnID8gJyknIDogJ10nKVxuICAgICAgfSBlbHNlIGlmIChicmFja2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICc7Jykge1xuICAgICAgICAgIGlmIChjb2xvbikge1xuICAgICAgICAgICAgdGhpcy5kZWNsKHRva2VucylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAneycpIHtcbiAgICAgICAgICB0aGlzLnJ1bGUodG9rZW5zKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd9Jykge1xuICAgICAgICAgIHRoaXMudG9rZW5pemVyLmJhY2sodG9rZW5zLnBvcCgpKVxuICAgICAgICAgIGVuZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICc6Jykge1xuICAgICAgICAgIGNvbG9uID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IGJyYWNrZXRzW2JyYWNrZXRzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgIGJyYWNrZXRzLnBvcCgpXG4gICAgICAgIGlmIChicmFja2V0cy5sZW5ndGggPT09IDApIGJyYWNrZXQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXIubmV4dFRva2VuKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbml6ZXIuZW5kT2ZGaWxlKCkpIGVuZCA9IHRydWVcbiAgICBpZiAoYnJhY2tldHMubGVuZ3RoID4gMCkgdGhpcy51bmNsb3NlZEJyYWNrZXQoYnJhY2tldClcblxuICAgIGlmIChlbmQgJiYgY29sb24pIHtcbiAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgIHRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXVswXVxuICAgICAgICBpZiAodG9rZW4gIT09ICdzcGFjZScgJiYgdG9rZW4gIT09ICdjb21tZW50JykgYnJlYWtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuYmFjayh0b2tlbnMucG9wKCkpXG4gICAgICB9XG4gICAgICB0aGlzLmRlY2wodG9rZW5zKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVua25vd25Xb3JkKHRva2VucylcbiAgICB9XG4gIH1cblxuICBydWxlICh0b2tlbnMpIHtcbiAgICB0b2tlbnMucG9wKClcblxuICAgIGxldCBub2RlID0gbmV3IFJ1bGUoKVxuICAgIHRoaXMuaW5pdChub2RlLCB0b2tlbnNbMF1bMl0sIHRva2Vuc1swXVszXSlcblxuICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21FbmQodG9rZW5zKVxuICAgIHRoaXMucmF3KG5vZGUsICdzZWxlY3RvcicsIHRva2VucylcbiAgICB0aGlzLmN1cnJlbnQgPSBub2RlXG4gIH1cblxuICBkZWNsICh0b2tlbnMpIHtcbiAgICBsZXQgbm9kZSA9IG5ldyBEZWNsYXJhdGlvbigpXG4gICAgdGhpcy5pbml0KG5vZGUpXG5cbiAgICBsZXQgbGFzdCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgICBpZiAobGFzdFswXSA9PT0gJzsnKSB7XG4gICAgICB0aGlzLnNlbWljb2xvbiA9IHRydWVcbiAgICAgIHRva2Vucy5wb3AoKVxuICAgIH1cbiAgICBpZiAobGFzdFs0XSkge1xuICAgICAgbm9kZS5zb3VyY2UuZW5kID0geyBsaW5lOiBsYXN0WzRdLCBjb2x1bW46IGxhc3RbNV0gfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNvdXJjZS5lbmQgPSB7IGxpbmU6IGxhc3RbMl0sIGNvbHVtbjogbGFzdFszXSB9XG4gICAgfVxuXG4gICAgd2hpbGUgKHRva2Vuc1swXVswXSAhPT0gJ3dvcmQnKSB7XG4gICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSkgdGhpcy51bmtub3duV29yZCh0b2tlbnMpXG4gICAgICBub2RlLnJhd3MuYmVmb3JlICs9IHRva2Vucy5zaGlmdCgpWzFdXG4gICAgfVxuICAgIG5vZGUuc291cmNlLnN0YXJ0ID0geyBsaW5lOiB0b2tlbnNbMF1bMl0sIGNvbHVtbjogdG9rZW5zWzBdWzNdIH1cblxuICAgIG5vZGUucHJvcCA9ICcnXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGxldCB0eXBlID0gdG9rZW5zWzBdWzBdXG4gICAgICBpZiAodHlwZSA9PT0gJzonIHx8IHR5cGUgPT09ICdzcGFjZScgfHwgdHlwZSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBub2RlLnByb3AgKz0gdG9rZW5zLnNoaWZ0KClbMV1cbiAgICB9XG5cbiAgICBub2RlLnJhd3MuYmV0d2VlbiA9ICcnXG5cbiAgICBsZXQgdG9rZW5cbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgdG9rZW4gPSB0b2tlbnMuc2hpZnQoKVxuXG4gICAgICBpZiAodG9rZW5bMF0gPT09ICc6Jykge1xuICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiArPSB0b2tlblsxXVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRva2VuWzBdID09PSAnd29yZCcgJiYgL1xcdy8udGVzdCh0b2tlblsxXSkpIHtcbiAgICAgICAgICB0aGlzLnVua25vd25Xb3JkKFt0b2tlbl0pXG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gKz0gdG9rZW5bMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5wcm9wWzBdID09PSAnXycgfHwgbm9kZS5wcm9wWzBdID09PSAnKicpIHtcbiAgICAgIG5vZGUucmF3cy5iZWZvcmUgKz0gbm9kZS5wcm9wWzBdXG4gICAgICBub2RlLnByb3AgPSBub2RlLnByb3Auc2xpY2UoMSlcbiAgICB9XG4gICAgbm9kZS5yYXdzLmJldHdlZW4gKz0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydCh0b2tlbnMpXG4gICAgdGhpcy5wcmVjaGVja01pc3NlZFNlbWljb2xvbih0b2tlbnMpXG5cbiAgICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldXG4gICAgICBpZiAodG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PT0gJyFpbXBvcnRhbnQnKSB7XG4gICAgICAgIG5vZGUuaW1wb3J0YW50ID0gdHJ1ZVxuICAgICAgICBsZXQgc3RyaW5nID0gdGhpcy5zdHJpbmdGcm9tKHRva2VucywgaSlcbiAgICAgICAgc3RyaW5nID0gdGhpcy5zcGFjZXNGcm9tRW5kKHRva2VucykgKyBzdHJpbmdcbiAgICAgICAgaWYgKHN0cmluZyAhPT0gJyAhaW1wb3J0YW50Jykgbm9kZS5yYXdzLmltcG9ydGFudCA9IHN0cmluZ1xuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmICh0b2tlblsxXS50b0xvd2VyQ2FzZSgpID09PSAnaW1wb3J0YW50Jykge1xuICAgICAgICBsZXQgY2FjaGUgPSB0b2tlbnMuc2xpY2UoMClcbiAgICAgICAgbGV0IHN0ciA9ICcnXG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgbGV0IHR5cGUgPSBjYWNoZVtqXVswXVxuICAgICAgICAgIGlmIChzdHIudHJpbSgpLmluZGV4T2YoJyEnKSA9PT0gMCAmJiB0eXBlICE9PSAnc3BhY2UnKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIgPSBjYWNoZS5wb3AoKVsxXSArIHN0clxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIudHJpbSgpLmluZGV4T2YoJyEnKSA9PT0gMCkge1xuICAgICAgICAgIG5vZGUuaW1wb3J0YW50ID0gdHJ1ZVxuICAgICAgICAgIG5vZGUucmF3cy5pbXBvcnRhbnQgPSBzdHJcbiAgICAgICAgICB0b2tlbnMgPSBjYWNoZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlblswXSAhPT0gJ3NwYWNlJyAmJiB0b2tlblswXSAhPT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yYXcobm9kZSwgJ3ZhbHVlJywgdG9rZW5zKVxuXG4gICAgaWYgKG5vZGUudmFsdWUuaW5kZXhPZignOicpICE9PSAtMSkgdGhpcy5jaGVja01pc3NlZFNlbWljb2xvbih0b2tlbnMpXG4gIH1cblxuICBhdHJ1bGUgKHRva2VuKSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgQXRSdWxlKClcbiAgICBub2RlLm5hbWUgPSB0b2tlblsxXS5zbGljZSgxKVxuICAgIGlmIChub2RlLm5hbWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnVubmFtZWRBdHJ1bGUobm9kZSwgdG9rZW4pXG4gICAgfVxuICAgIHRoaXMuaW5pdChub2RlLCB0b2tlblsyXSwgdG9rZW5bM10pXG5cbiAgICBsZXQgcHJldlxuICAgIGxldCBzaGlmdFxuICAgIGxldCBsYXN0ID0gZmFsc2VcbiAgICBsZXQgb3BlbiA9IGZhbHNlXG4gICAgbGV0IHBhcmFtcyA9IFtdXG5cbiAgICB3aGlsZSAoIXRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpKSB7XG4gICAgICB0b2tlbiA9IHRoaXMudG9rZW5pemVyLm5leHRUb2tlbigpXG5cbiAgICAgIGlmICh0b2tlblswXSA9PT0gJzsnKSB7XG4gICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHsgbGluZTogdG9rZW5bMl0sIGNvbHVtbjogdG9rZW5bM10gfVxuICAgICAgICB0aGlzLnNlbWljb2xvbiA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW5bMF0gPT09ICd7Jykge1xuICAgICAgICBvcGVuID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmICh0b2tlblswXSA9PT0gJ30nKSB7XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNoaWZ0ID0gcGFyYW1zLmxlbmd0aCAtIDFcbiAgICAgICAgICBwcmV2ID0gcGFyYW1zW3NoaWZ0XVxuICAgICAgICAgIHdoaWxlIChwcmV2ICYmIHByZXZbMF0gPT09ICdzcGFjZScpIHtcbiAgICAgICAgICAgIHByZXYgPSBwYXJhbXNbLS1zaGlmdF1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHsgbGluZTogcHJldls0XSwgY29sdW1uOiBwcmV2WzVdIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmQodG9rZW4pXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMucHVzaCh0b2tlbilcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpKSB7XG4gICAgICAgIGxhc3QgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5yYXdzLmJldHdlZW4gPSB0aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZChwYXJhbXMpXG4gICAgaWYgKHBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIG5vZGUucmF3cy5hZnRlck5hbWUgPSB0aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0KHBhcmFtcylcbiAgICAgIHRoaXMucmF3KG5vZGUsICdwYXJhbXMnLCBwYXJhbXMpXG4gICAgICBpZiAobGFzdCkge1xuICAgICAgICB0b2tlbiA9IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV1cbiAgICAgICAgbm9kZS5zb3VyY2UuZW5kID0geyBsaW5lOiB0b2tlbls0XSwgY29sdW1uOiB0b2tlbls1XSB9XG4gICAgICAgIHRoaXMuc3BhY2VzID0gbm9kZS5yYXdzLmJldHdlZW5cbiAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gPSAnJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnJhd3MuYWZ0ZXJOYW1lID0gJydcbiAgICAgIG5vZGUucGFyYW1zID0gJydcbiAgICB9XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgbm9kZS5ub2RlcyA9IFtdXG4gICAgICB0aGlzLmN1cnJlbnQgPSBub2RlXG4gICAgfVxuICB9XG5cbiAgZW5kICh0b2tlbikge1xuICAgIGlmICh0aGlzLmN1cnJlbnQubm9kZXMgJiYgdGhpcy5jdXJyZW50Lm5vZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5jdXJyZW50LnJhd3Muc2VtaWNvbG9uID0gdGhpcy5zZW1pY29sb25cbiAgICB9XG4gICAgdGhpcy5zZW1pY29sb24gPSBmYWxzZVxuXG4gICAgdGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXIgPSAodGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXIgfHwgJycpICsgdGhpcy5zcGFjZXNcbiAgICB0aGlzLnNwYWNlcyA9ICcnXG5cbiAgICBpZiAodGhpcy5jdXJyZW50LnBhcmVudCkge1xuICAgICAgdGhpcy5jdXJyZW50LnNvdXJjZS5lbmQgPSB7IGxpbmU6IHRva2VuWzJdLCBjb2x1bW46IHRva2VuWzNdIH1cbiAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudC5wYXJlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmV4cGVjdGVkQ2xvc2UodG9rZW4pXG4gICAgfVxuICB9XG5cbiAgZW5kRmlsZSAoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudC5wYXJlbnQpIHRoaXMudW5jbG9zZWRCbG9jaygpXG4gICAgaWYgKHRoaXMuY3VycmVudC5ub2RlcyAmJiB0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmN1cnJlbnQucmF3cy5zZW1pY29sb24gPSB0aGlzLnNlbWljb2xvblxuICAgIH1cbiAgICB0aGlzLmN1cnJlbnQucmF3cy5hZnRlciA9ICh0aGlzLmN1cnJlbnQucmF3cy5hZnRlciB8fCAnJykgKyB0aGlzLnNwYWNlc1xuICB9XG5cbiAgZnJlZVNlbWljb2xvbiAodG9rZW4pIHtcbiAgICB0aGlzLnNwYWNlcyArPSB0b2tlblsxXVxuICAgIGlmICh0aGlzLmN1cnJlbnQubm9kZXMpIHtcbiAgICAgIGxldCBwcmV2ID0gdGhpcy5jdXJyZW50Lm5vZGVzW3RoaXMuY3VycmVudC5ub2Rlcy5sZW5ndGggLSAxXVxuICAgICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAncnVsZScgJiYgIXByZXYucmF3cy5vd25TZW1pY29sb24pIHtcbiAgICAgICAgcHJldi5yYXdzLm93blNlbWljb2xvbiA9IHRoaXMuc3BhY2VzXG4gICAgICAgIHRoaXMuc3BhY2VzID0gJydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXJzXG5cbiAgaW5pdCAobm9kZSwgbGluZSwgY29sdW1uKSB7XG4gICAgdGhpcy5jdXJyZW50LnB1c2gobm9kZSlcblxuICAgIG5vZGUuc291cmNlID0geyBzdGFydDogeyBsaW5lLCBjb2x1bW4gfSwgaW5wdXQ6IHRoaXMuaW5wdXQgfVxuICAgIG5vZGUucmF3cy5iZWZvcmUgPSB0aGlzLnNwYWNlc1xuICAgIHRoaXMuc3BhY2VzID0gJydcbiAgICBpZiAobm9kZS50eXBlICE9PSAnY29tbWVudCcpIHRoaXMuc2VtaWNvbG9uID0gZmFsc2VcbiAgfVxuXG4gIHJhdyAobm9kZSwgcHJvcCwgdG9rZW5zKSB7XG4gICAgbGV0IHRva2VuLCB0eXBlXG4gICAgbGV0IGxlbmd0aCA9IHRva2Vucy5sZW5ndGhcbiAgICBsZXQgdmFsdWUgPSAnJ1xuICAgIGxldCBjbGVhbiA9IHRydWVcbiAgICBsZXQgbmV4dCwgcHJldlxuICAgIGxldCBwYXR0ZXJuID0gL14oWy58I10pPyhbXFx3XSkrL2lcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldXG4gICAgICB0eXBlID0gdG9rZW5bMF1cblxuICAgICAgaWYgKHR5cGUgPT09ICdjb21tZW50JyAmJiBub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgICBwcmV2ID0gdG9rZW5zW2kgLSAxXVxuICAgICAgICBuZXh0ID0gdG9rZW5zW2kgKyAxXVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2WzBdICE9PSAnc3BhY2UnICYmXG4gICAgICAgICAgbmV4dFswXSAhPT0gJ3NwYWNlJyAmJlxuICAgICAgICAgIHBhdHRlcm4udGVzdChwcmV2WzFdKSAmJlxuICAgICAgICAgIHBhdHRlcm4udGVzdChuZXh0WzFdKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSArPSB0b2tlblsxXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsZWFuID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnY29tbWVudCcgfHwgKHR5cGUgPT09ICdzcGFjZScgJiYgaSA9PT0gbGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgY2xlYW4gPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gdG9rZW5bMV1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjbGVhbikge1xuICAgICAgbGV0IHJhdyA9IHRva2Vucy5yZWR1Y2UoKGFsbCwgaSkgPT4gYWxsICsgaVsxXSwgJycpXG4gICAgICBub2RlLnJhd3NbcHJvcF0gPSB7IHZhbHVlLCByYXcgfVxuICAgIH1cbiAgICBub2RlW3Byb3BdID0gdmFsdWVcbiAgfVxuXG4gIHNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZCAodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RUb2tlblR5cGVcbiAgICBsZXQgc3BhY2VzID0gJydcbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgbGFzdFRva2VuVHlwZSA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1bMF1cbiAgICAgIGlmIChsYXN0VG9rZW5UeXBlICE9PSAnc3BhY2UnICYmIGxhc3RUb2tlblR5cGUgIT09ICdjb21tZW50JykgYnJlYWtcbiAgICAgIHNwYWNlcyA9IHRva2Vucy5wb3AoKVsxXSArIHNwYWNlc1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2VzXG4gIH1cblxuICBzcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydCAodG9rZW5zKSB7XG4gICAgbGV0IG5leHRcbiAgICBsZXQgc3BhY2VzID0gJydcbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgICAgbmV4dCA9IHRva2Vuc1swXVswXVxuICAgICAgaWYgKG5leHQgIT09ICdzcGFjZScgJiYgbmV4dCAhPT0gJ2NvbW1lbnQnKSBicmVha1xuICAgICAgc3BhY2VzICs9IHRva2Vucy5zaGlmdCgpWzFdXG4gICAgfVxuICAgIHJldHVybiBzcGFjZXNcbiAgfVxuXG4gIHNwYWNlc0Zyb21FbmQgKHRva2Vucykge1xuICAgIGxldCBsYXN0VG9rZW5UeXBlXG4gICAgbGV0IHNwYWNlcyA9ICcnXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGxhc3RUb2tlblR5cGUgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdWzBdXG4gICAgICBpZiAobGFzdFRva2VuVHlwZSAhPT0gJ3NwYWNlJykgYnJlYWtcbiAgICAgIHNwYWNlcyA9IHRva2Vucy5wb3AoKVsxXSArIHNwYWNlc1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2VzXG4gIH1cblxuICBzdHJpbmdGcm9tICh0b2tlbnMsIGZyb20pIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBmb3IgKGxldCBpID0gZnJvbTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IHRva2Vuc1tpXVsxXVxuICAgIH1cbiAgICB0b2tlbnMuc3BsaWNlKGZyb20sIHRva2Vucy5sZW5ndGggLSBmcm9tKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGNvbG9uICh0b2tlbnMpIHtcbiAgICBsZXQgYnJhY2tldHMgPSAwXG4gICAgbGV0IHRva2VuLCB0eXBlLCBwcmV2XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldXG4gICAgICB0eXBlID0gdG9rZW5bMF1cblxuICAgICAgaWYgKHR5cGUgPT09ICcoJykge1xuICAgICAgICBicmFja2V0cyArPSAxXG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJyknKSB7XG4gICAgICAgIGJyYWNrZXRzIC09IDFcbiAgICAgIH1cbiAgICAgIGlmIChicmFja2V0cyA9PT0gMCAmJiB0eXBlID09PSAnOicpIHtcbiAgICAgICAgaWYgKCFwcmV2KSB7XG4gICAgICAgICAgdGhpcy5kb3VibGVDb2xvbih0b2tlbilcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2WzBdID09PSAnd29yZCcgJiYgcHJldlsxXSA9PT0gJ3Byb2dpZCcpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldiA9IHRva2VuXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gRXJyb3JzXG5cbiAgdW5jbG9zZWRCcmFja2V0IChicmFja2V0KSB7XG4gICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignVW5jbG9zZWQgYnJhY2tldCcsIGJyYWNrZXRbMl0sIGJyYWNrZXRbM10pXG4gIH1cblxuICB1bmtub3duV29yZCAodG9rZW5zKSB7XG4gICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignVW5rbm93biB3b3JkJywgdG9rZW5zWzBdWzJdLCB0b2tlbnNbMF1bM10pXG4gIH1cblxuICB1bmV4cGVjdGVkQ2xvc2UgKHRva2VuKSB7XG4gICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignVW5leHBlY3RlZCB9JywgdG9rZW5bMl0sIHRva2VuWzNdKVxuICB9XG5cbiAgdW5jbG9zZWRCbG9jayAoKSB7XG4gICAgbGV0IHBvcyA9IHRoaXMuY3VycmVudC5zb3VyY2Uuc3RhcnRcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKCdVbmNsb3NlZCBibG9jaycsIHBvcy5saW5lLCBwb3MuY29sdW1uKVxuICB9XG5cbiAgZG91YmxlQ29sb24gKHRva2VuKSB7XG4gICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignRG91YmxlIGNvbG9uJywgdG9rZW5bMl0sIHRva2VuWzNdKVxuICB9XG5cbiAgdW5uYW1lZEF0cnVsZSAobm9kZSwgdG9rZW4pIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKCdBdC1ydWxlIHdpdGhvdXQgbmFtZScsIHRva2VuWzJdLCB0b2tlblszXSlcbiAgfVxuXG4gIHByZWNoZWNrTWlzc2VkU2VtaWNvbG9uICgvKiB0b2tlbnMgKi8pIHtcbiAgICAvLyBIb29rIGZvciBTYWZlIFBhcnNlclxuICB9XG5cbiAgY2hlY2tNaXNzZWRTZW1pY29sb24gKHRva2Vucykge1xuICAgIGxldCBjb2xvbiA9IHRoaXMuY29sb24odG9rZW5zKVxuICAgIGlmIChjb2xvbiA9PT0gZmFsc2UpIHJldHVyblxuXG4gICAgbGV0IGZvdW5kZWQgPSAwXG4gICAgbGV0IHRva2VuXG4gICAgZm9yIChsZXQgaiA9IGNvbG9uIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2pdXG4gICAgICBpZiAodG9rZW5bMF0gIT09ICdzcGFjZScpIHtcbiAgICAgICAgZm91bmRlZCArPSAxXG4gICAgICAgIGlmIChmb3VuZGVkID09PSAyKSBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKCdNaXNzZWQgc2VtaWNvbG9uJywgdG9rZW5bMl0sIHRva2VuWzNdKVxuICB9XG59XG4iXSwiZmlsZSI6InBhcnNlci5qcyJ9
  16248. /***/ }),
  16249. /* 90 */
  16250. /***/ (function(module, exports, __webpack_require__) {
  16251. "use strict";
  16252. exports.__esModule = true;
  16253. exports.default = tokenizer;
  16254. var SINGLE_QUOTE = '\''.charCodeAt(0);
  16255. var DOUBLE_QUOTE = '"'.charCodeAt(0);
  16256. var BACKSLASH = '\\'.charCodeAt(0);
  16257. var SLASH = '/'.charCodeAt(0);
  16258. var NEWLINE = '\n'.charCodeAt(0);
  16259. var SPACE = ' '.charCodeAt(0);
  16260. var FEED = '\f'.charCodeAt(0);
  16261. var TAB = '\t'.charCodeAt(0);
  16262. var CR = '\r'.charCodeAt(0);
  16263. var OPEN_SQUARE = '['.charCodeAt(0);
  16264. var CLOSE_SQUARE = ']'.charCodeAt(0);
  16265. var OPEN_PARENTHESES = '('.charCodeAt(0);
  16266. var CLOSE_PARENTHESES = ')'.charCodeAt(0);
  16267. var OPEN_CURLY = '{'.charCodeAt(0);
  16268. var CLOSE_CURLY = '}'.charCodeAt(0);
  16269. var SEMICOLON = ';'.charCodeAt(0);
  16270. var ASTERISK = '*'.charCodeAt(0);
  16271. var COLON = ':'.charCodeAt(0);
  16272. var AT = '@'.charCodeAt(0);
  16273. var RE_AT_END = /[ \n\t\r\f{}()'"\\;/[\]#]/g;
  16274. var RE_WORD_END = /[ \n\t\r\f(){}:;@!'"\\\][#]|\/(?=\*)/g;
  16275. var RE_BAD_BRACKET = /.[\\/("'\n]/;
  16276. var RE_HEX_ESCAPE = /[a-f0-9]/i;
  16277. function tokenizer(input, options) {
  16278. if (options === void 0) {
  16279. options = {};
  16280. }
  16281. var css = input.css.valueOf();
  16282. var ignore = options.ignoreErrors;
  16283. var code, next, quote, lines, last, content, escape;
  16284. var nextLine, nextOffset, escaped, escapePos, prev, n, currentToken;
  16285. var length = css.length;
  16286. var offset = -1;
  16287. var line = 1;
  16288. var pos = 0;
  16289. var buffer = [];
  16290. var returned = [];
  16291. function position() {
  16292. return pos;
  16293. }
  16294. function unclosed(what) {
  16295. throw input.error('Unclosed ' + what, line, pos - offset);
  16296. }
  16297. function endOfFile() {
  16298. return returned.length === 0 && pos >= length;
  16299. }
  16300. function nextToken(opts) {
  16301. if (returned.length) return returned.pop();
  16302. if (pos >= length) return;
  16303. var ignoreUnclosed = opts ? opts.ignoreUnclosed : false;
  16304. code = css.charCodeAt(pos);
  16305. if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {
  16306. offset = pos;
  16307. line += 1;
  16308. }
  16309. switch (code) {
  16310. case NEWLINE:
  16311. case SPACE:
  16312. case TAB:
  16313. case CR:
  16314. case FEED:
  16315. next = pos;
  16316. do {
  16317. next += 1;
  16318. code = css.charCodeAt(next);
  16319. if (code === NEWLINE) {
  16320. offset = next;
  16321. line += 1;
  16322. }
  16323. } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
  16324. currentToken = ['space', css.slice(pos, next)];
  16325. pos = next - 1;
  16326. break;
  16327. case OPEN_SQUARE:
  16328. case CLOSE_SQUARE:
  16329. case OPEN_CURLY:
  16330. case CLOSE_CURLY:
  16331. case COLON:
  16332. case SEMICOLON:
  16333. case CLOSE_PARENTHESES:
  16334. var controlChar = String.fromCharCode(code);
  16335. currentToken = [controlChar, controlChar, line, pos - offset];
  16336. break;
  16337. case OPEN_PARENTHESES:
  16338. prev = buffer.length ? buffer.pop()[1] : '';
  16339. n = css.charCodeAt(pos + 1);
  16340. if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
  16341. next = pos;
  16342. do {
  16343. escaped = false;
  16344. next = css.indexOf(')', next + 1);
  16345. if (next === -1) {
  16346. if (ignore || ignoreUnclosed) {
  16347. next = pos;
  16348. break;
  16349. } else {
  16350. unclosed('bracket');
  16351. }
  16352. }
  16353. escapePos = next;
  16354. while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
  16355. escapePos -= 1;
  16356. escaped = !escaped;
  16357. }
  16358. } while (escaped);
  16359. currentToken = ['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
  16360. pos = next;
  16361. } else {
  16362. next = css.indexOf(')', pos + 1);
  16363. content = css.slice(pos, next + 1);
  16364. if (next === -1 || RE_BAD_BRACKET.test(content)) {
  16365. currentToken = ['(', '(', line, pos - offset];
  16366. } else {
  16367. currentToken = ['brackets', content, line, pos - offset, line, next - offset];
  16368. pos = next;
  16369. }
  16370. }
  16371. break;
  16372. case SINGLE_QUOTE:
  16373. case DOUBLE_QUOTE:
  16374. quote = code === SINGLE_QUOTE ? '\'' : '"';
  16375. next = pos;
  16376. do {
  16377. escaped = false;
  16378. next = css.indexOf(quote, next + 1);
  16379. if (next === -1) {
  16380. if (ignore || ignoreUnclosed) {
  16381. next = pos + 1;
  16382. break;
  16383. } else {
  16384. unclosed('string');
  16385. }
  16386. }
  16387. escapePos = next;
  16388. while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
  16389. escapePos -= 1;
  16390. escaped = !escaped;
  16391. }
  16392. } while (escaped);
  16393. content = css.slice(pos, next + 1);
  16394. lines = content.split('\n');
  16395. last = lines.length - 1;
  16396. if (last > 0) {
  16397. nextLine = line + last;
  16398. nextOffset = next - lines[last].length;
  16399. } else {
  16400. nextLine = line;
  16401. nextOffset = offset;
  16402. }
  16403. currentToken = ['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset];
  16404. offset = nextOffset;
  16405. line = nextLine;
  16406. pos = next;
  16407. break;
  16408. case AT:
  16409. RE_AT_END.lastIndex = pos + 1;
  16410. RE_AT_END.test(css);
  16411. if (RE_AT_END.lastIndex === 0) {
  16412. next = css.length - 1;
  16413. } else {
  16414. next = RE_AT_END.lastIndex - 2;
  16415. }
  16416. currentToken = ['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
  16417. pos = next;
  16418. break;
  16419. case BACKSLASH:
  16420. next = pos;
  16421. escape = true;
  16422. while (css.charCodeAt(next + 1) === BACKSLASH) {
  16423. next += 1;
  16424. escape = !escape;
  16425. }
  16426. code = css.charCodeAt(next + 1);
  16427. if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
  16428. next += 1;
  16429. if (RE_HEX_ESCAPE.test(css.charAt(next))) {
  16430. while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
  16431. next += 1;
  16432. }
  16433. if (css.charCodeAt(next + 1) === SPACE) {
  16434. next += 1;
  16435. }
  16436. }
  16437. }
  16438. currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
  16439. pos = next;
  16440. break;
  16441. default:
  16442. if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
  16443. next = css.indexOf('*/', pos + 2) + 1;
  16444. if (next === 0) {
  16445. if (ignore || ignoreUnclosed) {
  16446. next = css.length;
  16447. } else {
  16448. unclosed('comment');
  16449. }
  16450. }
  16451. content = css.slice(pos, next + 1);
  16452. lines = content.split('\n');
  16453. last = lines.length - 1;
  16454. if (last > 0) {
  16455. nextLine = line + last;
  16456. nextOffset = next - lines[last].length;
  16457. } else {
  16458. nextLine = line;
  16459. nextOffset = offset;
  16460. }
  16461. currentToken = ['comment', content, line, pos - offset, nextLine, next - nextOffset];
  16462. offset = nextOffset;
  16463. line = nextLine;
  16464. pos = next;
  16465. } else {
  16466. RE_WORD_END.lastIndex = pos + 1;
  16467. RE_WORD_END.test(css);
  16468. if (RE_WORD_END.lastIndex === 0) {
  16469. next = css.length - 1;
  16470. } else {
  16471. next = RE_WORD_END.lastIndex - 2;
  16472. }
  16473. currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
  16474. buffer.push(currentToken);
  16475. pos = next;
  16476. }
  16477. break;
  16478. }
  16479. pos++;
  16480. return currentToken;
  16481. }
  16482. function back(token) {
  16483. returned.push(token);
  16484. }
  16485. return {
  16486. back: back,
  16487. nextToken: nextToken,
  16488. endOfFile: endOfFile,
  16489. position: position
  16490. };
  16491. }
  16492. module.exports = exports.default;
  16493. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRva2VuaXplLmVzNiJdLCJuYW1lcyI6WyJTSU5HTEVfUVVPVEUiLCJjaGFyQ29kZUF0IiwiRE9VQkxFX1FVT1RFIiwiQkFDS1NMQVNIIiwiU0xBU0giLCJORVdMSU5FIiwiU1BBQ0UiLCJGRUVEIiwiVEFCIiwiQ1IiLCJPUEVOX1NRVUFSRSIsIkNMT1NFX1NRVUFSRSIsIk9QRU5fUEFSRU5USEVTRVMiLCJDTE9TRV9QQVJFTlRIRVNFUyIsIk9QRU5fQ1VSTFkiLCJDTE9TRV9DVVJMWSIsIlNFTUlDT0xPTiIsIkFTVEVSSVNLIiwiQ09MT04iLCJBVCIsIlJFX0FUX0VORCIsIlJFX1dPUkRfRU5EIiwiUkVfQkFEX0JSQUNLRVQiLCJSRV9IRVhfRVNDQVBFIiwidG9rZW5pemVyIiwiaW5wdXQiLCJvcHRpb25zIiwiY3NzIiwidmFsdWVPZiIsImlnbm9yZSIsImlnbm9yZUVycm9ycyIsImNvZGUiLCJuZXh0IiwicXVvdGUiLCJsaW5lcyIsImxhc3QiLCJjb250ZW50IiwiZXNjYXBlIiwibmV4dExpbmUiLCJuZXh0T2Zmc2V0IiwiZXNjYXBlZCIsImVzY2FwZVBvcyIsInByZXYiLCJuIiwiY3VycmVudFRva2VuIiwibGVuZ3RoIiwib2Zmc2V0IiwibGluZSIsInBvcyIsImJ1ZmZlciIsInJldHVybmVkIiwicG9zaXRpb24iLCJ1bmNsb3NlZCIsIndoYXQiLCJlcnJvciIsImVuZE9mRmlsZSIsIm5leHRUb2tlbiIsIm9wdHMiLCJwb3AiLCJpZ25vcmVVbmNsb3NlZCIsInNsaWNlIiwiY29udHJvbENoYXIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJpbmRleE9mIiwidGVzdCIsInNwbGl0IiwibGFzdEluZGV4IiwiY2hhckF0IiwicHVzaCIsImJhY2siLCJ0b2tlbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQU1BLFlBQVksR0FBRyxLQUFLQyxVQUFMLENBQWdCLENBQWhCLENBQXJCO0FBQ0EsSUFBTUMsWUFBWSxHQUFHLElBQUlELFVBQUosQ0FBZSxDQUFm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LElBQVQsQ0FBZUMsS0FBZixFQUFzQjtBQUNwQnJCLElBQUFBLFFBQVEsQ0FBQ21CLElBQVQsQ0FBY0UsS0FBZDtBQUNEOztBQUVELFNBQU87QUFDTEQsSUFBQUEsSUFBSSxFQUFKQSxJQURLO0FBRUxkLElBQUFBLFNBQVMsRUFBVEEsU0FGSztBQUdMRCxJQUFBQSxTQUFTLEVBQVRBLFNBSEs7QUFJTEosSUFBQUEsUUFBUSxFQUFSQTtBQUpLLEdBQVA7QUFNRCIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNJTkdMRV9RVU9URSA9ICdcXCcnLmNoYXJDb2RlQXQoMClcbmNvbnN0IERPVUJMRV9RVU9URSA9ICdcIicuY2hhckNvZGVBdCgwKVxuY29uc3QgQkFDS1NMQVNIID0gJ1xcXFwnLmNoYXJDb2RlQXQoMClcbmNvbnN0IFNMQVNIID0gJy8nLmNoYXJDb2RlQXQoMClcbmNvbnN0IE5FV0xJTkUgPSAnXFxuJy5jaGFyQ29kZUF0KDApXG5jb25zdCBTUEFDRSA9ICcgJy5jaGFyQ29kZUF0KDApXG5jb25zdCBGRUVEID0gJ1xcZicuY2hhckNvZGVBdCgwKVxuY29uc3QgVEFCID0gJ1xcdCcuY2hhckNvZGVBdCgwKVxuY29uc3QgQ1IgPSAnXFxyJy5jaGFyQ29kZUF0KDApXG5jb25zdCBPUEVOX1NRVUFSRSA9ICdbJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDTE9TRV9TUVVBUkUgPSAnXScuY2hhckNvZGVBdCgwKVxuY29uc3QgT1BFTl9QQVJFTlRIRVNFUyA9ICcoJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDTE9TRV9QQVJFTlRIRVNFUyA9ICcpJy5jaGFyQ29kZUF0KDApXG5jb25zdCBPUEVOX0NVUkxZID0gJ3snLmNoYXJDb2RlQXQoMClcbmNvbnN0IENMT1NFX0NVUkxZID0gJ30nLmNoYXJDb2RlQXQoMClcbmNvbnN0IFNFTUlDT0xPTiA9ICc7Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBU1RFUklTSyA9ICcqJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDT0xPTiA9ICc6Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBVCA9ICdAJy5jaGFyQ29kZUF0KDApXG5cbmNvbnN0IFJFX0FUX0VORCA9IC9bIFxcblxcdFxcclxcZnt9KCknXCJcXFxcOy9bXFxdI10vZ1xuY29uc3QgUkVfV09SRF9FTkQgPSAvWyBcXG5cXHRcXHJcXGYoKXt9OjtAISdcIlxcXFxcXF1bI118XFwvKD89XFwqKS9nXG5jb25zdCBSRV9CQURfQlJBQ0tFVCA9IC8uW1xcXFwvKFwiJ1xcbl0vXG5jb25zdCBSRV9IRVhfRVNDQVBFID0gL1thLWYwLTldL2lcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9rZW5pemVyIChpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBjc3MgPSBpbnB1dC5jc3MudmFsdWVPZigpXG4gIGxldCBpZ25vcmUgPSBvcHRpb25zLmlnbm9yZUVycm9yc1xuXG4gIGxldCBjb2RlLCBuZXh0LCBxdW90ZSwgbGluZXMsIGxhc3QsIGNvbnRlbnQsIGVzY2FwZVxuICBsZXQgbmV4dExpbmUsIG5leHRPZmZzZXQsIGVzY2FwZWQsIGVzY2FwZVBvcywgcHJldiwgbiwgY3VycmVudFRva2VuXG5cbiAgbGV0IGxlbmd0aCA9IGNzcy5sZW5ndGhcbiAgbGV0IG9mZnNldCA9IC0xXG4gIGxldCBsaW5lID0gMVxuICBsZXQgcG9zID0gMFxuICBsZXQgYnVmZmVyID0gW11cbiAgbGV0IHJldHVybmVkID0gW11cblxuICBmdW5jdGlvbiBwb3NpdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgZnVuY3Rpb24gdW5jbG9zZWQgKHdoYXQpIHtcbiAgICB0aHJvdyBpbnB1dC5lcnJvcignVW5jbG9zZWQgJyArIHdoYXQsIGxpbmUsIHBvcyAtIG9mZnNldClcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9mRmlsZSAoKSB7XG4gICAgcmV0dXJuIHJldHVybmVkLmxlbmd0aCA9PT0gMCAmJiBwb3MgPj0gbGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiBuZXh0VG9rZW4gKG9wdHMpIHtcbiAgICBpZiAocmV0dXJuZWQubGVuZ3RoKSByZXR1cm4gcmV0dXJuZWQucG9wKClcbiAgICBpZiAocG9zID49IGxlbmd0aCkgcmV0dXJuXG5cbiAgICBsZXQgaWdub3JlVW5jbG9zZWQgPSBvcHRzID8gb3B0cy5pZ25vcmVVbmNsb3NlZCA6IGZhbHNlXG5cbiAgICBjb2RlID0gY3NzLmNoYXJDb2RlQXQocG9zKVxuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IE5FV0xJTkUgfHwgY29kZSA9PT0gRkVFRCB8fFxuICAgICAgKGNvZGUgPT09IENSICYmIGNzcy5jaGFyQ29kZUF0KHBvcyArIDEpICE9PSBORVdMSU5FKVxuICAgICkge1xuICAgICAgb2Zmc2V0ID0gcG9zXG4gICAgICBsaW5lICs9IDFcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgTkVXTElORTpcbiAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICBjYXNlIFRBQjpcbiAgICAgIGNhc2UgQ1I6XG4gICAgICBjYXNlIEZFRUQ6XG4gICAgICAgIG5leHQgPSBwb3NcbiAgICAgICAgZG8ge1xuICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgIGNvZGUgPSBjc3MuY2hhckNvZGVBdChuZXh0KVxuICAgICAgICAgIGlmIChjb2RlID09PSBORVdMSU5FKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBuZXh0XG4gICAgICAgICAgICBsaW5lICs9IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKFxuICAgICAgICAgIGNvZGUgPT09IFNQQUNFIHx8XG4gICAgICAgICAgY29kZSA9PT0gTkVXTElORSB8fFxuICAgICAgICAgIGNvZGUgPT09IFRBQiB8fFxuICAgICAgICAgIGNvZGUgPT09IENSIHx8XG4gICAgICAgICAgY29kZSA9PT0gRkVFRFxuICAgICAgICApXG5cbiAgICAgICAgY3VycmVudFRva2VuID0gWydzcGFjZScsIGNzcy5zbGljZShwb3MsIG5leHQpXVxuICAgICAgICBwb3MgPSBuZXh0IC0gMVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIE9QRU5fU1FVQVJFOlxuICAgICAgY2FzZSBDTE9TRV9TUVVBUkU6XG4gICAgICBjYXNlIE9QRU5fQ1VSTFk6XG4gICAgICBjYXNlIENMT1NFX0NVUkxZOlxuICAgICAgY2FzZSBDT0xPTjpcbiAgICAgIGNhc2UgU0VNSUNPTE9OOlxuICAgICAgY2FzZSBDTE9TRV9QQVJFTlRIRVNFUzpcbiAgICAgICAgbGV0IGNvbnRyb2xDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICBjdXJyZW50VG9rZW4gPSBbY29udHJvbENoYXIsIGNvbnRyb2xDaGFyLCBsaW5lLCBwb3MgLSBvZmZzZXRdXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgT1BFTl9QQVJFTlRIRVNFUzpcbiAgICAgICAgcHJldiA9IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIucG9wKClbMV0gOiAnJ1xuICAgICAgICBuID0gY3NzLmNoYXJDb2RlQXQocG9zICsgMSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXYgPT09ICd1cmwnICYmXG4gICAgICAgICAgbiAhPT0gU0lOR0xFX1FVT1RFICYmIG4gIT09IERPVUJMRV9RVU9URSAmJlxuICAgICAgICAgIG4gIT09IFNQQUNFICYmIG4gIT09IE5FV0xJTkUgJiYgbiAhPT0gVEFCICYmXG4gICAgICAgICAgbiAhPT0gRkVFRCAmJiBuICE9PSBDUlxuICAgICAgICApIHtcbiAgICAgICAgICBuZXh0ID0gcG9zXG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlXG4gICAgICAgICAgICBuZXh0ID0gY3NzLmluZGV4T2YoJyknLCBuZXh0ICsgMSlcbiAgICAgICAgICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoaWdub3JlIHx8IGlnbm9yZVVuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5jbG9zZWQoJ2JyYWNrZXQnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0XG4gICAgICAgICAgICB3aGlsZSAoY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgICAgICBlc2NhcGVQb3MgLT0gMVxuICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlIChlc2NhcGVkKVxuXG4gICAgICAgICAgY3VycmVudFRva2VuID0gWydicmFja2V0cycsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICAgIGxpbmUsIHBvcyAtIG9mZnNldCxcbiAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICBdXG5cbiAgICAgICAgICBwb3MgPSBuZXh0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCA9IGNzcy5pbmRleE9mKCcpJywgcG9zICsgMSlcbiAgICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpXG5cbiAgICAgICAgICBpZiAobmV4dCA9PT0gLTEgfHwgUkVfQkFEX0JSQUNLRVQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgY3VycmVudFRva2VuID0gWycoJywgJygnLCBsaW5lLCBwb3MgLSBvZmZzZXRdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnYnJhY2tldHMnLCBjb250ZW50LFxuICAgICAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFNJTkdMRV9RVU9URTpcbiAgICAgIGNhc2UgRE9VQkxFX1FVT1RFOlxuICAgICAgICBxdW90ZSA9IGNvZGUgPT09IFNJTkdMRV9RVU9URSA/ICdcXCcnIDogJ1wiJ1xuICAgICAgICBuZXh0ID0gcG9zXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBlc2NhcGVkID0gZmFsc2VcbiAgICAgICAgICBuZXh0ID0gY3NzLmluZGV4T2YocXVvdGUsIG5leHQgKyAxKVxuICAgICAgICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgICAgICAgaWYgKGlnbm9yZSB8fCBpZ25vcmVVbmNsb3NlZCkge1xuICAgICAgICAgICAgICBuZXh0ID0gcG9zICsgMVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5jbG9zZWQoJ3N0cmluZycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVzY2FwZVBvcyA9IG5leHRcbiAgICAgICAgICB3aGlsZSAoY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgICAgZXNjYXBlUG9zIC09IDFcbiAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZXNjYXBlZClcblxuICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpXG4gICAgICAgIGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJylcbiAgICAgICAgbGFzdCA9IGxpbmVzLmxlbmd0aCAtIDFcblxuICAgICAgICBpZiAobGFzdCA+IDApIHtcbiAgICAgICAgICBuZXh0TGluZSA9IGxpbmUgKyBsYXN0XG4gICAgICAgICAgbmV4dE9mZnNldCA9IG5leHQgLSBsaW5lc1tsYXN0XS5sZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0TGluZSA9IGxpbmVcbiAgICAgICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ3N0cmluZycsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgbmV4dExpbmUsIG5leHQgLSBuZXh0T2Zmc2V0XG4gICAgICAgIF1cblxuICAgICAgICBvZmZzZXQgPSBuZXh0T2Zmc2V0XG4gICAgICAgIGxpbmUgPSBuZXh0TGluZVxuICAgICAgICBwb3MgPSBuZXh0XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgQVQ6XG4gICAgICAgIFJFX0FUX0VORC5sYXN0SW5kZXggPSBwb3MgKyAxXG4gICAgICAgIFJFX0FUX0VORC50ZXN0KGNzcylcbiAgICAgICAgaWYgKFJFX0FUX0VORC5sYXN0SW5kZXggPT09IDApIHtcbiAgICAgICAgICBuZXh0ID0gY3NzLmxlbmd0aCAtIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0ID0gUkVfQVRfRU5ELmxhc3RJbmRleCAtIDJcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnYXQtd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICBdXG5cbiAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIEJBQ0tTTEFTSDpcbiAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICBlc2NhcGUgPSB0cnVlXG4gICAgICAgIHdoaWxlIChjc3MuY2hhckNvZGVBdChuZXh0ICsgMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgIGVzY2FwZSA9ICFlc2NhcGVcbiAgICAgICAgfVxuICAgICAgICBjb2RlID0gY3NzLmNoYXJDb2RlQXQobmV4dCArIDEpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBlc2NhcGUgJiZcbiAgICAgICAgICBjb2RlICE9PSBTTEFTSCAmJlxuICAgICAgICAgIGNvZGUgIT09IFNQQUNFICYmXG4gICAgICAgICAgY29kZSAhPT0gTkVXTElORSAmJlxuICAgICAgICAgIGNvZGUgIT09IFRBQiAmJlxuICAgICAgICAgIGNvZGUgIT09IENSICYmXG4gICAgICAgICAgY29kZSAhPT0gRkVFRFxuICAgICAgICApIHtcbiAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICBpZiAoUkVfSEVYX0VTQ0FQRS50ZXN0KGNzcy5jaGFyQXQobmV4dCkpKSB7XG4gICAgICAgICAgICB3aGlsZSAoUkVfSEVYX0VTQ0FQRS50ZXN0KGNzcy5jaGFyQXQobmV4dCArIDEpKSkge1xuICAgICAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjc3MuY2hhckNvZGVBdChuZXh0ICsgMSkgPT09IFNQQUNFKSB7XG4gICAgICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICBdXG5cbiAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY29kZSA9PT0gU0xBU0ggJiYgY3NzLmNoYXJDb2RlQXQocG9zICsgMSkgPT09IEFTVEVSSVNLKSB7XG4gICAgICAgICAgbmV4dCA9IGNzcy5pbmRleE9mKCcqLycsIHBvcyArIDIpICsgMVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoaWdub3JlIHx8IGlnbm9yZVVuY2xvc2VkKSB7XG4gICAgICAgICAgICAgIG5leHQgPSBjc3MubGVuZ3RoXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmNsb3NlZCgnY29tbWVudCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGVudCA9IGNzcy5zbGljZShwb3MsIG5leHQgKyAxKVxuICAgICAgICAgIGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJylcbiAgICAgICAgICBsYXN0ID0gbGluZXMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgaWYgKGxhc3QgPiAwKSB7XG4gICAgICAgICAgICBuZXh0TGluZSA9IGxpbmUgKyBsYXN0XG4gICAgICAgICAgICBuZXh0T2Zmc2V0ID0gbmV4dCAtIGxpbmVzW2xhc3RdLmxlbmd0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0TGluZSA9IGxpbmVcbiAgICAgICAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ2NvbW1lbnQnLCBjb250ZW50LFxuICAgICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgICAgbmV4dExpbmUsIG5leHQgLSBuZXh0T2Zmc2V0XG4gICAgICAgICAgXVxuXG4gICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldFxuICAgICAgICAgIGxpbmUgPSBuZXh0TGluZVxuICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBSRV9XT1JEX0VORC5sYXN0SW5kZXggPSBwb3MgKyAxXG4gICAgICAgICAgUkVfV09SRF9FTkQudGVzdChjc3MpXG4gICAgICAgICAgaWYgKFJFX1dPUkRfRU5ELmxhc3RJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgbmV4dCA9IGNzcy5sZW5ndGggLSAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHQgPSBSRV9XT1JEX0VORC5sYXN0SW5kZXggLSAyXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFRva2VuID0gWyd3b3JkJywgY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpLFxuICAgICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICAgIF1cblxuICAgICAgICAgIGJ1ZmZlci5wdXNoKGN1cnJlbnRUb2tlbilcblxuICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgcG9zKytcbiAgICByZXR1cm4gY3VycmVudFRva2VuXG4gIH1cblxuICBmdW5jdGlvbiBiYWNrICh0b2tlbikge1xuICAgIHJldHVybmVkLnB1c2godG9rZW4pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhY2ssXG4gICAgbmV4dFRva2VuLFxuICAgIGVuZE9mRmlsZSxcbiAgICBwb3NpdGlvblxuICB9XG59XG4iXSwiZmlsZSI6InRva2VuaXplLmpzIn0=
  16494. /***/ }),
  16495. /* 91 */
  16496. /***/ (function(module, exports, __webpack_require__) {
  16497. "use strict";
  16498. exports.__esModule = true;
  16499. exports.default = void 0;
  16500. var _path = _interopRequireDefault(__webpack_require__(3));
  16501. var _cssSyntaxError = _interopRequireDefault(__webpack_require__(34));
  16502. var _previousMap = _interopRequireDefault(__webpack_require__(92));
  16503. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  16504. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  16505. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  16506. var sequence = 0;
  16507. /**
  16508. * Represents the source CSS.
  16509. *
  16510. * @example
  16511. * const root = postcss.parse(css, { from: file })
  16512. * const input = root.source.input
  16513. */
  16514. var Input = /*#__PURE__*/function () {
  16515. /**
  16516. * @param {string} css Input CSS source.
  16517. * @param {object} [opts] {@link Processor#process} options.
  16518. */
  16519. function Input(css, opts) {
  16520. if (opts === void 0) {
  16521. opts = {};
  16522. }
  16523. if (css === null || typeof css === 'undefined' || typeof css === 'object' && !css.toString) {
  16524. throw new Error("PostCSS received " + css + " instead of CSS string");
  16525. }
  16526. /**
  16527. * Input CSS source
  16528. *
  16529. * @type {string}
  16530. *
  16531. * @example
  16532. * const input = postcss.parse('a{}', { from: file }).input
  16533. * input.css //=> "a{}"
  16534. */
  16535. this.css = css.toString();
  16536. if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
  16537. this.hasBOM = true;
  16538. this.css = this.css.slice(1);
  16539. } else {
  16540. this.hasBOM = false;
  16541. }
  16542. if (opts.from) {
  16543. if (/^\w+:\/\//.test(opts.from) || _path.default.isAbsolute(opts.from)) {
  16544. /**
  16545. * The absolute path to the CSS source file defined
  16546. * with the `from` option.
  16547. *
  16548. * @type {string}
  16549. *
  16550. * @example
  16551. * const root = postcss.parse(css, { from: 'a.css' })
  16552. * root.source.input.file //=> '/home/ai/a.css'
  16553. */
  16554. this.file = opts.from;
  16555. } else {
  16556. this.file = _path.default.resolve(opts.from);
  16557. }
  16558. }
  16559. var map = new _previousMap.default(this.css, opts);
  16560. if (map.text) {
  16561. /**
  16562. * The input source map passed from a compilation step before PostCSS
  16563. * (for example, from Sass compiler).
  16564. *
  16565. * @type {PreviousMap}
  16566. *
  16567. * @example
  16568. * root.source.input.map.consumer().sources //=> ['a.sass']
  16569. */
  16570. this.map = map;
  16571. var file = map.consumer().file;
  16572. if (!this.file && file) this.file = this.mapResolve(file);
  16573. }
  16574. if (!this.file) {
  16575. sequence += 1;
  16576. /**
  16577. * The unique ID of the CSS source. It will be created if `from` option
  16578. * is not provided (because PostCSS does not know the file path).
  16579. *
  16580. * @type {string}
  16581. *
  16582. * @example
  16583. * const root = postcss.parse(css)
  16584. * root.source.input.file //=> undefined
  16585. * root.source.input.id //=> "<input css 1>"
  16586. */
  16587. this.id = '<input css ' + sequence + '>';
  16588. }
  16589. if (this.map) this.map.file = this.from;
  16590. }
  16591. var _proto = Input.prototype;
  16592. _proto.error = function error(message, line, column, opts) {
  16593. if (opts === void 0) {
  16594. opts = {};
  16595. }
  16596. var result;
  16597. var origin = this.origin(line, column);
  16598. if (origin) {
  16599. result = new _cssSyntaxError.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);
  16600. } else {
  16601. result = new _cssSyntaxError.default(message, line, column, this.css, this.file, opts.plugin);
  16602. }
  16603. result.input = {
  16604. line: line,
  16605. column: column,
  16606. source: this.css
  16607. };
  16608. if (this.file) result.input.file = this.file;
  16609. return result;
  16610. }
  16611. /**
  16612. * Reads the input source map and returns a symbol position
  16613. * in the input source (e.g., in a Sass file that was compiled
  16614. * to CSS before being passed to PostCSS).
  16615. *
  16616. * @param {number} line Line in input CSS.
  16617. * @param {number} column Column in input CSS.
  16618. *
  16619. * @return {filePosition} Position in input source.
  16620. *
  16621. * @example
  16622. * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
  16623. */
  16624. ;
  16625. _proto.origin = function origin(line, column) {
  16626. if (!this.map) return false;
  16627. var consumer = this.map.consumer();
  16628. var from = consumer.originalPositionFor({
  16629. line: line,
  16630. column: column
  16631. });
  16632. if (!from.source) return false;
  16633. var result = {
  16634. file: this.mapResolve(from.source),
  16635. line: from.line,
  16636. column: from.column
  16637. };
  16638. var source = consumer.sourceContentFor(from.source);
  16639. if (source) result.source = source;
  16640. return result;
  16641. };
  16642. _proto.mapResolve = function mapResolve(file) {
  16643. if (/^\w+:\/\//.test(file)) {
  16644. return file;
  16645. }
  16646. return _path.default.resolve(this.map.consumer().sourceRoot || '.', file);
  16647. }
  16648. /**
  16649. * The CSS source identifier. Contains {@link Input#file} if the user
  16650. * set the `from` option, or {@link Input#id} if they did not.
  16651. *
  16652. * @type {string}
  16653. *
  16654. * @example
  16655. * const root = postcss.parse(css, { from: 'a.css' })
  16656. * root.source.input.from //=> "/home/ai/a.css"
  16657. *
  16658. * const root = postcss.parse(css)
  16659. * root.source.input.from //=> "<input css 1>"
  16660. */
  16661. ;
  16662. _createClass(Input, [{
  16663. key: "from",
  16664. get: function get() {
  16665. return this.file || this.id;
  16666. }
  16667. }]);
  16668. return Input;
  16669. }();
  16670. var _default = Input;
  16671. /**
  16672. * @typedef {object} filePosition
  16673. * @property {string} file Path to file.
  16674. * @property {number} line Source line in file.
  16675. * @property {number} column Source column in file.
  16676. */
  16677. exports.default = _default;
  16678. module.exports = exports.default;
  16679. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmVzNiJdLCJuYW1lcyI6WyJzZXF1ZW5jZSIsIklucHV0IiwiY3NzIiwib3B0cyIsInRvU3RyaW5nIiwiRXJyb3IiLCJoYXNCT00iLCJzbGljZSIsImZyb20iLCJ0ZXN0IiwicGF0aCIsImlzQWJzb2x1dGUiLCJmaWxlIiwicmVzb2x2ZSIsIm1hcCIsIlByZXZpb3VzTWFwIiwidGV4dCIsImNvbnN1bWVyIiwibWFwUmVzb2x2ZSIsImlkIiwiZXJyb3IiLCJtZXNzYWdlIiwibGluZSIsImNvbHVtbiIsInJlc3VsdCIsIm9yaWdpbiIsIkNzc1N5bnRheEVycm9yIiwic291cmNlIiwicGx1Z2luIiwiaW5wdXQiLCJvcmlnaW5hbFBvc2l0aW9uRm9yIiwic291cmNlQ29udGVudEZvciIsInNvdXJjZVJvb3QiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLENBQWY7QUFFQTs7Ozs7Ozs7SUFPTUMsSztBQUNKOzs7O0FBSUEsaUJBQWFDLEdBQWIsRUFBa0JDLElBQWxCLEVBQThCO0FBQUEsUUFBWkEsSUFBWTtBQUFaQSxNQUFBQSxJQUFZLEdBQUwsRUFBSztBQUFBOztBQUM1QixRQUNFRCxHQUFHLEtBQUssSUFBUixJQUNBLE9BQU9BLEdBQVAsS0FBZSxXQURmLElBRUMsT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkIsQ0FBQ0EsR0FBRyxDQUFDRSxRQUhuQyxFQUlFO0FBQ0EsWUFBTSxJQUFJQyxLQUFKLHVCQUErQkgsR0FBL0IsNEJBQU47QUFDRDtBQUVEOzs7Ozs7Ozs7OztBQVNBLFNBQUtBLEdBQUwsR0FBV0EsR0FBRyxDQUFDRSxRQUFKLEVBQVg7O0FBRUEsUUFBSSxLQUFLRixHQUFMLENBQVMsQ0FBVCxNQUFnQixRQUFoQixJQUE0QixLQUFLQSxHQUFMLENBQVMsQ0FBVCxNQUFnQixRQUFoRCxFQUEwRDtBQUN4RCxXQUFLSSxNQUFMLEdBQWMsSUFBZDtBQUNBLFdBQUtKLEdBQUws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bUJBQVQsQ0FBNkI7QUFBRVIsTUFBQUEsSUFBSSxFQUFKQSxJQUFGO0FBQVFDLE1BQUFBLE1BQU0sRUFBTkE7QUFBUixLQUE3QixDQUFYO0FBQ0EsUUFBSSxDQUFDZixJQUFJLENBQUNtQixNQUFWLEVBQWtCLE9BQU8sS0FBUDtBQUVsQixRQUFJSCxNQUFNLEdBQUc7QUFDWFosTUFBQUEsSUFBSSxFQUFFLEtBQUtNLFVBQUwsQ0FBZ0JWLElBQUksQ0FBQ21CLE1BQXJCLENBREs7QUFFWEwsTUFBQUEsSUFBSSxFQUFFZCxJQUFJLENBQUNjLElBRkE7QUFHWEMsTUFBQUEsTUFBTSxFQUFFZixJQUFJLENBQUNlO0FBSEYsS0FBYjtBQU1BLFFBQUlJLE1BQU0sR0FBR1YsUUFBUSxDQUFDYyxnQkFBVCxDQUEwQnZCLElBQUksQ0FBQ21CLE1BQS9CLENBQWI7QUFDQSxRQUFJQSxNQUFKLEVBQVlILE1BQU0sQ0FBQ0csTUFBUCxHQUFnQkEsTUFBaEI7QUFFWixXQUFPSCxNQUFQO0FBQ0QsRzs7U0FFRE4sVSxHQUFBLG9CQUFZTixJQUFaLEVBQWtCO0FBQ2hCLFFBQUksWUFBWUgsSUFBWixDQUFpQkcsSUFBakIsQ0FBSixFQUE0QjtBQUMxQixhQUFPQSxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT0YsY0FBS0csT0FBTCxDQUFhLEtBQUtDLEdBQUwsQ0FBU0csUUFBVCxHQUFvQmUsVUFBcEIsSUFBa0MsR0FBL0MsRUFBb0RwQixJQUFwRCxDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBYVk7QUFDVixhQUFPLEtBQUtBLElBQUwsSUFBYSxLQUFLTyxFQUF6QjtBQUNEOzs7Ozs7ZUFHWWxCLEs7QUFFZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCBDc3NTeW50YXhFcnJvciBmcm9tICcuL2Nzcy1zeW50YXgtZXJyb3InXG5pbXBvcnQgUHJldmlvdXNNYXAgZnJvbSAnLi9wcmV2aW91cy1tYXAnXG5cbmxldCBzZXF1ZW5jZSA9IDBcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzb3VyY2UgQ1NTLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ICA9IHBvc3Rjc3MucGFyc2UoY3NzLCB7IGZyb206IGZpbGUgfSlcbiAqIGNvbnN0IGlucHV0ID0gcm9vdC5zb3VyY2UuaW5wdXRcbiAqL1xuY2xhc3MgSW5wdXQge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNzcyAgICBJbnB1dCBDU1Mgc291cmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIHtAbGluayBQcm9jZXNzb3IjcHJvY2Vzc30gb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChjc3MsIG9wdHMgPSB7IH0pIHtcbiAgICBpZiAoXG4gICAgICBjc3MgPT09IG51bGwgfHxcbiAgICAgIHR5cGVvZiBjc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAodHlwZW9mIGNzcyA9PT0gJ29iamVjdCcgJiYgIWNzcy50b1N0cmluZylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG9zdENTUyByZWNlaXZlZCAkeyBjc3MgfSBpbnN0ZWFkIG9mIENTUyBzdHJpbmdgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElucHV0IENTUyBzb3VyY2VcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGlucHV0ID0gcG9zdGNzcy5wYXJzZSgnYXt9JywgeyBmcm9tOiBmaWxlIH0pLmlucHV0XG4gICAgICogaW5wdXQuY3NzIC8vPT4gXCJhe31cIlxuICAgICAqL1xuICAgIHRoaXMuY3NzID0gY3NzLnRvU3RyaW5nKClcblxuICAgIGlmICh0aGlzLmNzc1swXSA9PT0gJ1xcdUZFRkYnIHx8IHRoaXMuY3NzWzBdID09PSAnXFx1RkZGRScpIHtcbiAgICAgIHRoaXMuaGFzQk9NID0gdHJ1ZVxuICAgICAgdGhpcy5jc3MgPSB0aGlzLmNzcy5zbGljZSgxKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc0JPTSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZnJvbSkge1xuICAgICAgaWYgKC9eXFx3KzpcXC9cXC8vLnRlc3Qob3B0cy5mcm9tKSB8fCBwYXRoLmlzQWJzb2x1dGUob3B0cy5mcm9tKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIENTUyBzb3VyY2UgZmlsZSBkZWZpbmVkXG4gICAgICAgICAqIHdpdGggdGhlIGBmcm9tYCBvcHRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiAnYS5jc3MnIH0pXG4gICAgICAgICAqIHJvb3Quc291cmNlLmlucHV0LmZpbGUgLy89PiAnL2hvbWUvYWkvYS5jc3MnXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGUgPSBvcHRzLmZyb21cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZSA9IHBhdGgucmVzb2x2ZShvcHRzLmZyb20pXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1hcCA9IG5ldyBQcmV2aW91c01hcCh0aGlzLmNzcywgb3B0cylcbiAgICBpZiAobWFwLnRleHQpIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGlucHV0IHNvdXJjZSBtYXAgcGFzc2VkIGZyb20gYSBjb21waWxhdGlvbiBzdGVwIGJlZm9yZSBQb3N0Q1NTXG4gICAgICAgKiAoZm9yIGV4YW1wbGUsIGZyb20gU2FzcyBjb21waWxlcikuXG4gICAgICAgKlxuICAgICAgICogQHR5cGUge1ByZXZpb3VzTWFwfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5tYXAuY29uc3VtZXIoKS5zb3VyY2VzIC8vPT4gWydhLnNhc3MnXVxuICAgICAgICovXG4gICAgICB0aGlzLm1hcCA9IG1hcFxuICAgICAgbGV0IGZpbGUgPSBtYXAuY29uc3VtZXIoKS5maWxlXG4gICAgICBpZiAoIXRoaXMuZmlsZSAmJiBmaWxlKSB0aGlzLmZpbGUgPSB0aGlzLm1hcFJlc29sdmUoZmlsZSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsZSkge1xuICAgICAgc2VxdWVuY2UgKz0gMVxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBDU1Mgc291cmNlLiBJdCB3aWxsIGJlIGNyZWF0ZWQgaWYgYGZyb21gIG9wdGlvblxuICAgICAgICogaXMgbm90IHByb3ZpZGVkIChiZWNhdXNlIFBvc3RDU1MgZG9lcyBub3Qga25vdyB0aGUgZmlsZSBwYXRoKS5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5maWxlIC8vPT4gdW5kZWZpbmVkXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5pZCAgIC8vPT4gXCI8aW5wdXQgY3NzIDE+XCJcbiAgICAgICAqL1xuICAgICAgdGhpcy5pZCA9ICc8aW5wdXQgY3NzICcgKyBzZXF1ZW5jZSArICc+J1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXApIHRoaXMubWFwLmZpbGUgPSB0aGlzLmZyb21cbiAgfVxuXG4gIGVycm9yIChtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIG9wdHMgPSB7IH0pIHtcbiAgICBsZXQgcmVzdWx0XG4gICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luKGxpbmUsIGNvbHVtbilcbiAgICBpZiAob3JpZ2luKSB7XG4gICAgICByZXN1bHQgPSBuZXcgQ3NzU3ludGF4RXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsIG9yaWdpbi5saW5lLCBvcmlnaW4uY29sdW1uLFxuICAgICAgICBvcmlnaW4uc291cmNlLCBvcmlnaW4uZmlsZSwgb3B0cy5wbHVnaW5cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gbmV3IENzc1N5bnRheEVycm9yKFxuICAgICAgICBtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHRoaXMuY3NzLCB0aGlzLmZpbGUsIG9wdHMucGx1Z2luKVxuICAgIH1cblxuICAgIHJlc3VsdC5pbnB1dCA9IHsgbGluZSwgY29sdW1uLCBzb3VyY2U6IHRoaXMuY3NzIH1cbiAgICBpZiAodGhpcy5maWxlKSByZXN1bHQuaW5wdXQuZmlsZSA9IHRoaXMuZmlsZVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBpbnB1dCBzb3VyY2UgbWFwIGFuZCByZXR1cm5zIGEgc3ltYm9sIHBvc2l0aW9uXG4gICAqIGluIHRoZSBpbnB1dCBzb3VyY2UgKGUuZy4sIGluIGEgU2FzcyBmaWxlIHRoYXQgd2FzIGNvbXBpbGVkXG4gICAqIHRvIENTUyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIFBvc3RDU1MpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGluZSAgIExpbmUgaW4gaW5wdXQgQ1NTLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIENvbHVtbiBpbiBpbnB1dCBDU1MuXG4gICAqXG4gICAqIEByZXR1cm4ge2ZpbGVQb3NpdGlvbn0gUG9zaXRpb24gaW4gaW5wdXQgc291cmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByb290LnNvdXJjZS5pbnB1dC5vcmlnaW4oMSwgMSkgLy89PiB7IGZpbGU6ICdhLmNzcycsIGxpbmU6IDMsIGNvbHVtbjogMSB9XG4gICAqL1xuICBvcmlnaW4gKGxpbmUsIGNvbHVtbikge1xuICAgIGlmICghdGhpcy5tYXApIHJldHVybiBmYWxzZVxuICAgIGxldCBjb25zdW1lciA9IHRoaXMubWFwLmNvbnN1bWVyKClcblxuICAgIGxldCBmcm9tID0gY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7IGxpbmUsIGNvbHVtbiB9KVxuICAgIGlmICghZnJvbS5zb3VyY2UpIHJldHVybiBmYWxzZVxuXG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGZpbGU6IHRoaXMubWFwUmVzb2x2ZShmcm9tLnNvdXJjZSksXG4gICAgICBsaW5lOiBmcm9tLmxpbmUsXG4gICAgICBjb2x1bW46IGZyb20uY29sdW1uXG4gICAgfVxuXG4gICAgbGV0IHNvdXJjZSA9IGNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoZnJvbS5zb3VyY2UpXG4gICAgaWYgKHNvdXJjZSkgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbWFwUmVzb2x2ZSAoZmlsZSkge1xuICAgIGlmICgvXlxcdys6XFwvXFwvLy50ZXN0KGZpbGUpKSB7XG4gICAgICByZXR1cm4gZmlsZVxuICAgIH1cbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdCB8fCAnLicsIGZpbGUpXG4gIH1cblxuICAvKipcbiAgICogVGhlIENTUyBzb3VyY2UgaWRlbnRpZmllci4gQ29udGFpbnMge0BsaW5rIElucHV0I2ZpbGV9IGlmIHRoZSB1c2VyXG4gICAqIHNldCB0aGUgYGZyb21gIG9wdGlvbiwgb3Ige0BsaW5rIElucHV0I2lkfSBpZiB0aGV5IGRpZCBub3QuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiAnYS5jc3MnIH0pXG4gICAqIHJvb3Quc291cmNlLmlucHV0LmZyb20gLy89PiBcIi9ob21lL2FpL2EuY3NzXCJcbiAgICpcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoY3NzKVxuICAgKiByb290LnNvdXJjZS5pbnB1dC5mcm9tIC8vPT4gXCI8aW5wdXQgY3NzIDE+XCJcbiAgICovXG4gIGdldCBmcm9tICgpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlIHx8IHRoaXMuaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnB1dFxuXG4vKipcbiAqIEB0eXBlZGVmICB7b2JqZWN0fSBmaWxlUG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlICAgUGF0aCB0byBmaWxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxpbmUgICBTb3VyY2UgbGluZSBpbiBmaWxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbHVtbiBTb3VyY2UgY29sdW1uIGluIGZpbGUuXG4gKi9cbiJdLCJmaWxlIjoiaW5wdXQuanMifQ==
  16680. /***/ }),
  16681. /* 92 */
  16682. /***/ (function(module, exports, __webpack_require__) {
  16683. "use strict";
  16684. /* WEBPACK VAR INJECTION */(function(Buffer) {
  16685. exports.__esModule = true;
  16686. exports.default = void 0;
  16687. var _sourceMap = _interopRequireDefault(__webpack_require__(39));
  16688. var _path = _interopRequireDefault(__webpack_require__(3));
  16689. var _fs = _interopRequireDefault(__webpack_require__(93));
  16690. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  16691. function fromBase64(str) {
  16692. if (Buffer) {
  16693. return Buffer.from(str, 'base64').toString();
  16694. } else {
  16695. return window.atob(str);
  16696. }
  16697. }
  16698. /**
  16699. * Source map information from input CSS.
  16700. * For example, source map after Sass compiler.
  16701. *
  16702. * This class will automatically find source map in input CSS or in file system
  16703. * near input file (according `from` option).
  16704. *
  16705. * @example
  16706. * const root = postcss.parse(css, { from: 'a.sass.css' })
  16707. * root.input.map //=> PreviousMap
  16708. */
  16709. var PreviousMap = /*#__PURE__*/function () {
  16710. /**
  16711. * @param {string} css Input CSS source.
  16712. * @param {processOptions} [opts] {@link Processor#process} options.
  16713. */
  16714. function PreviousMap(css, opts) {
  16715. this.loadAnnotation(css);
  16716. /**
  16717. * Was source map inlined by data-uri to input CSS.
  16718. *
  16719. * @type {boolean}
  16720. */
  16721. this.inline = this.startWith(this.annotation, 'data:');
  16722. var prev = opts.map ? opts.map.prev : undefined;
  16723. var text = this.loadMap(opts.from, prev);
  16724. if (text) this.text = text;
  16725. }
  16726. /**
  16727. * Create a instance of `SourceMapGenerator` class
  16728. * from the `source-map` library to work with source map information.
  16729. *
  16730. * It is lazy method, so it will create object only on first call
  16731. * and then it will use cache.
  16732. *
  16733. * @return {SourceMapGenerator} Object with source map information.
  16734. */
  16735. var _proto = PreviousMap.prototype;
  16736. _proto.consumer = function consumer() {
  16737. if (!this.consumerCache) {
  16738. this.consumerCache = new _sourceMap.default.SourceMapConsumer(this.text);
  16739. }
  16740. return this.consumerCache;
  16741. }
  16742. /**
  16743. * Does source map contains `sourcesContent` with input source text.
  16744. *
  16745. * @return {boolean} Is `sourcesContent` present.
  16746. */
  16747. ;
  16748. _proto.withContent = function withContent() {
  16749. return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
  16750. };
  16751. _proto.startWith = function startWith(string, start) {
  16752. if (!string) return false;
  16753. return string.substr(0, start.length) === start;
  16754. };
  16755. _proto.getAnnotationURL = function getAnnotationURL(sourceMapString) {
  16756. return sourceMapString.match(/\/\*\s*# sourceMappingURL=((?:(?!sourceMappingURL=).)*)\*\//)[1].trim();
  16757. };
  16758. _proto.loadAnnotation = function loadAnnotation(css) {
  16759. var annotations = css.match(/\/\*\s*# sourceMappingURL=(?:(?!sourceMappingURL=).)*\*\//gm);
  16760. if (annotations && annotations.length > 0) {
  16761. // Locate the last sourceMappingURL to avoid picking up
  16762. // sourceMappingURLs from comments, strings, etc.
  16763. var lastAnnotation = annotations[annotations.length - 1];
  16764. if (lastAnnotation) {
  16765. this.annotation = this.getAnnotationURL(lastAnnotation);
  16766. }
  16767. }
  16768. };
  16769. _proto.decodeInline = function decodeInline(text) {
  16770. var baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
  16771. var baseUri = /^data:application\/json;base64,/;
  16772. var uri = 'data:application/json,';
  16773. if (this.startWith(text, uri)) {
  16774. return decodeURIComponent(text.substr(uri.length));
  16775. }
  16776. if (baseCharsetUri.test(text) || baseUri.test(text)) {
  16777. return fromBase64(text.substr(RegExp.lastMatch.length));
  16778. }
  16779. var encoding = text.match(/data:application\/json;([^,]+),/)[1];
  16780. throw new Error('Unsupported source map encoding ' + encoding);
  16781. };
  16782. _proto.loadMap = function loadMap(file, prev) {
  16783. if (prev === false) return false;
  16784. if (prev) {
  16785. if (typeof prev === 'string') {
  16786. return prev;
  16787. } else if (typeof prev === 'function') {
  16788. var prevPath = prev(file);
  16789. if (prevPath && _fs.default.existsSync && _fs.default.existsSync(prevPath)) {
  16790. return _fs.default.readFileSync(prevPath, 'utf-8').toString().trim();
  16791. } else {
  16792. throw new Error('Unable to load previous source map: ' + prevPath.toString());
  16793. }
  16794. } else if (prev instanceof _sourceMap.default.SourceMapConsumer) {
  16795. return _sourceMap.default.SourceMapGenerator.fromSourceMap(prev).toString();
  16796. } else if (prev instanceof _sourceMap.default.SourceMapGenerator) {
  16797. return prev.toString();
  16798. } else if (this.isMap(prev)) {
  16799. return JSON.stringify(prev);
  16800. } else {
  16801. throw new Error('Unsupported previous source map format: ' + prev.toString());
  16802. }
  16803. } else if (this.inline) {
  16804. return this.decodeInline(this.annotation);
  16805. } else if (this.annotation) {
  16806. var map = this.annotation;
  16807. if (file) map = _path.default.join(_path.default.dirname(file), map);
  16808. this.root = _path.default.dirname(map);
  16809. if (_fs.default.existsSync && _fs.default.existsSync(map)) {
  16810. return _fs.default.readFileSync(map, 'utf-8').toString().trim();
  16811. } else {
  16812. return false;
  16813. }
  16814. }
  16815. };
  16816. _proto.isMap = function isMap(map) {
  16817. if (typeof map !== 'object') return false;
  16818. return typeof map.mappings === 'string' || typeof map._mappings === 'string';
  16819. };
  16820. return PreviousMap;
  16821. }();
  16822. var _default = PreviousMap;
  16823. exports.default = _default;
  16824. module.exports = exports.default;
  16825. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXZpb3VzLW1hcC5lczYiXSwibmFtZXMiOlsiZnJvbUJhc2U2NCIsInN0ciIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsIndpbmRvdyIsImF0b2IiLCJQcmV2aW91c01hcCIsImNzcyIsIm9wdHMiLCJsb2FkQW5ub3RhdGlvbiIsImlubGluZSIsInN0YXJ0V2l0aCIsImFubm90YXRpb24iLCJwcmV2IiwibWFwIiwidW5kZWZpbmVkIiwidGV4dCIsImxvYWRNYXAiLCJjb25zdW1lciIsImNvbnN1bWVyQ2FjaGUiLCJtb3ppbGxhIiwiU291cmNlTWFwQ29uc3VtZXIiLCJ3aXRoQ29udGVudCIsInNvdXJjZXNDb250ZW50IiwibGVuZ3RoIiwic3RyaW5nIiwic3RhcnQiLCJzdWJzdHIiLCJnZXRBbm5vdGF0aW9uVVJMIiwic291cmNlTWFwU3RyaW5nIiwibWF0Y2giLCJ0cmltIiwiYW5ub3RhdGlvbnMiLCJsYXN0QW5ub3RhdGlvbiIsImRlY29kZUlubGluZSIsImJhc2VDaGFyc2V0VXJpIiwiYmFzZVVyaSIsInVyaSIsImRlY29kZVVSSUNvbXBvbmVudCIsInRlc3QiLCJSZWdFeHAiLCJsYXN0TWF0Y2giLCJlbmNvZGluZyIsIkVycm9yIiwiZmlsZSIsInByZXZQYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwiU291cmNlTWFwR2VuZXJhdG9yIiwiZnJvbVNvdXJjZU1hcCIsImlzTWFwIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdGgiLCJqb2luIiwiZGlybmFtZSIsInJvb3QiLCJtYXBwaW5ncyIsIl9tYXBwaW5ncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLFNBQVNBLFVBQVQsQ0FBcUJDLEdBQXJCLEVBQTBCO0FBQ3hCLE1BQUlDLE1BQUosRUFBWTtBQUNWLFdBQU9BLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixHQUFaLEVBQWlCLFFBQWpCLEVBQTJCRyxRQUEzQixFQUFQO0FBQ0QsR0FGRCxN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QUFMLENBQWV4QyxJQUFmLENBQVA7QUFDRCxPQUZNLE1BRUE7QUFDTCxjQUFNLElBQUk4QixLQUFKLENBQ0osNkNBQTZDOUIsSUFBSSxDQUFDVixRQUFMLEVBRHpDLENBQU47QUFFRDtBQUNGLEtBckJELE1BcUJPLElBQUksS0FBS08sTUFBVCxFQUFpQjtBQUN0QixhQUFPLEtBQUt3QixZQUFMLENBQWtCLEtBQUt0QixVQUF2QixDQUFQO0FBQ0QsS0FGTSxNQUVBLElBQUksS0FBS0EsVUFBVCxFQUFxQjtBQUMxQixVQUFJRSxHQUFHLEdBQUcsS0FBS0YsVUFBZjtBQUNBLFVBQUlnQyxJQUFKLEVBQVU5QixHQUFHLEdBQUd3QyxjQUFLQyxJQUFMLENBQVVELGNBQUtFLE9BQUwsQ0FBYVosSUFBYixDQUFWLEVBQThCOUIsR0FBOUIsQ0FBTjtBQUVWLFdBQUsyQyxJQUFMLEdBQVlILGNBQUtFLE9BQUwsQ0FBYTFDLEdBQWIsQ0FBWjs7QUFDQSxVQUFJZ0MsWUFBR0MsVUFBSCxJQUFpQkQsWUFBR0MsVUFBSCxDQUFjakMsR0FBZCxDQUFyQixFQUF5QztBQUN2QyxlQUFPZ0MsWUFBR0UsWUFBSCxDQUFnQmxDLEdBQWhCLEVBQXFCLE9BQXJCLEVBQThCWCxRQUE5QixHQUF5QzRCLElBQXpDLEVBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxlQUFPLEtBQVA7QUFDRDtBQUNGO0FBQ0YsRzs7U0FFRG9CLEssR0FBQSxlQUFPckMsR0FBUCxFQUFZO0FBQ1YsUUFBSSxPQUFPQSxHQUFQLEtBQWUsUUFBbkIsRUFBNkIsT0FBTyxLQUFQO0FBQzdCLFdBQU8sT0FBT0EsR0FBRyxDQUFDNEMsUUFBWCxLQUF3QixRQUF4QixJQUFvQyxPQUFPNUMsR0FBRyxDQUFDNkMsU0FBWCxLQUF5QixRQUFwRTtBQUNELEc7Ozs7O2VBR1lyRCxXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vemlsbGEgZnJvbSAnc291cmNlLW1hcCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMnXG5cbmZ1bmN0aW9uIGZyb21CYXNlNjQgKHN0cikge1xuICBpZiAoQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2luZG93LmF0b2Ioc3RyKVxuICB9XG59XG5cbi8qKlxuICogU291cmNlIG1hcCBpbmZvcm1hdGlvbiBmcm9tIGlucHV0IENTUy5cbiAqIEZvciBleGFtcGxlLCBzb3VyY2UgbWFwIGFmdGVyIFNhc3MgY29tcGlsZXIuXG4gKlxuICogVGhpcyBjbGFzcyB3aWxsIGF1dG9tYXRpY2FsbHkgZmluZCBzb3VyY2UgbWFwIGluIGlucHV0IENTUyBvciBpbiBmaWxlIHN5c3RlbVxuICogbmVhciBpbnB1dCBmaWxlIChhY2NvcmRpbmcgYGZyb21gIG9wdGlvbikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiAnYS5zYXNzLmNzcycgfSlcbiAqIHJvb3QuaW5wdXQubWFwIC8vPT4gUHJldmlvdXNNYXBcbiAqL1xuY2xhc3MgUHJldmlvdXNNYXAge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgY3NzICAgIElucHV0IENTUyBzb3VyY2UuXG4gICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSB7QGxpbmsgUHJvY2Vzc29yI3Byb2Nlc3N9IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoY3NzLCBvcHRzKSB7XG4gICAgdGhpcy5sb2FkQW5ub3RhdGlvbihjc3MpXG4gICAgLyoqXG4gICAgICogV2FzIHNvdXJjZSBtYXAgaW5saW5lZCBieSBkYXRhLXVyaSB0byBpbnB1dCBDU1MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlubGluZSA9IHRoaXMuc3RhcnRXaXRoKHRoaXMuYW5ub3RhdGlvbiwgJ2RhdGE6JylcblxuICAgIGxldCBwcmV2ID0gb3B0cy5tYXAgPyBvcHRzLm1hcC5wcmV2IDogdW5kZWZpbmVkXG4gICAgbGV0IHRleHQgPSB0aGlzLmxvYWRNYXAob3B0cy5mcm9tLCBwcmV2KVxuICAgIGlmICh0ZXh0KSB0aGlzLnRleHQgPSB0ZXh0XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgaW5zdGFuY2Ugb2YgYFNvdXJjZU1hcEdlbmVyYXRvcmAgY2xhc3NcbiAgICogZnJvbSB0aGUgYHNvdXJjZS1tYXBgIGxpYnJhcnkgdG8gd29yayB3aXRoIHNvdXJjZSBtYXAgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEl0IGlzIGxhenkgbWV0aG9kLCBzbyBpdCB3aWxsIGNyZWF0ZSBvYmplY3Qgb25seSBvbiBmaXJzdCBjYWxsXG4gICAqIGFuZCB0aGVuIGl0IHdpbGwgdXNlIGNhY2hlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtTb3VyY2VNYXBHZW5lcmF0b3J9IE9iamVjdCB3aXRoIHNvdXJjZSBtYXAgaW5mb3JtYXRpb24uXG4gICAqL1xuICBjb25zdW1lciAoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnN1bWVyQ2FjaGUpIHtcbiAgICAgIHRoaXMuY29uc3VtZXJDYWNoZSA9IG5ldyBtb3ppbGxhLlNvdXJjZU1hcENvbnN1bWVyKHRoaXMudGV4dClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZXJDYWNoZVxuICB9XG5cbiAgLyoqXG4gICAqIERvZXMgc291cmNlIG1hcCBjb250YWlucyBgc291cmNlc0NvbnRlbnRgIHdpdGggaW5wdXQgc291cmNlIHRleHQuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IElzIGBzb3VyY2VzQ29udGVudGAgcHJlc2VudC5cbiAgICovXG4gIHdpdGhDb250ZW50ICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5jb25zdW1lcigpLnNvdXJjZXNDb250ZW50ICYmXG4gICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIoKS5zb3VyY2VzQ29udGVudC5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhcnRXaXRoIChzdHJpbmcsIHN0YXJ0KSB7XG4gICAgaWYgKCFzdHJpbmcpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIHN0YXJ0Lmxlbmd0aCkgPT09IHN0YXJ0XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVVJMIChzb3VyY2VNYXBTdHJpbmcpIHtcbiAgICByZXR1cm4gc291cmNlTWFwU3RyaW5nXG4gICAgICAubWF0Y2goL1xcL1xcKlxccyojIHNvdXJjZU1hcHBpbmdVUkw9KCg/Oig/IXNvdXJjZU1hcHBpbmdVUkw9KS4pKilcXCpcXC8vKVsxXVxuICAgICAgLnRyaW0oKVxuICB9XG5cbiAgbG9hZEFubm90YXRpb24gKGNzcykge1xuICAgIGxldCBhbm5vdGF0aW9ucyA9IGNzcy5tYXRjaChcbiAgICAgIC9cXC9cXCpcXHMqIyBzb3VyY2VNYXBwaW5nVVJMPSg/Oig/IXNvdXJjZU1hcHBpbmdVUkw9KS4pKlxcKlxcLy9nbVxuICAgIClcblxuICAgIGlmIChhbm5vdGF0aW9ucyAmJiBhbm5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBMb2NhdGUgdGhlIGxhc3Qgc291cmNlTWFwcGluZ1VSTCB0byBhdm9pZCBwaWNraW5nIHVwXG4gICAgICAvLyBzb3VyY2VNYXBwaW5nVVJMcyBmcm9tIGNvbW1lbnRzLCBzdHJpbmdzLCBldGMuXG4gICAgICBsZXQgbGFzdEFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9ucy5sZW5ndGggLSAxXVxuICAgICAgaWYgKGxhc3RBbm5vdGF0aW9uKSB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbiA9IHRoaXMuZ2V0QW5ub3RhdGlvblVSTChsYXN0QW5ub3RhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWNvZGVJbmxpbmUgKHRleHQpIHtcbiAgICBsZXQgYmFzZUNoYXJzZXRVcmkgPSAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uO2NoYXJzZXQ9dXRmLT84O2Jhc2U2NCwvXG4gICAgbGV0IGJhc2VVcmkgPSAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uO2Jhc2U2NCwvXG4gICAgbGV0IHVyaSA9ICdkYXRhOmFwcGxpY2F0aW9uL2pzb24sJ1xuXG4gICAgaWYgKHRoaXMuc3RhcnRXaXRoKHRleHQsIHVyaSkpIHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodGV4dC5zdWJzdHIodXJpLmxlbmd0aCkpXG4gICAgfVxuXG4gICAgaWYgKGJhc2VDaGFyc2V0VXJpLnRlc3QodGV4dCkgfHwgYmFzZVVyaS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gZnJvbUJhc2U2NCh0ZXh0LnN1YnN0cihSZWdFeHAubGFzdE1hdGNoLmxlbmd0aCkpXG4gICAgfVxuXG4gICAgbGV0IGVuY29kaW5nID0gdGV4dC5tYXRjaCgvZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFteLF0rKSwvKVsxXVxuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc291cmNlIG1hcCBlbmNvZGluZyAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBsb2FkTWFwIChmaWxlLCBwcmV2KSB7XG4gICAgaWYgKHByZXYgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICBpZiAodHlwZW9mIHByZXYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwcmV2XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcmV2ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBwcmV2UGF0aCA9IHByZXYoZmlsZSlcbiAgICAgICAgaWYgKHByZXZQYXRoICYmIGZzLmV4aXN0c1N5bmMgJiYgZnMuZXhpc3RzU3luYyhwcmV2UGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHByZXZQYXRoLCAndXRmLTgnKS50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdVbmFibGUgdG8gbG9hZCBwcmV2aW91cyBzb3VyY2UgbWFwOiAnICsgcHJldlBhdGgudG9TdHJpbmcoKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcmV2IGluc3RhbmNlb2YgbW96aWxsYS5Tb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICByZXR1cm4gbW96aWxsYS5Tb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcChwcmV2KS50b1N0cmluZygpXG4gICAgICB9IGVsc2UgaWYgKHByZXYgaW5zdGFuY2VvZiBtb3ppbGxhLlNvdXJjZU1hcEdlbmVyYXRvcikge1xuICAgICAgICByZXR1cm4gcHJldi50b1N0cmluZygpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNNYXAocHJldikpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXYpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1Vuc3VwcG9ydGVkIHByZXZpb3VzIHNvdXJjZSBtYXAgZm9ybWF0OiAnICsgcHJldi50b1N0cmluZygpKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZUlubGluZSh0aGlzLmFubm90YXRpb24pXG4gICAgfSBlbHNlIGlmICh0aGlzLmFubm90YXRpb24pIHtcbiAgICAgIGxldCBtYXAgPSB0aGlzLmFubm90YXRpb25cbiAgICAgIGlmIChmaWxlKSBtYXAgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGZpbGUpLCBtYXApXG5cbiAgICAgIHRoaXMucm9vdCA9IHBhdGguZGlybmFtZShtYXApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyAmJiBmcy5leGlzdHNTeW5jKG1hcCkpIHtcbiAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhtYXAsICd1dGYtOCcpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc01hcCAobWFwKSB7XG4gICAgaWYgKHR5cGVvZiBtYXAgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gdHlwZW9mIG1hcC5tYXBwaW5ncyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hcC5fbWFwcGluZ3MgPT09ICdzdHJpbmcnXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJldmlvdXNNYXBcbiJdLCJmaWxlIjoicHJldmlvdXMtbWFwLmpzIn0=
  16826. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(38).Buffer))
  16827. /***/ }),
  16828. /* 93 */
  16829. /***/ (function(module, exports) {
  16830. /* (ignored) */
  16831. /***/ }),
  16832. /* 94 */
  16833. /***/ (function(module, exports, __webpack_require__) {
  16834. "use strict";
  16835. exports.__esModule = true;
  16836. exports.default = void 0;
  16837. /**
  16838. * Contains helpers for working with vendor prefixes.
  16839. *
  16840. * @example
  16841. * const vendor = postcss.vendor
  16842. *
  16843. * @namespace vendor
  16844. */
  16845. var vendor = {
  16846. /**
  16847. * Returns the vendor prefix extracted from an input string.
  16848. *
  16849. * @param {string} prop String with or without vendor prefix.
  16850. *
  16851. * @return {string} vendor prefix or empty string
  16852. *
  16853. * @example
  16854. * postcss.vendor.prefix('-moz-tab-size') //=> '-moz-'
  16855. * postcss.vendor.prefix('tab-size') //=> ''
  16856. */
  16857. prefix: function prefix(prop) {
  16858. var match = prop.match(/^(-\w+-)/);
  16859. if (match) {
  16860. return match[0];
  16861. }
  16862. return '';
  16863. },
  16864. /**
  16865. * Returns the input string stripped of its vendor prefix.
  16866. *
  16867. * @param {string} prop String with or without vendor prefix.
  16868. *
  16869. * @return {string} String name without vendor prefixes.
  16870. *
  16871. * @example
  16872. * postcss.vendor.unprefixed('-moz-tab-size') //=> 'tab-size'
  16873. */
  16874. unprefixed: function unprefixed(prop) {
  16875. return prop.replace(/^-\w+-/, '');
  16876. }
  16877. };
  16878. var _default = vendor;
  16879. exports.default = _default;
  16880. module.exports = exports.default;
  16881. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZlbmRvci5lczYiXSwibmFtZXMiOlsidmVuZG9yIiwicHJlZml4IiwicHJvcCIsIm1hdGNoIiwidW5wcmVmaXhlZCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7O0FBUUEsSUFBSUEsTUFBTSxHQUFHO0FBRVg7Ozs7Ozs7Ozs7O0FBV0FDLEVBQUFBLE1BYlcsa0JBYUhDLElBYkcsRUFhRztBQUNaLFFBQUlDLEtBQUssR0FBR0QsSUFBSSxDQUFDQyxLQUFMLENBQVcsVUFBWCxDQUFaOztBQUNBLFFBQUlBLEtBQUosRUFBVztBQUNULGFBQU9BLEtBQUssQ0FBQyxDQUFELENBQVo7QUFDRDs7QUFFRCxXQUFPLEVBQVA7QUFDRCxHQXBCVTs7QUFzQlg7Ozs7Ozs7Ozs7QUFVQUMsRUFBQUEsVUFoQ1csc0JBZ0NDRixJQWhDRCxFQWdDTztBQUNoQixXQUFPQSxJQUFJLENBQUNHLE9BQUwsQ0FBYSxRQUFiLEVBQXVCLEVBQXZCLENBQVA7QUFDRDtBQWxDVSxDQUFiO2VBc0NlTCxNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWlucyBoZWxwZXJzIGZvciB3b3JraW5nIHdpdGggdmVuZG9yIHByZWZpeGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB2ZW5kb3IgPSBwb3N0Y3NzLnZlbmRvclxuICpcbiAqIEBuYW1lc3BhY2UgdmVuZG9yXG4gKi9cbmxldCB2ZW5kb3IgPSB7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZlbmRvciBwcmVmaXggZXh0cmFjdGVkIGZyb20gYW4gaW5wdXQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBTdHJpbmcgd2l0aCBvciB3aXRob3V0IHZlbmRvciBwcmVmaXguXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdmVuZG9yIHByZWZpeCBvciBlbXB0eSBzdHJpbmdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcG9zdGNzcy52ZW5kb3IucHJlZml4KCctbW96LXRhYi1zaXplJykgLy89PiAnLW1vei0nXG4gICAqIHBvc3Rjc3MudmVuZG9yLnByZWZpeCgndGFiLXNpemUnKSAgICAgIC8vPT4gJydcbiAgICovXG4gIHByZWZpeCAocHJvcCkge1xuICAgIGxldCBtYXRjaCA9IHByb3AubWF0Y2goL14oLVxcdystKS8pXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbMF1cbiAgICB9XG5cbiAgICByZXR1cm4gJydcbiAgfSxcblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgc3RyaXBwZWQgb2YgaXRzIHZlbmRvciBwcmVmaXguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBTdHJpbmcgd2l0aCBvciB3aXRob3V0IHZlbmRvciBwcmVmaXguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFN0cmluZyBuYW1lIHdpdGhvdXQgdmVuZG9yIHByZWZpeGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBwb3N0Y3NzLnZlbmRvci51bnByZWZpeGVkKCctbW96LXRhYi1zaXplJykgLy89PiAndGFiLXNpemUnXG4gICAgICovXG4gIHVucHJlZml4ZWQgKHByb3ApIHtcbiAgICByZXR1cm4gcHJvcC5yZXBsYWNlKC9eLVxcdystLywgJycpXG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCB2ZW5kb3JcbiJdLCJmaWxlIjoidmVuZG9yLmpzIn0=
  16882. /***/ }),
  16883. /* 95 */
  16884. /***/ (function(module, exports, __webpack_require__) {
  16885. /**
  16886. * Less - Leaner CSS v3.13.1
  16887. * http://lesscss.org
  16888. *
  16889. * Copyright (c) 2009-2020, Alexis Sellier <self@cloudhead.net>
  16890. * Licensed under the Apache-2.0 License.
  16891. *
  16892. * @license Apache-2.0
  16893. */
  16894. (function (global, factory) {
  16895. true ? module.exports = factory() :
  16896. undefined;
  16897. }(this, (function () { 'use strict';
  16898. // Export a new default each time
  16899. var defaultOptions = (function () { return ({
  16900. /* Inline Javascript - @plugin still allowed */
  16901. javascriptEnabled: false,
  16902. /* Outputs a makefile import dependency list to stdout. */
  16903. depends: false,
  16904. /* (DEPRECATED) Compress using less built-in compression.
  16905. * This does an okay job but does not utilise all the tricks of
  16906. * dedicated css compression. */
  16907. compress: false,
  16908. /* Runs the less parser and just reports errors without any output. */
  16909. lint: false,
  16910. /* Sets available include paths.
  16911. * If the file in an @import rule does not exist at that exact location,
  16912. * less will look for it at the location(s) passed to this option.
  16913. * You might use this for instance to specify a path to a library which
  16914. * you want to be referenced simply and relatively in the less files. */
  16915. paths: [],
  16916. /* color output in the terminal */
  16917. color: true,
  16918. /* The strictImports controls whether the compiler will allow an @import inside of either
  16919. * @media blocks or (a later addition) other selector blocks.
  16920. * See: https://github.com/less/less.js/issues/656 */
  16921. strictImports: false,
  16922. /* Allow Imports from Insecure HTTPS Hosts */
  16923. insecure: false,
  16924. /* Allows you to add a path to every generated import and url in your css.
  16925. * This does not affect less import statements that are processed, just ones
  16926. * that are left in the output css. */
  16927. rootpath: '',
  16928. /* By default URLs are kept as-is, so if you import a file in a sub-directory
  16929. * that references an image, exactly the same URL will be output in the css.
  16930. * This option allows you to re-write URL's in imported files so that the
  16931. * URL is always relative to the base imported file */
  16932. rewriteUrls: false,
  16933. /* How to process math
  16934. * 0 always - eagerly try to solve all operations
  16935. * 1 parens-division - require parens for division "/"
  16936. * 2 parens | strict - require parens for all operations
  16937. * 3 strict-legacy - legacy strict behavior (super-strict)
  16938. */
  16939. math: 0,
  16940. /* Without this option, less attempts to guess at the output unit when it does maths. */
  16941. strictUnits: false,
  16942. /* Effectively the declaration is put at the top of your base Less file,
  16943. * meaning it can be used but it also can be overridden if this variable
  16944. * is defined in the file. */
  16945. globalVars: null,
  16946. /* As opposed to the global variable option, this puts the declaration at the
  16947. * end of your base file, meaning it will override anything defined in your Less file. */
  16948. modifyVars: null,
  16949. /* This option allows you to specify a argument to go on to every URL. */
  16950. urlArgs: ''
  16951. }); });
  16952. function extractId(href) {
  16953. return href.replace(/^[a-z-]+:\/+?[^\/]+/, '') // Remove protocol & domain
  16954. .replace(/[\?\&]livereload=\w+/, '') // Remove LiveReload cachebuster
  16955. .replace(/^\//, '') // Remove root /
  16956. .replace(/\.[a-zA-Z]+$/, '') // Remove simple extension
  16957. .replace(/[^\.\w-]+/g, '-') // Replace illegal characters
  16958. .replace(/\./g, ':'); // Replace dots with colons(for valid id)
  16959. }
  16960. function addDataAttr(options, tag) {
  16961. for (var opt in tag.dataset) {
  16962. if (tag.dataset.hasOwnProperty(opt)) {
  16963. if (opt === 'env' || opt === 'dumpLineNumbers' || opt === 'rootpath' || opt === 'errorReporting') {
  16964. options[opt] = tag.dataset[opt];
  16965. }
  16966. else {
  16967. try {
  16968. options[opt] = JSON.parse(tag.dataset[opt]);
  16969. }
  16970. catch (_) { }
  16971. }
  16972. }
  16973. }
  16974. }
  16975. var browser = {
  16976. createCSS: function (document, styles, sheet) {
  16977. // Strip the query-string
  16978. var href = sheet.href || '';
  16979. // If there is no title set, use the filename, minus the extension
  16980. var id = "less:" + (sheet.title || extractId(href));
  16981. // If this has already been inserted into the DOM, we may need to replace it
  16982. var oldStyleNode = document.getElementById(id);
  16983. var keepOldStyleNode = false;
  16984. // Create a new stylesheet node for insertion or (if necessary) replacement
  16985. var styleNode = document.createElement('style');
  16986. styleNode.setAttribute('type', 'text/css');
  16987. if (sheet.media) {
  16988. styleNode.setAttribute('media', sheet.media);
  16989. }
  16990. styleNode.id = id;
  16991. if (!styleNode.styleSheet) {
  16992. styleNode.appendChild(document.createTextNode(styles));
  16993. // If new contents match contents of oldStyleNode, don't replace oldStyleNode
  16994. keepOldStyleNode = (oldStyleNode !== null && oldStyleNode.childNodes.length > 0 && styleNode.childNodes.length > 0 &&
  16995. oldStyleNode.firstChild.nodeValue === styleNode.firstChild.nodeValue);
  16996. }
  16997. var head = document.getElementsByTagName('head')[0];
  16998. // If there is no oldStyleNode, just append; otherwise, only append if we need
  16999. // to replace oldStyleNode with an updated stylesheet
  17000. if (oldStyleNode === null || keepOldStyleNode === false) {
  17001. var nextEl = sheet && sheet.nextSibling || null;
  17002. if (nextEl) {
  17003. nextEl.parentNode.insertBefore(styleNode, nextEl);
  17004. }
  17005. else {
  17006. head.appendChild(styleNode);
  17007. }
  17008. }
  17009. if (oldStyleNode && keepOldStyleNode === false) {
  17010. oldStyleNode.parentNode.removeChild(oldStyleNode);
  17011. }
  17012. // For IE.
  17013. // This needs to happen *after* the style element is added to the DOM, otherwise IE 7 and 8 may crash.
  17014. // See http://social.msdn.microsoft.com/Forums/en-US/7e081b65-878a-4c22-8e68-c10d39c2ed32/internet-explorer-crashes-appending-style-element-to-head
  17015. if (styleNode.styleSheet) {
  17016. try {
  17017. styleNode.styleSheet.cssText = styles;
  17018. }
  17019. catch (e) {
  17020. throw new Error('Couldn\'t reassign styleSheet.cssText.');
  17021. }
  17022. }
  17023. },
  17024. currentScript: function (window) {
  17025. var document = window.document;
  17026. return document.currentScript || (function () {
  17027. var scripts = document.getElementsByTagName('script');
  17028. return scripts[scripts.length - 1];
  17029. })();
  17030. }
  17031. };
  17032. var addDefaultOptions = (function (window, options) {
  17033. // use options from the current script tag data attribues
  17034. addDataAttr(options, browser.currentScript(window));
  17035. if (options.isFileProtocol === undefined) {
  17036. options.isFileProtocol = /^(file|(chrome|safari)(-extension)?|resource|qrc|app):/.test(window.location.protocol);
  17037. }
  17038. // Load styles asynchronously (default: false)
  17039. //
  17040. // This is set to `false` by default, so that the body
  17041. // doesn't start loading before the stylesheets are parsed.
  17042. // Setting this to `true` can result in flickering.
  17043. //
  17044. options.async = options.async || false;
  17045. options.fileAsync = options.fileAsync || false;
  17046. // Interval between watch polls
  17047. options.poll = options.poll || (options.isFileProtocol ? 1000 : 1500);
  17048. options.env = options.env || (window.location.hostname == '127.0.0.1' ||
  17049. window.location.hostname == '0.0.0.0' ||
  17050. window.location.hostname == 'localhost' ||
  17051. (window.location.port &&
  17052. window.location.port.length > 0) ||
  17053. options.isFileProtocol ? 'development'
  17054. : 'production');
  17055. var dumpLineNumbers = /!dumpLineNumbers:(comments|mediaquery|all)/.exec(window.location.hash);
  17056. if (dumpLineNumbers) {
  17057. options.dumpLineNumbers = dumpLineNumbers[1];
  17058. }
  17059. if (options.useFileCache === undefined) {
  17060. options.useFileCache = true;
  17061. }
  17062. if (options.onReady === undefined) {
  17063. options.onReady = true;
  17064. }
  17065. if (options.relativeUrls) {
  17066. options.rewriteUrls = 'all';
  17067. }
  17068. });
  17069. /*! *****************************************************************************
  17070. Copyright (c) Microsoft Corporation.
  17071. Permission to use, copy, modify, and/or distribute this software for any
  17072. purpose with or without fee is hereby granted.
  17073. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  17074. REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  17075. AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  17076. INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  17077. LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  17078. OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  17079. PERFORMANCE OF THIS SOFTWARE.
  17080. ***************************************************************************** */
  17081. /* global Reflect, Promise */
  17082. var extendStatics = function (d, b) {
  17083. extendStatics = Object.setPrototypeOf ||
  17084. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  17085. function (d, b) { for (var p in b)
  17086. if (b.hasOwnProperty(p))
  17087. d[p] = b[p]; };
  17088. return extendStatics(d, b);
  17089. };
  17090. function __extends(d, b) {
  17091. extendStatics(d, b);
  17092. function __() { this.constructor = d; }
  17093. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  17094. }
  17095. function __spreadArrays() {
  17096. for (var s = 0, i = 0, il = arguments.length; i < il; i++)
  17097. s += arguments[i].length;
  17098. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  17099. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  17100. r[k] = a[j];
  17101. return r;
  17102. }
  17103. var colors = {
  17104. 'aliceblue': '#f0f8ff',
  17105. 'antiquewhite': '#faebd7',
  17106. 'aqua': '#00ffff',
  17107. 'aquamarine': '#7fffd4',
  17108. 'azure': '#f0ffff',
  17109. 'beige': '#f5f5dc',
  17110. 'bisque': '#ffe4c4',
  17111. 'black': '#000000',
  17112. 'blanchedalmond': '#ffebcd',
  17113. 'blue': '#0000ff',
  17114. 'blueviolet': '#8a2be2',
  17115. 'brown': '#a52a2a',
  17116. 'burlywood': '#deb887',
  17117. 'cadetblue': '#5f9ea0',
  17118. 'chartreuse': '#7fff00',
  17119. 'chocolate': '#d2691e',
  17120. 'coral': '#ff7f50',
  17121. 'cornflowerblue': '#6495ed',
  17122. 'cornsilk': '#fff8dc',
  17123. 'crimson': '#dc143c',
  17124. 'cyan': '#00ffff',
  17125. 'darkblue': '#00008b',
  17126. 'darkcyan': '#008b8b',
  17127. 'darkgoldenrod': '#b8860b',
  17128. 'darkgray': '#a9a9a9',
  17129. 'darkgrey': '#a9a9a9',
  17130. 'darkgreen': '#006400',
  17131. 'darkkhaki': '#bdb76b',
  17132. 'darkmagenta': '#8b008b',
  17133. 'darkolivegreen': '#556b2f',
  17134. 'darkorange': '#ff8c00',
  17135. 'darkorchid': '#9932cc',
  17136. 'darkred': '#8b0000',
  17137. 'darksalmon': '#e9967a',
  17138. 'darkseagreen': '#8fbc8f',
  17139. 'darkslateblue': '#483d8b',
  17140. 'darkslategray': '#2f4f4f',
  17141. 'darkslategrey': '#2f4f4f',
  17142. 'darkturquoise': '#00ced1',
  17143. 'darkviolet': '#9400d3',
  17144. 'deeppink': '#ff1493',
  17145. 'deepskyblue': '#00bfff',
  17146. 'dimgray': '#696969',
  17147. 'dimgrey': '#696969',
  17148. 'dodgerblue': '#1e90ff',
  17149. 'firebrick': '#b22222',
  17150. 'floralwhite': '#fffaf0',
  17151. 'forestgreen': '#228b22',
  17152. 'fuchsia': '#ff00ff',
  17153. 'gainsboro': '#dcdcdc',
  17154. 'ghostwhite': '#f8f8ff',
  17155. 'gold': '#ffd700',
  17156. 'goldenrod': '#daa520',
  17157. 'gray': '#808080',
  17158. 'grey': '#808080',
  17159. 'green': '#008000',
  17160. 'greenyellow': '#adff2f',
  17161. 'honeydew': '#f0fff0',
  17162. 'hotpink': '#ff69b4',
  17163. 'indianred': '#cd5c5c',
  17164. 'indigo': '#4b0082',
  17165. 'ivory': '#fffff0',
  17166. 'khaki': '#f0e68c',
  17167. 'lavender': '#e6e6fa',
  17168. 'lavenderblush': '#fff0f5',
  17169. 'lawngreen': '#7cfc00',
  17170. 'lemonchiffon': '#fffacd',
  17171. 'lightblue': '#add8e6',
  17172. 'lightcoral': '#f08080',
  17173. 'lightcyan': '#e0ffff',
  17174. 'lightgoldenrodyellow': '#fafad2',
  17175. 'lightgray': '#d3d3d3',
  17176. 'lightgrey': '#d3d3d3',
  17177. 'lightgreen': '#90ee90',
  17178. 'lightpink': '#ffb6c1',
  17179. 'lightsalmon': '#ffa07a',
  17180. 'lightseagreen': '#20b2aa',
  17181. 'lightskyblue': '#87cefa',
  17182. 'lightslategray': '#778899',
  17183. 'lightslategrey': '#778899',
  17184. 'lightsteelblue': '#b0c4de',
  17185. 'lightyellow': '#ffffe0',
  17186. 'lime': '#00ff00',
  17187. 'limegreen': '#32cd32',
  17188. 'linen': '#faf0e6',
  17189. 'magenta': '#ff00ff',
  17190. 'maroon': '#800000',
  17191. 'mediumaquamarine': '#66cdaa',
  17192. 'mediumblue': '#0000cd',
  17193. 'mediumorchid': '#ba55d3',
  17194. 'mediumpurple': '#9370d8',
  17195. 'mediumseagreen': '#3cb371',
  17196. 'mediumslateblue': '#7b68ee',
  17197. 'mediumspringgreen': '#00fa9a',
  17198. 'mediumturquoise': '#48d1cc',
  17199. 'mediumvioletred': '#c71585',
  17200. 'midnightblue': '#191970',
  17201. 'mintcream': '#f5fffa',
  17202. 'mistyrose': '#ffe4e1',
  17203. 'moccasin': '#ffe4b5',
  17204. 'navajowhite': '#ffdead',
  17205. 'navy': '#000080',
  17206. 'oldlace': '#fdf5e6',
  17207. 'olive': '#808000',
  17208. 'olivedrab': '#6b8e23',
  17209. 'orange': '#ffa500',
  17210. 'orangered': '#ff4500',
  17211. 'orchid': '#da70d6',
  17212. 'palegoldenrod': '#eee8aa',
  17213. 'palegreen': '#98fb98',
  17214. 'paleturquoise': '#afeeee',
  17215. 'palevioletred': '#d87093',
  17216. 'papayawhip': '#ffefd5',
  17217. 'peachpuff': '#ffdab9',
  17218. 'peru': '#cd853f',
  17219. 'pink': '#ffc0cb',
  17220. 'plum': '#dda0dd',
  17221. 'powderblue': '#b0e0e6',
  17222. 'purple': '#800080',
  17223. 'rebeccapurple': '#663399',
  17224. 'red': '#ff0000',
  17225. 'rosybrown': '#bc8f8f',
  17226. 'royalblue': '#4169e1',
  17227. 'saddlebrown': '#8b4513',
  17228. 'salmon': '#fa8072',
  17229. 'sandybrown': '#f4a460',
  17230. 'seagreen': '#2e8b57',
  17231. 'seashell': '#fff5ee',
  17232. 'sienna': '#a0522d',
  17233. 'silver': '#c0c0c0',
  17234. 'skyblue': '#87ceeb',
  17235. 'slateblue': '#6a5acd',
  17236. 'slategray': '#708090',
  17237. 'slategrey': '#708090',
  17238. 'snow': '#fffafa',
  17239. 'springgreen': '#00ff7f',
  17240. 'steelblue': '#4682b4',
  17241. 'tan': '#d2b48c',
  17242. 'teal': '#008080',
  17243. 'thistle': '#d8bfd8',
  17244. 'tomato': '#ff6347',
  17245. 'turquoise': '#40e0d0',
  17246. 'violet': '#ee82ee',
  17247. 'wheat': '#f5deb3',
  17248. 'white': '#ffffff',
  17249. 'whitesmoke': '#f5f5f5',
  17250. 'yellow': '#ffff00',
  17251. 'yellowgreen': '#9acd32'
  17252. };
  17253. var unitConversions = {
  17254. length: {
  17255. 'm': 1,
  17256. 'cm': 0.01,
  17257. 'mm': 0.001,
  17258. 'in': 0.0254,
  17259. 'px': 0.0254 / 96,
  17260. 'pt': 0.0254 / 72,
  17261. 'pc': 0.0254 / 72 * 12
  17262. },
  17263. duration: {
  17264. 's': 1,
  17265. 'ms': 0.001
  17266. },
  17267. angle: {
  17268. 'rad': 1 / (2 * Math.PI),
  17269. 'deg': 1 / 360,
  17270. 'grad': 1 / 400,
  17271. 'turn': 1
  17272. }
  17273. };
  17274. var data = { colors: colors, unitConversions: unitConversions };
  17275. /**
  17276. * The reason why Node is a class and other nodes simply do not extend
  17277. * from Node (since we're transpiling) is due to this issue:
  17278. *
  17279. * https://github.com/less/less.js/issues/3434
  17280. */
  17281. var Node = /** @class */ (function () {
  17282. function Node() {
  17283. this.parent = null;
  17284. this.visibilityBlocks = undefined;
  17285. this.nodeVisible = undefined;
  17286. this.rootNode = null;
  17287. this.parsed = null;
  17288. var self = this;
  17289. Object.defineProperty(this, 'currentFileInfo', {
  17290. get: function () { return self.fileInfo(); }
  17291. });
  17292. Object.defineProperty(this, 'index', {
  17293. get: function () { return self.getIndex(); }
  17294. });
  17295. }
  17296. Node.prototype.setParent = function (nodes, parent) {
  17297. function set(node) {
  17298. if (node && node instanceof Node) {
  17299. node.parent = parent;
  17300. }
  17301. }
  17302. if (Array.isArray(nodes)) {
  17303. nodes.forEach(set);
  17304. }
  17305. else {
  17306. set(nodes);
  17307. }
  17308. };
  17309. Node.prototype.getIndex = function () {
  17310. return this._index || (this.parent && this.parent.getIndex()) || 0;
  17311. };
  17312. Node.prototype.fileInfo = function () {
  17313. return this._fileInfo || (this.parent && this.parent.fileInfo()) || {};
  17314. };
  17315. Node.prototype.isRulesetLike = function () {
  17316. return false;
  17317. };
  17318. Node.prototype.toCSS = function (context) {
  17319. var strs = [];
  17320. this.genCSS(context, {
  17321. add: function (chunk, fileInfo, index) {
  17322. strs.push(chunk);
  17323. },
  17324. isEmpty: function () {
  17325. return strs.length === 0;
  17326. }
  17327. });
  17328. return strs.join('');
  17329. };
  17330. Node.prototype.genCSS = function (context, output) {
  17331. output.add(this.value);
  17332. };
  17333. Node.prototype.accept = function (visitor) {
  17334. this.value = visitor.visit(this.value);
  17335. };
  17336. Node.prototype.eval = function () { return this; };
  17337. Node.prototype._operate = function (context, op, a, b) {
  17338. switch (op) {
  17339. case '+': return a + b;
  17340. case '-': return a - b;
  17341. case '*': return a * b;
  17342. case '/': return a / b;
  17343. }
  17344. };
  17345. Node.prototype.fround = function (context, value) {
  17346. var precision = context && context.numPrecision;
  17347. // add "epsilon" to ensure numbers like 1.000000005 (represented as 1.000000004999...) are properly rounded:
  17348. return (precision) ? Number((value + 2e-16).toFixed(precision)) : value;
  17349. };
  17350. // Returns true if this node represents root of ast imported by reference
  17351. Node.prototype.blocksVisibility = function () {
  17352. if (this.visibilityBlocks == null) {
  17353. this.visibilityBlocks = 0;
  17354. }
  17355. return this.visibilityBlocks !== 0;
  17356. };
  17357. Node.prototype.addVisibilityBlock = function () {
  17358. if (this.visibilityBlocks == null) {
  17359. this.visibilityBlocks = 0;
  17360. }
  17361. this.visibilityBlocks = this.visibilityBlocks + 1;
  17362. };
  17363. Node.prototype.removeVisibilityBlock = function () {
  17364. if (this.visibilityBlocks == null) {
  17365. this.visibilityBlocks = 0;
  17366. }
  17367. this.visibilityBlocks = this.visibilityBlocks - 1;
  17368. };
  17369. // Turns on node visibility - if called node will be shown in output regardless
  17370. // of whether it comes from import by reference or not
  17371. Node.prototype.ensureVisibility = function () {
  17372. this.nodeVisible = true;
  17373. };
  17374. // Turns off node visibility - if called node will NOT be shown in output regardless
  17375. // of whether it comes from import by reference or not
  17376. Node.prototype.ensureInvisibility = function () {
  17377. this.nodeVisible = false;
  17378. };
  17379. // return values:
  17380. // false - the node must not be visible
  17381. // true - the node must be visible
  17382. // undefined or null - the node has the same visibility as its parent
  17383. Node.prototype.isVisible = function () {
  17384. return this.nodeVisible;
  17385. };
  17386. Node.prototype.visibilityInfo = function () {
  17387. return {
  17388. visibilityBlocks: this.visibilityBlocks,
  17389. nodeVisible: this.nodeVisible
  17390. };
  17391. };
  17392. Node.prototype.copyVisibilityInfo = function (info) {
  17393. if (!info) {
  17394. return;
  17395. }
  17396. this.visibilityBlocks = info.visibilityBlocks;
  17397. this.nodeVisible = info.nodeVisible;
  17398. };
  17399. return Node;
  17400. }());
  17401. Node.compare = function (a, b) {
  17402. /* returns:
  17403. -1: a < b
  17404. 0: a = b
  17405. 1: a > b
  17406. and *any* other value for a != b (e.g. undefined, NaN, -2 etc.) */
  17407. if ((a.compare) &&
  17408. // for "symmetric results" force toCSS-based comparison
  17409. // of Quoted or Anonymous if either value is one of those
  17410. !(b.type === 'Quoted' || b.type === 'Anonymous')) {
  17411. return a.compare(b);
  17412. }
  17413. else if (b.compare) {
  17414. return -b.compare(a);
  17415. }
  17416. else if (a.type !== b.type) {
  17417. return undefined;
  17418. }
  17419. a = a.value;
  17420. b = b.value;
  17421. if (!Array.isArray(a)) {
  17422. return a === b ? 0 : undefined;
  17423. }
  17424. if (a.length !== b.length) {
  17425. return undefined;
  17426. }
  17427. for (var i = 0; i < a.length; i++) {
  17428. if (Node.compare(a[i], b[i]) !== 0) {
  17429. return undefined;
  17430. }
  17431. }
  17432. return 0;
  17433. };
  17434. Node.numericCompare = function (a, b) { return a < b ? -1
  17435. : a === b ? 0
  17436. : a > b ? 1 : undefined; };
  17437. //
  17438. // RGB Colors - #ff0014, #eee
  17439. //
  17440. var Color = function (rgb, a, originalForm) {
  17441. var self = this;
  17442. //
  17443. // The end goal here, is to parse the arguments
  17444. // into an integer triplet, such as `128, 255, 0`
  17445. //
  17446. // This facilitates operations and conversions.
  17447. //
  17448. if (Array.isArray(rgb)) {
  17449. this.rgb = rgb;
  17450. }
  17451. else if (rgb.length >= 6) {
  17452. this.rgb = [];
  17453. rgb.match(/.{2}/g).map(function (c, i) {
  17454. if (i < 3) {
  17455. self.rgb.push(parseInt(c, 16));
  17456. }
  17457. else {
  17458. self.alpha = (parseInt(c, 16)) / 255;
  17459. }
  17460. });
  17461. }
  17462. else {
  17463. this.rgb = [];
  17464. rgb.split('').map(function (c, i) {
  17465. if (i < 3) {
  17466. self.rgb.push(parseInt(c + c, 16));
  17467. }
  17468. else {
  17469. self.alpha = (parseInt(c + c, 16)) / 255;
  17470. }
  17471. });
  17472. }
  17473. this.alpha = this.alpha || (typeof a === 'number' ? a : 1);
  17474. if (typeof originalForm !== 'undefined') {
  17475. this.value = originalForm;
  17476. }
  17477. };
  17478. Color.prototype = new Node();
  17479. Color.prototype.luma = function () {
  17480. var r = this.rgb[0] / 255;
  17481. var g = this.rgb[1] / 255;
  17482. var b = this.rgb[2] / 255;
  17483. r = (r <= 0.03928) ? r / 12.92 : Math.pow(((r + 0.055) / 1.055), 2.4);
  17484. g = (g <= 0.03928) ? g / 12.92 : Math.pow(((g + 0.055) / 1.055), 2.4);
  17485. b = (b <= 0.03928) ? b / 12.92 : Math.pow(((b + 0.055) / 1.055), 2.4);
  17486. return 0.2126 * r + 0.7152 * g + 0.0722 * b;
  17487. };
  17488. Color.prototype.genCSS = function (context, output) {
  17489. output.add(this.toCSS(context));
  17490. };
  17491. Color.prototype.toCSS = function (context, doNotCompress) {
  17492. var compress = context && context.compress && !doNotCompress;
  17493. var color;
  17494. var alpha;
  17495. var colorFunction;
  17496. var args = [];
  17497. // `value` is set if this color was originally
  17498. // converted from a named color string so we need
  17499. // to respect this and try to output named color too.
  17500. alpha = this.fround(context, this.alpha);
  17501. if (this.value) {
  17502. if (this.value.indexOf('rgb') === 0) {
  17503. if (alpha < 1) {
  17504. colorFunction = 'rgba';
  17505. }
  17506. }
  17507. else if (this.value.indexOf('hsl') === 0) {
  17508. if (alpha < 1) {
  17509. colorFunction = 'hsla';
  17510. }
  17511. else {
  17512. colorFunction = 'hsl';
  17513. }
  17514. }
  17515. else {
  17516. return this.value;
  17517. }
  17518. }
  17519. else {
  17520. if (alpha < 1) {
  17521. colorFunction = 'rgba';
  17522. }
  17523. }
  17524. switch (colorFunction) {
  17525. case 'rgba':
  17526. args = this.rgb.map(function (c) { return clamp(Math.round(c), 255); }).concat(clamp(alpha, 1));
  17527. break;
  17528. case 'hsla':
  17529. args.push(clamp(alpha, 1));
  17530. case 'hsl':
  17531. color = this.toHSL();
  17532. args = [
  17533. this.fround(context, color.h),
  17534. this.fround(context, color.s * 100) + "%",
  17535. this.fround(context, color.l * 100) + "%"
  17536. ].concat(args);
  17537. }
  17538. if (colorFunction) {
  17539. // Values are capped between `0` and `255`, rounded and zero-padded.
  17540. return colorFunction + "(" + args.join("," + (compress ? '' : ' ')) + ")";
  17541. }
  17542. color = this.toRGB();
  17543. if (compress) {
  17544. var splitcolor = color.split('');
  17545. // Convert color to short format
  17546. if (splitcolor[1] === splitcolor[2] && splitcolor[3] === splitcolor[4] && splitcolor[5] === splitcolor[6]) {
  17547. color = "#" + splitcolor[1] + splitcolor[3] + splitcolor[5];
  17548. }
  17549. }
  17550. return color;
  17551. };
  17552. //
  17553. // Operations have to be done per-channel, if not,
  17554. // channels will spill onto each other. Once we have
  17555. // our result, in the form of an integer triplet,
  17556. // we create a new Color node to hold the result.
  17557. //
  17558. Color.prototype.operate = function (context, op, other) {
  17559. var rgb = new Array(3);
  17560. var alpha = this.alpha * (1 - other.alpha) + other.alpha;
  17561. for (var c = 0; c < 3; c++) {
  17562. rgb[c] = this._operate(context, op, this.rgb[c], other.rgb[c]);
  17563. }
  17564. return new Color(rgb, alpha);
  17565. };
  17566. Color.prototype.toRGB = function () {
  17567. return toHex(this.rgb);
  17568. };
  17569. Color.prototype.toHSL = function () {
  17570. var r = this.rgb[0] / 255;
  17571. var g = this.rgb[1] / 255;
  17572. var b = this.rgb[2] / 255;
  17573. var a = this.alpha;
  17574. var max = Math.max(r, g, b);
  17575. var min = Math.min(r, g, b);
  17576. var h;
  17577. var s;
  17578. var l = (max + min) / 2;
  17579. var d = max - min;
  17580. if (max === min) {
  17581. h = s = 0;
  17582. }
  17583. else {
  17584. s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  17585. switch (max) {
  17586. case r:
  17587. h = (g - b) / d + (g < b ? 6 : 0);
  17588. break;
  17589. case g:
  17590. h = (b - r) / d + 2;
  17591. break;
  17592. case b:
  17593. h = (r - g) / d + 4;
  17594. break;
  17595. }
  17596. h /= 6;
  17597. }
  17598. return { h: h * 360, s: s, l: l, a: a };
  17599. };
  17600. // Adapted from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
  17601. Color.prototype.toHSV = function () {
  17602. var r = this.rgb[0] / 255;
  17603. var g = this.rgb[1] / 255;
  17604. var b = this.rgb[2] / 255;
  17605. var a = this.alpha;
  17606. var max = Math.max(r, g, b);
  17607. var min = Math.min(r, g, b);
  17608. var h;
  17609. var s;
  17610. var v = max;
  17611. var d = max - min;
  17612. if (max === 0) {
  17613. s = 0;
  17614. }
  17615. else {
  17616. s = d / max;
  17617. }
  17618. if (max === min) {
  17619. h = 0;
  17620. }
  17621. else {
  17622. switch (max) {
  17623. case r:
  17624. h = (g - b) / d + (g < b ? 6 : 0);
  17625. break;
  17626. case g:
  17627. h = (b - r) / d + 2;
  17628. break;
  17629. case b:
  17630. h = (r - g) / d + 4;
  17631. break;
  17632. }
  17633. h /= 6;
  17634. }
  17635. return { h: h * 360, s: s, v: v, a: a };
  17636. };
  17637. Color.prototype.toARGB = function () {
  17638. return toHex([this.alpha * 255].concat(this.rgb));
  17639. };
  17640. Color.prototype.compare = function (x) {
  17641. return (x.rgb &&
  17642. x.rgb[0] === this.rgb[0] &&
  17643. x.rgb[1] === this.rgb[1] &&
  17644. x.rgb[2] === this.rgb[2] &&
  17645. x.alpha === this.alpha) ? 0 : undefined;
  17646. };
  17647. Color.prototype.type = 'Color';
  17648. function clamp(v, max) {
  17649. return Math.min(Math.max(v, 0), max);
  17650. }
  17651. function toHex(v) {
  17652. return "#" + v.map(function (c) {
  17653. c = clamp(Math.round(c), 255);
  17654. return (c < 16 ? '0' : '') + c.toString(16);
  17655. }).join('');
  17656. }
  17657. Color.fromKeyword = function (keyword) {
  17658. var c;
  17659. var key = keyword.toLowerCase();
  17660. if (colors.hasOwnProperty(key)) {
  17661. c = new Color(colors[key].slice(1));
  17662. }
  17663. else if (key === 'transparent') {
  17664. c = new Color([0, 0, 0], 0);
  17665. }
  17666. if (c) {
  17667. c.value = keyword;
  17668. return c;
  17669. }
  17670. };
  17671. var Paren = function (node) {
  17672. this.value = node;
  17673. };
  17674. Paren.prototype = new Node();
  17675. Paren.prototype.genCSS = function (context, output) {
  17676. output.add('(');
  17677. this.value.genCSS(context, output);
  17678. output.add(')');
  17679. };
  17680. Paren.prototype.eval = function (context) {
  17681. return new Paren(this.value.eval(context));
  17682. };
  17683. Paren.prototype.type = 'Paren';
  17684. var _noSpaceCombinators = {
  17685. '': true,
  17686. ' ': true,
  17687. '|': true
  17688. };
  17689. var Combinator = function (value) {
  17690. if (value === ' ') {
  17691. this.value = ' ';
  17692. this.emptyOrWhitespace = true;
  17693. }
  17694. else {
  17695. this.value = value ? value.trim() : '';
  17696. this.emptyOrWhitespace = this.value === '';
  17697. }
  17698. };
  17699. Combinator.prototype = new Node();
  17700. Combinator.prototype.genCSS = function (context, output) {
  17701. var spaceOrEmpty = (context.compress || _noSpaceCombinators[this.value]) ? '' : ' ';
  17702. output.add(spaceOrEmpty + this.value + spaceOrEmpty);
  17703. };
  17704. Combinator.prototype.type = 'Combinator';
  17705. var Element = function (combinator, value, isVariable, index, currentFileInfo, visibilityInfo) {
  17706. this.combinator = combinator instanceof Combinator ?
  17707. combinator : new Combinator(combinator);
  17708. if (typeof value === 'string') {
  17709. this.value = value.trim();
  17710. }
  17711. else if (value) {
  17712. this.value = value;
  17713. }
  17714. else {
  17715. this.value = '';
  17716. }
  17717. this.isVariable = isVariable;
  17718. this._index = index;
  17719. this._fileInfo = currentFileInfo;
  17720. this.copyVisibilityInfo(visibilityInfo);
  17721. this.setParent(this.combinator, this);
  17722. };
  17723. Element.prototype = new Node();
  17724. Element.prototype.accept = function (visitor) {
  17725. var value = this.value;
  17726. this.combinator = visitor.visit(this.combinator);
  17727. if (typeof value === 'object') {
  17728. this.value = visitor.visit(value);
  17729. }
  17730. };
  17731. Element.prototype.eval = function (context) {
  17732. return new Element(this.combinator, this.value.eval ? this.value.eval(context) : this.value, this.isVariable, this.getIndex(), this.fileInfo(), this.visibilityInfo());
  17733. };
  17734. Element.prototype.clone = function () {
  17735. return new Element(this.combinator, this.value, this.isVariable, this.getIndex(), this.fileInfo(), this.visibilityInfo());
  17736. };
  17737. Element.prototype.genCSS = function (context, output) {
  17738. output.add(this.toCSS(context), this.fileInfo(), this.getIndex());
  17739. };
  17740. Element.prototype.toCSS = function (context) {
  17741. if (context === void 0) { context = {}; }
  17742. var value = this.value;
  17743. var firstSelector = context.firstSelector;
  17744. if (value instanceof Paren) {
  17745. // selector in parens should not be affected by outer selector
  17746. // flags (breaks only interpolated selectors - see #1973)
  17747. context.firstSelector = true;
  17748. }
  17749. value = value.toCSS ? value.toCSS(context) : value;
  17750. context.firstSelector = firstSelector;
  17751. if (value === '' && this.combinator.value.charAt(0) === '&') {
  17752. return '';
  17753. }
  17754. else {
  17755. return this.combinator.toCSS(context) + value;
  17756. }
  17757. };
  17758. Element.prototype.type = 'Element';
  17759. var Math$1 = {
  17760. ALWAYS: 0,
  17761. PARENS_DIVISION: 1,
  17762. PARENS: 2,
  17763. STRICT_LEGACY: 3
  17764. };
  17765. var RewriteUrls = {
  17766. OFF: 0,
  17767. LOCAL: 1,
  17768. ALL: 2
  17769. };
  17770. /**
  17771. * Returns the object type of the given payload
  17772. *
  17773. * @param {*} payload
  17774. * @returns {string}
  17775. */
  17776. function getType(payload) {
  17777. return Object.prototype.toString.call(payload).slice(8, -1);
  17778. }
  17779. /**
  17780. * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
  17781. *
  17782. * @param {*} payload
  17783. * @returns {payload is Record<string, any>}
  17784. */
  17785. function isPlainObject(payload) {
  17786. if (getType(payload) !== 'Object')
  17787. return false;
  17788. return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;
  17789. }
  17790. /**
  17791. * Returns whether the payload is an array
  17792. *
  17793. * @param {any} payload
  17794. * @returns {payload is any[]}
  17795. */
  17796. function isArray(payload) {
  17797. return getType(payload) === 'Array';
  17798. }
  17799. /*! *****************************************************************************
  17800. Copyright (c) Microsoft Corporation. All rights reserved.
  17801. Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  17802. this file except in compliance with the License. You may obtain a copy of the
  17803. License at http://www.apache.org/licenses/LICENSE-2.0
  17804. THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  17805. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  17806. WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  17807. MERCHANTABLITY OR NON-INFRINGEMENT.
  17808. See the Apache Version 2.0 License for specific language governing permissions
  17809. and limitations under the License.
  17810. ***************************************************************************** */
  17811. function __spreadArrays$1() {
  17812. for (var s = 0, i = 0, il = arguments.length; i < il; i++)
  17813. s += arguments[i].length;
  17814. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  17815. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  17816. r[k] = a[j];
  17817. return r;
  17818. }
  17819. function assignProp(carry, key, newVal, originalObject, includeNonenumerable) {
  17820. var propType = {}.propertyIsEnumerable.call(originalObject, key)
  17821. ? 'enumerable'
  17822. : 'nonenumerable';
  17823. if (propType === 'enumerable')
  17824. carry[key] = newVal;
  17825. if (includeNonenumerable && propType === 'nonenumerable') {
  17826. Object.defineProperty(carry, key, {
  17827. value: newVal,
  17828. enumerable: false,
  17829. writable: true,
  17830. configurable: true,
  17831. });
  17832. }
  17833. }
  17834. /**
  17835. * Copy (clone) an object and all its props recursively to get rid of any prop referenced of the original object. Arrays are also cloned, however objects inside arrays are still linked.
  17836. *
  17837. * @export
  17838. * @template T
  17839. * @param {T} target Target can be anything
  17840. * @param {Options} [options={}] Options can be `props` or `nonenumerable`
  17841. * @returns {T} the target with replaced values
  17842. * @export
  17843. */
  17844. function copy(target, options) {
  17845. if (options === void 0) {
  17846. options = {};
  17847. }
  17848. if (isArray(target))
  17849. return target.map(function (i) { return copy(i, options); });
  17850. if (!isPlainObject(target))
  17851. return target;
  17852. var props = Object.getOwnPropertyNames(target);
  17853. var symbols = Object.getOwnPropertySymbols(target);
  17854. return __spreadArrays$1(props, symbols).reduce(function (carry, key) {
  17855. if (isArray(options.props) && !options.props.includes(key)) {
  17856. return carry;
  17857. }
  17858. var val = target[key];
  17859. var newVal = copy(val, options);
  17860. assignProp(carry, key, newVal, target, options.nonenumerable);
  17861. return carry;
  17862. }, {});
  17863. }
  17864. /* jshint proto: true */
  17865. function getLocation(index, inputStream) {
  17866. var n = index + 1;
  17867. var line = null;
  17868. var column = -1;
  17869. while (--n >= 0 && inputStream.charAt(n) !== '\n') {
  17870. column++;
  17871. }
  17872. if (typeof index === 'number') {
  17873. line = (inputStream.slice(0, index).match(/\n/g) || '').length;
  17874. }
  17875. return {
  17876. line: line,
  17877. column: column
  17878. };
  17879. }
  17880. function copyArray(arr) {
  17881. var i;
  17882. var length = arr.length;
  17883. var copy = new Array(length);
  17884. for (i = 0; i < length; i++) {
  17885. copy[i] = arr[i];
  17886. }
  17887. return copy;
  17888. }
  17889. function clone(obj) {
  17890. var cloned = {};
  17891. for (var prop in obj) {
  17892. if (obj.hasOwnProperty(prop)) {
  17893. cloned[prop] = obj[prop];
  17894. }
  17895. }
  17896. return cloned;
  17897. }
  17898. function defaults(obj1, obj2) {
  17899. var newObj = obj2 || {};
  17900. if (!obj2._defaults) {
  17901. newObj = {};
  17902. var defaults_1 = copy(obj1);
  17903. newObj._defaults = defaults_1;
  17904. var cloned = obj2 ? copy(obj2) : {};
  17905. Object.assign(newObj, defaults_1, cloned);
  17906. }
  17907. return newObj;
  17908. }
  17909. function copyOptions(obj1, obj2) {
  17910. if (obj2 && obj2._defaults) {
  17911. return obj2;
  17912. }
  17913. var opts = defaults(obj1, obj2);
  17914. if (opts.strictMath) {
  17915. opts.math = Math$1.STRICT_LEGACY;
  17916. }
  17917. // Back compat with changed relativeUrls option
  17918. if (opts.relativeUrls) {
  17919. opts.rewriteUrls = RewriteUrls.ALL;
  17920. }
  17921. if (typeof opts.math === 'string') {
  17922. switch (opts.math.toLowerCase()) {
  17923. case 'always':
  17924. opts.math = Math$1.ALWAYS;
  17925. break;
  17926. case 'parens-division':
  17927. opts.math = Math$1.PARENS_DIVISION;
  17928. break;
  17929. case 'strict':
  17930. case 'parens':
  17931. opts.math = Math$1.PARENS;
  17932. break;
  17933. case 'strict-legacy':
  17934. opts.math = Math$1.STRICT_LEGACY;
  17935. }
  17936. }
  17937. if (typeof opts.rewriteUrls === 'string') {
  17938. switch (opts.rewriteUrls.toLowerCase()) {
  17939. case 'off':
  17940. opts.rewriteUrls = RewriteUrls.OFF;
  17941. break;
  17942. case 'local':
  17943. opts.rewriteUrls = RewriteUrls.LOCAL;
  17944. break;
  17945. case 'all':
  17946. opts.rewriteUrls = RewriteUrls.ALL;
  17947. break;
  17948. }
  17949. }
  17950. return opts;
  17951. }
  17952. function merge(obj1, obj2) {
  17953. for (var prop in obj2) {
  17954. if (obj2.hasOwnProperty(prop)) {
  17955. obj1[prop] = obj2[prop];
  17956. }
  17957. }
  17958. return obj1;
  17959. }
  17960. function flattenArray(arr, result) {
  17961. if (result === void 0) { result = []; }
  17962. for (var i = 0, length_1 = arr.length; i < length_1; i++) {
  17963. var value = arr[i];
  17964. if (Array.isArray(value)) {
  17965. flattenArray(value, result);
  17966. }
  17967. else {
  17968. if (value !== undefined) {
  17969. result.push(value);
  17970. }
  17971. }
  17972. }
  17973. return result;
  17974. }
  17975. var utils = /*#__PURE__*/Object.freeze({
  17976. __proto__: null,
  17977. getLocation: getLocation,
  17978. copyArray: copyArray,
  17979. clone: clone,
  17980. defaults: defaults,
  17981. copyOptions: copyOptions,
  17982. merge: merge,
  17983. flattenArray: flattenArray
  17984. });
  17985. var anonymousFunc = /(<anonymous>|Function):(\d+):(\d+)/;
  17986. /**
  17987. * This is a centralized class of any error that could be thrown internally (mostly by the parser).
  17988. * Besides standard .message it keeps some additional data like a path to the file where the error
  17989. * occurred along with line and column numbers.
  17990. *
  17991. * @class
  17992. * @extends Error
  17993. * @type {module.LessError}
  17994. *
  17995. * @prop {string} type
  17996. * @prop {string} filename
  17997. * @prop {number} index
  17998. * @prop {number} line
  17999. * @prop {number} column
  18000. * @prop {number} callLine
  18001. * @prop {number} callExtract
  18002. * @prop {string[]} extract
  18003. *
  18004. * @param {Object} e - An error object to wrap around or just a descriptive object
  18005. * @param {Object} fileContentMap - An object with file contents in 'contents' property (like importManager) @todo - move to fileManager?
  18006. * @param {string} [currentFilename]
  18007. */
  18008. var LessError = function LessError(e, fileContentMap, currentFilename) {
  18009. Error.call(this);
  18010. var filename = e.filename || currentFilename;
  18011. this.message = e.message;
  18012. this.stack = e.stack;
  18013. if (fileContentMap && filename) {
  18014. var input = fileContentMap.contents[filename];
  18015. var loc = getLocation(e.index, input);
  18016. var line = loc.line;
  18017. var col = loc.column;
  18018. var callLine = e.call && getLocation(e.call, input).line;
  18019. var lines = input ? input.split('\n') : '';
  18020. this.type = e.type || 'Syntax';
  18021. this.filename = filename;
  18022. this.index = e.index;
  18023. this.line = typeof line === 'number' ? line + 1 : null;
  18024. this.column = col;
  18025. if (!this.line && this.stack) {
  18026. var found = this.stack.match(anonymousFunc);
  18027. /**
  18028. * We have to figure out how this environment stringifies anonymous functions
  18029. * so we can correctly map plugin errors.
  18030. *
  18031. * Note, in Node 8, the output of anonymous funcs varied based on parameters
  18032. * being present or not, so we inject dummy params.
  18033. */
  18034. var func = new Function('a', 'throw new Error()');
  18035. var lineAdjust = 0;
  18036. try {
  18037. func();
  18038. }
  18039. catch (e) {
  18040. var match = e.stack.match(anonymousFunc);
  18041. var line_1 = parseInt(match[2]);
  18042. lineAdjust = 1 - line_1;
  18043. }
  18044. if (found) {
  18045. if (found[2]) {
  18046. this.line = parseInt(found[2]) + lineAdjust;
  18047. }
  18048. if (found[3]) {
  18049. this.column = parseInt(found[3]);
  18050. }
  18051. }
  18052. }
  18053. this.callLine = callLine + 1;
  18054. this.callExtract = lines[callLine];
  18055. this.extract = [
  18056. lines[this.line - 2],
  18057. lines[this.line - 1],
  18058. lines[this.line]
  18059. ];
  18060. }
  18061. };
  18062. if (typeof Object.create === 'undefined') {
  18063. var F = function () { };
  18064. F.prototype = Error.prototype;
  18065. LessError.prototype = new F();
  18066. }
  18067. else {
  18068. LessError.prototype = Object.create(Error.prototype);
  18069. }
  18070. LessError.prototype.constructor = LessError;
  18071. /**
  18072. * An overridden version of the default Object.prototype.toString
  18073. * which uses additional information to create a helpful message.
  18074. *
  18075. * @param {Object} options
  18076. * @returns {string}
  18077. */
  18078. LessError.prototype.toString = function (options) {
  18079. if (options === void 0) { options = {}; }
  18080. var message = '';
  18081. var extract = this.extract || [];
  18082. var error = [];
  18083. var stylize = function (str) { return str; };
  18084. if (options.stylize) {
  18085. var type = typeof options.stylize;
  18086. if (type !== 'function') {
  18087. throw Error("options.stylize should be a function, got a " + type + "!");
  18088. }
  18089. stylize = options.stylize;
  18090. }
  18091. if (this.line !== null) {
  18092. if (typeof extract[0] === 'string') {
  18093. error.push(stylize(this.line - 1 + " " + extract[0], 'grey'));
  18094. }
  18095. if (typeof extract[1] === 'string') {
  18096. var errorTxt = this.line + " ";
  18097. if (extract[1]) {
  18098. errorTxt += extract[1].slice(0, this.column) +
  18099. stylize(stylize(stylize(extract[1].substr(this.column, 1), 'bold') +
  18100. extract[1].slice(this.column + 1), 'red'), 'inverse');
  18101. }
  18102. error.push(errorTxt);
  18103. }
  18104. if (typeof extract[2] === 'string') {
  18105. error.push(stylize(this.line + 1 + " " + extract[2], 'grey'));
  18106. }
  18107. error = error.join('\n') + stylize('', 'reset') + "\n";
  18108. }
  18109. message += stylize(this.type + "Error: " + this.message, 'red');
  18110. if (this.filename) {
  18111. message += stylize(' in ', 'red') + this.filename;
  18112. }
  18113. if (this.line) {
  18114. message += stylize(" on line " + this.line + ", column " + (this.column + 1) + ":", 'grey');
  18115. }
  18116. message += "\n" + error;
  18117. if (this.callLine) {
  18118. message += stylize('from ', 'red') + (this.filename || '') + "/n";
  18119. message += stylize(this.callLine, 'grey') + " " + this.callExtract + "/n";
  18120. }
  18121. return message;
  18122. };
  18123. var Selector = function (elements, extendList, condition, index, currentFileInfo, visibilityInfo) {
  18124. this.extendList = extendList;
  18125. this.condition = condition;
  18126. this.evaldCondition = !condition;
  18127. this._index = index;
  18128. this._fileInfo = currentFileInfo;
  18129. this.elements = this.getElements(elements);
  18130. this.mixinElements_ = undefined;
  18131. this.copyVisibilityInfo(visibilityInfo);
  18132. this.setParent(this.elements, this);
  18133. };
  18134. Selector.prototype = new Node();
  18135. Selector.prototype.accept = function (visitor) {
  18136. if (this.elements) {
  18137. this.elements = visitor.visitArray(this.elements);
  18138. }
  18139. if (this.extendList) {
  18140. this.extendList = visitor.visitArray(this.extendList);
  18141. }
  18142. if (this.condition) {
  18143. this.condition = visitor.visit(this.condition);
  18144. }
  18145. };
  18146. Selector.prototype.createDerived = function (elements, extendList, evaldCondition) {
  18147. elements = this.getElements(elements);
  18148. var newSelector = new Selector(elements, extendList || this.extendList, null, this.getIndex(), this.fileInfo(), this.visibilityInfo());
  18149. newSelector.evaldCondition = (evaldCondition != null) ? evaldCondition : this.evaldCondition;
  18150. newSelector.mediaEmpty = this.mediaEmpty;
  18151. return newSelector;
  18152. };
  18153. Selector.prototype.getElements = function (els) {
  18154. if (!els) {
  18155. return [new Element('', '&', false, this._index, this._fileInfo)];
  18156. }
  18157. if (typeof els === 'string') {
  18158. this.parse.parseNode(els, ['selector'], this._index, this._fileInfo, function (err, result) {
  18159. if (err) {
  18160. throw new LessError({
  18161. index: err.index,
  18162. message: err.message
  18163. }, this.parse.imports, this._fileInfo.filename);
  18164. }
  18165. els = result[0].elements;
  18166. });
  18167. }
  18168. return els;
  18169. };
  18170. Selector.prototype.createEmptySelectors = function () {
  18171. var el = new Element('', '&', false, this._index, this._fileInfo);
  18172. var sels = [new Selector([el], null, null, this._index, this._fileInfo)];
  18173. sels[0].mediaEmpty = true;
  18174. return sels;
  18175. };
  18176. Selector.prototype.match = function (other) {
  18177. var elements = this.elements;
  18178. var len = elements.length;
  18179. var olen;
  18180. var i;
  18181. other = other.mixinElements();
  18182. olen = other.length;
  18183. if (olen === 0 || len < olen) {
  18184. return 0;
  18185. }
  18186. else {
  18187. for (i = 0; i < olen; i++) {
  18188. if (elements[i].value !== other[i]) {
  18189. return 0;
  18190. }
  18191. }
  18192. }
  18193. return olen; // return number of matched elements
  18194. };
  18195. Selector.prototype.mixinElements = function () {
  18196. if (this.mixinElements_) {
  18197. return this.mixinElements_;
  18198. }
  18199. var elements = this.elements.map(function (v) { return v.combinator.value + (v.value.value || v.value); }).join('').match(/[,&#\*\.\w-]([\w-]|(\\.))*/g);
  18200. if (elements) {
  18201. if (elements[0] === '&') {
  18202. elements.shift();
  18203. }
  18204. }
  18205. else {
  18206. elements = [];
  18207. }
  18208. return (this.mixinElements_ = elements);
  18209. };
  18210. Selector.prototype.isJustParentSelector = function () {
  18211. return !this.mediaEmpty &&
  18212. this.elements.length === 1 &&
  18213. this.elements[0].value === '&' &&
  18214. (this.elements[0].combinator.value === ' ' || this.elements[0].combinator.value === '');
  18215. };
  18216. Selector.prototype.eval = function (context) {
  18217. var evaldCondition = this.condition && this.condition.eval(context);
  18218. var elements = this.elements;
  18219. var extendList = this.extendList;
  18220. elements = elements && elements.map(function (e) { return e.eval(context); });
  18221. extendList = extendList && extendList.map(function (extend) { return extend.eval(context); });
  18222. return this.createDerived(elements, extendList, evaldCondition);
  18223. };
  18224. Selector.prototype.genCSS = function (context, output) {
  18225. var i;
  18226. var element;
  18227. if ((!context || !context.firstSelector) && this.elements[0].combinator.value === '') {
  18228. output.add(' ', this.fileInfo(), this.getIndex());
  18229. }
  18230. for (i = 0; i < this.elements.length; i++) {
  18231. element = this.elements[i];
  18232. element.genCSS(context, output);
  18233. }
  18234. };
  18235. Selector.prototype.getIsOutput = function () {
  18236. return this.evaldCondition;
  18237. };
  18238. Selector.prototype.type = 'Selector';
  18239. var Value = function (value) {
  18240. if (!value) {
  18241. throw new Error('Value requires an array argument');
  18242. }
  18243. if (!Array.isArray(value)) {
  18244. this.value = [value];
  18245. }
  18246. else {
  18247. this.value = value;
  18248. }
  18249. };
  18250. Value.prototype = new Node();
  18251. Value.prototype.accept = function (visitor) {
  18252. if (this.value) {
  18253. this.value = visitor.visitArray(this.value);
  18254. }
  18255. };
  18256. Value.prototype.eval = function (context) {
  18257. if (this.value.length === 1) {
  18258. return this.value[0].eval(context);
  18259. }
  18260. else {
  18261. return new Value(this.value.map(function (v) { return v.eval(context); }));
  18262. }
  18263. };
  18264. Value.prototype.genCSS = function (context, output) {
  18265. var i;
  18266. for (i = 0; i < this.value.length; i++) {
  18267. this.value[i].genCSS(context, output);
  18268. if (i + 1 < this.value.length) {
  18269. output.add((context && context.compress) ? ',' : ', ');
  18270. }
  18271. }
  18272. };
  18273. Value.prototype.type = 'Value';
  18274. var Keyword = function (value) {
  18275. this.value = value;
  18276. };
  18277. Keyword.prototype = new Node();
  18278. Keyword.prototype.genCSS = function (context, output) {
  18279. if (this.value === '%') {
  18280. throw { type: 'Syntax', message: 'Invalid % without number' };
  18281. }
  18282. output.add(this.value);
  18283. };
  18284. Keyword.prototype.type = 'Keyword';
  18285. Keyword.True = new Keyword('true');
  18286. Keyword.False = new Keyword('false');
  18287. var Anonymous = function (value, index, currentFileInfo, mapLines, rulesetLike, visibilityInfo) {
  18288. this.value = value;
  18289. this._index = index;
  18290. this._fileInfo = currentFileInfo;
  18291. this.mapLines = mapLines;
  18292. this.rulesetLike = (typeof rulesetLike === 'undefined') ? false : rulesetLike;
  18293. this.allowRoot = true;
  18294. this.copyVisibilityInfo(visibilityInfo);
  18295. };
  18296. Anonymous.prototype = new Node();
  18297. Anonymous.prototype.eval = function () {
  18298. return new Anonymous(this.value, this._index, this._fileInfo, this.mapLines, this.rulesetLike, this.visibilityInfo());
  18299. };
  18300. Anonymous.prototype.compare = function (other) {
  18301. return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined;
  18302. };
  18303. Anonymous.prototype.isRulesetLike = function () {
  18304. return this.rulesetLike;
  18305. };
  18306. Anonymous.prototype.genCSS = function (context, output) {
  18307. this.nodeVisible = Boolean(this.value);
  18308. if (this.nodeVisible) {
  18309. output.add(this.value, this._fileInfo, this._index, this.mapLines);
  18310. }
  18311. };
  18312. Anonymous.prototype.type = 'Anonymous';
  18313. var MATH = Math$1;
  18314. var Declaration = function (name, value, important, merge, index, currentFileInfo, inline, variable) {
  18315. this.name = name;
  18316. this.value = (value instanceof Node) ? value : new Value([value ? new Anonymous(value) : null]);
  18317. this.important = important ? " " + important.trim() : '';
  18318. this.merge = merge;
  18319. this._index = index;
  18320. this._fileInfo = currentFileInfo;
  18321. this.inline = inline || false;
  18322. this.variable = (variable !== undefined) ? variable
  18323. : (name.charAt && (name.charAt(0) === '@'));
  18324. this.allowRoot = true;
  18325. this.setParent(this.value, this);
  18326. };
  18327. Declaration.prototype = new Node();
  18328. Declaration.prototype.genCSS = function (context, output) {
  18329. output.add(this.name + (context.compress ? ':' : ': '), this.fileInfo(), this.getIndex());
  18330. try {
  18331. this.value.genCSS(context, output);
  18332. }
  18333. catch (e) {
  18334. e.index = this._index;
  18335. e.filename = this._fileInfo.filename;
  18336. throw e;
  18337. }
  18338. output.add(this.important + ((this.inline || (context.lastRule && context.compress)) ? '' : ';'), this._fileInfo, this._index);
  18339. };
  18340. Declaration.prototype.eval = function (context) {
  18341. var mathBypass = false;
  18342. var prevMath;
  18343. var name = this.name;
  18344. var evaldValue;
  18345. var variable = this.variable;
  18346. if (typeof name !== 'string') {
  18347. // expand 'primitive' name directly to get
  18348. // things faster (~10% for benchmark.less):
  18349. name = (name.length === 1) && (name[0] instanceof Keyword) ?
  18350. name[0].value : evalName(context, name);
  18351. variable = false; // never treat expanded interpolation as new variable name
  18352. }
  18353. // @todo remove when parens-division is default
  18354. if (name === 'font' && context.math === MATH.ALWAYS) {
  18355. mathBypass = true;
  18356. prevMath = context.math;
  18357. context.math = MATH.PARENS_DIVISION;
  18358. }
  18359. try {
  18360. context.importantScope.push({});
  18361. evaldValue = this.value.eval(context);
  18362. if (!this.variable && evaldValue.type === 'DetachedRuleset') {
  18363. throw { message: 'Rulesets cannot be evaluated on a property.',
  18364. index: this.getIndex(), filename: this.fileInfo().filename };
  18365. }
  18366. var important = this.important;
  18367. var importantResult = context.importantScope.pop();
  18368. if (!important && importantResult.important) {
  18369. important = importantResult.important;
  18370. }
  18371. return new Declaration(name, evaldValue, important, this.merge, this.getIndex(), this.fileInfo(), this.inline, variable);
  18372. }
  18373. catch (e) {
  18374. if (typeof e.index !== 'number') {
  18375. e.index = this.getIndex();
  18376. e.filename = this.fileInfo().filename;
  18377. }
  18378. throw e;
  18379. }
  18380. finally {
  18381. if (mathBypass) {
  18382. context.math = prevMath;
  18383. }
  18384. }
  18385. };
  18386. Declaration.prototype.makeImportant = function () {
  18387. return new Declaration(this.name, this.value, '!important', this.merge, this.getIndex(), this.fileInfo(), this.inline);
  18388. };
  18389. function evalName(context, name) {
  18390. var value = '';
  18391. var i;
  18392. var n = name.length;
  18393. var output = { add: function (s) { value += s; } };
  18394. for (i = 0; i < n; i++) {
  18395. name[i].eval(context).genCSS(context, output);
  18396. }
  18397. return value;
  18398. }
  18399. Declaration.prototype.type = 'Declaration';
  18400. var debugInfo = function (context, ctx, lineSeparator) {
  18401. var result = '';
  18402. if (context.dumpLineNumbers && !context.compress) {
  18403. switch (context.dumpLineNumbers) {
  18404. case 'comments':
  18405. result = debugInfo.asComment(ctx);
  18406. break;
  18407. case 'mediaquery':
  18408. result = debugInfo.asMediaQuery(ctx);
  18409. break;
  18410. case 'all':
  18411. result = debugInfo.asComment(ctx) + (lineSeparator || '') + debugInfo.asMediaQuery(ctx);
  18412. break;
  18413. }
  18414. }
  18415. return result;
  18416. };
  18417. debugInfo.asComment = function (ctx) { return ctx.debugInfo ? "/* line " + ctx.debugInfo.lineNumber + ", " + ctx.debugInfo.fileName + " */\n" : ''; };
  18418. debugInfo.asMediaQuery = function (ctx) {
  18419. if (!ctx.debugInfo) {
  18420. return '';
  18421. }
  18422. var filenameWithProtocol = ctx.debugInfo.fileName;
  18423. if (!/^[a-z]+:\/\//i.test(filenameWithProtocol)) {
  18424. filenameWithProtocol = "file://" + filenameWithProtocol;
  18425. }
  18426. return "@media -sass-debug-info{filename{font-family:" + filenameWithProtocol.replace(/([.:\/\\])/g, function (a) {
  18427. if (a == '\\') {
  18428. a = '\/';
  18429. }
  18430. return "\\" + a;
  18431. }) + "}line{font-family:\\00003" + ctx.debugInfo.lineNumber + "}}\n";
  18432. };
  18433. var Comment = function (value, isLineComment, index, currentFileInfo) {
  18434. this.value = value;
  18435. this.isLineComment = isLineComment;
  18436. this._index = index;
  18437. this._fileInfo = currentFileInfo;
  18438. this.allowRoot = true;
  18439. };
  18440. Comment.prototype = new Node();
  18441. Comment.prototype.genCSS = function (context, output) {
  18442. if (this.debugInfo) {
  18443. output.add(debugInfo(context, this), this.fileInfo(), this.getIndex());
  18444. }
  18445. output.add(this.value);
  18446. };
  18447. Comment.prototype.isSilent = function (context) {
  18448. var isCompressed = context.compress && this.value[2] !== '!';
  18449. return this.isLineComment || isCompressed;
  18450. };
  18451. Comment.prototype.type = 'Comment';
  18452. var contexts = {};
  18453. var copyFromOriginal = function copyFromOriginal(original, destination, propertiesToCopy) {
  18454. if (!original) {
  18455. return;
  18456. }
  18457. for (var i = 0; i < propertiesToCopy.length; i++) {
  18458. if (original.hasOwnProperty(propertiesToCopy[i])) {
  18459. destination[propertiesToCopy[i]] = original[propertiesToCopy[i]];
  18460. }
  18461. }
  18462. };
  18463. /*
  18464. parse is used whilst parsing
  18465. */
  18466. var parseCopyProperties = [
  18467. // options
  18468. 'paths',
  18469. 'rewriteUrls',
  18470. 'rootpath',
  18471. 'strictImports',
  18472. 'insecure',
  18473. 'dumpLineNumbers',
  18474. 'compress',
  18475. 'syncImport',
  18476. 'chunkInput',
  18477. 'mime',
  18478. 'useFileCache',
  18479. // context
  18480. 'processImports',
  18481. // Used by the import manager to stop multiple import visitors being created.
  18482. 'pluginManager' // Used as the plugin manager for the session
  18483. ];
  18484. contexts.Parse = function (options) {
  18485. copyFromOriginal(options, this, parseCopyProperties);
  18486. if (typeof this.paths === 'string') {
  18487. this.paths = [this.paths];
  18488. }
  18489. };
  18490. var evalCopyProperties = [
  18491. 'paths',
  18492. 'compress',
  18493. 'math',
  18494. 'strictUnits',
  18495. 'sourceMap',
  18496. 'importMultiple',
  18497. 'urlArgs',
  18498. 'javascriptEnabled',
  18499. 'pluginManager',
  18500. 'importantScope',
  18501. 'rewriteUrls' // option - whether to adjust URL's to be relative
  18502. ];
  18503. function isPathRelative(path) {
  18504. return !/^(?:[a-z-]+:|\/|#)/i.test(path);
  18505. }
  18506. function isPathLocalRelative(path) {
  18507. return path.charAt(0) === '.';
  18508. }
  18509. contexts.Eval = /** @class */ (function () {
  18510. function Eval(options, frames) {
  18511. copyFromOriginal(options, this, evalCopyProperties);
  18512. if (typeof this.paths === 'string') {
  18513. this.paths = [this.paths];
  18514. }
  18515. this.frames = frames || [];
  18516. this.importantScope = this.importantScope || [];
  18517. this.inCalc = false;
  18518. this.mathOn = true;
  18519. }
  18520. Eval.prototype.enterCalc = function () {
  18521. if (!this.calcStack) {
  18522. this.calcStack = [];
  18523. }
  18524. this.calcStack.push(true);
  18525. this.inCalc = true;
  18526. };
  18527. Eval.prototype.exitCalc = function () {
  18528. this.calcStack.pop();
  18529. if (!this.calcStack.length) {
  18530. this.inCalc = false;
  18531. }
  18532. };
  18533. Eval.prototype.inParenthesis = function () {
  18534. if (!this.parensStack) {
  18535. this.parensStack = [];
  18536. }
  18537. this.parensStack.push(true);
  18538. };
  18539. Eval.prototype.outOfParenthesis = function () {
  18540. this.parensStack.pop();
  18541. };
  18542. Eval.prototype.isMathOn = function (op) {
  18543. if (!this.mathOn) {
  18544. return false;
  18545. }
  18546. if (op === '/' && this.math !== Math$1.ALWAYS && (!this.parensStack || !this.parensStack.length)) {
  18547. return false;
  18548. }
  18549. if (this.math > Math$1.PARENS_DIVISION) {
  18550. return this.parensStack && this.parensStack.length;
  18551. }
  18552. return true;
  18553. };
  18554. Eval.prototype.pathRequiresRewrite = function (path) {
  18555. var isRelative = this.rewriteUrls === RewriteUrls.LOCAL ? isPathLocalRelative : isPathRelative;
  18556. return isRelative(path);
  18557. };
  18558. Eval.prototype.rewritePath = function (path, rootpath) {
  18559. var newPath;
  18560. rootpath = rootpath || '';
  18561. newPath = this.normalizePath(rootpath + path);
  18562. // If a path was explicit relative and the rootpath was not an absolute path
  18563. // we must ensure that the new path is also explicit relative.
  18564. if (isPathLocalRelative(path) &&
  18565. isPathRelative(rootpath) &&
  18566. isPathLocalRelative(newPath) === false) {
  18567. newPath = "./" + newPath;
  18568. }
  18569. return newPath;
  18570. };
  18571. Eval.prototype.normalizePath = function (path) {
  18572. var segments = path.split('/').reverse();
  18573. var segment;
  18574. path = [];
  18575. while (segments.length !== 0) {
  18576. segment = segments.pop();
  18577. switch (segment) {
  18578. case '.':
  18579. break;
  18580. case '..':
  18581. if ((path.length === 0) || (path[path.length - 1] === '..')) {
  18582. path.push(segment);
  18583. }
  18584. else {
  18585. path.pop();
  18586. }
  18587. break;
  18588. default:
  18589. path.push(segment);
  18590. break;
  18591. }
  18592. }
  18593. return path.join('/');
  18594. };
  18595. return Eval;
  18596. }());
  18597. function makeRegistry(base) {
  18598. return {
  18599. _data: {},
  18600. add: function (name, func) {
  18601. // precautionary case conversion, as later querying of
  18602. // the registry by function-caller uses lower case as well.
  18603. name = name.toLowerCase();
  18604. if (this._data.hasOwnProperty(name)) ;
  18605. this._data[name] = func;
  18606. },
  18607. addMultiple: function (functions) {
  18608. var _this = this;
  18609. Object.keys(functions).forEach(function (name) {
  18610. _this.add(name, functions[name]);
  18611. });
  18612. },
  18613. get: function (name) {
  18614. return this._data[name] || (base && base.get(name));
  18615. },
  18616. getLocalFunctions: function () {
  18617. return this._data;
  18618. },
  18619. inherit: function () {
  18620. return makeRegistry(this);
  18621. },
  18622. create: function (base) {
  18623. return makeRegistry(base);
  18624. }
  18625. };
  18626. }
  18627. var functionRegistry = makeRegistry(null);
  18628. var defaultFunc = {
  18629. eval: function () {
  18630. var v = this.value_;
  18631. var e = this.error_;
  18632. if (e) {
  18633. throw e;
  18634. }
  18635. if (v != null) {
  18636. return v ? Keyword.True : Keyword.False;
  18637. }
  18638. },
  18639. value: function (v) {
  18640. this.value_ = v;
  18641. },
  18642. error: function (e) {
  18643. this.error_ = e;
  18644. },
  18645. reset: function () {
  18646. this.value_ = this.error_ = null;
  18647. }
  18648. };
  18649. var Ruleset = function (selectors, rules, strictImports, visibilityInfo) {
  18650. this.selectors = selectors;
  18651. this.rules = rules;
  18652. this._lookups = {};
  18653. this._variables = null;
  18654. this._properties = null;
  18655. this.strictImports = strictImports;
  18656. this.copyVisibilityInfo(visibilityInfo);
  18657. this.allowRoot = true;
  18658. this.setParent(this.selectors, this);
  18659. this.setParent(this.rules, this);
  18660. };
  18661. Ruleset.prototype = new Node();
  18662. Ruleset.prototype.isRulesetLike = function () {
  18663. return true;
  18664. };
  18665. Ruleset.prototype.accept = function (visitor) {
  18666. if (this.paths) {
  18667. this.paths = visitor.visitArray(this.paths, true);
  18668. }
  18669. else if (this.selectors) {
  18670. this.selectors = visitor.visitArray(this.selectors);
  18671. }
  18672. if (this.rules && this.rules.length) {
  18673. this.rules = visitor.visitArray(this.rules);
  18674. }
  18675. };
  18676. Ruleset.prototype.eval = function (context) {
  18677. var selectors;
  18678. var selCnt;
  18679. var selector;
  18680. var i;
  18681. var hasVariable;
  18682. var hasOnePassingSelector = false;
  18683. if (this.selectors && (selCnt = this.selectors.length)) {
  18684. selectors = new Array(selCnt);
  18685. defaultFunc.error({
  18686. type: 'Syntax',
  18687. message: 'it is currently only allowed in parametric mixin guards,'
  18688. });
  18689. for (i = 0; i < selCnt; i++) {
  18690. selector = this.selectors[i].eval(context);
  18691. for (var j = 0; j < selector.elements.length; j++) {
  18692. if (selector.elements[j].isVariable) {
  18693. hasVariable = true;
  18694. break;
  18695. }
  18696. }
  18697. selectors[i] = selector;
  18698. if (selector.evaldCondition) {
  18699. hasOnePassingSelector = true;
  18700. }
  18701. }
  18702. if (hasVariable) {
  18703. var toParseSelectors = new Array(selCnt);
  18704. for (i = 0; i < selCnt; i++) {
  18705. selector = selectors[i];
  18706. toParseSelectors[i] = selector.toCSS(context);
  18707. }
  18708. this.parse.parseNode(toParseSelectors.join(','), ["selectors"], selectors[0].getIndex(), selectors[0].fileInfo(), function (err, result) {
  18709. if (result) {
  18710. selectors = flattenArray(result);
  18711. }
  18712. });
  18713. }
  18714. defaultFunc.reset();
  18715. }
  18716. else {
  18717. hasOnePassingSelector = true;
  18718. }
  18719. var rules = this.rules ? copyArray(this.rules) : null;
  18720. var ruleset = new Ruleset(selectors, rules, this.strictImports, this.visibilityInfo());
  18721. var rule;
  18722. var subRule;
  18723. ruleset.originalRuleset = this;
  18724. ruleset.root = this.root;
  18725. ruleset.firstRoot = this.firstRoot;
  18726. ruleset.allowImports = this.allowImports;
  18727. if (this.debugInfo) {
  18728. ruleset.debugInfo = this.debugInfo;
  18729. }
  18730. if (!hasOnePassingSelector) {
  18731. rules.length = 0;
  18732. }
  18733. // inherit a function registry from the frames stack when possible;
  18734. // otherwise from the global registry
  18735. ruleset.functionRegistry = (function (frames) {
  18736. var i = 0;
  18737. var n = frames.length;
  18738. var found;
  18739. for (; i !== n; ++i) {
  18740. found = frames[i].functionRegistry;
  18741. if (found) {
  18742. return found;
  18743. }
  18744. }
  18745. return functionRegistry;
  18746. })(context.frames).inherit();
  18747. // push the current ruleset to the frames stack
  18748. var ctxFrames = context.frames;
  18749. ctxFrames.unshift(ruleset);
  18750. // currrent selectors
  18751. var ctxSelectors = context.selectors;
  18752. if (!ctxSelectors) {
  18753. context.selectors = ctxSelectors = [];
  18754. }
  18755. ctxSelectors.unshift(this.selectors);
  18756. // Evaluate imports
  18757. if (ruleset.root || ruleset.allowImports || !ruleset.strictImports) {
  18758. ruleset.evalImports(context);
  18759. }
  18760. // Store the frames around mixin definitions,
  18761. // so they can be evaluated like closures when the time comes.
  18762. var rsRules = ruleset.rules;
  18763. for (i = 0; (rule = rsRules[i]); i++) {
  18764. if (rule.evalFirst) {
  18765. rsRules[i] = rule.eval(context);
  18766. }
  18767. }
  18768. var mediaBlockCount = (context.mediaBlocks && context.mediaBlocks.length) || 0;
  18769. // Evaluate mixin calls.
  18770. for (i = 0; (rule = rsRules[i]); i++) {
  18771. if (rule.type === 'MixinCall') {
  18772. /* jshint loopfunc:true */
  18773. rules = rule.eval(context).filter(function (r) {
  18774. if ((r instanceof Declaration) && r.variable) {
  18775. // do not pollute the scope if the variable is
  18776. // already there. consider returning false here
  18777. // but we need a way to "return" variable from mixins
  18778. return !(ruleset.variable(r.name));
  18779. }
  18780. return true;
  18781. });
  18782. rsRules.splice.apply(rsRules, [i, 1].concat(rules));
  18783. i += rules.length - 1;
  18784. ruleset.resetCache();
  18785. }
  18786. else if (rule.type === 'VariableCall') {
  18787. /* jshint loopfunc:true */
  18788. rules = rule.eval(context).rules.filter(function (r) {
  18789. if ((r instanceof Declaration) && r.variable) {
  18790. // do not pollute the scope at all
  18791. return false;
  18792. }
  18793. return true;
  18794. });
  18795. rsRules.splice.apply(rsRules, [i, 1].concat(rules));
  18796. i += rules.length - 1;
  18797. ruleset.resetCache();
  18798. }
  18799. }
  18800. // Evaluate everything else
  18801. for (i = 0; (rule = rsRules[i]); i++) {
  18802. if (!rule.evalFirst) {
  18803. rsRules[i] = rule = rule.eval ? rule.eval(context) : rule;
  18804. }
  18805. }
  18806. // Evaluate everything else
  18807. for (i = 0; (rule = rsRules[i]); i++) {
  18808. // for rulesets, check if it is a css guard and can be removed
  18809. if (rule instanceof Ruleset && rule.selectors && rule.selectors.length === 1) {
  18810. // check if it can be folded in (e.g. & where)
  18811. if (rule.selectors[0] && rule.selectors[0].isJustParentSelector()) {
  18812. rsRules.splice(i--, 1);
  18813. for (var j = 0; (subRule = rule.rules[j]); j++) {
  18814. if (subRule instanceof Node) {
  18815. subRule.copyVisibilityInfo(rule.visibilityInfo());
  18816. if (!(subRule instanceof Declaration) || !subRule.variable) {
  18817. rsRules.splice(++i, 0, subRule);
  18818. }
  18819. }
  18820. }
  18821. }
  18822. }
  18823. }
  18824. // Pop the stack
  18825. ctxFrames.shift();
  18826. ctxSelectors.shift();
  18827. if (context.mediaBlocks) {
  18828. for (i = mediaBlockCount; i < context.mediaBlocks.length; i++) {
  18829. context.mediaBlocks[i].bubbleSelectors(selectors);
  18830. }
  18831. }
  18832. return ruleset;
  18833. };
  18834. Ruleset.prototype.evalImports = function (context) {
  18835. var rules = this.rules;
  18836. var i;
  18837. var importRules;
  18838. if (!rules) {
  18839. return;
  18840. }
  18841. for (i = 0; i < rules.length; i++) {
  18842. if (rules[i].type === 'Import') {
  18843. importRules = rules[i].eval(context);
  18844. if (importRules && (importRules.length || importRules.length === 0)) {
  18845. rules.splice.apply(rules, [i, 1].concat(importRules));
  18846. i += importRules.length - 1;
  18847. }
  18848. else {
  18849. rules.splice(i, 1, importRules);
  18850. }
  18851. this.resetCache();
  18852. }
  18853. }
  18854. };
  18855. Ruleset.prototype.makeImportant = function () {
  18856. var result = new Ruleset(this.selectors, this.rules.map(function (r) {
  18857. if (r.makeImportant) {
  18858. return r.makeImportant();
  18859. }
  18860. else {
  18861. return r;
  18862. }
  18863. }), this.strictImports, this.visibilityInfo());
  18864. return result;
  18865. };
  18866. Ruleset.prototype.matchArgs = function (args) {
  18867. return !args || args.length === 0;
  18868. };
  18869. // lets you call a css selector with a guard
  18870. Ruleset.prototype.matchCondition = function (args, context) {
  18871. var lastSelector = this.selectors[this.selectors.length - 1];
  18872. if (!lastSelector.evaldCondition) {
  18873. return false;
  18874. }
  18875. if (lastSelector.condition &&
  18876. !lastSelector.condition.eval(new contexts.Eval(context, context.frames))) {
  18877. return false;
  18878. }
  18879. return true;
  18880. };
  18881. Ruleset.prototype.resetCache = function () {
  18882. this._rulesets = null;
  18883. this._variables = null;
  18884. this._properties = null;
  18885. this._lookups = {};
  18886. };
  18887. Ruleset.prototype.variables = function () {
  18888. if (!this._variables) {
  18889. this._variables = !this.rules ? {} : this.rules.reduce(function (hash, r) {
  18890. if (r instanceof Declaration && r.variable === true) {
  18891. hash[r.name] = r;
  18892. }
  18893. // when evaluating variables in an import statement, imports have not been eval'd
  18894. // so we need to go inside import statements.
  18895. // guard against root being a string (in the case of inlined less)
  18896. if (r.type === 'Import' && r.root && r.root.variables) {
  18897. var vars = r.root.variables();
  18898. for (var name_1 in vars) {
  18899. if (vars.hasOwnProperty(name_1)) {
  18900. hash[name_1] = r.root.variable(name_1);
  18901. }
  18902. }
  18903. }
  18904. return hash;
  18905. }, {});
  18906. }
  18907. return this._variables;
  18908. };
  18909. Ruleset.prototype.properties = function () {
  18910. if (!this._properties) {
  18911. this._properties = !this.rules ? {} : this.rules.reduce(function (hash, r) {
  18912. if (r instanceof Declaration && r.variable !== true) {
  18913. var name_2 = (r.name.length === 1) && (r.name[0] instanceof Keyword) ?
  18914. r.name[0].value : r.name;
  18915. // Properties don't overwrite as they can merge
  18916. if (!hash["$" + name_2]) {
  18917. hash["$" + name_2] = [r];
  18918. }
  18919. else {
  18920. hash["$" + name_2].push(r);
  18921. }
  18922. }
  18923. return hash;
  18924. }, {});
  18925. }
  18926. return this._properties;
  18927. };
  18928. Ruleset.prototype.variable = function (name) {
  18929. var decl = this.variables()[name];
  18930. if (decl) {
  18931. return this.parseValue(decl);
  18932. }
  18933. };
  18934. Ruleset.prototype.property = function (name) {
  18935. var decl = this.properties()[name];
  18936. if (decl) {
  18937. return this.parseValue(decl);
  18938. }
  18939. };
  18940. Ruleset.prototype.lastDeclaration = function () {
  18941. for (var i = this.rules.length; i > 0; i--) {
  18942. var decl = this.rules[i - 1];
  18943. if (decl instanceof Declaration) {
  18944. return this.parseValue(decl);
  18945. }
  18946. }
  18947. };
  18948. Ruleset.prototype.parseValue = function (toParse) {
  18949. var self = this;
  18950. function transformDeclaration(decl) {
  18951. if (decl.value instanceof Anonymous && !decl.parsed) {
  18952. if (typeof decl.value.value === 'string') {
  18953. this.parse.parseNode(decl.value.value, ['value', 'important'], decl.value.getIndex(), decl.fileInfo(), function (err, result) {
  18954. if (err) {
  18955. decl.parsed = true;
  18956. }
  18957. if (result) {
  18958. decl.value = result[0];
  18959. decl.important = result[1] || '';
  18960. decl.parsed = true;
  18961. }
  18962. });
  18963. }
  18964. else {
  18965. decl.parsed = true;
  18966. }
  18967. return decl;
  18968. }
  18969. else {
  18970. return decl;
  18971. }
  18972. }
  18973. if (!Array.isArray(toParse)) {
  18974. return transformDeclaration.call(self, toParse);
  18975. }
  18976. else {
  18977. var nodes_1 = [];
  18978. toParse.forEach(function (n) {
  18979. nodes_1.push(transformDeclaration.call(self, n));
  18980. });
  18981. return nodes_1;
  18982. }
  18983. };
  18984. Ruleset.prototype.rulesets = function () {
  18985. if (!this.rules) {
  18986. return [];
  18987. }
  18988. var filtRules = [];
  18989. var rules = this.rules;
  18990. var i;
  18991. var rule;
  18992. for (i = 0; (rule = rules[i]); i++) {
  18993. if (rule.isRuleset) {
  18994. filtRules.push(rule);
  18995. }
  18996. }
  18997. return filtRules;
  18998. };
  18999. Ruleset.prototype.prependRule = function (rule) {
  19000. var rules = this.rules;
  19001. if (rules) {
  19002. rules.unshift(rule);
  19003. }
  19004. else {
  19005. this.rules = [rule];
  19006. }
  19007. this.setParent(rule, this);
  19008. };
  19009. Ruleset.prototype.find = function (selector, self, filter) {
  19010. if (self === void 0) { self = this; }
  19011. var rules = [];
  19012. var match;
  19013. var foundMixins;
  19014. var key = selector.toCSS();
  19015. if (key in this._lookups) {
  19016. return this._lookups[key];
  19017. }
  19018. this.rulesets().forEach(function (rule) {
  19019. if (rule !== self) {
  19020. for (var j = 0; j < rule.selectors.length; j++) {
  19021. match = selector.match(rule.selectors[j]);
  19022. if (match) {
  19023. if (selector.elements.length > match) {
  19024. if (!filter || filter(rule)) {
  19025. foundMixins = rule.find(new Selector(selector.elements.slice(match)), self, filter);
  19026. for (var i = 0; i < foundMixins.length; ++i) {
  19027. foundMixins[i].path.push(rule);
  19028. }
  19029. Array.prototype.push.apply(rules, foundMixins);
  19030. }
  19031. }
  19032. else {
  19033. rules.push({ rule: rule, path: [] });
  19034. }
  19035. break;
  19036. }
  19037. }
  19038. }
  19039. });
  19040. this._lookups[key] = rules;
  19041. return rules;
  19042. };
  19043. Ruleset.prototype.genCSS = function (context, output) {
  19044. var i;
  19045. var j;
  19046. var charsetRuleNodes = [];
  19047. var ruleNodes = [];
  19048. var // Line number debugging
  19049. debugInfo$1;
  19050. var rule;
  19051. var path;
  19052. context.tabLevel = (context.tabLevel || 0);
  19053. if (!this.root) {
  19054. context.tabLevel++;
  19055. }
  19056. var tabRuleStr = context.compress ? '' : Array(context.tabLevel + 1).join(' ');
  19057. var tabSetStr = context.compress ? '' : Array(context.tabLevel).join(' ');
  19058. var sep;
  19059. var charsetNodeIndex = 0;
  19060. var importNodeIndex = 0;
  19061. for (i = 0; (rule = this.rules[i]); i++) {
  19062. if (rule instanceof Comment) {
  19063. if (importNodeIndex === i) {
  19064. importNodeIndex++;
  19065. }
  19066. ruleNodes.push(rule);
  19067. }
  19068. else if (rule.isCharset && rule.isCharset()) {
  19069. ruleNodes.splice(charsetNodeIndex, 0, rule);
  19070. charsetNodeIndex++;
  19071. importNodeIndex++;
  19072. }
  19073. else if (rule.type === 'Import') {
  19074. ruleNodes.splice(importNodeIndex, 0, rule);
  19075. importNodeIndex++;
  19076. }
  19077. else {
  19078. ruleNodes.push(rule);
  19079. }
  19080. }
  19081. ruleNodes = charsetRuleNodes.concat(ruleNodes);
  19082. // If this is the root node, we don't render
  19083. // a selector, or {}.
  19084. if (!this.root) {
  19085. debugInfo$1 = debugInfo(context, this, tabSetStr);
  19086. if (debugInfo$1) {
  19087. output.add(debugInfo$1);
  19088. output.add(tabSetStr);
  19089. }
  19090. var paths = this.paths;
  19091. var pathCnt = paths.length;
  19092. var pathSubCnt = void 0;
  19093. sep = context.compress ? ',' : (",\n" + tabSetStr);
  19094. for (i = 0; i < pathCnt; i++) {
  19095. path = paths[i];
  19096. if (!(pathSubCnt = path.length)) {
  19097. continue;
  19098. }
  19099. if (i > 0) {
  19100. output.add(sep);
  19101. }
  19102. context.firstSelector = true;
  19103. path[0].genCSS(context, output);
  19104. context.firstSelector = false;
  19105. for (j = 1; j < pathSubCnt; j++) {
  19106. path[j].genCSS(context, output);
  19107. }
  19108. }
  19109. output.add((context.compress ? '{' : ' {\n') + tabRuleStr);
  19110. }
  19111. // Compile rules and rulesets
  19112. for (i = 0; (rule = ruleNodes[i]); i++) {
  19113. if (i + 1 === ruleNodes.length) {
  19114. context.lastRule = true;
  19115. }
  19116. var currentLastRule = context.lastRule;
  19117. if (rule.isRulesetLike(rule)) {
  19118. context.lastRule = false;
  19119. }
  19120. if (rule.genCSS) {
  19121. rule.genCSS(context, output);
  19122. }
  19123. else if (rule.value) {
  19124. output.add(rule.value.toString());
  19125. }
  19126. context.lastRule = currentLastRule;
  19127. if (!context.lastRule && rule.isVisible()) {
  19128. output.add(context.compress ? '' : ("\n" + tabRuleStr));
  19129. }
  19130. else {
  19131. context.lastRule = false;
  19132. }
  19133. }
  19134. if (!this.root) {
  19135. output.add((context.compress ? '}' : "\n" + tabSetStr + "}"));
  19136. context.tabLevel--;
  19137. }
  19138. if (!output.isEmpty() && !context.compress && this.firstRoot) {
  19139. output.add('\n');
  19140. }
  19141. };
  19142. Ruleset.prototype.joinSelectors = function (paths, context, selectors) {
  19143. for (var s = 0; s < selectors.length; s++) {
  19144. this.joinSelector(paths, context, selectors[s]);
  19145. }
  19146. };
  19147. Ruleset.prototype.joinSelector = function (paths, context, selector) {
  19148. function createParenthesis(elementsToPak, originalElement) {
  19149. var replacementParen;
  19150. var j;
  19151. if (elementsToPak.length === 0) {
  19152. replacementParen = new Paren(elementsToPak[0]);
  19153. }
  19154. else {
  19155. var insideParent = new Array(elementsToPak.length);
  19156. for (j = 0; j < elementsToPak.length; j++) {
  19157. insideParent[j] = new Element(null, elementsToPak[j], originalElement.isVariable, originalElement._index, originalElement._fileInfo);
  19158. }
  19159. replacementParen = new Paren(new Selector(insideParent));
  19160. }
  19161. return replacementParen;
  19162. }
  19163. function createSelector(containedElement, originalElement) {
  19164. var element;
  19165. var selector;
  19166. element = new Element(null, containedElement, originalElement.isVariable, originalElement._index, originalElement._fileInfo);
  19167. selector = new Selector([element]);
  19168. return selector;
  19169. }
  19170. // joins selector path from `beginningPath` with selector path in `addPath`
  19171. // `replacedElement` contains element that is being replaced by `addPath`
  19172. // returns concatenated path
  19173. function addReplacementIntoPath(beginningPath, addPath, replacedElement, originalSelector) {
  19174. var newSelectorPath;
  19175. var lastSelector;
  19176. var newJoinedSelector;
  19177. // our new selector path
  19178. newSelectorPath = [];
  19179. // construct the joined selector - if & is the first thing this will be empty,
  19180. // if not newJoinedSelector will be the last set of elements in the selector
  19181. if (beginningPath.length > 0) {
  19182. newSelectorPath = copyArray(beginningPath);
  19183. lastSelector = newSelectorPath.pop();
  19184. newJoinedSelector = originalSelector.createDerived(copyArray(lastSelector.elements));
  19185. }
  19186. else {
  19187. newJoinedSelector = originalSelector.createDerived([]);
  19188. }
  19189. if (addPath.length > 0) {
  19190. // /deep/ is a CSS4 selector - (removed, so should deprecate)
  19191. // that is valid without anything in front of it
  19192. // so if the & does not have a combinator that is "" or " " then
  19193. // and there is a combinator on the parent, then grab that.
  19194. // this also allows + a { & .b { .a & { ... though not sure why you would want to do that
  19195. var combinator = replacedElement.combinator;
  19196. var parentEl = addPath[0].elements[0];
  19197. if (combinator.emptyOrWhitespace && !parentEl.combinator.emptyOrWhitespace) {
  19198. combinator = parentEl.combinator;
  19199. }
  19200. // join the elements so far with the first part of the parent
  19201. newJoinedSelector.elements.push(new Element(combinator, parentEl.value, replacedElement.isVariable, replacedElement._index, replacedElement._fileInfo));
  19202. newJoinedSelector.elements = newJoinedSelector.elements.concat(addPath[0].elements.slice(1));
  19203. }
  19204. // now add the joined selector - but only if it is not empty
  19205. if (newJoinedSelector.elements.length !== 0) {
  19206. newSelectorPath.push(newJoinedSelector);
  19207. }
  19208. // put together the parent selectors after the join (e.g. the rest of the parent)
  19209. if (addPath.length > 1) {
  19210. var restOfPath = addPath.slice(1);
  19211. restOfPath = restOfPath.map(function (selector) { return selector.createDerived(selector.elements, []); });
  19212. newSelectorPath = newSelectorPath.concat(restOfPath);
  19213. }
  19214. return newSelectorPath;
  19215. }
  19216. // joins selector path from `beginningPath` with every selector path in `addPaths` array
  19217. // `replacedElement` contains element that is being replaced by `addPath`
  19218. // returns array with all concatenated paths
  19219. function addAllReplacementsIntoPath(beginningPath, addPaths, replacedElement, originalSelector, result) {
  19220. var j;
  19221. for (j = 0; j < beginningPath.length; j++) {
  19222. var newSelectorPath = addReplacementIntoPath(beginningPath[j], addPaths, replacedElement, originalSelector);
  19223. result.push(newSelectorPath);
  19224. }
  19225. return result;
  19226. }
  19227. function mergeElementsOnToSelectors(elements, selectors) {
  19228. var i;
  19229. var sel;
  19230. if (elements.length === 0) {
  19231. return;
  19232. }
  19233. if (selectors.length === 0) {
  19234. selectors.push([new Selector(elements)]);
  19235. return;
  19236. }
  19237. for (i = 0; (sel = selectors[i]); i++) {
  19238. // if the previous thing in sel is a parent this needs to join on to it
  19239. if (sel.length > 0) {
  19240. sel[sel.length - 1] = sel[sel.length - 1].createDerived(sel[sel.length - 1].elements.concat(elements));
  19241. }
  19242. else {
  19243. sel.push(new Selector(elements));
  19244. }
  19245. }
  19246. }
  19247. // replace all parent selectors inside `inSelector` by content of `context` array
  19248. // resulting selectors are returned inside `paths` array
  19249. // returns true if `inSelector` contained at least one parent selector
  19250. function replaceParentSelector(paths, context, inSelector) {
  19251. // The paths are [[Selector]]
  19252. // The first list is a list of comma separated selectors
  19253. // The inner list is a list of inheritance separated selectors
  19254. // e.g.
  19255. // .a, .b {
  19256. // .c {
  19257. // }
  19258. // }
  19259. // == [[.a] [.c]] [[.b] [.c]]
  19260. //
  19261. var i;
  19262. var j;
  19263. var k;
  19264. var currentElements;
  19265. var newSelectors;
  19266. var selectorsMultiplied;
  19267. var sel;
  19268. var el;
  19269. var hadParentSelector = false;
  19270. var length;
  19271. var lastSelector;
  19272. function findNestedSelector(element) {
  19273. var maybeSelector;
  19274. if (!(element.value instanceof Paren)) {
  19275. return null;
  19276. }
  19277. maybeSelector = element.value.value;
  19278. if (!(maybeSelector instanceof Selector)) {
  19279. return null;
  19280. }
  19281. return maybeSelector;
  19282. }
  19283. // the elements from the current selector so far
  19284. currentElements = [];
  19285. // the current list of new selectors to add to the path.
  19286. // We will build it up. We initiate it with one empty selector as we "multiply" the new selectors
  19287. // by the parents
  19288. newSelectors = [
  19289. []
  19290. ];
  19291. for (i = 0; (el = inSelector.elements[i]); i++) {
  19292. // non parent reference elements just get added
  19293. if (el.value !== '&') {
  19294. var nestedSelector = findNestedSelector(el);
  19295. if (nestedSelector != null) {
  19296. // merge the current list of non parent selector elements
  19297. // on to the current list of selectors to add
  19298. mergeElementsOnToSelectors(currentElements, newSelectors);
  19299. var nestedPaths = [];
  19300. var replaced = void 0;
  19301. var replacedNewSelectors = [];
  19302. replaced = replaceParentSelector(nestedPaths, context, nestedSelector);
  19303. hadParentSelector = hadParentSelector || replaced;
  19304. // the nestedPaths array should have only one member - replaceParentSelector does not multiply selectors
  19305. for (k = 0; k < nestedPaths.length; k++) {
  19306. var replacementSelector = createSelector(createParenthesis(nestedPaths[k], el), el);
  19307. addAllReplacementsIntoPath(newSelectors, [replacementSelector], el, inSelector, replacedNewSelectors);
  19308. }
  19309. newSelectors = replacedNewSelectors;
  19310. currentElements = [];
  19311. }
  19312. else {
  19313. currentElements.push(el);
  19314. }
  19315. }
  19316. else {
  19317. hadParentSelector = true;
  19318. // the new list of selectors to add
  19319. selectorsMultiplied = [];
  19320. // merge the current list of non parent selector elements
  19321. // on to the current list of selectors to add
  19322. mergeElementsOnToSelectors(currentElements, newSelectors);
  19323. // loop through our current selectors
  19324. for (j = 0; j < newSelectors.length; j++) {
  19325. sel = newSelectors[j];
  19326. // if we don't have any parent paths, the & might be in a mixin so that it can be used
  19327. // whether there are parents or not
  19328. if (context.length === 0) {
  19329. // the combinator used on el should now be applied to the next element instead so that
  19330. // it is not lost
  19331. if (sel.length > 0) {
  19332. sel[0].elements.push(new Element(el.combinator, '', el.isVariable, el._index, el._fileInfo));
  19333. }
  19334. selectorsMultiplied.push(sel);
  19335. }
  19336. else {
  19337. // and the parent selectors
  19338. for (k = 0; k < context.length; k++) {
  19339. // We need to put the current selectors
  19340. // then join the last selector's elements on to the parents selectors
  19341. var newSelectorPath = addReplacementIntoPath(sel, context[k], el, inSelector);
  19342. // add that to our new set of selectors
  19343. selectorsMultiplied.push(newSelectorPath);
  19344. }
  19345. }
  19346. }
  19347. // our new selectors has been multiplied, so reset the state
  19348. newSelectors = selectorsMultiplied;
  19349. currentElements = [];
  19350. }
  19351. }
  19352. // if we have any elements left over (e.g. .a& .b == .b)
  19353. // add them on to all the current selectors
  19354. mergeElementsOnToSelectors(currentElements, newSelectors);
  19355. for (i = 0; i < newSelectors.length; i++) {
  19356. length = newSelectors[i].length;
  19357. if (length > 0) {
  19358. paths.push(newSelectors[i]);
  19359. lastSelector = newSelectors[i][length - 1];
  19360. newSelectors[i][length - 1] = lastSelector.createDerived(lastSelector.elements, inSelector.extendList);
  19361. }
  19362. }
  19363. return hadParentSelector;
  19364. }
  19365. function deriveSelector(visibilityInfo, deriveFrom) {
  19366. var newSelector = deriveFrom.createDerived(deriveFrom.elements, deriveFrom.extendList, deriveFrom.evaldCondition);
  19367. newSelector.copyVisibilityInfo(visibilityInfo);
  19368. return newSelector;
  19369. }
  19370. // joinSelector code follows
  19371. var i;
  19372. var newPaths;
  19373. var hadParentSelector;
  19374. newPaths = [];
  19375. hadParentSelector = replaceParentSelector(newPaths, context, selector);
  19376. if (!hadParentSelector) {
  19377. if (context.length > 0) {
  19378. newPaths = [];
  19379. for (i = 0; i < context.length; i++) {
  19380. var concatenated = context[i].map(deriveSelector.bind(this, selector.visibilityInfo()));
  19381. concatenated.push(selector);
  19382. newPaths.push(concatenated);
  19383. }
  19384. }
  19385. else {
  19386. newPaths = [[selector]];
  19387. }
  19388. }
  19389. for (i = 0; i < newPaths.length; i++) {
  19390. paths.push(newPaths[i]);
  19391. }
  19392. };
  19393. Ruleset.prototype.type = 'Ruleset';
  19394. Ruleset.prototype.isRuleset = true;
  19395. var AtRule = function (name, value, rules, index, currentFileInfo, debugInfo, isRooted, visibilityInfo) {
  19396. var i;
  19397. this.name = name;
  19398. this.value = (value instanceof Node) ? value : (value ? new Anonymous(value) : value);
  19399. if (rules) {
  19400. if (Array.isArray(rules)) {
  19401. this.rules = rules;
  19402. }
  19403. else {
  19404. this.rules = [rules];
  19405. this.rules[0].selectors = (new Selector([], null, null, index, currentFileInfo)).createEmptySelectors();
  19406. }
  19407. for (i = 0; i < this.rules.length; i++) {
  19408. this.rules[i].allowImports = true;
  19409. }
  19410. this.setParent(this.rules, this);
  19411. }
  19412. this._index = index;
  19413. this._fileInfo = currentFileInfo;
  19414. this.debugInfo = debugInfo;
  19415. this.isRooted = isRooted || false;
  19416. this.copyVisibilityInfo(visibilityInfo);
  19417. this.allowRoot = true;
  19418. };
  19419. AtRule.prototype = new Node();
  19420. AtRule.prototype.accept = function (visitor) {
  19421. var value = this.value;
  19422. var rules = this.rules;
  19423. if (rules) {
  19424. this.rules = visitor.visitArray(rules);
  19425. }
  19426. if (value) {
  19427. this.value = visitor.visit(value);
  19428. }
  19429. };
  19430. AtRule.prototype.isRulesetLike = function () {
  19431. return this.rules || !this.isCharset();
  19432. };
  19433. AtRule.prototype.isCharset = function () {
  19434. return '@charset' === this.name;
  19435. };
  19436. AtRule.prototype.genCSS = function (context, output) {
  19437. var value = this.value;
  19438. var rules = this.rules;
  19439. output.add(this.name, this.fileInfo(), this.getIndex());
  19440. if (value) {
  19441. output.add(' ');
  19442. value.genCSS(context, output);
  19443. }
  19444. if (rules) {
  19445. this.outputRuleset(context, output, rules);
  19446. }
  19447. else {
  19448. output.add(';');
  19449. }
  19450. };
  19451. AtRule.prototype.eval = function (context) {
  19452. var mediaPathBackup;
  19453. var mediaBlocksBackup;
  19454. var value = this.value;
  19455. var rules = this.rules;
  19456. // media stored inside other atrule should not bubble over it
  19457. // backpup media bubbling information
  19458. mediaPathBackup = context.mediaPath;
  19459. mediaBlocksBackup = context.mediaBlocks;
  19460. // deleted media bubbling information
  19461. context.mediaPath = [];
  19462. context.mediaBlocks = [];
  19463. if (value) {
  19464. value = value.eval(context);
  19465. }
  19466. if (rules) {
  19467. // assuming that there is only one rule at this point - that is how parser constructs the rule
  19468. rules = [rules[0].eval(context)];
  19469. rules[0].root = true;
  19470. }
  19471. // restore media bubbling information
  19472. context.mediaPath = mediaPathBackup;
  19473. context.mediaBlocks = mediaBlocksBackup;
  19474. return new AtRule(this.name, value, rules, this.getIndex(), this.fileInfo(), this.debugInfo, this.isRooted, this.visibilityInfo());
  19475. };
  19476. AtRule.prototype.variable = function (name) {
  19477. if (this.rules) {
  19478. // assuming that there is only one rule at this point - that is how parser constructs the rule
  19479. return Ruleset.prototype.variable.call(this.rules[0], name);
  19480. }
  19481. };
  19482. AtRule.prototype.find = function () {
  19483. var args = [];
  19484. for (var _i = 0; _i < arguments.length; _i++) {
  19485. args[_i] = arguments[_i];
  19486. }
  19487. if (this.rules) {
  19488. // assuming that there is only one rule at this point - that is how parser constructs the rule
  19489. return Ruleset.prototype.find.apply(this.rules[0], args);
  19490. }
  19491. };
  19492. AtRule.prototype.rulesets = function () {
  19493. if (this.rules) {
  19494. // assuming that there is only one rule at this point - that is how parser constructs the rule
  19495. return Ruleset.prototype.rulesets.apply(this.rules[0]);
  19496. }
  19497. };
  19498. AtRule.prototype.outputRuleset = function (context, output, rules) {
  19499. var ruleCnt = rules.length;
  19500. var i;
  19501. context.tabLevel = (context.tabLevel | 0) + 1;
  19502. // Compressed
  19503. if (context.compress) {
  19504. output.add('{');
  19505. for (i = 0; i < ruleCnt; i++) {
  19506. rules[i].genCSS(context, output);
  19507. }
  19508. output.add('}');
  19509. context.tabLevel--;
  19510. return;
  19511. }
  19512. // Non-compressed
  19513. var tabSetStr = "\n" + Array(context.tabLevel).join(' ');
  19514. var tabRuleStr = tabSetStr + " ";
  19515. if (!ruleCnt) {
  19516. output.add(" {" + tabSetStr + "}");
  19517. }
  19518. else {
  19519. output.add(" {" + tabRuleStr);
  19520. rules[0].genCSS(context, output);
  19521. for (i = 1; i < ruleCnt; i++) {
  19522. output.add(tabRuleStr);
  19523. rules[i].genCSS(context, output);
  19524. }
  19525. output.add(tabSetStr + "}");
  19526. }
  19527. context.tabLevel--;
  19528. };
  19529. AtRule.prototype.type = 'AtRule';
  19530. var DetachedRuleset = function (ruleset, frames) {
  19531. this.ruleset = ruleset;
  19532. this.frames = frames;
  19533. this.setParent(this.ruleset, this);
  19534. };
  19535. DetachedRuleset.prototype = new Node();
  19536. DetachedRuleset.prototype.accept = function (visitor) {
  19537. this.ruleset = visitor.visit(this.ruleset);
  19538. };
  19539. DetachedRuleset.prototype.eval = function (context) {
  19540. var frames = this.frames || copyArray(context.frames);
  19541. return new DetachedRuleset(this.ruleset, frames);
  19542. };
  19543. DetachedRuleset.prototype.callEval = function (context) {
  19544. return this.ruleset.eval(this.frames ? new contexts.Eval(context, this.frames.concat(context.frames)) : context);
  19545. };
  19546. DetachedRuleset.prototype.type = 'DetachedRuleset';
  19547. DetachedRuleset.prototype.evalFirst = true;
  19548. var Unit = function (numerator, denominator, backupUnit) {
  19549. this.numerator = numerator ? copyArray(numerator).sort() : [];
  19550. this.denominator = denominator ? copyArray(denominator).sort() : [];
  19551. if (backupUnit) {
  19552. this.backupUnit = backupUnit;
  19553. }
  19554. else if (numerator && numerator.length) {
  19555. this.backupUnit = numerator[0];
  19556. }
  19557. };
  19558. Unit.prototype = new Node();
  19559. Unit.prototype.clone = function () {
  19560. return new Unit(copyArray(this.numerator), copyArray(this.denominator), this.backupUnit);
  19561. };
  19562. Unit.prototype.genCSS = function (context, output) {
  19563. // Dimension checks the unit is singular and throws an error if in strict math mode.
  19564. var strictUnits = context && context.strictUnits;
  19565. if (this.numerator.length === 1) {
  19566. output.add(this.numerator[0]); // the ideal situation
  19567. }
  19568. else if (!strictUnits && this.backupUnit) {
  19569. output.add(this.backupUnit);
  19570. }
  19571. else if (!strictUnits && this.denominator.length) {
  19572. output.add(this.denominator[0]);
  19573. }
  19574. };
  19575. Unit.prototype.toString = function () {
  19576. var i;
  19577. var returnStr = this.numerator.join('*');
  19578. for (i = 0; i < this.denominator.length; i++) {
  19579. returnStr += "/" + this.denominator[i];
  19580. }
  19581. return returnStr;
  19582. };
  19583. Unit.prototype.compare = function (other) {
  19584. return this.is(other.toString()) ? 0 : undefined;
  19585. };
  19586. Unit.prototype.is = function (unitString) {
  19587. return this.toString().toUpperCase() === unitString.toUpperCase();
  19588. };
  19589. Unit.prototype.isLength = function () {
  19590. return RegExp('^(px|em|ex|ch|rem|in|cm|mm|pc|pt|ex|vw|vh|vmin|vmax)$', 'gi').test(this.toCSS());
  19591. };
  19592. Unit.prototype.isEmpty = function () {
  19593. return this.numerator.length === 0 && this.denominator.length === 0;
  19594. };
  19595. Unit.prototype.isSingular = function () {
  19596. return this.numerator.length <= 1 && this.denominator.length === 0;
  19597. };
  19598. Unit.prototype.map = function (callback) {
  19599. var i;
  19600. for (i = 0; i < this.numerator.length; i++) {
  19601. this.numerator[i] = callback(this.numerator[i], false);
  19602. }
  19603. for (i = 0; i < this.denominator.length; i++) {
  19604. this.denominator[i] = callback(this.denominator[i], true);
  19605. }
  19606. };
  19607. Unit.prototype.usedUnits = function () {
  19608. var group;
  19609. var result = {};
  19610. var mapUnit;
  19611. var groupName;
  19612. mapUnit = function (atomicUnit) {
  19613. /* jshint loopfunc:true */
  19614. if (group.hasOwnProperty(atomicUnit) && !result[groupName]) {
  19615. result[groupName] = atomicUnit;
  19616. }
  19617. return atomicUnit;
  19618. };
  19619. for (groupName in unitConversions) {
  19620. if (unitConversions.hasOwnProperty(groupName)) {
  19621. group = unitConversions[groupName];
  19622. this.map(mapUnit);
  19623. }
  19624. }
  19625. return result;
  19626. };
  19627. Unit.prototype.cancel = function () {
  19628. var counter = {};
  19629. var atomicUnit;
  19630. var i;
  19631. for (i = 0; i < this.numerator.length; i++) {
  19632. atomicUnit = this.numerator[i];
  19633. counter[atomicUnit] = (counter[atomicUnit] || 0) + 1;
  19634. }
  19635. for (i = 0; i < this.denominator.length; i++) {
  19636. atomicUnit = this.denominator[i];
  19637. counter[atomicUnit] = (counter[atomicUnit] || 0) - 1;
  19638. }
  19639. this.numerator = [];
  19640. this.denominator = [];
  19641. for (atomicUnit in counter) {
  19642. if (counter.hasOwnProperty(atomicUnit)) {
  19643. var count = counter[atomicUnit];
  19644. if (count > 0) {
  19645. for (i = 0; i < count; i++) {
  19646. this.numerator.push(atomicUnit);
  19647. }
  19648. }
  19649. else if (count < 0) {
  19650. for (i = 0; i < -count; i++) {
  19651. this.denominator.push(atomicUnit);
  19652. }
  19653. }
  19654. }
  19655. }
  19656. this.numerator.sort();
  19657. this.denominator.sort();
  19658. };
  19659. Unit.prototype.type = 'Unit';
  19660. //
  19661. // A number with a unit
  19662. //
  19663. var Dimension = function (value, unit) {
  19664. this.value = parseFloat(value);
  19665. if (isNaN(this.value)) {
  19666. throw new Error('Dimension is not a number.');
  19667. }
  19668. this.unit = (unit && unit instanceof Unit) ? unit :
  19669. new Unit(unit ? [unit] : undefined);
  19670. this.setParent(this.unit, this);
  19671. };
  19672. Dimension.prototype = new Node();
  19673. Dimension.prototype.accept = function (visitor) {
  19674. this.unit = visitor.visit(this.unit);
  19675. };
  19676. Dimension.prototype.eval = function (context) {
  19677. return this;
  19678. };
  19679. Dimension.prototype.toColor = function () {
  19680. return new Color([this.value, this.value, this.value]);
  19681. };
  19682. Dimension.prototype.genCSS = function (context, output) {
  19683. if ((context && context.strictUnits) && !this.unit.isSingular()) {
  19684. throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: " + this.unit.toString());
  19685. }
  19686. var value = this.fround(context, this.value);
  19687. var strValue = String(value);
  19688. if (value !== 0 && value < 0.000001 && value > -0.000001) {
  19689. // would be output 1e-6 etc.
  19690. strValue = value.toFixed(20).replace(/0+$/, '');
  19691. }
  19692. if (context && context.compress) {
  19693. // Zero values doesn't need a unit
  19694. if (value === 0 && this.unit.isLength()) {
  19695. output.add(strValue);
  19696. return;
  19697. }
  19698. // Float values doesn't need a leading zero
  19699. if (value > 0 && value < 1) {
  19700. strValue = (strValue).substr(1);
  19701. }
  19702. }
  19703. output.add(strValue);
  19704. this.unit.genCSS(context, output);
  19705. };
  19706. // In an operation between two Dimensions,
  19707. // we default to the first Dimension's unit,
  19708. // so `1px + 2` will yield `3px`.
  19709. Dimension.prototype.operate = function (context, op, other) {
  19710. /* jshint noempty:false */
  19711. var value = this._operate(context, op, this.value, other.value);
  19712. var unit = this.unit.clone();
  19713. if (op === '+' || op === '-') {
  19714. if (unit.numerator.length === 0 && unit.denominator.length === 0) {
  19715. unit = other.unit.clone();
  19716. if (this.unit.backupUnit) {
  19717. unit.backupUnit = this.unit.backupUnit;
  19718. }
  19719. }
  19720. else if (other.unit.numerator.length === 0 && unit.denominator.length === 0) ;
  19721. else {
  19722. other = other.convertTo(this.unit.usedUnits());
  19723. if (context.strictUnits && other.unit.toString() !== unit.toString()) {
  19724. throw new Error("Incompatible units. Change the units or use the unit function. " +
  19725. ("Bad units: '" + unit.toString() + "' and '" + other.unit.toString() + "'."));
  19726. }
  19727. value = this._operate(context, op, this.value, other.value);
  19728. }
  19729. }
  19730. else if (op === '*') {
  19731. unit.numerator = unit.numerator.concat(other.unit.numerator).sort();
  19732. unit.denominator = unit.denominator.concat(other.unit.denominator).sort();
  19733. unit.cancel();
  19734. }
  19735. else if (op === '/') {
  19736. unit.numerator = unit.numerator.concat(other.unit.denominator).sort();
  19737. unit.denominator = unit.denominator.concat(other.unit.numerator).sort();
  19738. unit.cancel();
  19739. }
  19740. return new Dimension(value, unit);
  19741. };
  19742. Dimension.prototype.compare = function (other) {
  19743. var a;
  19744. var b;
  19745. if (!(other instanceof Dimension)) {
  19746. return undefined;
  19747. }
  19748. if (this.unit.isEmpty() || other.unit.isEmpty()) {
  19749. a = this;
  19750. b = other;
  19751. }
  19752. else {
  19753. a = this.unify();
  19754. b = other.unify();
  19755. if (a.unit.compare(b.unit) !== 0) {
  19756. return undefined;
  19757. }
  19758. }
  19759. return Node.numericCompare(a.value, b.value);
  19760. };
  19761. Dimension.prototype.unify = function () {
  19762. return this.convertTo({ length: 'px', duration: 's', angle: 'rad' });
  19763. };
  19764. Dimension.prototype.convertTo = function (conversions) {
  19765. var value = this.value;
  19766. var unit = this.unit.clone();
  19767. var i;
  19768. var groupName;
  19769. var group;
  19770. var targetUnit;
  19771. var derivedConversions = {};
  19772. var applyUnit;
  19773. if (typeof conversions === 'string') {
  19774. for (i in unitConversions) {
  19775. if (unitConversions[i].hasOwnProperty(conversions)) {
  19776. derivedConversions = {};
  19777. derivedConversions[i] = conversions;
  19778. }
  19779. }
  19780. conversions = derivedConversions;
  19781. }
  19782. applyUnit = function (atomicUnit, denominator) {
  19783. /* jshint loopfunc:true */
  19784. if (group.hasOwnProperty(atomicUnit)) {
  19785. if (denominator) {
  19786. value = value / (group[atomicUnit] / group[targetUnit]);
  19787. }
  19788. else {
  19789. value = value * (group[atomicUnit] / group[targetUnit]);
  19790. }
  19791. return targetUnit;
  19792. }
  19793. return atomicUnit;
  19794. };
  19795. for (groupName in conversions) {
  19796. if (conversions.hasOwnProperty(groupName)) {
  19797. targetUnit = conversions[groupName];
  19798. group = unitConversions[groupName];
  19799. unit.map(applyUnit);
  19800. }
  19801. }
  19802. unit.cancel();
  19803. return new Dimension(value, unit);
  19804. };
  19805. Dimension.prototype.type = 'Dimension';
  19806. var MATH$1 = Math$1;
  19807. var Operation = function (op, operands, isSpaced) {
  19808. this.op = op.trim();
  19809. this.operands = operands;
  19810. this.isSpaced = isSpaced;
  19811. };
  19812. Operation.prototype = new Node();
  19813. Operation.prototype.accept = function (visitor) {
  19814. this.operands = visitor.visitArray(this.operands);
  19815. };
  19816. Operation.prototype.eval = function (context) {
  19817. var a = this.operands[0].eval(context);
  19818. var b = this.operands[1].eval(context);
  19819. var op;
  19820. if (context.isMathOn(this.op)) {
  19821. op = this.op === './' ? '/' : this.op;
  19822. if (a instanceof Dimension && b instanceof Color) {
  19823. a = a.toColor();
  19824. }
  19825. if (b instanceof Dimension && a instanceof Color) {
  19826. b = b.toColor();
  19827. }
  19828. if (!a.operate) {
  19829. if (a instanceof Operation && a.op === '/' && context.math === MATH$1.PARENS_DIVISION) {
  19830. return new Operation(this.op, [a, b], this.isSpaced);
  19831. }
  19832. throw { type: 'Operation',
  19833. message: 'Operation on an invalid type' };
  19834. }
  19835. return a.operate(context, op, b);
  19836. }
  19837. else {
  19838. return new Operation(this.op, [a, b], this.isSpaced);
  19839. }
  19840. };
  19841. Operation.prototype.genCSS = function (context, output) {
  19842. this.operands[0].genCSS(context, output);
  19843. if (this.isSpaced) {
  19844. output.add(' ');
  19845. }
  19846. output.add(this.op);
  19847. if (this.isSpaced) {
  19848. output.add(' ');
  19849. }
  19850. this.operands[1].genCSS(context, output);
  19851. };
  19852. Operation.prototype.type = 'Operation';
  19853. var MATH$2 = Math$1;
  19854. var Expression = function (value, noSpacing) {
  19855. this.value = value;
  19856. this.noSpacing = noSpacing;
  19857. if (!value) {
  19858. throw new Error('Expression requires an array parameter');
  19859. }
  19860. };
  19861. Expression.prototype = new Node();
  19862. Expression.prototype.accept = function (visitor) {
  19863. this.value = visitor.visitArray(this.value);
  19864. };
  19865. Expression.prototype.eval = function (context) {
  19866. var returnValue;
  19867. var mathOn = context.isMathOn();
  19868. var inParenthesis = this.parens &&
  19869. (context.math !== MATH$2.STRICT_LEGACY || !this.parensInOp);
  19870. var doubleParen = false;
  19871. if (inParenthesis) {
  19872. context.inParenthesis();
  19873. }
  19874. if (this.value.length > 1) {
  19875. returnValue = new Expression(this.value.map(function (e) {
  19876. if (!e.eval) {
  19877. return e;
  19878. }
  19879. return e.eval(context);
  19880. }), this.noSpacing);
  19881. }
  19882. else if (this.value.length === 1) {
  19883. if (this.value[0].parens && !this.value[0].parensInOp && !context.inCalc) {
  19884. doubleParen = true;
  19885. }
  19886. returnValue = this.value[0].eval(context);
  19887. }
  19888. else {
  19889. returnValue = this;
  19890. }
  19891. if (inParenthesis) {
  19892. context.outOfParenthesis();
  19893. }
  19894. if (this.parens && this.parensInOp && !mathOn && !doubleParen
  19895. && (!(returnValue instanceof Dimension))) {
  19896. returnValue = new Paren(returnValue);
  19897. }
  19898. return returnValue;
  19899. };
  19900. Expression.prototype.genCSS = function (context, output) {
  19901. for (var i = 0; i < this.value.length; i++) {
  19902. this.value[i].genCSS(context, output);
  19903. if (!this.noSpacing && i + 1 < this.value.length) {
  19904. output.add(' ');
  19905. }
  19906. }
  19907. };
  19908. Expression.prototype.throwAwayComments = function () {
  19909. this.value = this.value.filter(function (v) { return !(v instanceof Comment); });
  19910. };
  19911. Expression.prototype.type = 'Expression';
  19912. var functionCaller = /** @class */ (function () {
  19913. function functionCaller(name, context, index, currentFileInfo) {
  19914. this.name = name.toLowerCase();
  19915. this.index = index;
  19916. this.context = context;
  19917. this.currentFileInfo = currentFileInfo;
  19918. this.func = context.frames[0].functionRegistry.get(this.name);
  19919. }
  19920. functionCaller.prototype.isValid = function () {
  19921. return Boolean(this.func);
  19922. };
  19923. functionCaller.prototype.call = function (args) {
  19924. var _this = this;
  19925. var evalArgs = this.func.evalArgs;
  19926. if (evalArgs !== false) {
  19927. args = args.map(function (a) { return a.eval(_this.context); });
  19928. }
  19929. // This code is terrible and should be replaced as per this issue...
  19930. // https://github.com/less/less.js/issues/2477
  19931. if (Array.isArray(args)) {
  19932. args = args.filter(function (item) {
  19933. if (item.type === 'Comment') {
  19934. return false;
  19935. }
  19936. return true;
  19937. })
  19938. .map(function (item) {
  19939. if (item.type === 'Expression') {
  19940. var subNodes = item.value.filter(function (item) {
  19941. if (item.type === 'Comment') {
  19942. return false;
  19943. }
  19944. return true;
  19945. });
  19946. if (subNodes.length === 1) {
  19947. return subNodes[0];
  19948. }
  19949. else {
  19950. return new Expression(subNodes);
  19951. }
  19952. }
  19953. return item;
  19954. });
  19955. }
  19956. if (evalArgs === false) {
  19957. return this.func.apply(this, __spreadArrays([this.context], args));
  19958. }
  19959. return this.func.apply(this, args);
  19960. };
  19961. return functionCaller;
  19962. }());
  19963. //
  19964. // A function call node.
  19965. //
  19966. var Call = function (name, args, index, currentFileInfo) {
  19967. this.name = name;
  19968. this.args = args;
  19969. this.calc = name === 'calc';
  19970. this._index = index;
  19971. this._fileInfo = currentFileInfo;
  19972. };
  19973. Call.prototype = new Node();
  19974. Call.prototype.accept = function (visitor) {
  19975. if (this.args) {
  19976. this.args = visitor.visitArray(this.args);
  19977. }
  19978. };
  19979. //
  19980. // When evaluating a function call,
  19981. // we either find the function in the functionRegistry,
  19982. // in which case we call it, passing the evaluated arguments,
  19983. // if this returns null or we cannot find the function, we
  19984. // simply print it out as it appeared originally [2].
  19985. //
  19986. // The reason why we evaluate the arguments, is in the case where
  19987. // we try to pass a variable to a function, like: `saturate(@color)`.
  19988. // The function should receive the value, not the variable.
  19989. //
  19990. Call.prototype.eval = function (context) {
  19991. var _this = this;
  19992. /**
  19993. * Turn off math for calc(), and switch back on for evaluating nested functions
  19994. */
  19995. var currentMathContext = context.mathOn;
  19996. context.mathOn = !this.calc;
  19997. if (this.calc || context.inCalc) {
  19998. context.enterCalc();
  19999. }
  20000. var exitCalc = function () {
  20001. if (_this.calc || context.inCalc) {
  20002. context.exitCalc();
  20003. }
  20004. context.mathOn = currentMathContext;
  20005. };
  20006. var result;
  20007. var funcCaller = new functionCaller(this.name, context, this.getIndex(), this.fileInfo());
  20008. if (funcCaller.isValid()) {
  20009. try {
  20010. result = funcCaller.call(this.args);
  20011. exitCalc();
  20012. }
  20013. catch (e) {
  20014. if (e.hasOwnProperty('line') && e.hasOwnProperty('column')) {
  20015. throw e;
  20016. }
  20017. throw {
  20018. type: e.type || 'Runtime',
  20019. message: "error evaluating function `" + this.name + "`" + (e.message ? ": " + e.message : ''),
  20020. index: this.getIndex(),
  20021. filename: this.fileInfo().filename,
  20022. line: e.lineNumber,
  20023. column: e.columnNumber
  20024. };
  20025. }
  20026. if (result !== null && result !== undefined) {
  20027. // Results that that are not nodes are cast as Anonymous nodes
  20028. // Falsy values or booleans are returned as empty nodes
  20029. if (!(result instanceof Node)) {
  20030. if (!result || result === true) {
  20031. result = new Anonymous(null);
  20032. }
  20033. else {
  20034. result = new Anonymous(result.toString());
  20035. }
  20036. }
  20037. result._index = this._index;
  20038. result._fileInfo = this._fileInfo;
  20039. return result;
  20040. }
  20041. }
  20042. var args = this.args.map(function (a) { return a.eval(context); });
  20043. exitCalc();
  20044. return new Call(this.name, args, this.getIndex(), this.fileInfo());
  20045. };
  20046. Call.prototype.genCSS = function (context, output) {
  20047. output.add(this.name + "(", this.fileInfo(), this.getIndex());
  20048. for (var i = 0; i < this.args.length; i++) {
  20049. this.args[i].genCSS(context, output);
  20050. if (i + 1 < this.args.length) {
  20051. output.add(', ');
  20052. }
  20053. }
  20054. output.add(')');
  20055. };
  20056. Call.prototype.type = 'Call';
  20057. var Variable = function (name, index, currentFileInfo) {
  20058. this.name = name;
  20059. this._index = index;
  20060. this._fileInfo = currentFileInfo;
  20061. };
  20062. Variable.prototype = new Node();
  20063. Variable.prototype.eval = function (context) {
  20064. var variable;
  20065. var name = this.name;
  20066. if (name.indexOf('@@') === 0) {
  20067. name = "@" + new Variable(name.slice(1), this.getIndex(), this.fileInfo()).eval(context).value;
  20068. }
  20069. if (this.evaluating) {
  20070. throw { type: 'Name', message: "Recursive variable definition for " + name, filename: this.fileInfo().filename,
  20071. index: this.getIndex() };
  20072. }
  20073. this.evaluating = true;
  20074. variable = this.find(context.frames, function (frame) {
  20075. var v = frame.variable(name);
  20076. if (v) {
  20077. if (v.important) {
  20078. var importantScope = context.importantScope[context.importantScope.length - 1];
  20079. importantScope.important = v.important;
  20080. }
  20081. // If in calc, wrap vars in a function call to cascade evaluate args first
  20082. if (context.inCalc) {
  20083. return (new Call('_SELF', [v.value])).eval(context);
  20084. }
  20085. else {
  20086. return v.value.eval(context);
  20087. }
  20088. }
  20089. });
  20090. if (variable) {
  20091. this.evaluating = false;
  20092. return variable;
  20093. }
  20094. else {
  20095. throw { type: 'Name', message: "variable " + name + " is undefined", filename: this.fileInfo().filename,
  20096. index: this.getIndex() };
  20097. }
  20098. };
  20099. Variable.prototype.find = function (obj, fun) {
  20100. for (var i = 0, r = void 0; i < obj.length; i++) {
  20101. r = fun.call(obj, obj[i]);
  20102. if (r) {
  20103. return r;
  20104. }
  20105. }
  20106. return null;
  20107. };
  20108. Variable.prototype.type = 'Variable';
  20109. var Property = function (name, index, currentFileInfo) {
  20110. this.name = name;
  20111. this._index = index;
  20112. this._fileInfo = currentFileInfo;
  20113. };
  20114. Property.prototype = new Node();
  20115. Property.prototype.eval = function (context) {
  20116. var property;
  20117. var name = this.name;
  20118. // TODO: shorten this reference
  20119. var mergeRules = context.pluginManager.less.visitors.ToCSSVisitor.prototype._mergeRules;
  20120. if (this.evaluating) {
  20121. throw { type: 'Name', message: "Recursive property reference for " + name, filename: this.fileInfo().filename,
  20122. index: this.getIndex() };
  20123. }
  20124. this.evaluating = true;
  20125. property = this.find(context.frames, function (frame) {
  20126. var v;
  20127. var vArr = frame.property(name);
  20128. if (vArr) {
  20129. for (var i = 0; i < vArr.length; i++) {
  20130. v = vArr[i];
  20131. vArr[i] = new Declaration(v.name, v.value, v.important, v.merge, v.index, v.currentFileInfo, v.inline, v.variable);
  20132. }
  20133. mergeRules(vArr);
  20134. v = vArr[vArr.length - 1];
  20135. if (v.important) {
  20136. var importantScope = context.importantScope[context.importantScope.length - 1];
  20137. importantScope.important = v.important;
  20138. }
  20139. v = v.value.eval(context);
  20140. return v;
  20141. }
  20142. });
  20143. if (property) {
  20144. this.evaluating = false;
  20145. return property;
  20146. }
  20147. else {
  20148. throw { type: 'Name', message: "Property '" + name + "' is undefined", filename: this.currentFileInfo.filename,
  20149. index: this.index };
  20150. }
  20151. };
  20152. Property.prototype.find = function (obj, fun) {
  20153. for (var i = 0, r = void 0; i < obj.length; i++) {
  20154. r = fun.call(obj, obj[i]);
  20155. if (r) {
  20156. return r;
  20157. }
  20158. }
  20159. return null;
  20160. };
  20161. Property.prototype.type = 'Property';
  20162. var Attribute = function (key, op, value) {
  20163. this.key = key;
  20164. this.op = op;
  20165. this.value = value;
  20166. };
  20167. Attribute.prototype = new Node();
  20168. Attribute.prototype.eval = function (context) {
  20169. return new Attribute(this.key.eval ? this.key.eval(context) : this.key, this.op, (this.value && this.value.eval) ? this.value.eval(context) : this.value);
  20170. };
  20171. Attribute.prototype.genCSS = function (context, output) {
  20172. output.add(this.toCSS(context));
  20173. };
  20174. Attribute.prototype.toCSS = function (context) {
  20175. var value = this.key.toCSS ? this.key.toCSS(context) : this.key;
  20176. if (this.op) {
  20177. value += this.op;
  20178. value += (this.value.toCSS ? this.value.toCSS(context) : this.value);
  20179. }
  20180. return "[" + value + "]";
  20181. };
  20182. Attribute.prototype.type = 'Attribute';
  20183. var Quoted = function (str, content, escaped, index, currentFileInfo) {
  20184. this.escaped = (escaped == null) ? true : escaped;
  20185. this.value = content || '';
  20186. this.quote = str.charAt(0);
  20187. this._index = index;
  20188. this._fileInfo = currentFileInfo;
  20189. this.variableRegex = /@\{([\w-]+)\}/g;
  20190. this.propRegex = /\$\{([\w-]+)\}/g;
  20191. this.allowRoot = escaped;
  20192. };
  20193. Quoted.prototype = new Node();
  20194. Quoted.prototype.genCSS = function (context, output) {
  20195. if (!this.escaped) {
  20196. output.add(this.quote, this.fileInfo(), this.getIndex());
  20197. }
  20198. output.add(this.value);
  20199. if (!this.escaped) {
  20200. output.add(this.quote);
  20201. }
  20202. };
  20203. Quoted.prototype.containsVariables = function () {
  20204. return this.value.match(this.variableRegex);
  20205. };
  20206. Quoted.prototype.eval = function (context) {
  20207. var that = this;
  20208. var value = this.value;
  20209. var variableReplacement = function (_, name) {
  20210. var v = new Variable("@" + name, that.getIndex(), that.fileInfo()).eval(context, true);
  20211. return (v instanceof Quoted) ? v.value : v.toCSS();
  20212. };
  20213. var propertyReplacement = function (_, name) {
  20214. var v = new Property("$" + name, that.getIndex(), that.fileInfo()).eval(context, true);
  20215. return (v instanceof Quoted) ? v.value : v.toCSS();
  20216. };
  20217. function iterativeReplace(value, regexp, replacementFnc) {
  20218. var evaluatedValue = value;
  20219. do {
  20220. value = evaluatedValue.toString();
  20221. evaluatedValue = value.replace(regexp, replacementFnc);
  20222. } while (value !== evaluatedValue);
  20223. return evaluatedValue;
  20224. }
  20225. value = iterativeReplace(value, this.variableRegex, variableReplacement);
  20226. value = iterativeReplace(value, this.propRegex, propertyReplacement);
  20227. return new Quoted(this.quote + value + this.quote, value, this.escaped, this.getIndex(), this.fileInfo());
  20228. };
  20229. Quoted.prototype.compare = function (other) {
  20230. // when comparing quoted strings allow the quote to differ
  20231. if (other.type === 'Quoted' && !this.escaped && !other.escaped) {
  20232. return Node.numericCompare(this.value, other.value);
  20233. }
  20234. else {
  20235. return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined;
  20236. }
  20237. };
  20238. Quoted.prototype.type = 'Quoted';
  20239. var URL = function (val, index, currentFileInfo, isEvald) {
  20240. this.value = val;
  20241. this._index = index;
  20242. this._fileInfo = currentFileInfo;
  20243. this.isEvald = isEvald;
  20244. };
  20245. URL.prototype = new Node();
  20246. URL.prototype.accept = function (visitor) {
  20247. this.value = visitor.visit(this.value);
  20248. };
  20249. URL.prototype.genCSS = function (context, output) {
  20250. output.add('url(');
  20251. this.value.genCSS(context, output);
  20252. output.add(')');
  20253. };
  20254. URL.prototype.eval = function (context) {
  20255. var val = this.value.eval(context);
  20256. var rootpath;
  20257. if (!this.isEvald) {
  20258. // Add the rootpath if the URL requires a rewrite
  20259. rootpath = this.fileInfo() && this.fileInfo().rootpath;
  20260. if (typeof rootpath === 'string' &&
  20261. typeof val.value === 'string' &&
  20262. context.pathRequiresRewrite(val.value)) {
  20263. if (!val.quote) {
  20264. rootpath = escapePath(rootpath);
  20265. }
  20266. val.value = context.rewritePath(val.value, rootpath);
  20267. }
  20268. else {
  20269. val.value = context.normalizePath(val.value);
  20270. }
  20271. // Add url args if enabled
  20272. if (context.urlArgs) {
  20273. if (!val.value.match(/^\s*data:/)) {
  20274. var delimiter = val.value.indexOf('?') === -1 ? '?' : '&';
  20275. var urlArgs = delimiter + context.urlArgs;
  20276. if (val.value.indexOf('#') !== -1) {
  20277. val.value = val.value.replace('#', urlArgs + "#");
  20278. }
  20279. else {
  20280. val.value += urlArgs;
  20281. }
  20282. }
  20283. }
  20284. }
  20285. return new URL(val, this.getIndex(), this.fileInfo(), true);
  20286. };
  20287. URL.prototype.type = 'Url';
  20288. function escapePath(path) {
  20289. return path.replace(/[\(\)'"\s]/g, function (match) { return "\\" + match; });
  20290. }
  20291. var Media = function (value, features, index, currentFileInfo, visibilityInfo) {
  20292. this._index = index;
  20293. this._fileInfo = currentFileInfo;
  20294. var selectors = (new Selector([], null, null, this._index, this._fileInfo)).createEmptySelectors();
  20295. this.features = new Value(features);
  20296. this.rules = [new Ruleset(selectors, value)];
  20297. this.rules[0].allowImports = true;
  20298. this.copyVisibilityInfo(visibilityInfo);
  20299. this.allowRoot = true;
  20300. this.setParent(selectors, this);
  20301. this.setParent(this.features, this);
  20302. this.setParent(this.rules, this);
  20303. };
  20304. Media.prototype = new AtRule();
  20305. Media.prototype.isRulesetLike = function () {
  20306. return true;
  20307. };
  20308. Media.prototype.accept = function (visitor) {
  20309. if (this.features) {
  20310. this.features = visitor.visit(this.features);
  20311. }
  20312. if (this.rules) {
  20313. this.rules = visitor.visitArray(this.rules);
  20314. }
  20315. };
  20316. Media.prototype.genCSS = function (context, output) {
  20317. output.add('@media ', this._fileInfo, this._index);
  20318. this.features.genCSS(context, output);
  20319. this.outputRuleset(context, output, this.rules);
  20320. };
  20321. Media.prototype.eval = function (context) {
  20322. if (!context.mediaBlocks) {
  20323. context.mediaBlocks = [];
  20324. context.mediaPath = [];
  20325. }
  20326. var media = new Media(null, [], this._index, this._fileInfo, this.visibilityInfo());
  20327. if (this.debugInfo) {
  20328. this.rules[0].debugInfo = this.debugInfo;
  20329. media.debugInfo = this.debugInfo;
  20330. }
  20331. media.features = this.features.eval(context);
  20332. context.mediaPath.push(media);
  20333. context.mediaBlocks.push(media);
  20334. this.rules[0].functionRegistry = context.frames[0].functionRegistry.inherit();
  20335. context.frames.unshift(this.rules[0]);
  20336. media.rules = [this.rules[0].eval(context)];
  20337. context.frames.shift();
  20338. context.mediaPath.pop();
  20339. return context.mediaPath.length === 0 ? media.evalTop(context) :
  20340. media.evalNested(context);
  20341. };
  20342. Media.prototype.evalTop = function (context) {
  20343. var result = this;
  20344. // Render all dependent Media blocks.
  20345. if (context.mediaBlocks.length > 1) {
  20346. var selectors = (new Selector([], null, null, this.getIndex(), this.fileInfo())).createEmptySelectors();
  20347. result = new Ruleset(selectors, context.mediaBlocks);
  20348. result.multiMedia = true;
  20349. result.copyVisibilityInfo(this.visibilityInfo());
  20350. this.setParent(result, this);
  20351. }
  20352. delete context.mediaBlocks;
  20353. delete context.mediaPath;
  20354. return result;
  20355. };
  20356. Media.prototype.evalNested = function (context) {
  20357. var i;
  20358. var value;
  20359. var path = context.mediaPath.concat([this]);
  20360. // Extract the media-query conditions separated with `,` (OR).
  20361. for (i = 0; i < path.length; i++) {
  20362. value = path[i].features instanceof Value ?
  20363. path[i].features.value : path[i].features;
  20364. path[i] = Array.isArray(value) ? value : [value];
  20365. }
  20366. // Trace all permutations to generate the resulting media-query.
  20367. //
  20368. // (a, b and c) with nested (d, e) ->
  20369. // a and d
  20370. // a and e
  20371. // b and c and d
  20372. // b and c and e
  20373. this.features = new Value(this.permute(path).map(function (path) {
  20374. path = path.map(function (fragment) { return fragment.toCSS ? fragment : new Anonymous(fragment); });
  20375. for (i = path.length - 1; i > 0; i--) {
  20376. path.splice(i, 0, new Anonymous('and'));
  20377. }
  20378. return new Expression(path);
  20379. }));
  20380. this.setParent(this.features, this);
  20381. // Fake a tree-node that doesn't output anything.
  20382. return new Ruleset([], []);
  20383. };
  20384. Media.prototype.permute = function (arr) {
  20385. if (arr.length === 0) {
  20386. return [];
  20387. }
  20388. else if (arr.length === 1) {
  20389. return arr[0];
  20390. }
  20391. else {
  20392. var result = [];
  20393. var rest = this.permute(arr.slice(1));
  20394. for (var i = 0; i < rest.length; i++) {
  20395. for (var j = 0; j < arr[0].length; j++) {
  20396. result.push([arr[0][j]].concat(rest[i]));
  20397. }
  20398. }
  20399. return result;
  20400. }
  20401. };
  20402. Media.prototype.bubbleSelectors = function (selectors) {
  20403. if (!selectors) {
  20404. return;
  20405. }
  20406. this.rules = [new Ruleset(copyArray(selectors), [this.rules[0]])];
  20407. this.setParent(this.rules, this);
  20408. };
  20409. Media.prototype.type = 'Media';
  20410. //
  20411. // CSS @import node
  20412. //
  20413. // The general strategy here is that we don't want to wait
  20414. // for the parsing to be completed, before we start importing
  20415. // the file. That's because in the context of a browser,
  20416. // most of the time will be spent waiting for the server to respond.
  20417. //
  20418. // On creation, we push the import path to our import queue, though
  20419. // `import,push`, we also pass it a callback, which it'll call once
  20420. // the file has been fetched, and parsed.
  20421. //
  20422. var Import = function (path, features, options, index, currentFileInfo, visibilityInfo) {
  20423. this.options = options;
  20424. this._index = index;
  20425. this._fileInfo = currentFileInfo;
  20426. this.path = path;
  20427. this.features = features;
  20428. this.allowRoot = true;
  20429. if (this.options.less !== undefined || this.options.inline) {
  20430. this.css = !this.options.less || this.options.inline;
  20431. }
  20432. else {
  20433. var pathValue = this.getPath();
  20434. if (pathValue && /[#\.\&\?]css([\?;].*)?$/.test(pathValue)) {
  20435. this.css = true;
  20436. }
  20437. }
  20438. this.copyVisibilityInfo(visibilityInfo);
  20439. this.setParent(this.features, this);
  20440. this.setParent(this.path, this);
  20441. };
  20442. Import.prototype = new Node();
  20443. Import.prototype.accept = function (visitor) {
  20444. if (this.features) {
  20445. this.features = visitor.visit(this.features);
  20446. }
  20447. this.path = visitor.visit(this.path);
  20448. if (!this.options.isPlugin && !this.options.inline && this.root) {
  20449. this.root = visitor.visit(this.root);
  20450. }
  20451. };
  20452. Import.prototype.genCSS = function (context, output) {
  20453. if (this.css && this.path._fileInfo.reference === undefined) {
  20454. output.add('@import ', this._fileInfo, this._index);
  20455. this.path.genCSS(context, output);
  20456. if (this.features) {
  20457. output.add(' ');
  20458. this.features.genCSS(context, output);
  20459. }
  20460. output.add(';');
  20461. }
  20462. };
  20463. Import.prototype.getPath = function () {
  20464. return (this.path instanceof URL) ?
  20465. this.path.value.value : this.path.value;
  20466. };
  20467. Import.prototype.isVariableImport = function () {
  20468. var path = this.path;
  20469. if (path instanceof URL) {
  20470. path = path.value;
  20471. }
  20472. if (path instanceof Quoted) {
  20473. return path.containsVariables();
  20474. }
  20475. return true;
  20476. };
  20477. Import.prototype.evalForImport = function (context) {
  20478. var path = this.path;
  20479. if (path instanceof URL) {
  20480. path = path.value;
  20481. }
  20482. return new Import(path.eval(context), this.features, this.options, this._index, this._fileInfo, this.visibilityInfo());
  20483. };
  20484. Import.prototype.evalPath = function (context) {
  20485. var path = this.path.eval(context);
  20486. var fileInfo = this._fileInfo;
  20487. if (!(path instanceof URL)) {
  20488. // Add the rootpath if the URL requires a rewrite
  20489. var pathValue = path.value;
  20490. if (fileInfo &&
  20491. pathValue &&
  20492. context.pathRequiresRewrite(pathValue)) {
  20493. path.value = context.rewritePath(pathValue, fileInfo.rootpath);
  20494. }
  20495. else {
  20496. path.value = context.normalizePath(path.value);
  20497. }
  20498. }
  20499. return path;
  20500. };
  20501. Import.prototype.eval = function (context) {
  20502. var result = this.doEval(context);
  20503. if (this.options.reference || this.blocksVisibility()) {
  20504. if (result.length || result.length === 0) {
  20505. result.forEach(function (node) {
  20506. node.addVisibilityBlock();
  20507. });
  20508. }
  20509. else {
  20510. result.addVisibilityBlock();
  20511. }
  20512. }
  20513. return result;
  20514. };
  20515. Import.prototype.doEval = function (context) {
  20516. var ruleset;
  20517. var registry;
  20518. var features = this.features && this.features.eval(context);
  20519. if (this.options.isPlugin) {
  20520. if (this.root && this.root.eval) {
  20521. try {
  20522. this.root.eval(context);
  20523. }
  20524. catch (e) {
  20525. e.message = 'Plugin error during evaluation';
  20526. throw new LessError(e, this.root.imports, this.root.filename);
  20527. }
  20528. }
  20529. registry = context.frames[0] && context.frames[0].functionRegistry;
  20530. if (registry && this.root && this.root.functions) {
  20531. registry.addMultiple(this.root.functions);
  20532. }
  20533. return [];
  20534. }
  20535. if (this.skip) {
  20536. if (typeof this.skip === 'function') {
  20537. this.skip = this.skip();
  20538. }
  20539. if (this.skip) {
  20540. return [];
  20541. }
  20542. }
  20543. if (this.options.inline) {
  20544. var contents = new Anonymous(this.root, 0, {
  20545. filename: this.importedFilename,
  20546. reference: this.path._fileInfo && this.path._fileInfo.reference
  20547. }, true, true);
  20548. return this.features ? new Media([contents], this.features.value) : [contents];
  20549. }
  20550. else if (this.css) {
  20551. var newImport = new Import(this.evalPath(context), features, this.options, this._index);
  20552. if (!newImport.css && this.error) {
  20553. throw this.error;
  20554. }
  20555. return newImport;
  20556. }
  20557. else if (this.root) {
  20558. ruleset = new Ruleset(null, copyArray(this.root.rules));
  20559. ruleset.evalImports(context);
  20560. return this.features ? new Media(ruleset.rules, this.features.value) : ruleset.rules;
  20561. }
  20562. else {
  20563. return [];
  20564. }
  20565. };
  20566. Import.prototype.type = 'Import';
  20567. var JsEvalNode = function () { };
  20568. JsEvalNode.prototype = new Node();
  20569. JsEvalNode.prototype.evaluateJavaScript = function (expression, context) {
  20570. var result;
  20571. var that = this;
  20572. var evalContext = {};
  20573. if (!context.javascriptEnabled) {
  20574. throw { message: 'Inline JavaScript is not enabled. Is it set in your options?',
  20575. filename: this.fileInfo().filename,
  20576. index: this.getIndex() };
  20577. }
  20578. expression = expression.replace(/@\{([\w-]+)\}/g, function (_, name) { return that.jsify(new Variable("@" + name, that.getIndex(), that.fileInfo()).eval(context)); });
  20579. try {
  20580. expression = new Function("return (" + expression + ")");
  20581. }
  20582. catch (e) {
  20583. throw { message: "JavaScript evaluation error: " + e.message + " from `" + expression + "`", filename: this.fileInfo().filename,
  20584. index: this.getIndex() };
  20585. }
  20586. var variables = context.frames[0].variables();
  20587. for (var k in variables) {
  20588. if (variables.hasOwnProperty(k)) {
  20589. /* jshint loopfunc:true */
  20590. evalContext[k.slice(1)] = {
  20591. value: variables[k].value,
  20592. toJS: function () {
  20593. return this.value.eval(context).toCSS();
  20594. }
  20595. };
  20596. }
  20597. }
  20598. try {
  20599. result = expression.call(evalContext);
  20600. }
  20601. catch (e) {
  20602. throw { message: "JavaScript evaluation error: '" + e.name + ": " + e.message.replace(/["]/g, '\'') + "'", filename: this.fileInfo().filename,
  20603. index: this.getIndex() };
  20604. }
  20605. return result;
  20606. };
  20607. JsEvalNode.prototype.jsify = function (obj) {
  20608. if (Array.isArray(obj.value) && (obj.value.length > 1)) {
  20609. return "[" + obj.value.map(function (v) { return v.toCSS(); }).join(', ') + "]";
  20610. }
  20611. else {
  20612. return obj.toCSS();
  20613. }
  20614. };
  20615. var JavaScript = function (string, escaped, index, currentFileInfo) {
  20616. this.escaped = escaped;
  20617. this.expression = string;
  20618. this._index = index;
  20619. this._fileInfo = currentFileInfo;
  20620. };
  20621. JavaScript.prototype = new JsEvalNode();
  20622. JavaScript.prototype.eval = function (context) {
  20623. var result = this.evaluateJavaScript(this.expression, context);
  20624. var type = typeof result;
  20625. if (type === 'number' && !isNaN(result)) {
  20626. return new Dimension(result);
  20627. }
  20628. else if (type === 'string') {
  20629. return new Quoted("\"" + result + "\"", result, this.escaped, this._index);
  20630. }
  20631. else if (Array.isArray(result)) {
  20632. return new Anonymous(result.join(', '));
  20633. }
  20634. else {
  20635. return new Anonymous(result);
  20636. }
  20637. };
  20638. JavaScript.prototype.type = 'JavaScript';
  20639. var Assignment = function (key, val) {
  20640. this.key = key;
  20641. this.value = val;
  20642. };
  20643. Assignment.prototype = new Node();
  20644. Assignment.prototype.accept = function (visitor) {
  20645. this.value = visitor.visit(this.value);
  20646. };
  20647. Assignment.prototype.eval = function (context) {
  20648. if (this.value.eval) {
  20649. return new Assignment(this.key, this.value.eval(context));
  20650. }
  20651. return this;
  20652. };
  20653. Assignment.prototype.genCSS = function (context, output) {
  20654. output.add(this.key + "=");
  20655. if (this.value.genCSS) {
  20656. this.value.genCSS(context, output);
  20657. }
  20658. else {
  20659. output.add(this.value);
  20660. }
  20661. };
  20662. Assignment.prototype.type = 'Assignment';
  20663. var Condition = function (op, l, r, i, negate) {
  20664. this.op = op.trim();
  20665. this.lvalue = l;
  20666. this.rvalue = r;
  20667. this._index = i;
  20668. this.negate = negate;
  20669. };
  20670. Condition.prototype = new Node();
  20671. Condition.prototype.accept = function (visitor) {
  20672. this.lvalue = visitor.visit(this.lvalue);
  20673. this.rvalue = visitor.visit(this.rvalue);
  20674. };
  20675. Condition.prototype.eval = function (context) {
  20676. var result = (function (op, a, b) {
  20677. switch (op) {
  20678. case 'and': return a && b;
  20679. case 'or': return a || b;
  20680. default:
  20681. switch (Node.compare(a, b)) {
  20682. case -1:
  20683. return op === '<' || op === '=<' || op === '<=';
  20684. case 0:
  20685. return op === '=' || op === '>=' || op === '=<' || op === '<=';
  20686. case 1:
  20687. return op === '>' || op === '>=';
  20688. default:
  20689. return false;
  20690. }
  20691. }
  20692. })(this.op, this.lvalue.eval(context), this.rvalue.eval(context));
  20693. return this.negate ? !result : result;
  20694. };
  20695. Condition.prototype.type = 'Condition';
  20696. var UnicodeDescriptor = function (value) {
  20697. this.value = value;
  20698. };
  20699. UnicodeDescriptor.prototype = new Node();
  20700. UnicodeDescriptor.prototype.type = 'UnicodeDescriptor';
  20701. var Negative = function (node) {
  20702. this.value = node;
  20703. };
  20704. Negative.prototype = new Node();
  20705. Negative.prototype.genCSS = function (context, output) {
  20706. output.add('-');
  20707. this.value.genCSS(context, output);
  20708. };
  20709. Negative.prototype.eval = function (context) {
  20710. if (context.isMathOn()) {
  20711. return (new Operation('*', [new Dimension(-1), this.value])).eval(context);
  20712. }
  20713. return new Negative(this.value.eval(context));
  20714. };
  20715. Negative.prototype.type = 'Negative';
  20716. var Extend = function (selector, option, index, currentFileInfo, visibilityInfo) {
  20717. this.selector = selector;
  20718. this.option = option;
  20719. this.object_id = Extend.next_id++;
  20720. this.parent_ids = [this.object_id];
  20721. this._index = index;
  20722. this._fileInfo = currentFileInfo;
  20723. this.copyVisibilityInfo(visibilityInfo);
  20724. this.allowRoot = true;
  20725. switch (option) {
  20726. case 'all':
  20727. this.allowBefore = true;
  20728. this.allowAfter = true;
  20729. break;
  20730. default:
  20731. this.allowBefore = false;
  20732. this.allowAfter = false;
  20733. break;
  20734. }
  20735. this.setParent(this.selector, this);
  20736. };
  20737. Extend.prototype = new Node();
  20738. Extend.prototype.accept = function (visitor) {
  20739. this.selector = visitor.visit(this.selector);
  20740. };
  20741. Extend.prototype.eval = function (context) {
  20742. return new Extend(this.selector.eval(context), this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());
  20743. };
  20744. Extend.prototype.clone = function (context) {
  20745. return new Extend(this.selector, this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());
  20746. };
  20747. // it concatenates (joins) all selectors in selector array
  20748. Extend.prototype.findSelfSelectors = function (selectors) {
  20749. var selfElements = [];
  20750. var i;
  20751. var selectorElements;
  20752. for (i = 0; i < selectors.length; i++) {
  20753. selectorElements = selectors[i].elements;
  20754. // duplicate the logic in genCSS function inside the selector node.
  20755. // future TODO - move both logics into the selector joiner visitor
  20756. if (i > 0 && selectorElements.length && selectorElements[0].combinator.value === '') {
  20757. selectorElements[0].combinator.value = ' ';
  20758. }
  20759. selfElements = selfElements.concat(selectors[i].elements);
  20760. }
  20761. this.selfSelectors = [new Selector(selfElements)];
  20762. this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo());
  20763. };
  20764. /**
  20765. * Used with the extend visitor
  20766. */
  20767. Extend.next_id = 0;
  20768. Extend.prototype.type = 'Extend';
  20769. var VariableCall = function (variable, index, currentFileInfo) {
  20770. this.variable = variable;
  20771. this._index = index;
  20772. this._fileInfo = currentFileInfo;
  20773. this.allowRoot = true;
  20774. };
  20775. VariableCall.prototype = new Node();
  20776. VariableCall.prototype.eval = function (context) {
  20777. var rules;
  20778. var detachedRuleset = new Variable(this.variable, this.getIndex(), this.fileInfo()).eval(context);
  20779. var error = new LessError({ message: "Could not evaluate variable call " + this.variable });
  20780. if (!detachedRuleset.ruleset) {
  20781. if (detachedRuleset.rules) {
  20782. rules = detachedRuleset;
  20783. }
  20784. else if (Array.isArray(detachedRuleset)) {
  20785. rules = new Ruleset('', detachedRuleset);
  20786. }
  20787. else if (Array.isArray(detachedRuleset.value)) {
  20788. rules = new Ruleset('', detachedRuleset.value);
  20789. }
  20790. else {
  20791. throw error;
  20792. }
  20793. detachedRuleset = new DetachedRuleset(rules);
  20794. }
  20795. if (detachedRuleset.ruleset) {
  20796. return detachedRuleset.callEval(context);
  20797. }
  20798. throw error;
  20799. };
  20800. VariableCall.prototype.type = 'VariableCall';
  20801. var NamespaceValue = function (ruleCall, lookups, index, fileInfo) {
  20802. this.value = ruleCall;
  20803. this.lookups = lookups;
  20804. this._index = index;
  20805. this._fileInfo = fileInfo;
  20806. };
  20807. NamespaceValue.prototype = new Node();
  20808. NamespaceValue.prototype.eval = function (context) {
  20809. var i;
  20810. var name;
  20811. var rules = this.value.eval(context);
  20812. for (i = 0; i < this.lookups.length; i++) {
  20813. name = this.lookups[i];
  20814. /**
  20815. * Eval'd DRs return rulesets.
  20816. * Eval'd mixins return rules, so let's make a ruleset if we need it.
  20817. * We need to do this because of late parsing of values
  20818. */
  20819. if (Array.isArray(rules)) {
  20820. rules = new Ruleset([new Selector()], rules);
  20821. }
  20822. if (name === '') {
  20823. rules = rules.lastDeclaration();
  20824. }
  20825. else if (name.charAt(0) === '@') {
  20826. if (name.charAt(1) === '@') {
  20827. name = "@" + new Variable(name.substr(1)).eval(context).value;
  20828. }
  20829. if (rules.variables) {
  20830. rules = rules.variable(name);
  20831. }
  20832. if (!rules) {
  20833. throw { type: 'Name', message: "variable " + name + " not found", filename: this.fileInfo().filename,
  20834. index: this.getIndex() };
  20835. }
  20836. }
  20837. else {
  20838. if (name.substring(0, 2) === '$@') {
  20839. name = "$" + new Variable(name.substr(1)).eval(context).value;
  20840. }
  20841. else {
  20842. name = name.charAt(0) === '$' ? name : "$" + name;
  20843. }
  20844. if (rules.properties) {
  20845. rules = rules.property(name);
  20846. }
  20847. if (!rules) {
  20848. throw { type: 'Name', message: "property \"" + name.substr(1) + "\" not found", filename: this.fileInfo().filename,
  20849. index: this.getIndex() };
  20850. }
  20851. // Properties are an array of values, since a ruleset can have multiple props.
  20852. // We pick the last one (the "cascaded" value)
  20853. rules = rules[rules.length - 1];
  20854. }
  20855. if (rules.value) {
  20856. rules = rules.eval(context).value;
  20857. }
  20858. if (rules.ruleset) {
  20859. rules = rules.ruleset.eval(context);
  20860. }
  20861. }
  20862. return rules;
  20863. };
  20864. NamespaceValue.prototype.type = 'NamespaceValue';
  20865. var Definition = function (name, params, rules, condition, variadic, frames, visibilityInfo) {
  20866. this.name = name || 'anonymous mixin';
  20867. this.selectors = [new Selector([new Element(null, name, false, this._index, this._fileInfo)])];
  20868. this.params = params;
  20869. this.condition = condition;
  20870. this.variadic = variadic;
  20871. this.arity = params.length;
  20872. this.rules = rules;
  20873. this._lookups = {};
  20874. var optionalParameters = [];
  20875. this.required = params.reduce(function (count, p) {
  20876. if (!p.name || (p.name && !p.value)) {
  20877. return count + 1;
  20878. }
  20879. else {
  20880. optionalParameters.push(p.name);
  20881. return count;
  20882. }
  20883. }, 0);
  20884. this.optionalParameters = optionalParameters;
  20885. this.frames = frames;
  20886. this.copyVisibilityInfo(visibilityInfo);
  20887. this.allowRoot = true;
  20888. };
  20889. Definition.prototype = new Ruleset();
  20890. Definition.prototype.accept = function (visitor) {
  20891. if (this.params && this.params.length) {
  20892. this.params = visitor.visitArray(this.params);
  20893. }
  20894. this.rules = visitor.visitArray(this.rules);
  20895. if (this.condition) {
  20896. this.condition = visitor.visit(this.condition);
  20897. }
  20898. };
  20899. Definition.prototype.evalParams = function (context, mixinEnv, args, evaldArguments) {
  20900. /* jshint boss:true */
  20901. var frame = new Ruleset(null, null);
  20902. var varargs;
  20903. var arg;
  20904. var params = copyArray(this.params);
  20905. var i;
  20906. var j;
  20907. var val;
  20908. var name;
  20909. var isNamedFound;
  20910. var argIndex;
  20911. var argsLength = 0;
  20912. if (mixinEnv.frames && mixinEnv.frames[0] && mixinEnv.frames[0].functionRegistry) {
  20913. frame.functionRegistry = mixinEnv.frames[0].functionRegistry.inherit();
  20914. }
  20915. mixinEnv = new contexts.Eval(mixinEnv, [frame].concat(mixinEnv.frames));
  20916. if (args) {
  20917. args = copyArray(args);
  20918. argsLength = args.length;
  20919. for (i = 0; i < argsLength; i++) {
  20920. arg = args[i];
  20921. if (name = (arg && arg.name)) {
  20922. isNamedFound = false;
  20923. for (j = 0; j < params.length; j++) {
  20924. if (!evaldArguments[j] && name === params[j].name) {
  20925. evaldArguments[j] = arg.value.eval(context);
  20926. frame.prependRule(new Declaration(name, arg.value.eval(context)));
  20927. isNamedFound = true;
  20928. break;
  20929. }
  20930. }
  20931. if (isNamedFound) {
  20932. args.splice(i, 1);
  20933. i--;
  20934. continue;
  20935. }
  20936. else {
  20937. throw { type: 'Runtime', message: "Named argument for " + this.name + " " + args[i].name + " not found" };
  20938. }
  20939. }
  20940. }
  20941. }
  20942. argIndex = 0;
  20943. for (i = 0; i < params.length; i++) {
  20944. if (evaldArguments[i]) {
  20945. continue;
  20946. }
  20947. arg = args && args[argIndex];
  20948. if (name = params[i].name) {
  20949. if (params[i].variadic) {
  20950. varargs = [];
  20951. for (j = argIndex; j < argsLength; j++) {
  20952. varargs.push(args[j].value.eval(context));
  20953. }
  20954. frame.prependRule(new Declaration(name, new Expression(varargs).eval(context)));
  20955. }
  20956. else {
  20957. val = arg && arg.value;
  20958. if (val) {
  20959. // This was a mixin call, pass in a detached ruleset of it's eval'd rules
  20960. if (Array.isArray(val)) {
  20961. val = new DetachedRuleset(new Ruleset('', val));
  20962. }
  20963. else {
  20964. val = val.eval(context);
  20965. }
  20966. }
  20967. else if (params[i].value) {
  20968. val = params[i].value.eval(mixinEnv);
  20969. frame.resetCache();
  20970. }
  20971. else {
  20972. throw { type: 'Runtime', message: "wrong number of arguments for " + this.name + " (" + argsLength + " for " + this.arity + ")" };
  20973. }
  20974. frame.prependRule(new Declaration(name, val));
  20975. evaldArguments[i] = val;
  20976. }
  20977. }
  20978. if (params[i].variadic && args) {
  20979. for (j = argIndex; j < argsLength; j++) {
  20980. evaldArguments[j] = args[j].value.eval(context);
  20981. }
  20982. }
  20983. argIndex++;
  20984. }
  20985. return frame;
  20986. };
  20987. Definition.prototype.makeImportant = function () {
  20988. var rules = !this.rules ? this.rules : this.rules.map(function (r) {
  20989. if (r.makeImportant) {
  20990. return r.makeImportant(true);
  20991. }
  20992. else {
  20993. return r;
  20994. }
  20995. });
  20996. var result = new Definition(this.name, this.params, rules, this.condition, this.variadic, this.frames);
  20997. return result;
  20998. };
  20999. Definition.prototype.eval = function (context) {
  21000. return new Definition(this.name, this.params, this.rules, this.condition, this.variadic, this.frames || copyArray(context.frames));
  21001. };
  21002. Definition.prototype.evalCall = function (context, args, important) {
  21003. var _arguments = [];
  21004. var mixinFrames = this.frames ? this.frames.concat(context.frames) : context.frames;
  21005. var frame = this.evalParams(context, new contexts.Eval(context, mixinFrames), args, _arguments);
  21006. var rules;
  21007. var ruleset;
  21008. frame.prependRule(new Declaration('@arguments', new Expression(_arguments).eval(context)));
  21009. rules = copyArray(this.rules);
  21010. ruleset = new Ruleset(null, rules);
  21011. ruleset.originalRuleset = this;
  21012. ruleset = ruleset.eval(new contexts.Eval(context, [this, frame].concat(mixinFrames)));
  21013. if (important) {
  21014. ruleset = ruleset.makeImportant();
  21015. }
  21016. return ruleset;
  21017. };
  21018. Definition.prototype.matchCondition = function (args, context) {
  21019. if (this.condition && !this.condition.eval(new contexts.Eval(context, [this.evalParams(context, /* the parameter variables */ new contexts.Eval(context, this.frames ? this.frames.concat(context.frames) : context.frames), args, [])]
  21020. .concat(this.frames || []) // the parent namespace/mixin frames
  21021. .concat(context.frames)))) { // the current environment frames
  21022. return false;
  21023. }
  21024. return true;
  21025. };
  21026. Definition.prototype.matchArgs = function (args, context) {
  21027. var allArgsCnt = (args && args.length) || 0;
  21028. var len;
  21029. var optionalParameters = this.optionalParameters;
  21030. var requiredArgsCnt = !args ? 0 : args.reduce(function (count, p) {
  21031. if (optionalParameters.indexOf(p.name) < 0) {
  21032. return count + 1;
  21033. }
  21034. else {
  21035. return count;
  21036. }
  21037. }, 0);
  21038. if (!this.variadic) {
  21039. if (requiredArgsCnt < this.required) {
  21040. return false;
  21041. }
  21042. if (allArgsCnt > this.params.length) {
  21043. return false;
  21044. }
  21045. }
  21046. else {
  21047. if (requiredArgsCnt < (this.required - 1)) {
  21048. return false;
  21049. }
  21050. }
  21051. // check patterns
  21052. len = Math.min(requiredArgsCnt, this.arity);
  21053. for (var i = 0; i < len; i++) {
  21054. if (!this.params[i].name && !this.params[i].variadic) {
  21055. if (args[i].value.eval(context).toCSS() != this.params[i].value.eval(context).toCSS()) {
  21056. return false;
  21057. }
  21058. }
  21059. }
  21060. return true;
  21061. };
  21062. Definition.prototype.type = 'MixinDefinition';
  21063. Definition.prototype.evalFirst = true;
  21064. var MixinCall = function (elements, args, index, currentFileInfo, important) {
  21065. this.selector = new Selector(elements);
  21066. this.arguments = args || [];
  21067. this._index = index;
  21068. this._fileInfo = currentFileInfo;
  21069. this.important = important;
  21070. this.allowRoot = true;
  21071. this.setParent(this.selector, this);
  21072. };
  21073. MixinCall.prototype = new Node();
  21074. MixinCall.prototype.accept = function (visitor) {
  21075. if (this.selector) {
  21076. this.selector = visitor.visit(this.selector);
  21077. }
  21078. if (this.arguments.length) {
  21079. this.arguments = visitor.visitArray(this.arguments);
  21080. }
  21081. };
  21082. MixinCall.prototype.eval = function (context) {
  21083. var mixins;
  21084. var mixin;
  21085. var mixinPath;
  21086. var args = [];
  21087. var arg;
  21088. var argValue;
  21089. var rules = [];
  21090. var match = false;
  21091. var i;
  21092. var m;
  21093. var f;
  21094. var isRecursive;
  21095. var isOneFound;
  21096. var candidates = [];
  21097. var candidate;
  21098. var conditionResult = [];
  21099. var defaultResult;
  21100. var defFalseEitherCase = -1;
  21101. var defNone = 0;
  21102. var defTrue = 1;
  21103. var defFalse = 2;
  21104. var count;
  21105. var originalRuleset;
  21106. var noArgumentsFilter;
  21107. this.selector = this.selector.eval(context);
  21108. function calcDefGroup(mixin, mixinPath) {
  21109. var f;
  21110. var p;
  21111. var namespace;
  21112. for (f = 0; f < 2; f++) {
  21113. conditionResult[f] = true;
  21114. defaultFunc.value(f);
  21115. for (p = 0; p < mixinPath.length && conditionResult[f]; p++) {
  21116. namespace = mixinPath[p];
  21117. if (namespace.matchCondition) {
  21118. conditionResult[f] = conditionResult[f] && namespace.matchCondition(null, context);
  21119. }
  21120. }
  21121. if (mixin.matchCondition) {
  21122. conditionResult[f] = conditionResult[f] && mixin.matchCondition(args, context);
  21123. }
  21124. }
  21125. if (conditionResult[0] || conditionResult[1]) {
  21126. if (conditionResult[0] != conditionResult[1]) {
  21127. return conditionResult[1] ?
  21128. defTrue : defFalse;
  21129. }
  21130. return defNone;
  21131. }
  21132. return defFalseEitherCase;
  21133. }
  21134. for (i = 0; i < this.arguments.length; i++) {
  21135. arg = this.arguments[i];
  21136. argValue = arg.value.eval(context);
  21137. if (arg.expand && Array.isArray(argValue.value)) {
  21138. argValue = argValue.value;
  21139. for (m = 0; m < argValue.length; m++) {
  21140. args.push({ value: argValue[m] });
  21141. }
  21142. }
  21143. else {
  21144. args.push({ name: arg.name, value: argValue });
  21145. }
  21146. }
  21147. noArgumentsFilter = function (rule) { return rule.matchArgs(null, context); };
  21148. for (i = 0; i < context.frames.length; i++) {
  21149. if ((mixins = context.frames[i].find(this.selector, null, noArgumentsFilter)).length > 0) {
  21150. isOneFound = true;
  21151. // To make `default()` function independent of definition order we have two "subpasses" here.
  21152. // At first we evaluate each guard *twice* (with `default() == true` and `default() == false`),
  21153. // and build candidate list with corresponding flags. Then, when we know all possible matches,
  21154. // we make a final decision.
  21155. for (m = 0; m < mixins.length; m++) {
  21156. mixin = mixins[m].rule;
  21157. mixinPath = mixins[m].path;
  21158. isRecursive = false;
  21159. for (f = 0; f < context.frames.length; f++) {
  21160. if ((!(mixin instanceof Definition)) && mixin === (context.frames[f].originalRuleset || context.frames[f])) {
  21161. isRecursive = true;
  21162. break;
  21163. }
  21164. }
  21165. if (isRecursive) {
  21166. continue;
  21167. }
  21168. if (mixin.matchArgs(args, context)) {
  21169. candidate = { mixin: mixin, group: calcDefGroup(mixin, mixinPath) };
  21170. if (candidate.group !== defFalseEitherCase) {
  21171. candidates.push(candidate);
  21172. }
  21173. match = true;
  21174. }
  21175. }
  21176. defaultFunc.reset();
  21177. count = [0, 0, 0];
  21178. for (m = 0; m < candidates.length; m++) {
  21179. count[candidates[m].group]++;
  21180. }
  21181. if (count[defNone] > 0) {
  21182. defaultResult = defFalse;
  21183. }
  21184. else {
  21185. defaultResult = defTrue;
  21186. if ((count[defTrue] + count[defFalse]) > 1) {
  21187. throw { type: 'Runtime', message: "Ambiguous use of `default()` found when matching for `" + this.format(args) + "`", index: this.getIndex(), filename: this.fileInfo().filename };
  21188. }
  21189. }
  21190. for (m = 0; m < candidates.length; m++) {
  21191. candidate = candidates[m].group;
  21192. if ((candidate === defNone) || (candidate === defaultResult)) {
  21193. try {
  21194. mixin = candidates[m].mixin;
  21195. if (!(mixin instanceof Definition)) {
  21196. originalRuleset = mixin.originalRuleset || mixin;
  21197. mixin = new Definition('', [], mixin.rules, null, false, null, originalRuleset.visibilityInfo());
  21198. mixin.originalRuleset = originalRuleset;
  21199. }
  21200. var newRules = mixin.evalCall(context, args, this.important).rules;
  21201. this._setVisibilityToReplacement(newRules);
  21202. Array.prototype.push.apply(rules, newRules);
  21203. }
  21204. catch (e) {
  21205. throw { message: e.message, index: this.getIndex(), filename: this.fileInfo().filename, stack: e.stack };
  21206. }
  21207. }
  21208. }
  21209. if (match) {
  21210. return rules;
  21211. }
  21212. }
  21213. }
  21214. if (isOneFound) {
  21215. throw { type: 'Runtime', message: "No matching definition was found for `" + this.format(args) + "`", index: this.getIndex(), filename: this.fileInfo().filename };
  21216. }
  21217. else {
  21218. throw { type: 'Name', message: this.selector.toCSS().trim() + " is undefined", index: this.getIndex(), filename: this.fileInfo().filename };
  21219. }
  21220. };
  21221. MixinCall.prototype._setVisibilityToReplacement = function (replacement) {
  21222. var i;
  21223. var rule;
  21224. if (this.blocksVisibility()) {
  21225. for (i = 0; i < replacement.length; i++) {
  21226. rule = replacement[i];
  21227. rule.addVisibilityBlock();
  21228. }
  21229. }
  21230. };
  21231. MixinCall.prototype.format = function (args) {
  21232. return this.selector.toCSS().trim() + "(" + (args ? args.map(function (a) {
  21233. var argValue = '';
  21234. if (a.name) {
  21235. argValue += a.name + ":";
  21236. }
  21237. if (a.value.toCSS) {
  21238. argValue += a.value.toCSS();
  21239. }
  21240. else {
  21241. argValue += '???';
  21242. }
  21243. return argValue;
  21244. }).join(', ') : '') + ")";
  21245. };
  21246. MixinCall.prototype.type = 'MixinCall';
  21247. var tree = {
  21248. Node: Node, Color: Color, AtRule: AtRule, DetachedRuleset: DetachedRuleset, Operation: Operation,
  21249. Dimension: Dimension, Unit: Unit, Keyword: Keyword, Variable: Variable, Property: Property,
  21250. Ruleset: Ruleset, Element: Element, Attribute: Attribute, Combinator: Combinator, Selector: Selector,
  21251. Quoted: Quoted, Expression: Expression, Declaration: Declaration, Call: Call, URL: URL, Import: Import,
  21252. Comment: Comment, Anonymous: Anonymous, Value: Value, JavaScript: JavaScript, Assignment: Assignment,
  21253. Condition: Condition, Paren: Paren, Media: Media, UnicodeDescriptor: UnicodeDescriptor, Negative: Negative,
  21254. Extend: Extend, VariableCall: VariableCall, NamespaceValue: NamespaceValue,
  21255. mixin: {
  21256. Call: MixinCall,
  21257. Definition: Definition
  21258. }
  21259. };
  21260. var logger = {
  21261. error: function (msg) {
  21262. this._fireEvent('error', msg);
  21263. },
  21264. warn: function (msg) {
  21265. this._fireEvent('warn', msg);
  21266. },
  21267. info: function (msg) {
  21268. this._fireEvent('info', msg);
  21269. },
  21270. debug: function (msg) {
  21271. this._fireEvent('debug', msg);
  21272. },
  21273. addListener: function (listener) {
  21274. this._listeners.push(listener);
  21275. },
  21276. removeListener: function (listener) {
  21277. for (var i = 0; i < this._listeners.length; i++) {
  21278. if (this._listeners[i] === listener) {
  21279. this._listeners.splice(i, 1);
  21280. return;
  21281. }
  21282. }
  21283. },
  21284. _fireEvent: function (type, msg) {
  21285. for (var i = 0; i < this._listeners.length; i++) {
  21286. var logFunction = this._listeners[i][type];
  21287. if (logFunction) {
  21288. logFunction(msg);
  21289. }
  21290. }
  21291. },
  21292. _listeners: []
  21293. };
  21294. /**
  21295. * @todo Document why this abstraction exists, and the relationship between
  21296. * environment, file managers, and plugin manager
  21297. */
  21298. var environment = /** @class */ (function () {
  21299. function environment(externalEnvironment, fileManagers) {
  21300. this.fileManagers = fileManagers || [];
  21301. externalEnvironment = externalEnvironment || {};
  21302. var optionalFunctions = ['encodeBase64', 'mimeLookup', 'charsetLookup', 'getSourceMapGenerator'];
  21303. var requiredFunctions = [];
  21304. var functions = requiredFunctions.concat(optionalFunctions);
  21305. for (var i = 0; i < functions.length; i++) {
  21306. var propName = functions[i];
  21307. var environmentFunc = externalEnvironment[propName];
  21308. if (environmentFunc) {
  21309. this[propName] = environmentFunc.bind(externalEnvironment);
  21310. }
  21311. else if (i < requiredFunctions.length) {
  21312. this.warn("missing required function in environment - " + propName);
  21313. }
  21314. }
  21315. }
  21316. environment.prototype.getFileManager = function (filename, currentDirectory, options, environment, isSync) {
  21317. if (!filename) {
  21318. logger.warn('getFileManager called with no filename.. Please report this issue. continuing.');
  21319. }
  21320. if (currentDirectory == null) {
  21321. logger.warn('getFileManager called with null directory.. Please report this issue. continuing.');
  21322. }
  21323. var fileManagers = this.fileManagers;
  21324. if (options.pluginManager) {
  21325. fileManagers = [].concat(fileManagers).concat(options.pluginManager.getFileManagers());
  21326. }
  21327. for (var i = fileManagers.length - 1; i >= 0; i--) {
  21328. var fileManager = fileManagers[i];
  21329. if (fileManager[isSync ? 'supportsSync' : 'supports'](filename, currentDirectory, options, environment)) {
  21330. return fileManager;
  21331. }
  21332. }
  21333. return null;
  21334. };
  21335. environment.prototype.addFileManager = function (fileManager) {
  21336. this.fileManagers.push(fileManager);
  21337. };
  21338. environment.prototype.clearFileManagers = function () {
  21339. this.fileManagers = [];
  21340. };
  21341. return environment;
  21342. }());
  21343. var AbstractFileManager = /** @class */ (function () {
  21344. function AbstractFileManager() {
  21345. }
  21346. AbstractFileManager.prototype.getPath = function (filename) {
  21347. var j = filename.lastIndexOf('?');
  21348. if (j > 0) {
  21349. filename = filename.slice(0, j);
  21350. }
  21351. j = filename.lastIndexOf('/');
  21352. if (j < 0) {
  21353. j = filename.lastIndexOf('\\');
  21354. }
  21355. if (j < 0) {
  21356. return '';
  21357. }
  21358. return filename.slice(0, j + 1);
  21359. };
  21360. AbstractFileManager.prototype.tryAppendExtension = function (path, ext) {
  21361. return /(\.[a-z]*$)|([\?;].*)$/.test(path) ? path : path + ext;
  21362. };
  21363. AbstractFileManager.prototype.tryAppendLessExtension = function (path) {
  21364. return this.tryAppendExtension(path, '.less');
  21365. };
  21366. AbstractFileManager.prototype.supportsSync = function () { return false; };
  21367. AbstractFileManager.prototype.alwaysMakePathsAbsolute = function () { return false; };
  21368. AbstractFileManager.prototype.isPathAbsolute = function (filename) {
  21369. return (/^(?:[a-z-]+:|\/|\\|#)/i).test(filename);
  21370. };
  21371. // TODO: pull out / replace?
  21372. AbstractFileManager.prototype.join = function (basePath, laterPath) {
  21373. if (!basePath) {
  21374. return laterPath;
  21375. }
  21376. return basePath + laterPath;
  21377. };
  21378. AbstractFileManager.prototype.pathDiff = function (url, baseUrl) {
  21379. // diff between two paths to create a relative path
  21380. var urlParts = this.extractUrlParts(url);
  21381. var baseUrlParts = this.extractUrlParts(baseUrl);
  21382. var i;
  21383. var max;
  21384. var urlDirectories;
  21385. var baseUrlDirectories;
  21386. var diff = '';
  21387. if (urlParts.hostPart !== baseUrlParts.hostPart) {
  21388. return '';
  21389. }
  21390. max = Math.max(baseUrlParts.directories.length, urlParts.directories.length);
  21391. for (i = 0; i < max; i++) {
  21392. if (baseUrlParts.directories[i] !== urlParts.directories[i]) {
  21393. break;
  21394. }
  21395. }
  21396. baseUrlDirectories = baseUrlParts.directories.slice(i);
  21397. urlDirectories = urlParts.directories.slice(i);
  21398. for (i = 0; i < baseUrlDirectories.length - 1; i++) {
  21399. diff += '../';
  21400. }
  21401. for (i = 0; i < urlDirectories.length - 1; i++) {
  21402. diff += urlDirectories[i] + "/";
  21403. }
  21404. return diff;
  21405. };
  21406. // helper function, not part of API
  21407. AbstractFileManager.prototype.extractUrlParts = function (url, baseUrl) {
  21408. // urlParts[1] = protocol://hostname/ OR /
  21409. // urlParts[2] = / if path relative to host base
  21410. // urlParts[3] = directories
  21411. // urlParts[4] = filename
  21412. // urlParts[5] = parameters
  21413. var urlPartsRegex = /^((?:[a-z-]+:)?\/{2}(?:[^\/\?#]*\/)|([\/\\]))?((?:[^\/\\\?#]*[\/\\])*)([^\/\\\?#]*)([#\?].*)?$/i;
  21414. var urlParts = url.match(urlPartsRegex);
  21415. var returner = {};
  21416. var rawDirectories = [];
  21417. var directories = [];
  21418. var i;
  21419. var baseUrlParts;
  21420. if (!urlParts) {
  21421. throw new Error("Could not parse sheet href - '" + url + "'");
  21422. }
  21423. // Stylesheets in IE don't always return the full path
  21424. if (baseUrl && (!urlParts[1] || urlParts[2])) {
  21425. baseUrlParts = baseUrl.match(urlPartsRegex);
  21426. if (!baseUrlParts) {
  21427. throw new Error("Could not parse page url - '" + baseUrl + "'");
  21428. }
  21429. urlParts[1] = urlParts[1] || baseUrlParts[1] || '';
  21430. if (!urlParts[2]) {
  21431. urlParts[3] = baseUrlParts[3] + urlParts[3];
  21432. }
  21433. }
  21434. if (urlParts[3]) {
  21435. rawDirectories = urlParts[3].replace(/\\/g, '/').split('/');
  21436. // collapse '..' and skip '.'
  21437. for (i = 0; i < rawDirectories.length; i++) {
  21438. if (rawDirectories[i] === '..') {
  21439. directories.pop();
  21440. }
  21441. else if (rawDirectories[i] !== '.') {
  21442. directories.push(rawDirectories[i]);
  21443. }
  21444. }
  21445. }
  21446. returner.hostPart = urlParts[1];
  21447. returner.directories = directories;
  21448. returner.rawPath = (urlParts[1] || '') + rawDirectories.join('/');
  21449. returner.path = (urlParts[1] || '') + directories.join('/');
  21450. returner.filename = urlParts[4];
  21451. returner.fileUrl = returner.path + (urlParts[4] || '');
  21452. returner.url = returner.fileUrl + (urlParts[5] || '');
  21453. return returner;
  21454. };
  21455. return AbstractFileManager;
  21456. }());
  21457. var AbstractPluginLoader = /** @class */ (function () {
  21458. function AbstractPluginLoader() {
  21459. // Implemented by Node.js plugin loader
  21460. this.require = function () { return null; };
  21461. }
  21462. AbstractPluginLoader.prototype.evalPlugin = function (contents, context, imports, pluginOptions, fileInfo) {
  21463. var loader;
  21464. var registry;
  21465. var pluginObj;
  21466. var localModule;
  21467. var pluginManager;
  21468. var filename;
  21469. var result;
  21470. pluginManager = context.pluginManager;
  21471. if (fileInfo) {
  21472. if (typeof fileInfo === 'string') {
  21473. filename = fileInfo;
  21474. }
  21475. else {
  21476. filename = fileInfo.filename;
  21477. }
  21478. }
  21479. var shortname = (new this.less.FileManager()).extractUrlParts(filename).filename;
  21480. if (filename) {
  21481. pluginObj = pluginManager.get(filename);
  21482. if (pluginObj) {
  21483. result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);
  21484. if (result) {
  21485. return result;
  21486. }
  21487. try {
  21488. if (pluginObj.use) {
  21489. pluginObj.use.call(this.context, pluginObj);
  21490. }
  21491. }
  21492. catch (e) {
  21493. e.message = e.message || 'Error during @plugin call';
  21494. return new LessError(e, imports, filename);
  21495. }
  21496. return pluginObj;
  21497. }
  21498. }
  21499. localModule = {
  21500. exports: {},
  21501. pluginManager: pluginManager,
  21502. fileInfo: fileInfo
  21503. };
  21504. registry = functionRegistry.create();
  21505. var registerPlugin = function (obj) {
  21506. pluginObj = obj;
  21507. };
  21508. try {
  21509. loader = new Function('module', 'require', 'registerPlugin', 'functions', 'tree', 'less', 'fileInfo', contents);
  21510. loader(localModule, this.require(filename), registerPlugin, registry, this.less.tree, this.less, fileInfo);
  21511. }
  21512. catch (e) {
  21513. return new LessError(e, imports, filename);
  21514. }
  21515. if (!pluginObj) {
  21516. pluginObj = localModule.exports;
  21517. }
  21518. pluginObj = this.validatePlugin(pluginObj, filename, shortname);
  21519. if (pluginObj instanceof LessError) {
  21520. return pluginObj;
  21521. }
  21522. if (pluginObj) {
  21523. pluginObj.imports = imports;
  21524. pluginObj.filename = filename;
  21525. // For < 3.x (or unspecified minVersion) - setOptions() before install()
  21526. if (!pluginObj.minVersion || this.compareVersion('3.0.0', pluginObj.minVersion) < 0) {
  21527. result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);
  21528. if (result) {
  21529. return result;
  21530. }
  21531. }
  21532. // Run on first load
  21533. pluginManager.addPlugin(pluginObj, fileInfo.filename, registry);
  21534. pluginObj.functions = registry.getLocalFunctions();
  21535. // Need to call setOptions again because the pluginObj might have functions
  21536. result = this.trySetOptions(pluginObj, filename, shortname, pluginOptions);
  21537. if (result) {
  21538. return result;
  21539. }
  21540. // Run every @plugin call
  21541. try {
  21542. if (pluginObj.use) {
  21543. pluginObj.use.call(this.context, pluginObj);
  21544. }
  21545. }
  21546. catch (e) {
  21547. e.message = e.message || 'Error during @plugin call';
  21548. return new LessError(e, imports, filename);
  21549. }
  21550. }
  21551. else {
  21552. return new LessError({ message: 'Not a valid plugin' }, imports, filename);
  21553. }
  21554. return pluginObj;
  21555. };
  21556. AbstractPluginLoader.prototype.trySetOptions = function (plugin, filename, name, options) {
  21557. if (options && !plugin.setOptions) {
  21558. return new LessError({
  21559. message: "Options have been provided but the plugin " + name + " does not support any options."
  21560. });
  21561. }
  21562. try {
  21563. plugin.setOptions && plugin.setOptions(options);
  21564. }
  21565. catch (e) {
  21566. return new LessError(e);
  21567. }
  21568. };
  21569. AbstractPluginLoader.prototype.validatePlugin = function (plugin, filename, name) {
  21570. if (plugin) {
  21571. // support plugins being a function
  21572. // so that the plugin can be more usable programmatically
  21573. if (typeof plugin === 'function') {
  21574. plugin = new plugin();
  21575. }
  21576. if (plugin.minVersion) {
  21577. if (this.compareVersion(plugin.minVersion, this.less.version) < 0) {
  21578. return new LessError({
  21579. message: "Plugin " + name + " requires version " + this.versionToString(plugin.minVersion)
  21580. });
  21581. }
  21582. }
  21583. return plugin;
  21584. }
  21585. return null;
  21586. };
  21587. AbstractPluginLoader.prototype.compareVersion = function (aVersion, bVersion) {
  21588. if (typeof aVersion === 'string') {
  21589. aVersion = aVersion.match(/^(\d+)\.?(\d+)?\.?(\d+)?/);
  21590. aVersion.shift();
  21591. }
  21592. for (var i = 0; i < aVersion.length; i++) {
  21593. if (aVersion[i] !== bVersion[i]) {
  21594. return parseInt(aVersion[i]) > parseInt(bVersion[i]) ? -1 : 1;
  21595. }
  21596. }
  21597. return 0;
  21598. };
  21599. AbstractPluginLoader.prototype.versionToString = function (version) {
  21600. var versionString = '';
  21601. for (var i = 0; i < version.length; i++) {
  21602. versionString += (versionString ? '.' : '') + version[i];
  21603. }
  21604. return versionString;
  21605. };
  21606. AbstractPluginLoader.prototype.printUsage = function (plugins) {
  21607. for (var i = 0; i < plugins.length; i++) {
  21608. var plugin = plugins[i];
  21609. if (plugin.printUsage) {
  21610. plugin.printUsage();
  21611. }
  21612. }
  21613. };
  21614. return AbstractPluginLoader;
  21615. }());
  21616. var _visitArgs = { visitDeeper: true };
  21617. var _hasIndexed = false;
  21618. function _noop(node) {
  21619. return node;
  21620. }
  21621. function indexNodeTypes(parent, ticker) {
  21622. // add .typeIndex to tree node types for lookup table
  21623. var key;
  21624. var child;
  21625. for (key in parent) {
  21626. /* eslint guard-for-in: 0 */
  21627. child = parent[key];
  21628. switch (typeof child) {
  21629. case 'function':
  21630. // ignore bound functions directly on tree which do not have a prototype
  21631. // or aren't nodes
  21632. if (child.prototype && child.prototype.type) {
  21633. child.prototype.typeIndex = ticker++;
  21634. }
  21635. break;
  21636. case 'object':
  21637. ticker = indexNodeTypes(child, ticker);
  21638. break;
  21639. }
  21640. }
  21641. return ticker;
  21642. }
  21643. var Visitor = /** @class */ (function () {
  21644. function Visitor(implementation) {
  21645. this._implementation = implementation;
  21646. this._visitInCache = {};
  21647. this._visitOutCache = {};
  21648. if (!_hasIndexed) {
  21649. indexNodeTypes(tree, 1);
  21650. _hasIndexed = true;
  21651. }
  21652. }
  21653. Visitor.prototype.visit = function (node) {
  21654. if (!node) {
  21655. return node;
  21656. }
  21657. var nodeTypeIndex = node.typeIndex;
  21658. if (!nodeTypeIndex) {
  21659. // MixinCall args aren't a node type?
  21660. if (node.value && node.value.typeIndex) {
  21661. this.visit(node.value);
  21662. }
  21663. return node;
  21664. }
  21665. var impl = this._implementation;
  21666. var func = this._visitInCache[nodeTypeIndex];
  21667. var funcOut = this._visitOutCache[nodeTypeIndex];
  21668. var visitArgs = _visitArgs;
  21669. var fnName;
  21670. visitArgs.visitDeeper = true;
  21671. if (!func) {
  21672. fnName = "visit" + node.type;
  21673. func = impl[fnName] || _noop;
  21674. funcOut = impl[fnName + "Out"] || _noop;
  21675. this._visitInCache[nodeTypeIndex] = func;
  21676. this._visitOutCache[nodeTypeIndex] = funcOut;
  21677. }
  21678. if (func !== _noop) {
  21679. var newNode = func.call(impl, node, visitArgs);
  21680. if (node && impl.isReplacing) {
  21681. node = newNode;
  21682. }
  21683. }
  21684. if (visitArgs.visitDeeper && node) {
  21685. if (node.length) {
  21686. for (var i = 0, cnt = node.length; i < cnt; i++) {
  21687. if (node[i].accept) {
  21688. node[i].accept(this);
  21689. }
  21690. }
  21691. }
  21692. else if (node.accept) {
  21693. node.accept(this);
  21694. }
  21695. }
  21696. if (funcOut != _noop) {
  21697. funcOut.call(impl, node);
  21698. }
  21699. return node;
  21700. };
  21701. Visitor.prototype.visitArray = function (nodes, nonReplacing) {
  21702. if (!nodes) {
  21703. return nodes;
  21704. }
  21705. var cnt = nodes.length;
  21706. var i;
  21707. // Non-replacing
  21708. if (nonReplacing || !this._implementation.isReplacing) {
  21709. for (i = 0; i < cnt; i++) {
  21710. this.visit(nodes[i]);
  21711. }
  21712. return nodes;
  21713. }
  21714. // Replacing
  21715. var out = [];
  21716. for (i = 0; i < cnt; i++) {
  21717. var evald = this.visit(nodes[i]);
  21718. if (evald === undefined) {
  21719. continue;
  21720. }
  21721. if (!evald.splice) {
  21722. out.push(evald);
  21723. }
  21724. else if (evald.length) {
  21725. this.flatten(evald, out);
  21726. }
  21727. }
  21728. return out;
  21729. };
  21730. Visitor.prototype.flatten = function (arr, out) {
  21731. if (!out) {
  21732. out = [];
  21733. }
  21734. var cnt;
  21735. var i;
  21736. var item;
  21737. var nestedCnt;
  21738. var j;
  21739. var nestedItem;
  21740. for (i = 0, cnt = arr.length; i < cnt; i++) {
  21741. item = arr[i];
  21742. if (item === undefined) {
  21743. continue;
  21744. }
  21745. if (!item.splice) {
  21746. out.push(item);
  21747. continue;
  21748. }
  21749. for (j = 0, nestedCnt = item.length; j < nestedCnt; j++) {
  21750. nestedItem = item[j];
  21751. if (nestedItem === undefined) {
  21752. continue;
  21753. }
  21754. if (!nestedItem.splice) {
  21755. out.push(nestedItem);
  21756. }
  21757. else if (nestedItem.length) {
  21758. this.flatten(nestedItem, out);
  21759. }
  21760. }
  21761. }
  21762. return out;
  21763. };
  21764. return Visitor;
  21765. }());
  21766. var ImportSequencer = /** @class */ (function () {
  21767. function ImportSequencer(onSequencerEmpty) {
  21768. this.imports = [];
  21769. this.variableImports = [];
  21770. this._onSequencerEmpty = onSequencerEmpty;
  21771. this._currentDepth = 0;
  21772. }
  21773. ImportSequencer.prototype.addImport = function (callback) {
  21774. var importSequencer = this;
  21775. var importItem = {
  21776. callback: callback,
  21777. args: null,
  21778. isReady: false
  21779. };
  21780. this.imports.push(importItem);
  21781. return function () {
  21782. var args = [];
  21783. for (var _i = 0; _i < arguments.length; _i++) {
  21784. args[_i] = arguments[_i];
  21785. }
  21786. importItem.args = Array.prototype.slice.call(args, 0);
  21787. importItem.isReady = true;
  21788. importSequencer.tryRun();
  21789. };
  21790. };
  21791. ImportSequencer.prototype.addVariableImport = function (callback) {
  21792. this.variableImports.push(callback);
  21793. };
  21794. ImportSequencer.prototype.tryRun = function () {
  21795. this._currentDepth++;
  21796. try {
  21797. while (true) {
  21798. while (this.imports.length > 0) {
  21799. var importItem = this.imports[0];
  21800. if (!importItem.isReady) {
  21801. return;
  21802. }
  21803. this.imports = this.imports.slice(1);
  21804. importItem.callback.apply(null, importItem.args);
  21805. }
  21806. if (this.variableImports.length === 0) {
  21807. break;
  21808. }
  21809. var variableImport = this.variableImports[0];
  21810. this.variableImports = this.variableImports.slice(1);
  21811. variableImport();
  21812. }
  21813. }
  21814. finally {
  21815. this._currentDepth--;
  21816. }
  21817. if (this._currentDepth === 0 && this._onSequencerEmpty) {
  21818. this._onSequencerEmpty();
  21819. }
  21820. };
  21821. return ImportSequencer;
  21822. }());
  21823. var ImportVisitor = function (importer, finish) {
  21824. this._visitor = new Visitor(this);
  21825. this._importer = importer;
  21826. this._finish = finish;
  21827. this.context = new contexts.Eval();
  21828. this.importCount = 0;
  21829. this.onceFileDetectionMap = {};
  21830. this.recursionDetector = {};
  21831. this._sequencer = new ImportSequencer(this._onSequencerEmpty.bind(this));
  21832. };
  21833. ImportVisitor.prototype = {
  21834. isReplacing: false,
  21835. run: function (root) {
  21836. try {
  21837. // process the contents
  21838. this._visitor.visit(root);
  21839. }
  21840. catch (e) {
  21841. this.error = e;
  21842. }
  21843. this.isFinished = true;
  21844. this._sequencer.tryRun();
  21845. },
  21846. _onSequencerEmpty: function () {
  21847. if (!this.isFinished) {
  21848. return;
  21849. }
  21850. this._finish(this.error);
  21851. },
  21852. visitImport: function (importNode, visitArgs) {
  21853. var inlineCSS = importNode.options.inline;
  21854. if (!importNode.css || inlineCSS) {
  21855. var context = new contexts.Eval(this.context, copyArray(this.context.frames));
  21856. var importParent = context.frames[0];
  21857. this.importCount++;
  21858. if (importNode.isVariableImport()) {
  21859. this._sequencer.addVariableImport(this.processImportNode.bind(this, importNode, context, importParent));
  21860. }
  21861. else {
  21862. this.processImportNode(importNode, context, importParent);
  21863. }
  21864. }
  21865. visitArgs.visitDeeper = false;
  21866. },
  21867. processImportNode: function (importNode, context, importParent) {
  21868. var evaldImportNode;
  21869. var inlineCSS = importNode.options.inline;
  21870. try {
  21871. evaldImportNode = importNode.evalForImport(context);
  21872. }
  21873. catch (e) {
  21874. if (!e.filename) {
  21875. e.index = importNode.getIndex();
  21876. e.filename = importNode.fileInfo().filename;
  21877. }
  21878. // attempt to eval properly and treat as css
  21879. importNode.css = true;
  21880. // if that fails, this error will be thrown
  21881. importNode.error = e;
  21882. }
  21883. if (evaldImportNode && (!evaldImportNode.css || inlineCSS)) {
  21884. if (evaldImportNode.options.multiple) {
  21885. context.importMultiple = true;
  21886. }
  21887. // try appending if we haven't determined if it is css or not
  21888. var tryAppendLessExtension = evaldImportNode.css === undefined;
  21889. for (var i = 0; i < importParent.rules.length; i++) {
  21890. if (importParent.rules[i] === importNode) {
  21891. importParent.rules[i] = evaldImportNode;
  21892. break;
  21893. }
  21894. }
  21895. var onImported = this.onImported.bind(this, evaldImportNode, context);
  21896. var sequencedOnImported = this._sequencer.addImport(onImported);
  21897. this._importer.push(evaldImportNode.getPath(), tryAppendLessExtension, evaldImportNode.fileInfo(), evaldImportNode.options, sequencedOnImported);
  21898. }
  21899. else {
  21900. this.importCount--;
  21901. if (this.isFinished) {
  21902. this._sequencer.tryRun();
  21903. }
  21904. }
  21905. },
  21906. onImported: function (importNode, context, e, root, importedAtRoot, fullPath) {
  21907. if (e) {
  21908. if (!e.filename) {
  21909. e.index = importNode.getIndex();
  21910. e.filename = importNode.fileInfo().filename;
  21911. }
  21912. this.error = e;
  21913. }
  21914. var importVisitor = this;
  21915. var inlineCSS = importNode.options.inline;
  21916. var isPlugin = importNode.options.isPlugin;
  21917. var isOptional = importNode.options.optional;
  21918. var duplicateImport = importedAtRoot || fullPath in importVisitor.recursionDetector;
  21919. if (!context.importMultiple) {
  21920. if (duplicateImport) {
  21921. importNode.skip = true;
  21922. }
  21923. else {
  21924. importNode.skip = function () {
  21925. if (fullPath in importVisitor.onceFileDetectionMap) {
  21926. return true;
  21927. }
  21928. importVisitor.onceFileDetectionMap[fullPath] = true;
  21929. return false;
  21930. };
  21931. }
  21932. }
  21933. if (!fullPath && isOptional) {
  21934. importNode.skip = true;
  21935. }
  21936. if (root) {
  21937. importNode.root = root;
  21938. importNode.importedFilename = fullPath;
  21939. if (!inlineCSS && !isPlugin && (context.importMultiple || !duplicateImport)) {
  21940. importVisitor.recursionDetector[fullPath] = true;
  21941. var oldContext = this.context;
  21942. this.context = context;
  21943. try {
  21944. this._visitor.visit(root);
  21945. }
  21946. catch (e) {
  21947. this.error = e;
  21948. }
  21949. this.context = oldContext;
  21950. }
  21951. }
  21952. importVisitor.importCount--;
  21953. if (importVisitor.isFinished) {
  21954. importVisitor._sequencer.tryRun();
  21955. }
  21956. },
  21957. visitDeclaration: function (declNode, visitArgs) {
  21958. if (declNode.value.type === 'DetachedRuleset') {
  21959. this.context.frames.unshift(declNode);
  21960. }
  21961. else {
  21962. visitArgs.visitDeeper = false;
  21963. }
  21964. },
  21965. visitDeclarationOut: function (declNode) {
  21966. if (declNode.value.type === 'DetachedRuleset') {
  21967. this.context.frames.shift();
  21968. }
  21969. },
  21970. visitAtRule: function (atRuleNode, visitArgs) {
  21971. this.context.frames.unshift(atRuleNode);
  21972. },
  21973. visitAtRuleOut: function (atRuleNode) {
  21974. this.context.frames.shift();
  21975. },
  21976. visitMixinDefinition: function (mixinDefinitionNode, visitArgs) {
  21977. this.context.frames.unshift(mixinDefinitionNode);
  21978. },
  21979. visitMixinDefinitionOut: function (mixinDefinitionNode) {
  21980. this.context.frames.shift();
  21981. },
  21982. visitRuleset: function (rulesetNode, visitArgs) {
  21983. this.context.frames.unshift(rulesetNode);
  21984. },
  21985. visitRulesetOut: function (rulesetNode) {
  21986. this.context.frames.shift();
  21987. },
  21988. visitMedia: function (mediaNode, visitArgs) {
  21989. this.context.frames.unshift(mediaNode.rules[0]);
  21990. },
  21991. visitMediaOut: function (mediaNode) {
  21992. this.context.frames.shift();
  21993. }
  21994. };
  21995. var SetTreeVisibilityVisitor = /** @class */ (function () {
  21996. function SetTreeVisibilityVisitor(visible) {
  21997. this.visible = visible;
  21998. }
  21999. SetTreeVisibilityVisitor.prototype.run = function (root) {
  22000. this.visit(root);
  22001. };
  22002. SetTreeVisibilityVisitor.prototype.visitArray = function (nodes) {
  22003. if (!nodes) {
  22004. return nodes;
  22005. }
  22006. var cnt = nodes.length;
  22007. var i;
  22008. for (i = 0; i < cnt; i++) {
  22009. this.visit(nodes[i]);
  22010. }
  22011. return nodes;
  22012. };
  22013. SetTreeVisibilityVisitor.prototype.visit = function (node) {
  22014. if (!node) {
  22015. return node;
  22016. }
  22017. if (node.constructor === Array) {
  22018. return this.visitArray(node);
  22019. }
  22020. if (!node.blocksVisibility || node.blocksVisibility()) {
  22021. return node;
  22022. }
  22023. if (this.visible) {
  22024. node.ensureVisibility();
  22025. }
  22026. else {
  22027. node.ensureInvisibility();
  22028. }
  22029. node.accept(this);
  22030. return node;
  22031. };
  22032. return SetTreeVisibilityVisitor;
  22033. }());
  22034. /* jshint loopfunc:true */
  22035. var ExtendFinderVisitor = /** @class */ (function () {
  22036. function ExtendFinderVisitor() {
  22037. this._visitor = new Visitor(this);
  22038. this.contexts = [];
  22039. this.allExtendsStack = [[]];
  22040. }
  22041. ExtendFinderVisitor.prototype.run = function (root) {
  22042. root = this._visitor.visit(root);
  22043. root.allExtends = this.allExtendsStack[0];
  22044. return root;
  22045. };
  22046. ExtendFinderVisitor.prototype.visitDeclaration = function (declNode, visitArgs) {
  22047. visitArgs.visitDeeper = false;
  22048. };
  22049. ExtendFinderVisitor.prototype.visitMixinDefinition = function (mixinDefinitionNode, visitArgs) {
  22050. visitArgs.visitDeeper = false;
  22051. };
  22052. ExtendFinderVisitor.prototype.visitRuleset = function (rulesetNode, visitArgs) {
  22053. if (rulesetNode.root) {
  22054. return;
  22055. }
  22056. var i;
  22057. var j;
  22058. var extend;
  22059. var allSelectorsExtendList = [];
  22060. var extendList;
  22061. // get &:extend(.a); rules which apply to all selectors in this ruleset
  22062. var rules = rulesetNode.rules;
  22063. var ruleCnt = rules ? rules.length : 0;
  22064. for (i = 0; i < ruleCnt; i++) {
  22065. if (rulesetNode.rules[i] instanceof tree.Extend) {
  22066. allSelectorsExtendList.push(rules[i]);
  22067. rulesetNode.extendOnEveryPath = true;
  22068. }
  22069. }
  22070. // now find every selector and apply the extends that apply to all extends
  22071. // and the ones which apply to an individual extend
  22072. var paths = rulesetNode.paths;
  22073. for (i = 0; i < paths.length; i++) {
  22074. var selectorPath = paths[i];
  22075. var selector = selectorPath[selectorPath.length - 1];
  22076. var selExtendList = selector.extendList;
  22077. extendList = selExtendList ? copyArray(selExtendList).concat(allSelectorsExtendList)
  22078. : allSelectorsExtendList;
  22079. if (extendList) {
  22080. extendList = extendList.map(function (allSelectorsExtend) { return allSelectorsExtend.clone(); });
  22081. }
  22082. for (j = 0; j < extendList.length; j++) {
  22083. this.foundExtends = true;
  22084. extend = extendList[j];
  22085. extend.findSelfSelectors(selectorPath);
  22086. extend.ruleset = rulesetNode;
  22087. if (j === 0) {
  22088. extend.firstExtendOnThisSelectorPath = true;
  22089. }
  22090. this.allExtendsStack[this.allExtendsStack.length - 1].push(extend);
  22091. }
  22092. }
  22093. this.contexts.push(rulesetNode.selectors);
  22094. };
  22095. ExtendFinderVisitor.prototype.visitRulesetOut = function (rulesetNode) {
  22096. if (!rulesetNode.root) {
  22097. this.contexts.length = this.contexts.length - 1;
  22098. }
  22099. };
  22100. ExtendFinderVisitor.prototype.visitMedia = function (mediaNode, visitArgs) {
  22101. mediaNode.allExtends = [];
  22102. this.allExtendsStack.push(mediaNode.allExtends);
  22103. };
  22104. ExtendFinderVisitor.prototype.visitMediaOut = function (mediaNode) {
  22105. this.allExtendsStack.length = this.allExtendsStack.length - 1;
  22106. };
  22107. ExtendFinderVisitor.prototype.visitAtRule = function (atRuleNode, visitArgs) {
  22108. atRuleNode.allExtends = [];
  22109. this.allExtendsStack.push(atRuleNode.allExtends);
  22110. };
  22111. ExtendFinderVisitor.prototype.visitAtRuleOut = function (atRuleNode) {
  22112. this.allExtendsStack.length = this.allExtendsStack.length - 1;
  22113. };
  22114. return ExtendFinderVisitor;
  22115. }());
  22116. var ProcessExtendsVisitor = /** @class */ (function () {
  22117. function ProcessExtendsVisitor() {
  22118. this._visitor = new Visitor(this);
  22119. }
  22120. ProcessExtendsVisitor.prototype.run = function (root) {
  22121. var extendFinder = new ExtendFinderVisitor();
  22122. this.extendIndices = {};
  22123. extendFinder.run(root);
  22124. if (!extendFinder.foundExtends) {
  22125. return root;
  22126. }
  22127. root.allExtends = root.allExtends.concat(this.doExtendChaining(root.allExtends, root.allExtends));
  22128. this.allExtendsStack = [root.allExtends];
  22129. var newRoot = this._visitor.visit(root);
  22130. this.checkExtendsForNonMatched(root.allExtends);
  22131. return newRoot;
  22132. };
  22133. ProcessExtendsVisitor.prototype.checkExtendsForNonMatched = function (extendList) {
  22134. var indices = this.extendIndices;
  22135. extendList.filter(function (extend) { return !extend.hasFoundMatches && extend.parent_ids.length == 1; }).forEach(function (extend) {
  22136. var selector = '_unknown_';
  22137. try {
  22138. selector = extend.selector.toCSS({});
  22139. }
  22140. catch (_) { }
  22141. if (!indices[extend.index + " " + selector]) {
  22142. indices[extend.index + " " + selector] = true;
  22143. logger.warn("extend '" + selector + "' has no matches");
  22144. }
  22145. });
  22146. };
  22147. ProcessExtendsVisitor.prototype.doExtendChaining = function (extendsList, extendsListTarget, iterationCount) {
  22148. //
  22149. // chaining is different from normal extension.. if we extend an extend then we are not just copying, altering
  22150. // and pasting the selector we would do normally, but we are also adding an extend with the same target selector
  22151. // this means this new extend can then go and alter other extends
  22152. //
  22153. // this method deals with all the chaining work - without it, extend is flat and doesn't work on other extend selectors
  22154. // this is also the most expensive.. and a match on one selector can cause an extension of a selector we had already
  22155. // processed if we look at each selector at a time, as is done in visitRuleset
  22156. var extendIndex;
  22157. var targetExtendIndex;
  22158. var matches;
  22159. var extendsToAdd = [];
  22160. var newSelector;
  22161. var extendVisitor = this;
  22162. var selectorPath;
  22163. var extend;
  22164. var targetExtend;
  22165. var newExtend;
  22166. iterationCount = iterationCount || 0;
  22167. // loop through comparing every extend with every target extend.
  22168. // a target extend is the one on the ruleset we are looking at copy/edit/pasting in place
  22169. // e.g. .a:extend(.b) {} and .b:extend(.c) {} then the first extend extends the second one
  22170. // and the second is the target.
  22171. // the separation into two lists allows us to process a subset of chains with a bigger set, as is the
  22172. // case when processing media queries
  22173. for (extendIndex = 0; extendIndex < extendsList.length; extendIndex++) {
  22174. for (targetExtendIndex = 0; targetExtendIndex < extendsListTarget.length; targetExtendIndex++) {
  22175. extend = extendsList[extendIndex];
  22176. targetExtend = extendsListTarget[targetExtendIndex];
  22177. // look for circular references
  22178. if (extend.parent_ids.indexOf(targetExtend.object_id) >= 0) {
  22179. continue;
  22180. }
  22181. // find a match in the target extends self selector (the bit before :extend)
  22182. selectorPath = [targetExtend.selfSelectors[0]];
  22183. matches = extendVisitor.findMatch(extend, selectorPath);
  22184. if (matches.length) {
  22185. extend.hasFoundMatches = true;
  22186. // we found a match, so for each self selector..
  22187. extend.selfSelectors.forEach(function (selfSelector) {
  22188. var info = targetExtend.visibilityInfo();
  22189. // process the extend as usual
  22190. newSelector = extendVisitor.extendSelector(matches, selectorPath, selfSelector, extend.isVisible());
  22191. // but now we create a new extend from it
  22192. newExtend = new (tree.Extend)(targetExtend.selector, targetExtend.option, 0, targetExtend.fileInfo(), info);
  22193. newExtend.selfSelectors = newSelector;
  22194. // add the extend onto the list of extends for that selector
  22195. newSelector[newSelector.length - 1].extendList = [newExtend];
  22196. // record that we need to add it.
  22197. extendsToAdd.push(newExtend);
  22198. newExtend.ruleset = targetExtend.ruleset;
  22199. // remember its parents for circular references
  22200. newExtend.parent_ids = newExtend.parent_ids.concat(targetExtend.parent_ids, extend.parent_ids);
  22201. // only process the selector once.. if we have :extend(.a,.b) then multiple
  22202. // extends will look at the same selector path, so when extending
  22203. // we know that any others will be duplicates in terms of what is added to the css
  22204. if (targetExtend.firstExtendOnThisSelectorPath) {
  22205. newExtend.firstExtendOnThisSelectorPath = true;
  22206. targetExtend.ruleset.paths.push(newSelector);
  22207. }
  22208. });
  22209. }
  22210. }
  22211. }
  22212. if (extendsToAdd.length) {
  22213. // try to detect circular references to stop a stack overflow.
  22214. // may no longer be needed.
  22215. this.extendChainCount++;
  22216. if (iterationCount > 100) {
  22217. var selectorOne = '{unable to calculate}';
  22218. var selectorTwo = '{unable to calculate}';
  22219. try {
  22220. selectorOne = extendsToAdd[0].selfSelectors[0].toCSS();
  22221. selectorTwo = extendsToAdd[0].selector.toCSS();
  22222. }
  22223. catch (e) { }
  22224. throw { message: "extend circular reference detected. One of the circular extends is currently:" + selectorOne + ":extend(" + selectorTwo + ")" };
  22225. }
  22226. // now process the new extends on the existing rules so that we can handle a extending b extending c extending
  22227. // d extending e...
  22228. return extendsToAdd.concat(extendVisitor.doExtendChaining(extendsToAdd, extendsListTarget, iterationCount + 1));
  22229. }
  22230. else {
  22231. return extendsToAdd;
  22232. }
  22233. };
  22234. ProcessExtendsVisitor.prototype.visitDeclaration = function (ruleNode, visitArgs) {
  22235. visitArgs.visitDeeper = false;
  22236. };
  22237. ProcessExtendsVisitor.prototype.visitMixinDefinition = function (mixinDefinitionNode, visitArgs) {
  22238. visitArgs.visitDeeper = false;
  22239. };
  22240. ProcessExtendsVisitor.prototype.visitSelector = function (selectorNode, visitArgs) {
  22241. visitArgs.visitDeeper = false;
  22242. };
  22243. ProcessExtendsVisitor.prototype.visitRuleset = function (rulesetNode, visitArgs) {
  22244. if (rulesetNode.root) {
  22245. return;
  22246. }
  22247. var matches;
  22248. var pathIndex;
  22249. var extendIndex;
  22250. var allExtends = this.allExtendsStack[this.allExtendsStack.length - 1];
  22251. var selectorsToAdd = [];
  22252. var extendVisitor = this;
  22253. var selectorPath;
  22254. // look at each selector path in the ruleset, find any extend matches and then copy, find and replace
  22255. for (extendIndex = 0; extendIndex < allExtends.length; extendIndex++) {
  22256. for (pathIndex = 0; pathIndex < rulesetNode.paths.length; pathIndex++) {
  22257. selectorPath = rulesetNode.paths[pathIndex];
  22258. // extending extends happens initially, before the main pass
  22259. if (rulesetNode.extendOnEveryPath) {
  22260. continue;
  22261. }
  22262. var extendList = selectorPath[selectorPath.length - 1].extendList;
  22263. if (extendList && extendList.length) {
  22264. continue;
  22265. }
  22266. matches = this.findMatch(allExtends[extendIndex], selectorPath);
  22267. if (matches.length) {
  22268. allExtends[extendIndex].hasFoundMatches = true;
  22269. allExtends[extendIndex].selfSelectors.forEach(function (selfSelector) {
  22270. var extendedSelectors;
  22271. extendedSelectors = extendVisitor.extendSelector(matches, selectorPath, selfSelector, allExtends[extendIndex].isVisible());
  22272. selectorsToAdd.push(extendedSelectors);
  22273. });
  22274. }
  22275. }
  22276. }
  22277. rulesetNode.paths = rulesetNode.paths.concat(selectorsToAdd);
  22278. };
  22279. ProcessExtendsVisitor.prototype.findMatch = function (extend, haystackSelectorPath) {
  22280. //
  22281. // look through the haystack selector path to try and find the needle - extend.selector
  22282. // returns an array of selector matches that can then be replaced
  22283. //
  22284. var haystackSelectorIndex;
  22285. var hackstackSelector;
  22286. var hackstackElementIndex;
  22287. var haystackElement;
  22288. var targetCombinator;
  22289. var i;
  22290. var extendVisitor = this;
  22291. var needleElements = extend.selector.elements;
  22292. var potentialMatches = [];
  22293. var potentialMatch;
  22294. var matches = [];
  22295. // loop through the haystack elements
  22296. for (haystackSelectorIndex = 0; haystackSelectorIndex < haystackSelectorPath.length; haystackSelectorIndex++) {
  22297. hackstackSelector = haystackSelectorPath[haystackSelectorIndex];
  22298. for (hackstackElementIndex = 0; hackstackElementIndex < hackstackSelector.elements.length; hackstackElementIndex++) {
  22299. haystackElement = hackstackSelector.elements[hackstackElementIndex];
  22300. // if we allow elements before our match we can add a potential match every time. otherwise only at the first element.
  22301. if (extend.allowBefore || (haystackSelectorIndex === 0 && hackstackElementIndex === 0)) {
  22302. potentialMatches.push({ pathIndex: haystackSelectorIndex, index: hackstackElementIndex, matched: 0,
  22303. initialCombinator: haystackElement.combinator });
  22304. }
  22305. for (i = 0; i < potentialMatches.length; i++) {
  22306. potentialMatch = potentialMatches[i];
  22307. // selectors add " " onto the first element. When we use & it joins the selectors together, but if we don't
  22308. // then each selector in haystackSelectorPath has a space before it added in the toCSS phase. so we need to
  22309. // work out what the resulting combinator will be
  22310. targetCombinator = haystackElement.combinator.value;
  22311. if (targetCombinator === '' && hackstackElementIndex === 0) {
  22312. targetCombinator = ' ';
  22313. }
  22314. // if we don't match, null our match to indicate failure
  22315. if (!extendVisitor.isElementValuesEqual(needleElements[potentialMatch.matched].value, haystackElement.value) ||
  22316. (potentialMatch.matched > 0 && needleElements[potentialMatch.matched].combinator.value !== targetCombinator)) {
  22317. potentialMatch = null;
  22318. }
  22319. else {
  22320. potentialMatch.matched++;
  22321. }
  22322. // if we are still valid and have finished, test whether we have elements after and whether these are allowed
  22323. if (potentialMatch) {
  22324. potentialMatch.finished = potentialMatch.matched === needleElements.length;
  22325. if (potentialMatch.finished &&
  22326. (!extend.allowAfter &&
  22327. (hackstackElementIndex + 1 < hackstackSelector.elements.length || haystackSelectorIndex + 1 < haystackSelectorPath.length))) {
  22328. potentialMatch = null;
  22329. }
  22330. }
  22331. // if null we remove, if not, we are still valid, so either push as a valid match or continue
  22332. if (potentialMatch) {
  22333. if (potentialMatch.finished) {
  22334. potentialMatch.length = needleElements.length;
  22335. potentialMatch.endPathIndex = haystackSelectorIndex;
  22336. potentialMatch.endPathElementIndex = hackstackElementIndex + 1; // index after end of match
  22337. potentialMatches.length = 0; // we don't allow matches to overlap, so start matching again
  22338. matches.push(potentialMatch);
  22339. }
  22340. }
  22341. else {
  22342. potentialMatches.splice(i, 1);
  22343. i--;
  22344. }
  22345. }
  22346. }
  22347. }
  22348. return matches;
  22349. };
  22350. ProcessExtendsVisitor.prototype.isElementValuesEqual = function (elementValue1, elementValue2) {
  22351. if (typeof elementValue1 === 'string' || typeof elementValue2 === 'string') {
  22352. return elementValue1 === elementValue2;
  22353. }
  22354. if (elementValue1 instanceof tree.Attribute) {
  22355. if (elementValue1.op !== elementValue2.op || elementValue1.key !== elementValue2.key) {
  22356. return false;
  22357. }
  22358. if (!elementValue1.value || !elementValue2.value) {
  22359. if (elementValue1.value || elementValue2.value) {
  22360. return false;
  22361. }
  22362. return true;
  22363. }
  22364. elementValue1 = elementValue1.value.value || elementValue1.value;
  22365. elementValue2 = elementValue2.value.value || elementValue2.value;
  22366. return elementValue1 === elementValue2;
  22367. }
  22368. elementValue1 = elementValue1.value;
  22369. elementValue2 = elementValue2.value;
  22370. if (elementValue1 instanceof tree.Selector) {
  22371. if (!(elementValue2 instanceof tree.Selector) || elementValue1.elements.length !== elementValue2.elements.length) {
  22372. return false;
  22373. }
  22374. for (var i = 0; i < elementValue1.elements.length; i++) {
  22375. if (elementValue1.elements[i].combinator.value !== elementValue2.elements[i].combinator.value) {
  22376. if (i !== 0 || (elementValue1.elements[i].combinator.value || ' ') !== (elementValue2.elements[i].combinator.value || ' ')) {
  22377. return false;
  22378. }
  22379. }
  22380. if (!this.isElementValuesEqual(elementValue1.elements[i].value, elementValue2.elements[i].value)) {
  22381. return false;
  22382. }
  22383. }
  22384. return true;
  22385. }
  22386. return false;
  22387. };
  22388. ProcessExtendsVisitor.prototype.extendSelector = function (matches, selectorPath, replacementSelector, isVisible) {
  22389. // for a set of matches, replace each match with the replacement selector
  22390. var currentSelectorPathIndex = 0;
  22391. var currentSelectorPathElementIndex = 0;
  22392. var path = [];
  22393. var matchIndex;
  22394. var selector;
  22395. var firstElement;
  22396. var match;
  22397. var newElements;
  22398. for (matchIndex = 0; matchIndex < matches.length; matchIndex++) {
  22399. match = matches[matchIndex];
  22400. selector = selectorPath[match.pathIndex];
  22401. firstElement = new tree.Element(match.initialCombinator, replacementSelector.elements[0].value, replacementSelector.elements[0].isVariable, replacementSelector.elements[0].getIndex(), replacementSelector.elements[0].fileInfo());
  22402. if (match.pathIndex > currentSelectorPathIndex && currentSelectorPathElementIndex > 0) {
  22403. path[path.length - 1].elements = path[path.length - 1]
  22404. .elements.concat(selectorPath[currentSelectorPathIndex].elements.slice(currentSelectorPathElementIndex));
  22405. currentSelectorPathElementIndex = 0;
  22406. currentSelectorPathIndex++;
  22407. }
  22408. newElements = selector.elements
  22409. .slice(currentSelectorPathElementIndex, match.index)
  22410. .concat([firstElement])
  22411. .concat(replacementSelector.elements.slice(1));
  22412. if (currentSelectorPathIndex === match.pathIndex && matchIndex > 0) {
  22413. path[path.length - 1].elements =
  22414. path[path.length - 1].elements.concat(newElements);
  22415. }
  22416. else {
  22417. path = path.concat(selectorPath.slice(currentSelectorPathIndex, match.pathIndex));
  22418. path.push(new tree.Selector(newElements));
  22419. }
  22420. currentSelectorPathIndex = match.endPathIndex;
  22421. currentSelectorPathElementIndex = match.endPathElementIndex;
  22422. if (currentSelectorPathElementIndex >= selectorPath[currentSelectorPathIndex].elements.length) {
  22423. currentSelectorPathElementIndex = 0;
  22424. currentSelectorPathIndex++;
  22425. }
  22426. }
  22427. if (currentSelectorPathIndex < selectorPath.length && currentSelectorPathElementIndex > 0) {
  22428. path[path.length - 1].elements = path[path.length - 1]
  22429. .elements.concat(selectorPath[currentSelectorPathIndex].elements.slice(currentSelectorPathElementIndex));
  22430. currentSelectorPathIndex++;
  22431. }
  22432. path = path.concat(selectorPath.slice(currentSelectorPathIndex, selectorPath.length));
  22433. path = path.map(function (currentValue) {
  22434. // we can re-use elements here, because the visibility property matters only for selectors
  22435. var derived = currentValue.createDerived(currentValue.elements);
  22436. if (isVisible) {
  22437. derived.ensureVisibility();
  22438. }
  22439. else {
  22440. derived.ensureInvisibility();
  22441. }
  22442. return derived;
  22443. });
  22444. return path;
  22445. };
  22446. ProcessExtendsVisitor.prototype.visitMedia = function (mediaNode, visitArgs) {
  22447. var newAllExtends = mediaNode.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length - 1]);
  22448. newAllExtends = newAllExtends.concat(this.doExtendChaining(newAllExtends, mediaNode.allExtends));
  22449. this.allExtendsStack.push(newAllExtends);
  22450. };
  22451. ProcessExtendsVisitor.prototype.visitMediaOut = function (mediaNode) {
  22452. var lastIndex = this.allExtendsStack.length - 1;
  22453. this.allExtendsStack.length = lastIndex;
  22454. };
  22455. ProcessExtendsVisitor.prototype.visitAtRule = function (atRuleNode, visitArgs) {
  22456. var newAllExtends = atRuleNode.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length - 1]);
  22457. newAllExtends = newAllExtends.concat(this.doExtendChaining(newAllExtends, atRuleNode.allExtends));
  22458. this.allExtendsStack.push(newAllExtends);
  22459. };
  22460. ProcessExtendsVisitor.prototype.visitAtRuleOut = function (atRuleNode) {
  22461. var lastIndex = this.allExtendsStack.length - 1;
  22462. this.allExtendsStack.length = lastIndex;
  22463. };
  22464. return ProcessExtendsVisitor;
  22465. }());
  22466. var JoinSelectorVisitor = /** @class */ (function () {
  22467. function JoinSelectorVisitor() {
  22468. this.contexts = [[]];
  22469. this._visitor = new Visitor(this);
  22470. }
  22471. JoinSelectorVisitor.prototype.run = function (root) {
  22472. return this._visitor.visit(root);
  22473. };
  22474. JoinSelectorVisitor.prototype.visitDeclaration = function (declNode, visitArgs) {
  22475. visitArgs.visitDeeper = false;
  22476. };
  22477. JoinSelectorVisitor.prototype.visitMixinDefinition = function (mixinDefinitionNode, visitArgs) {
  22478. visitArgs.visitDeeper = false;
  22479. };
  22480. JoinSelectorVisitor.prototype.visitRuleset = function (rulesetNode, visitArgs) {
  22481. var context = this.contexts[this.contexts.length - 1];
  22482. var paths = [];
  22483. var selectors;
  22484. this.contexts.push(paths);
  22485. if (!rulesetNode.root) {
  22486. selectors = rulesetNode.selectors;
  22487. if (selectors) {
  22488. selectors = selectors.filter(function (selector) { return selector.getIsOutput(); });
  22489. rulesetNode.selectors = selectors.length ? selectors : (selectors = null);
  22490. if (selectors) {
  22491. rulesetNode.joinSelectors(paths, context, selectors);
  22492. }
  22493. }
  22494. if (!selectors) {
  22495. rulesetNode.rules = null;
  22496. }
  22497. rulesetNode.paths = paths;
  22498. }
  22499. };
  22500. JoinSelectorVisitor.prototype.visitRulesetOut = function (rulesetNode) {
  22501. this.contexts.length = this.contexts.length - 1;
  22502. };
  22503. JoinSelectorVisitor.prototype.visitMedia = function (mediaNode, visitArgs) {
  22504. var context = this.contexts[this.contexts.length - 1];
  22505. mediaNode.rules[0].root = (context.length === 0 || context[0].multiMedia);
  22506. };
  22507. JoinSelectorVisitor.prototype.visitAtRule = function (atRuleNode, visitArgs) {
  22508. var context = this.contexts[this.contexts.length - 1];
  22509. if (atRuleNode.rules && atRuleNode.rules.length) {
  22510. atRuleNode.rules[0].root = (atRuleNode.isRooted || context.length === 0 || null);
  22511. }
  22512. };
  22513. return JoinSelectorVisitor;
  22514. }());
  22515. var CSSVisitorUtils = /** @class */ (function () {
  22516. function CSSVisitorUtils(context) {
  22517. this._visitor = new Visitor(this);
  22518. this._context = context;
  22519. }
  22520. CSSVisitorUtils.prototype.containsSilentNonBlockedChild = function (bodyRules) {
  22521. var rule;
  22522. if (!bodyRules) {
  22523. return false;
  22524. }
  22525. for (var r = 0; r < bodyRules.length; r++) {
  22526. rule = bodyRules[r];
  22527. if (rule.isSilent && rule.isSilent(this._context) && !rule.blocksVisibility()) {
  22528. // the atrule contains something that was referenced (likely by extend)
  22529. // therefore it needs to be shown in output too
  22530. return true;
  22531. }
  22532. }
  22533. return false;
  22534. };
  22535. CSSVisitorUtils.prototype.keepOnlyVisibleChilds = function (owner) {
  22536. if (owner && owner.rules) {
  22537. owner.rules = owner.rules.filter(function (thing) { return thing.isVisible(); });
  22538. }
  22539. };
  22540. CSSVisitorUtils.prototype.isEmpty = function (owner) {
  22541. return (owner && owner.rules)
  22542. ? (owner.rules.length === 0) : true;
  22543. };
  22544. CSSVisitorUtils.prototype.hasVisibleSelector = function (rulesetNode) {
  22545. return (rulesetNode && rulesetNode.paths)
  22546. ? (rulesetNode.paths.length > 0) : false;
  22547. };
  22548. CSSVisitorUtils.prototype.resolveVisibility = function (node, originalRules) {
  22549. if (!node.blocksVisibility()) {
  22550. if (this.isEmpty(node) && !this.containsSilentNonBlockedChild(originalRules)) {
  22551. return;
  22552. }
  22553. return node;
  22554. }
  22555. var compiledRulesBody = node.rules[0];
  22556. this.keepOnlyVisibleChilds(compiledRulesBody);
  22557. if (this.isEmpty(compiledRulesBody)) {
  22558. return;
  22559. }
  22560. node.ensureVisibility();
  22561. node.removeVisibilityBlock();
  22562. return node;
  22563. };
  22564. CSSVisitorUtils.prototype.isVisibleRuleset = function (rulesetNode) {
  22565. if (rulesetNode.firstRoot) {
  22566. return true;
  22567. }
  22568. if (this.isEmpty(rulesetNode)) {
  22569. return false;
  22570. }
  22571. if (!rulesetNode.root && !this.hasVisibleSelector(rulesetNode)) {
  22572. return false;
  22573. }
  22574. return true;
  22575. };
  22576. return CSSVisitorUtils;
  22577. }());
  22578. var ToCSSVisitor = function (context) {
  22579. this._visitor = new Visitor(this);
  22580. this._context = context;
  22581. this.utils = new CSSVisitorUtils(context);
  22582. };
  22583. ToCSSVisitor.prototype = {
  22584. isReplacing: true,
  22585. run: function (root) {
  22586. return this._visitor.visit(root);
  22587. },
  22588. visitDeclaration: function (declNode, visitArgs) {
  22589. if (declNode.blocksVisibility() || declNode.variable) {
  22590. return;
  22591. }
  22592. return declNode;
  22593. },
  22594. visitMixinDefinition: function (mixinNode, visitArgs) {
  22595. // mixin definitions do not get eval'd - this means they keep state
  22596. // so we have to clear that state here so it isn't used if toCSS is called twice
  22597. mixinNode.frames = [];
  22598. },
  22599. visitExtend: function (extendNode, visitArgs) {
  22600. },
  22601. visitComment: function (commentNode, visitArgs) {
  22602. if (commentNode.blocksVisibility() || commentNode.isSilent(this._context)) {
  22603. return;
  22604. }
  22605. return commentNode;
  22606. },
  22607. visitMedia: function (mediaNode, visitArgs) {
  22608. var originalRules = mediaNode.rules[0].rules;
  22609. mediaNode.accept(this._visitor);
  22610. visitArgs.visitDeeper = false;
  22611. return this.utils.resolveVisibility(mediaNode, originalRules);
  22612. },
  22613. visitImport: function (importNode, visitArgs) {
  22614. if (importNode.blocksVisibility()) {
  22615. return;
  22616. }
  22617. return importNode;
  22618. },
  22619. visitAtRule: function (atRuleNode, visitArgs) {
  22620. if (atRuleNode.rules && atRuleNode.rules.length) {
  22621. return this.visitAtRuleWithBody(atRuleNode, visitArgs);
  22622. }
  22623. else {
  22624. return this.visitAtRuleWithoutBody(atRuleNode, visitArgs);
  22625. }
  22626. },
  22627. visitAnonymous: function (anonymousNode, visitArgs) {
  22628. if (!anonymousNode.blocksVisibility()) {
  22629. anonymousNode.accept(this._visitor);
  22630. return anonymousNode;
  22631. }
  22632. },
  22633. visitAtRuleWithBody: function (atRuleNode, visitArgs) {
  22634. // if there is only one nested ruleset and that one has no path, then it is
  22635. // just fake ruleset
  22636. function hasFakeRuleset(atRuleNode) {
  22637. var bodyRules = atRuleNode.rules;
  22638. return bodyRules.length === 1 && (!bodyRules[0].paths || bodyRules[0].paths.length === 0);
  22639. }
  22640. function getBodyRules(atRuleNode) {
  22641. var nodeRules = atRuleNode.rules;
  22642. if (hasFakeRuleset(atRuleNode)) {
  22643. return nodeRules[0].rules;
  22644. }
  22645. return nodeRules;
  22646. }
  22647. // it is still true that it is only one ruleset in array
  22648. // this is last such moment
  22649. // process childs
  22650. var originalRules = getBodyRules(atRuleNode);
  22651. atRuleNode.accept(this._visitor);
  22652. visitArgs.visitDeeper = false;
  22653. if (!this.utils.isEmpty(atRuleNode)) {
  22654. this._mergeRules(atRuleNode.rules[0].rules);
  22655. }
  22656. return this.utils.resolveVisibility(atRuleNode, originalRules);
  22657. },
  22658. visitAtRuleWithoutBody: function (atRuleNode, visitArgs) {
  22659. if (atRuleNode.blocksVisibility()) {
  22660. return;
  22661. }
  22662. if (atRuleNode.name === '@charset') {
  22663. // Only output the debug info together with subsequent @charset definitions
  22664. // a comment (or @media statement) before the actual @charset atrule would
  22665. // be considered illegal css as it has to be on the first line
  22666. if (this.charset) {
  22667. if (atRuleNode.debugInfo) {
  22668. var comment = new tree.Comment("/* " + atRuleNode.toCSS(this._context).replace(/\n/g, '') + " */\n");
  22669. comment.debugInfo = atRuleNode.debugInfo;
  22670. return this._visitor.visit(comment);
  22671. }
  22672. return;
  22673. }
  22674. this.charset = true;
  22675. }
  22676. return atRuleNode;
  22677. },
  22678. checkValidNodes: function (rules, isRoot) {
  22679. if (!rules) {
  22680. return;
  22681. }
  22682. for (var i = 0; i < rules.length; i++) {
  22683. var ruleNode = rules[i];
  22684. if (isRoot && ruleNode instanceof tree.Declaration && !ruleNode.variable) {
  22685. throw { message: 'Properties must be inside selector blocks. They cannot be in the root',
  22686. index: ruleNode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().filename };
  22687. }
  22688. if (ruleNode instanceof tree.Call) {
  22689. throw { message: "Function '" + ruleNode.name + "' is undefined", index: ruleNode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().filename };
  22690. }
  22691. if (ruleNode.type && !ruleNode.allowRoot) {
  22692. throw { message: ruleNode.type + " node returned by a function is not valid here", index: ruleNode.getIndex(), filename: ruleNode.fileInfo() && ruleNode.fileInfo().filename };
  22693. }
  22694. }
  22695. },
  22696. visitRuleset: function (rulesetNode, visitArgs) {
  22697. // at this point rulesets are nested into each other
  22698. var rule;
  22699. var rulesets = [];
  22700. this.checkValidNodes(rulesetNode.rules, rulesetNode.firstRoot);
  22701. if (!rulesetNode.root) {
  22702. // remove invisible paths
  22703. this._compileRulesetPaths(rulesetNode);
  22704. // remove rulesets from this ruleset body and compile them separately
  22705. var nodeRules = rulesetNode.rules;
  22706. var nodeRuleCnt = nodeRules ? nodeRules.length : 0;
  22707. for (var i = 0; i < nodeRuleCnt;) {
  22708. rule = nodeRules[i];
  22709. if (rule && rule.rules) {
  22710. // visit because we are moving them out from being a child
  22711. rulesets.push(this._visitor.visit(rule));
  22712. nodeRules.splice(i, 1);
  22713. nodeRuleCnt--;
  22714. continue;
  22715. }
  22716. i++;
  22717. }
  22718. // accept the visitor to remove rules and refactor itself
  22719. // then we can decide nogw whether we want it or not
  22720. // compile body
  22721. if (nodeRuleCnt > 0) {
  22722. rulesetNode.accept(this._visitor);
  22723. }
  22724. else {
  22725. rulesetNode.rules = null;
  22726. }
  22727. visitArgs.visitDeeper = false;
  22728. }
  22729. else { // if (! rulesetNode.root) {
  22730. rulesetNode.accept(this._visitor);
  22731. visitArgs.visitDeeper = false;
  22732. }
  22733. if (rulesetNode.rules) {
  22734. this._mergeRules(rulesetNode.rules);
  22735. this._removeDuplicateRules(rulesetNode.rules);
  22736. }
  22737. // now decide whether we keep the ruleset
  22738. if (this.utils.isVisibleRuleset(rulesetNode)) {
  22739. rulesetNode.ensureVisibility();
  22740. rulesets.splice(0, 0, rulesetNode);
  22741. }
  22742. if (rulesets.length === 1) {
  22743. return rulesets[0];
  22744. }
  22745. return rulesets;
  22746. },
  22747. _compileRulesetPaths: function (rulesetNode) {
  22748. if (rulesetNode.paths) {
  22749. rulesetNode.paths = rulesetNode.paths
  22750. .filter(function (p) {
  22751. var i;
  22752. if (p[0].elements[0].combinator.value === ' ') {
  22753. p[0].elements[0].combinator = new (tree.Combinator)('');
  22754. }
  22755. for (i = 0; i < p.length; i++) {
  22756. if (p[i].isVisible() && p[i].getIsOutput()) {
  22757. return true;
  22758. }
  22759. }
  22760. return false;
  22761. });
  22762. }
  22763. },
  22764. _removeDuplicateRules: function (rules) {
  22765. if (!rules) {
  22766. return;
  22767. }
  22768. // remove duplicates
  22769. var ruleCache = {};
  22770. var ruleList;
  22771. var rule;
  22772. var i;
  22773. for (i = rules.length - 1; i >= 0; i--) {
  22774. rule = rules[i];
  22775. if (rule instanceof tree.Declaration) {
  22776. if (!ruleCache[rule.name]) {
  22777. ruleCache[rule.name] = rule;
  22778. }
  22779. else {
  22780. ruleList = ruleCache[rule.name];
  22781. if (ruleList instanceof tree.Declaration) {
  22782. ruleList = ruleCache[rule.name] = [ruleCache[rule.name].toCSS(this._context)];
  22783. }
  22784. var ruleCSS = rule.toCSS(this._context);
  22785. if (ruleList.indexOf(ruleCSS) !== -1) {
  22786. rules.splice(i, 1);
  22787. }
  22788. else {
  22789. ruleList.push(ruleCSS);
  22790. }
  22791. }
  22792. }
  22793. }
  22794. },
  22795. _mergeRules: function (rules) {
  22796. if (!rules) {
  22797. return;
  22798. }
  22799. var groups = {};
  22800. var groupsArr = [];
  22801. for (var i = 0; i < rules.length; i++) {
  22802. var rule = rules[i];
  22803. if (rule.merge) {
  22804. var key = rule.name;
  22805. groups[key] ? rules.splice(i--, 1) :
  22806. groupsArr.push(groups[key] = []);
  22807. groups[key].push(rule);
  22808. }
  22809. }
  22810. groupsArr.forEach(function (group) {
  22811. if (group.length > 0) {
  22812. var result_1 = group[0];
  22813. var space_1 = [];
  22814. var comma_1 = [new tree.Expression(space_1)];
  22815. group.forEach(function (rule) {
  22816. if ((rule.merge === '+') && (space_1.length > 0)) {
  22817. comma_1.push(new tree.Expression(space_1 = []));
  22818. }
  22819. space_1.push(rule.value);
  22820. result_1.important = result_1.important || rule.important;
  22821. });
  22822. result_1.value = new tree.Value(comma_1);
  22823. }
  22824. });
  22825. }
  22826. };
  22827. var visitors = {
  22828. Visitor: Visitor,
  22829. ImportVisitor: ImportVisitor,
  22830. MarkVisibleSelectorsVisitor: SetTreeVisibilityVisitor,
  22831. ExtendVisitor: ProcessExtendsVisitor,
  22832. JoinSelectorVisitor: JoinSelectorVisitor,
  22833. ToCSSVisitor: ToCSSVisitor
  22834. };
  22835. // Split the input into chunks.
  22836. var chunker = (function (input, fail) {
  22837. var len = input.length;
  22838. var level = 0;
  22839. var parenLevel = 0;
  22840. var lastOpening;
  22841. var lastOpeningParen;
  22842. var lastMultiComment;
  22843. var lastMultiCommentEndBrace;
  22844. var chunks = [];
  22845. var emitFrom = 0;
  22846. var chunkerCurrentIndex;
  22847. var currentChunkStartIndex;
  22848. var cc;
  22849. var cc2;
  22850. var matched;
  22851. function emitChunk(force) {
  22852. var len = chunkerCurrentIndex - emitFrom;
  22853. if (((len < 512) && !force) || !len) {
  22854. return;
  22855. }
  22856. chunks.push(input.slice(emitFrom, chunkerCurrentIndex + 1));
  22857. emitFrom = chunkerCurrentIndex + 1;
  22858. }
  22859. for (chunkerCurrentIndex = 0; chunkerCurrentIndex < len; chunkerCurrentIndex++) {
  22860. cc = input.charCodeAt(chunkerCurrentIndex);
  22861. if (((cc >= 97) && (cc <= 122)) || (cc < 34)) {
  22862. // a-z or whitespace
  22863. continue;
  22864. }
  22865. switch (cc) {
  22866. case 40: // (
  22867. parenLevel++;
  22868. lastOpeningParen = chunkerCurrentIndex;
  22869. continue;
  22870. case 41: // )
  22871. if (--parenLevel < 0) {
  22872. return fail('missing opening `(`', chunkerCurrentIndex);
  22873. }
  22874. continue;
  22875. case 59: // ;
  22876. if (!parenLevel) {
  22877. emitChunk();
  22878. }
  22879. continue;
  22880. case 123: // {
  22881. level++;
  22882. lastOpening = chunkerCurrentIndex;
  22883. continue;
  22884. case 125: // }
  22885. if (--level < 0) {
  22886. return fail('missing opening `{`', chunkerCurrentIndex);
  22887. }
  22888. if (!level && !parenLevel) {
  22889. emitChunk();
  22890. }
  22891. continue;
  22892. case 92: // \
  22893. if (chunkerCurrentIndex < len - 1) {
  22894. chunkerCurrentIndex++;
  22895. continue;
  22896. }
  22897. return fail('unescaped `\\`', chunkerCurrentIndex);
  22898. case 34:
  22899. case 39:
  22900. case 96: // ", ' and `
  22901. matched = 0;
  22902. currentChunkStartIndex = chunkerCurrentIndex;
  22903. for (chunkerCurrentIndex = chunkerCurrentIndex + 1; chunkerCurrentIndex < len; chunkerCurrentIndex++) {
  22904. cc2 = input.charCodeAt(chunkerCurrentIndex);
  22905. if (cc2 > 96) {
  22906. continue;
  22907. }
  22908. if (cc2 == cc) {
  22909. matched = 1;
  22910. break;
  22911. }
  22912. if (cc2 == 92) { // \
  22913. if (chunkerCurrentIndex == len - 1) {
  22914. return fail('unescaped `\\`', chunkerCurrentIndex);
  22915. }
  22916. chunkerCurrentIndex++;
  22917. }
  22918. }
  22919. if (matched) {
  22920. continue;
  22921. }
  22922. return fail("unmatched `" + String.fromCharCode(cc) + "`", currentChunkStartIndex);
  22923. case 47: // /, check for comment
  22924. if (parenLevel || (chunkerCurrentIndex == len - 1)) {
  22925. continue;
  22926. }
  22927. cc2 = input.charCodeAt(chunkerCurrentIndex + 1);
  22928. if (cc2 == 47) {
  22929. // //, find lnfeed
  22930. for (chunkerCurrentIndex = chunkerCurrentIndex + 2; chunkerCurrentIndex < len; chunkerCurrentIndex++) {
  22931. cc2 = input.charCodeAt(chunkerCurrentIndex);
  22932. if ((cc2 <= 13) && ((cc2 == 10) || (cc2 == 13))) {
  22933. break;
  22934. }
  22935. }
  22936. }
  22937. else if (cc2 == 42) {
  22938. // /*, find */
  22939. lastMultiComment = currentChunkStartIndex = chunkerCurrentIndex;
  22940. for (chunkerCurrentIndex = chunkerCurrentIndex + 2; chunkerCurrentIndex < len - 1; chunkerCurrentIndex++) {
  22941. cc2 = input.charCodeAt(chunkerCurrentIndex);
  22942. if (cc2 == 125) {
  22943. lastMultiCommentEndBrace = chunkerCurrentIndex;
  22944. }
  22945. if (cc2 != 42) {
  22946. continue;
  22947. }
  22948. if (input.charCodeAt(chunkerCurrentIndex + 1) == 47) {
  22949. break;
  22950. }
  22951. }
  22952. if (chunkerCurrentIndex == len - 1) {
  22953. return fail('missing closing `*/`', currentChunkStartIndex);
  22954. }
  22955. chunkerCurrentIndex++;
  22956. }
  22957. continue;
  22958. case 42: // *, check for unmatched */
  22959. if ((chunkerCurrentIndex < len - 1) && (input.charCodeAt(chunkerCurrentIndex + 1) == 47)) {
  22960. return fail('unmatched `/*`', chunkerCurrentIndex);
  22961. }
  22962. continue;
  22963. }
  22964. }
  22965. if (level !== 0) {
  22966. if ((lastMultiComment > lastOpening) && (lastMultiCommentEndBrace > lastMultiComment)) {
  22967. return fail('missing closing `}` or `*/`', lastOpening);
  22968. }
  22969. else {
  22970. return fail('missing closing `}`', lastOpening);
  22971. }
  22972. }
  22973. else if (parenLevel !== 0) {
  22974. return fail('missing closing `)`', lastOpeningParen);
  22975. }
  22976. emitChunk(true);
  22977. return chunks;
  22978. });
  22979. var getParserInput = (function () {
  22980. var // Less input string
  22981. input;
  22982. var // current chunk
  22983. j;
  22984. var // holds state for backtracking
  22985. saveStack = [];
  22986. var // furthest index the parser has gone to
  22987. furthest;
  22988. var // if this is furthest we got to, this is the probably cause
  22989. furthestPossibleErrorMessage;
  22990. var // chunkified input
  22991. chunks;
  22992. var // current chunk
  22993. current;
  22994. var // index of current chunk, in `input`
  22995. currentPos;
  22996. var parserInput = {};
  22997. var CHARCODE_SPACE = 32;
  22998. var CHARCODE_TAB = 9;
  22999. var CHARCODE_LF = 10;
  23000. var CHARCODE_CR = 13;
  23001. var CHARCODE_PLUS = 43;
  23002. var CHARCODE_COMMA = 44;
  23003. var CHARCODE_FORWARD_SLASH = 47;
  23004. var CHARCODE_9 = 57;
  23005. function skipWhitespace(length) {
  23006. var oldi = parserInput.i;
  23007. var oldj = j;
  23008. var curr = parserInput.i - currentPos;
  23009. var endIndex = parserInput.i + current.length - curr;
  23010. var mem = (parserInput.i += length);
  23011. var inp = input;
  23012. var c;
  23013. var nextChar;
  23014. var comment;
  23015. for (; parserInput.i < endIndex; parserInput.i++) {
  23016. c = inp.charCodeAt(parserInput.i);
  23017. if (parserInput.autoCommentAbsorb && c === CHARCODE_FORWARD_SLASH) {
  23018. nextChar = inp.charAt(parserInput.i + 1);
  23019. if (nextChar === '/') {
  23020. comment = { index: parserInput.i, isLineComment: true };
  23021. var nextNewLine = inp.indexOf('\n', parserInput.i + 2);
  23022. if (nextNewLine < 0) {
  23023. nextNewLine = endIndex;
  23024. }
  23025. parserInput.i = nextNewLine;
  23026. comment.text = inp.substr(comment.index, parserInput.i - comment.index);
  23027. parserInput.commentStore.push(comment);
  23028. continue;
  23029. }
  23030. else if (nextChar === '*') {
  23031. var nextStarSlash = inp.indexOf('*/', parserInput.i + 2);
  23032. if (nextStarSlash >= 0) {
  23033. comment = {
  23034. index: parserInput.i,
  23035. text: inp.substr(parserInput.i, nextStarSlash + 2 - parserInput.i),
  23036. isLineComment: false
  23037. };
  23038. parserInput.i += comment.text.length - 1;
  23039. parserInput.commentStore.push(comment);
  23040. continue;
  23041. }
  23042. }
  23043. break;
  23044. }
  23045. if ((c !== CHARCODE_SPACE) && (c !== CHARCODE_LF) && (c !== CHARCODE_TAB) && (c !== CHARCODE_CR)) {
  23046. break;
  23047. }
  23048. }
  23049. current = current.slice(length + parserInput.i - mem + curr);
  23050. currentPos = parserInput.i;
  23051. if (!current.length) {
  23052. if (j < chunks.length - 1) {
  23053. current = chunks[++j];
  23054. skipWhitespace(0); // skip space at the beginning of a chunk
  23055. return true; // things changed
  23056. }
  23057. parserInput.finished = true;
  23058. }
  23059. return oldi !== parserInput.i || oldj !== j;
  23060. }
  23061. parserInput.save = function () {
  23062. currentPos = parserInput.i;
  23063. saveStack.push({ current: current, i: parserInput.i, j: j });
  23064. };
  23065. parserInput.restore = function (possibleErrorMessage) {
  23066. if (parserInput.i > furthest || (parserInput.i === furthest && possibleErrorMessage && !furthestPossibleErrorMessage)) {
  23067. furthest = parserInput.i;
  23068. furthestPossibleErrorMessage = possibleErrorMessage;
  23069. }
  23070. var state = saveStack.pop();
  23071. current = state.current;
  23072. currentPos = parserInput.i = state.i;
  23073. j = state.j;
  23074. };
  23075. parserInput.forget = function () {
  23076. saveStack.pop();
  23077. };
  23078. parserInput.isWhitespace = function (offset) {
  23079. var pos = parserInput.i + (offset || 0);
  23080. var code = input.charCodeAt(pos);
  23081. return (code === CHARCODE_SPACE || code === CHARCODE_CR || code === CHARCODE_TAB || code === CHARCODE_LF);
  23082. };
  23083. // Specialization of $(tok)
  23084. parserInput.$re = function (tok) {
  23085. if (parserInput.i > currentPos) {
  23086. current = current.slice(parserInput.i - currentPos);
  23087. currentPos = parserInput.i;
  23088. }
  23089. var m = tok.exec(current);
  23090. if (!m) {
  23091. return null;
  23092. }
  23093. skipWhitespace(m[0].length);
  23094. if (typeof m === 'string') {
  23095. return m;
  23096. }
  23097. return m.length === 1 ? m[0] : m;
  23098. };
  23099. parserInput.$char = function (tok) {
  23100. if (input.charAt(parserInput.i) !== tok) {
  23101. return null;
  23102. }
  23103. skipWhitespace(1);
  23104. return tok;
  23105. };
  23106. parserInput.$str = function (tok) {
  23107. var tokLength = tok.length;
  23108. // https://jsperf.com/string-startswith/21
  23109. for (var i = 0; i < tokLength; i++) {
  23110. if (input.charAt(parserInput.i + i) !== tok.charAt(i)) {
  23111. return null;
  23112. }
  23113. }
  23114. skipWhitespace(tokLength);
  23115. return tok;
  23116. };
  23117. parserInput.$quoted = function (loc) {
  23118. var pos = loc || parserInput.i;
  23119. var startChar = input.charAt(pos);
  23120. if (startChar !== '\'' && startChar !== '"') {
  23121. return;
  23122. }
  23123. var length = input.length;
  23124. var currentPosition = pos;
  23125. for (var i = 1; i + currentPosition < length; i++) {
  23126. var nextChar = input.charAt(i + currentPosition);
  23127. switch (nextChar) {
  23128. case '\\':
  23129. i++;
  23130. continue;
  23131. case '\r':
  23132. case '\n':
  23133. break;
  23134. case startChar:
  23135. var str = input.substr(currentPosition, i + 1);
  23136. if (!loc && loc !== 0) {
  23137. skipWhitespace(i + 1);
  23138. return str;
  23139. }
  23140. return [startChar, str];
  23141. }
  23142. }
  23143. return null;
  23144. };
  23145. /**
  23146. * Permissive parsing. Ignores everything except matching {} [] () and quotes
  23147. * until matching token (outside of blocks)
  23148. */
  23149. parserInput.$parseUntil = function (tok) {
  23150. var quote = '';
  23151. var returnVal = null;
  23152. var inComment = false;
  23153. var blockDepth = 0;
  23154. var blockStack = [];
  23155. var parseGroups = [];
  23156. var length = input.length;
  23157. var startPos = parserInput.i;
  23158. var lastPos = parserInput.i;
  23159. var i = parserInput.i;
  23160. var loop = true;
  23161. var testChar;
  23162. if (typeof tok === 'string') {
  23163. testChar = function (char) { return char === tok; };
  23164. }
  23165. else {
  23166. testChar = function (char) { return tok.test(char); };
  23167. }
  23168. do {
  23169. var nextChar = input.charAt(i);
  23170. if (blockDepth === 0 && testChar(nextChar)) {
  23171. returnVal = input.substr(lastPos, i - lastPos);
  23172. if (returnVal) {
  23173. parseGroups.push(returnVal);
  23174. }
  23175. else {
  23176. parseGroups.push(' ');
  23177. }
  23178. returnVal = parseGroups;
  23179. skipWhitespace(i - startPos);
  23180. loop = false;
  23181. }
  23182. else {
  23183. if (inComment) {
  23184. if (nextChar === '*' &&
  23185. input.charAt(i + 1) === '/') {
  23186. i++;
  23187. blockDepth--;
  23188. inComment = false;
  23189. }
  23190. i++;
  23191. continue;
  23192. }
  23193. switch (nextChar) {
  23194. case '\\':
  23195. i++;
  23196. nextChar = input.charAt(i);
  23197. parseGroups.push(input.substr(lastPos, i - lastPos + 1));
  23198. lastPos = i + 1;
  23199. break;
  23200. case '/':
  23201. if (input.charAt(i + 1) === '*') {
  23202. i++;
  23203. inComment = true;
  23204. blockDepth++;
  23205. }
  23206. break;
  23207. case '\'':
  23208. case '"':
  23209. quote = parserInput.$quoted(i);
  23210. if (quote) {
  23211. parseGroups.push(input.substr(lastPos, i - lastPos), quote);
  23212. i += quote[1].length - 1;
  23213. lastPos = i + 1;
  23214. }
  23215. else {
  23216. skipWhitespace(i - startPos);
  23217. returnVal = nextChar;
  23218. loop = false;
  23219. }
  23220. break;
  23221. case '{':
  23222. blockStack.push('}');
  23223. blockDepth++;
  23224. break;
  23225. case '(':
  23226. blockStack.push(')');
  23227. blockDepth++;
  23228. break;
  23229. case '[':
  23230. blockStack.push(']');
  23231. blockDepth++;
  23232. break;
  23233. case '}':
  23234. case ')':
  23235. case ']':
  23236. var expected = blockStack.pop();
  23237. if (nextChar === expected) {
  23238. blockDepth--;
  23239. }
  23240. else {
  23241. // move the parser to the error and return expected
  23242. skipWhitespace(i - startPos);
  23243. returnVal = expected;
  23244. loop = false;
  23245. }
  23246. }
  23247. i++;
  23248. if (i > length) {
  23249. loop = false;
  23250. }
  23251. }
  23252. } while (loop);
  23253. return returnVal ? returnVal : null;
  23254. };
  23255. parserInput.autoCommentAbsorb = true;
  23256. parserInput.commentStore = [];
  23257. parserInput.finished = false;
  23258. // Same as $(), but don't change the state of the parser,
  23259. // just return the match.
  23260. parserInput.peek = function (tok) {
  23261. if (typeof tok === 'string') {
  23262. // https://jsperf.com/string-startswith/21
  23263. for (var i = 0; i < tok.length; i++) {
  23264. if (input.charAt(parserInput.i + i) !== tok.charAt(i)) {
  23265. return false;
  23266. }
  23267. }
  23268. return true;
  23269. }
  23270. else {
  23271. return tok.test(current);
  23272. }
  23273. };
  23274. // Specialization of peek()
  23275. // TODO remove or change some currentChar calls to peekChar
  23276. parserInput.peekChar = function (tok) { return input.charAt(parserInput.i) === tok; };
  23277. parserInput.currentChar = function () { return input.charAt(parserInput.i); };
  23278. parserInput.prevChar = function () { return input.charAt(parserInput.i - 1); };
  23279. parserInput.getInput = function () { return input; };
  23280. parserInput.peekNotNumeric = function () {
  23281. var c = input.charCodeAt(parserInput.i);
  23282. // Is the first char of the dimension 0-9, '.', '+' or '-'
  23283. return (c > CHARCODE_9 || c < CHARCODE_PLUS) || c === CHARCODE_FORWARD_SLASH || c === CHARCODE_COMMA;
  23284. };
  23285. parserInput.start = function (str, chunkInput, failFunction) {
  23286. input = str;
  23287. parserInput.i = j = currentPos = furthest = 0;
  23288. // chunking apparently makes things quicker (but my tests indicate
  23289. // it might actually make things slower in node at least)
  23290. // and it is a non-perfect parse - it can't recognise
  23291. // unquoted urls, meaning it can't distinguish comments
  23292. // meaning comments with quotes or {}() in them get 'counted'
  23293. // and then lead to parse errors.
  23294. // In addition if the chunking chunks in the wrong place we might
  23295. // not be able to parse a parser statement in one go
  23296. // this is officially deprecated but can be switched on via an option
  23297. // in the case it causes too much performance issues.
  23298. if (chunkInput) {
  23299. chunks = chunker(str, failFunction);
  23300. }
  23301. else {
  23302. chunks = [str];
  23303. }
  23304. current = chunks[0];
  23305. skipWhitespace(0);
  23306. };
  23307. parserInput.end = function () {
  23308. var message;
  23309. var isFinished = parserInput.i >= input.length;
  23310. if (parserInput.i < furthest) {
  23311. message = furthestPossibleErrorMessage;
  23312. parserInput.i = furthest;
  23313. }
  23314. return {
  23315. isFinished: isFinished,
  23316. furthest: parserInput.i,
  23317. furthestPossibleErrorMessage: message,
  23318. furthestReachedEnd: parserInput.i >= input.length - 1,
  23319. furthestChar: input[parserInput.i]
  23320. };
  23321. };
  23322. return parserInput;
  23323. });
  23324. //
  23325. // less.js - parser
  23326. //
  23327. // A relatively straight-forward predictive parser.
  23328. // There is no tokenization/lexing stage, the input is parsed
  23329. // in one sweep.
  23330. //
  23331. // To make the parser fast enough to run in the browser, several
  23332. // optimization had to be made:
  23333. //
  23334. // - Matching and slicing on a huge input is often cause of slowdowns.
  23335. // The solution is to chunkify the input into smaller strings.
  23336. // The chunks are stored in the `chunks` var,
  23337. // `j` holds the current chunk index, and `currentPos` holds
  23338. // the index of the current chunk in relation to `input`.
  23339. // This gives us an almost 4x speed-up.
  23340. //
  23341. // - In many cases, we don't need to match individual tokens;
  23342. // for example, if a value doesn't hold any variables, operations
  23343. // or dynamic references, the parser can effectively 'skip' it,
  23344. // treating it as a literal.
  23345. // An example would be '1px solid #000' - which evaluates to itself,
  23346. // we don't need to know what the individual components are.
  23347. // The drawback, of course is that you don't get the benefits of
  23348. // syntax-checking on the CSS. This gives us a 50% speed-up in the parser,
  23349. // and a smaller speed-up in the code-gen.
  23350. //
  23351. //
  23352. // Token matching is done with the `$` function, which either takes
  23353. // a terminal string or regexp, or a non-terminal function to call.
  23354. // It also takes care of moving all the indices forwards.
  23355. //
  23356. var Parser = function Parser(context, imports, fileInfo) {
  23357. var parsers;
  23358. var parserInput = getParserInput();
  23359. function error(msg, type) {
  23360. throw new LessError({
  23361. index: parserInput.i,
  23362. filename: fileInfo.filename,
  23363. type: type || 'Syntax',
  23364. message: msg
  23365. }, imports);
  23366. }
  23367. function expect(arg, msg) {
  23368. // some older browsers return typeof 'function' for RegExp
  23369. var result = (arg instanceof Function) ? arg.call(parsers) : parserInput.$re(arg);
  23370. if (result) {
  23371. return result;
  23372. }
  23373. error(msg || (typeof arg === 'string'
  23374. ? "expected '" + arg + "' got '" + parserInput.currentChar() + "'"
  23375. : 'unexpected token'));
  23376. }
  23377. // Specialization of expect()
  23378. function expectChar(arg, msg) {
  23379. if (parserInput.$char(arg)) {
  23380. return arg;
  23381. }
  23382. error(msg || "expected '" + arg + "' got '" + parserInput.currentChar() + "'");
  23383. }
  23384. function getDebugInfo(index) {
  23385. var filename = fileInfo.filename;
  23386. return {
  23387. lineNumber: getLocation(index, parserInput.getInput()).line + 1,
  23388. fileName: filename
  23389. };
  23390. }
  23391. /**
  23392. * Used after initial parsing to create nodes on the fly
  23393. *
  23394. * @param {String} str - string to parse
  23395. * @param {Array} parseList - array of parsers to run input through e.g. ["value", "important"]
  23396. * @param {Number} currentIndex - start number to begin indexing
  23397. * @param {Object} fileInfo - fileInfo to attach to created nodes
  23398. */
  23399. function parseNode(str, parseList, currentIndex, fileInfo, callback) {
  23400. var result;
  23401. var returnNodes = [];
  23402. var parser = parserInput;
  23403. try {
  23404. parser.start(str, false, function fail(msg, index) {
  23405. callback({
  23406. message: msg,
  23407. index: index + currentIndex
  23408. });
  23409. });
  23410. for (var x = 0, p = void 0, i = void 0; (p = parseList[x]); x++) {
  23411. i = parser.i;
  23412. result = parsers[p]();
  23413. if (result) {
  23414. try {
  23415. result._index = i + currentIndex;
  23416. result._fileInfo = fileInfo;
  23417. }
  23418. catch (e) { }
  23419. returnNodes.push(result);
  23420. }
  23421. else {
  23422. returnNodes.push(null);
  23423. }
  23424. }
  23425. var endInfo = parser.end();
  23426. if (endInfo.isFinished) {
  23427. callback(null, returnNodes);
  23428. }
  23429. else {
  23430. callback(true, null);
  23431. }
  23432. }
  23433. catch (e) {
  23434. throw new LessError({
  23435. index: e.index + currentIndex,
  23436. message: e.message
  23437. }, imports, fileInfo.filename);
  23438. }
  23439. }
  23440. //
  23441. // The Parser
  23442. //
  23443. return {
  23444. parserInput: parserInput,
  23445. imports: imports,
  23446. fileInfo: fileInfo,
  23447. parseNode: parseNode,
  23448. //
  23449. // Parse an input string into an abstract syntax tree,
  23450. // @param str A string containing 'less' markup
  23451. // @param callback call `callback` when done.
  23452. // @param [additionalData] An optional map which can contains vars - a map (key, value) of variables to apply
  23453. //
  23454. parse: function (str, callback, additionalData) {
  23455. var root;
  23456. var error = null;
  23457. var globalVars;
  23458. var modifyVars;
  23459. var ignored;
  23460. var preText = '';
  23461. globalVars = (additionalData && additionalData.globalVars) ? Parser.serializeVars(additionalData.globalVars) + "\n" : '';
  23462. modifyVars = (additionalData && additionalData.modifyVars) ? "\n" + Parser.serializeVars(additionalData.modifyVars) : '';
  23463. if (context.pluginManager) {
  23464. var preProcessors = context.pluginManager.getPreProcessors();
  23465. for (var i = 0; i < preProcessors.length; i++) {
  23466. str = preProcessors[i].process(str, { context: context, imports: imports, fileInfo: fileInfo });
  23467. }
  23468. }
  23469. if (globalVars || (additionalData && additionalData.banner)) {
  23470. preText = ((additionalData && additionalData.banner) ? additionalData.banner : '') + globalVars;
  23471. ignored = imports.contentsIgnoredChars;
  23472. ignored[fileInfo.filename] = ignored[fileInfo.filename] || 0;
  23473. ignored[fileInfo.filename] += preText.length;
  23474. }
  23475. str = str.replace(/\r\n?/g, '\n');
  23476. // Remove potential UTF Byte Order Mark
  23477. str = preText + str.replace(/^\uFEFF/, '') + modifyVars;
  23478. imports.contents[fileInfo.filename] = str;
  23479. // Start with the primary rule.
  23480. // The whole syntax tree is held under a Ruleset node,
  23481. // with the `root` property set to true, so no `{}` are
  23482. // output. The callback is called when the input is parsed.
  23483. try {
  23484. parserInput.start(str, context.chunkInput, function fail(msg, index) {
  23485. throw new LessError({
  23486. index: index,
  23487. type: 'Parse',
  23488. message: msg,
  23489. filename: fileInfo.filename
  23490. }, imports);
  23491. });
  23492. tree.Node.prototype.parse = this;
  23493. root = new tree.Ruleset(null, this.parsers.primary());
  23494. tree.Node.prototype.rootNode = root;
  23495. root.root = true;
  23496. root.firstRoot = true;
  23497. root.functionRegistry = functionRegistry.inherit();
  23498. }
  23499. catch (e) {
  23500. return callback(new LessError(e, imports, fileInfo.filename));
  23501. }
  23502. // If `i` is smaller than the `input.length - 1`,
  23503. // it means the parser wasn't able to parse the whole
  23504. // string, so we've got a parsing error.
  23505. //
  23506. // We try to extract a \n delimited string,
  23507. // showing the line where the parse error occurred.
  23508. // We split it up into two parts (the part which parsed,
  23509. // and the part which didn't), so we can color them differently.
  23510. var endInfo = parserInput.end();
  23511. if (!endInfo.isFinished) {
  23512. var message = endInfo.furthestPossibleErrorMessage;
  23513. if (!message) {
  23514. message = 'Unrecognised input';
  23515. if (endInfo.furthestChar === '}') {
  23516. message += '. Possibly missing opening \'{\'';
  23517. }
  23518. else if (endInfo.furthestChar === ')') {
  23519. message += '. Possibly missing opening \'(\'';
  23520. }
  23521. else if (endInfo.furthestReachedEnd) {
  23522. message += '. Possibly missing something';
  23523. }
  23524. }
  23525. error = new LessError({
  23526. type: 'Parse',
  23527. message: message,
  23528. index: endInfo.furthest,
  23529. filename: fileInfo.filename
  23530. }, imports);
  23531. }
  23532. var finish = function (e) {
  23533. e = error || e || imports.error;
  23534. if (e) {
  23535. if (!(e instanceof LessError)) {
  23536. e = new LessError(e, imports, fileInfo.filename);
  23537. }
  23538. return callback(e);
  23539. }
  23540. else {
  23541. return callback(null, root);
  23542. }
  23543. };
  23544. if (context.processImports !== false) {
  23545. new visitors.ImportVisitor(imports, finish)
  23546. .run(root);
  23547. }
  23548. else {
  23549. return finish();
  23550. }
  23551. },
  23552. //
  23553. // Here in, the parsing rules/functions
  23554. //
  23555. // The basic structure of the syntax tree generated is as follows:
  23556. //
  23557. // Ruleset -> Declaration -> Value -> Expression -> Entity
  23558. //
  23559. // Here's some Less code:
  23560. //
  23561. // .class {
  23562. // color: #fff;
  23563. // border: 1px solid #000;
  23564. // width: @w + 4px;
  23565. // > .child {...}
  23566. // }
  23567. //
  23568. // And here's what the parse tree might look like:
  23569. //
  23570. // Ruleset (Selector '.class', [
  23571. // Declaration ("color", Value ([Expression [Color #fff]]))
  23572. // Declaration ("border", Value ([Expression [Dimension 1px][Keyword "solid"][Color #000]]))
  23573. // Declaration ("width", Value ([Expression [Operation " + " [Variable "@w"][Dimension 4px]]]))
  23574. // Ruleset (Selector [Element '>', '.child'], [...])
  23575. // ])
  23576. //
  23577. // In general, most rules will try to parse a token with the `$re()` function, and if the return
  23578. // value is truly, will return a new node, of the relevant type. Sometimes, we need to check
  23579. // first, before parsing, that's when we use `peek()`.
  23580. //
  23581. parsers: parsers = {
  23582. //
  23583. // The `primary` rule is the *entry* and *exit* point of the parser.
  23584. // The rules here can appear at any level of the parse tree.
  23585. //
  23586. // The recursive nature of the grammar is an interplay between the `block`
  23587. // rule, which represents `{ ... }`, the `ruleset` rule, and this `primary` rule,
  23588. // as represented by this simplified grammar:
  23589. //
  23590. // primary → (ruleset | declaration)+
  23591. // ruleset → selector+ block
  23592. // block → '{' primary '}'
  23593. //
  23594. // Only at one point is the primary rule not called from the
  23595. // block rule: at the root level.
  23596. //
  23597. primary: function () {
  23598. var mixin = this.mixin;
  23599. var root = [];
  23600. var node;
  23601. while (true) {
  23602. while (true) {
  23603. node = this.comment();
  23604. if (!node) {
  23605. break;
  23606. }
  23607. root.push(node);
  23608. }
  23609. // always process comments before deciding if finished
  23610. if (parserInput.finished) {
  23611. break;
  23612. }
  23613. if (parserInput.peek('}')) {
  23614. break;
  23615. }
  23616. node = this.extendRule();
  23617. if (node) {
  23618. root = root.concat(node);
  23619. continue;
  23620. }
  23621. node = mixin.definition() || this.declaration() || mixin.call(false, false) ||
  23622. this.ruleset() || this.variableCall() || this.entities.call() || this.atrule();
  23623. if (node) {
  23624. root.push(node);
  23625. }
  23626. else {
  23627. var foundSemiColon = false;
  23628. while (parserInput.$char(';')) {
  23629. foundSemiColon = true;
  23630. }
  23631. if (!foundSemiColon) {
  23632. break;
  23633. }
  23634. }
  23635. }
  23636. return root;
  23637. },
  23638. // comments are collected by the main parsing mechanism and then assigned to nodes
  23639. // where the current structure allows it
  23640. comment: function () {
  23641. if (parserInput.commentStore.length) {
  23642. var comment = parserInput.commentStore.shift();
  23643. return new (tree.Comment)(comment.text, comment.isLineComment, comment.index, fileInfo);
  23644. }
  23645. },
  23646. //
  23647. // Entities are tokens which can be found inside an Expression
  23648. //
  23649. entities: {
  23650. mixinLookup: function () {
  23651. return parsers.mixin.call(true, true);
  23652. },
  23653. //
  23654. // A string, which supports escaping " and '
  23655. //
  23656. // "milky way" 'he\'s the one!'
  23657. //
  23658. quoted: function (forceEscaped) {
  23659. var str;
  23660. var index = parserInput.i;
  23661. var isEscaped = false;
  23662. parserInput.save();
  23663. if (parserInput.$char('~')) {
  23664. isEscaped = true;
  23665. }
  23666. else if (forceEscaped) {
  23667. parserInput.restore();
  23668. return;
  23669. }
  23670. str = parserInput.$quoted();
  23671. if (!str) {
  23672. parserInput.restore();
  23673. return;
  23674. }
  23675. parserInput.forget();
  23676. return new (tree.Quoted)(str.charAt(0), str.substr(1, str.length - 2), isEscaped, index, fileInfo);
  23677. },
  23678. //
  23679. // A catch-all word, such as:
  23680. //
  23681. // black border-collapse
  23682. //
  23683. keyword: function () {
  23684. var k = parserInput.$char('%') || parserInput.$re(/^\[?(?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+\]?/);
  23685. if (k) {
  23686. return tree.Color.fromKeyword(k) || new (tree.Keyword)(k);
  23687. }
  23688. },
  23689. //
  23690. // A function call
  23691. //
  23692. // rgb(255, 0, 255)
  23693. //
  23694. // The arguments are parsed with the `entities.arguments` parser.
  23695. //
  23696. call: function () {
  23697. var name;
  23698. var args;
  23699. var func;
  23700. var index = parserInput.i;
  23701. // http://jsperf.com/case-insensitive-regex-vs-strtolower-then-regex/18
  23702. if (parserInput.peek(/^url\(/i)) {
  23703. return;
  23704. }
  23705. parserInput.save();
  23706. name = parserInput.$re(/^([\w-]+|%|progid:[\w\.]+)\(/);
  23707. if (!name) {
  23708. parserInput.forget();
  23709. return;
  23710. }
  23711. name = name[1];
  23712. func = this.customFuncCall(name);
  23713. if (func) {
  23714. args = func.parse();
  23715. if (args && func.stop) {
  23716. parserInput.forget();
  23717. return args;
  23718. }
  23719. }
  23720. args = this.arguments(args);
  23721. if (!parserInput.$char(')')) {
  23722. parserInput.restore('Could not parse call arguments or missing \')\'');
  23723. return;
  23724. }
  23725. parserInput.forget();
  23726. return new (tree.Call)(name, args, index, fileInfo);
  23727. },
  23728. //
  23729. // Parsing rules for functions with non-standard args, e.g.:
  23730. //
  23731. // boolean(not(2 > 1))
  23732. //
  23733. // This is a quick prototype, to be modified/improved when
  23734. // more custom-parsed funcs come (e.g. `selector(...)`)
  23735. //
  23736. customFuncCall: function (name) {
  23737. /* Ideally the table is to be moved out of here for faster perf.,
  23738. but it's quite tricky since it relies on all these `parsers`
  23739. and `expect` available only here */
  23740. return {
  23741. alpha: f(parsers.ieAlpha, true),
  23742. boolean: f(condition),
  23743. 'if': f(condition)
  23744. }[name.toLowerCase()];
  23745. function f(parse, stop) {
  23746. return {
  23747. parse: parse,
  23748. stop: stop // when true - stop after parse() and return its result,
  23749. // otherwise continue for plain args
  23750. };
  23751. }
  23752. function condition() {
  23753. return [expect(parsers.condition, 'expected condition')];
  23754. }
  23755. },
  23756. arguments: function (prevArgs) {
  23757. var argsComma = prevArgs || [];
  23758. var argsSemiColon = [];
  23759. var isSemiColonSeparated;
  23760. var value;
  23761. parserInput.save();
  23762. while (true) {
  23763. if (prevArgs) {
  23764. prevArgs = false;
  23765. }
  23766. else {
  23767. value = parsers.detachedRuleset() || this.assignment() || parsers.expression();
  23768. if (!value) {
  23769. break;
  23770. }
  23771. if (value.value && value.value.length == 1) {
  23772. value = value.value[0];
  23773. }
  23774. argsComma.push(value);
  23775. }
  23776. if (parserInput.$char(',')) {
  23777. continue;
  23778. }
  23779. if (parserInput.$char(';') || isSemiColonSeparated) {
  23780. isSemiColonSeparated = true;
  23781. value = (argsComma.length < 1) ? argsComma[0]
  23782. : new tree.Value(argsComma);
  23783. argsSemiColon.push(value);
  23784. argsComma = [];
  23785. }
  23786. }
  23787. parserInput.forget();
  23788. return isSemiColonSeparated ? argsSemiColon : argsComma;
  23789. },
  23790. literal: function () {
  23791. return this.dimension() ||
  23792. this.color() ||
  23793. this.quoted() ||
  23794. this.unicodeDescriptor();
  23795. },
  23796. // Assignments are argument entities for calls.
  23797. // They are present in ie filter properties as shown below.
  23798. //
  23799. // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* )
  23800. //
  23801. assignment: function () {
  23802. var key;
  23803. var value;
  23804. parserInput.save();
  23805. key = parserInput.$re(/^\w+(?=\s?=)/i);
  23806. if (!key) {
  23807. parserInput.restore();
  23808. return;
  23809. }
  23810. if (!parserInput.$char('=')) {
  23811. parserInput.restore();
  23812. return;
  23813. }
  23814. value = parsers.entity();
  23815. if (value) {
  23816. parserInput.forget();
  23817. return new (tree.Assignment)(key, value);
  23818. }
  23819. else {
  23820. parserInput.restore();
  23821. }
  23822. },
  23823. //
  23824. // Parse url() tokens
  23825. //
  23826. // We use a specific rule for urls, because they don't really behave like
  23827. // standard function calls. The difference is that the argument doesn't have
  23828. // to be enclosed within a string, so it can't be parsed as an Expression.
  23829. //
  23830. url: function () {
  23831. var value;
  23832. var index = parserInput.i;
  23833. parserInput.autoCommentAbsorb = false;
  23834. if (!parserInput.$str('url(')) {
  23835. parserInput.autoCommentAbsorb = true;
  23836. return;
  23837. }
  23838. value = this.quoted() || this.variable() || this.property() ||
  23839. parserInput.$re(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/) || '';
  23840. parserInput.autoCommentAbsorb = true;
  23841. expectChar(')');
  23842. return new (tree.URL)((value.value != null ||
  23843. value instanceof tree.Variable ||
  23844. value instanceof tree.Property) ?
  23845. value : new (tree.Anonymous)(value, index), index, fileInfo);
  23846. },
  23847. //
  23848. // A Variable entity, such as `@fink`, in
  23849. //
  23850. // width: @fink + 2px
  23851. //
  23852. // We use a different parser for variable definitions,
  23853. // see `parsers.variable`.
  23854. //
  23855. variable: function () {
  23856. var ch;
  23857. var name;
  23858. var index = parserInput.i;
  23859. parserInput.save();
  23860. if (parserInput.currentChar() === '@' && (name = parserInput.$re(/^@@?[\w-]+/))) {
  23861. ch = parserInput.currentChar();
  23862. if (ch === '(' || ch === '[' && !parserInput.prevChar().match(/^\s/)) {
  23863. // this may be a VariableCall lookup
  23864. var result = parsers.variableCall(name);
  23865. if (result) {
  23866. parserInput.forget();
  23867. return result;
  23868. }
  23869. }
  23870. parserInput.forget();
  23871. return new (tree.Variable)(name, index, fileInfo);
  23872. }
  23873. parserInput.restore();
  23874. },
  23875. // A variable entity using the protective {} e.g. @{var}
  23876. variableCurly: function () {
  23877. var curly;
  23878. var index = parserInput.i;
  23879. if (parserInput.currentChar() === '@' && (curly = parserInput.$re(/^@\{([\w-]+)\}/))) {
  23880. return new (tree.Variable)("@" + curly[1], index, fileInfo);
  23881. }
  23882. },
  23883. //
  23884. // A Property accessor, such as `$color`, in
  23885. //
  23886. // background-color: $color
  23887. //
  23888. property: function () {
  23889. var name;
  23890. var index = parserInput.i;
  23891. if (parserInput.currentChar() === '$' && (name = parserInput.$re(/^\$[\w-]+/))) {
  23892. return new (tree.Property)(name, index, fileInfo);
  23893. }
  23894. },
  23895. // A property entity useing the protective {} e.g. ${prop}
  23896. propertyCurly: function () {
  23897. var curly;
  23898. var index = parserInput.i;
  23899. if (parserInput.currentChar() === '$' && (curly = parserInput.$re(/^\$\{([\w-]+)\}/))) {
  23900. return new (tree.Property)("$" + curly[1], index, fileInfo);
  23901. }
  23902. },
  23903. //
  23904. // A Hexadecimal color
  23905. //
  23906. // #4F3C2F
  23907. //
  23908. // `rgb` and `hsl` colors are parsed through the `entities.call` parser.
  23909. //
  23910. color: function () {
  23911. var rgb;
  23912. parserInput.save();
  23913. if (parserInput.currentChar() === '#' && (rgb = parserInput.$re(/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})([\w.#\[])?/))) {
  23914. if (!rgb[2]) {
  23915. parserInput.forget();
  23916. return new (tree.Color)(rgb[1], undefined, rgb[0]);
  23917. }
  23918. }
  23919. parserInput.restore();
  23920. },
  23921. colorKeyword: function () {
  23922. parserInput.save();
  23923. var autoCommentAbsorb = parserInput.autoCommentAbsorb;
  23924. parserInput.autoCommentAbsorb = false;
  23925. var k = parserInput.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);
  23926. parserInput.autoCommentAbsorb = autoCommentAbsorb;
  23927. if (!k) {
  23928. parserInput.forget();
  23929. return;
  23930. }
  23931. parserInput.restore();
  23932. var color = tree.Color.fromKeyword(k);
  23933. if (color) {
  23934. parserInput.$str(k);
  23935. return color;
  23936. }
  23937. },
  23938. //
  23939. // A Dimension, that is, a number and a unit
  23940. //
  23941. // 0.5em 95%
  23942. //
  23943. dimension: function () {
  23944. if (parserInput.peekNotNumeric()) {
  23945. return;
  23946. }
  23947. var value = parserInput.$re(/^([+-]?\d*\.?\d+)(%|[a-z_]+)?/i);
  23948. if (value) {
  23949. return new (tree.Dimension)(value[1], value[2]);
  23950. }
  23951. },
  23952. //
  23953. // A unicode descriptor, as is used in unicode-range
  23954. //
  23955. // U+0?? or U+00A1-00A9
  23956. //
  23957. unicodeDescriptor: function () {
  23958. var ud;
  23959. ud = parserInput.$re(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/);
  23960. if (ud) {
  23961. return new (tree.UnicodeDescriptor)(ud[0]);
  23962. }
  23963. },
  23964. //
  23965. // JavaScript code to be evaluated
  23966. //
  23967. // `window.location.href`
  23968. //
  23969. javascript: function () {
  23970. var js;
  23971. var index = parserInput.i;
  23972. parserInput.save();
  23973. var escape = parserInput.$char('~');
  23974. var jsQuote = parserInput.$char('`');
  23975. if (!jsQuote) {
  23976. parserInput.restore();
  23977. return;
  23978. }
  23979. js = parserInput.$re(/^[^`]*`/);
  23980. if (js) {
  23981. parserInput.forget();
  23982. return new (tree.JavaScript)(js.substr(0, js.length - 1), Boolean(escape), index, fileInfo);
  23983. }
  23984. parserInput.restore('invalid javascript definition');
  23985. }
  23986. },
  23987. //
  23988. // The variable part of a variable definition. Used in the `rule` parser
  23989. //
  23990. // @fink:
  23991. //
  23992. variable: function () {
  23993. var name;
  23994. if (parserInput.currentChar() === '@' && (name = parserInput.$re(/^(@[\w-]+)\s*:/))) {
  23995. return name[1];
  23996. }
  23997. },
  23998. //
  23999. // Call a variable value to retrieve a detached ruleset
  24000. // or a value from a detached ruleset's rules.
  24001. //
  24002. // @fink();
  24003. // @fink;
  24004. // color: @fink[@color];
  24005. //
  24006. variableCall: function (parsedName) {
  24007. var lookups;
  24008. var i = parserInput.i;
  24009. var inValue = !!parsedName;
  24010. var name = parsedName;
  24011. parserInput.save();
  24012. if (name || (parserInput.currentChar() === '@'
  24013. && (name = parserInput.$re(/^(@[\w-]+)(\(\s*\))?/)))) {
  24014. lookups = this.mixin.ruleLookups();
  24015. if (!lookups && ((inValue && parserInput.$str('()') !== '()') || (name[2] !== '()'))) {
  24016. parserInput.restore('Missing \'[...]\' lookup in variable call');
  24017. return;
  24018. }
  24019. if (!inValue) {
  24020. name = name[1];
  24021. }
  24022. var call = new tree.VariableCall(name, i, fileInfo);
  24023. if (!inValue && parsers.end()) {
  24024. parserInput.forget();
  24025. return call;
  24026. }
  24027. else {
  24028. parserInput.forget();
  24029. return new tree.NamespaceValue(call, lookups, i, fileInfo);
  24030. }
  24031. }
  24032. parserInput.restore();
  24033. },
  24034. //
  24035. // extend syntax - used to extend selectors
  24036. //
  24037. extend: function (isRule) {
  24038. var elements;
  24039. var e;
  24040. var index = parserInput.i;
  24041. var option;
  24042. var extendList;
  24043. var extend;
  24044. if (!parserInput.$str(isRule ? '&:extend(' : ':extend(')) {
  24045. return;
  24046. }
  24047. do {
  24048. option = null;
  24049. elements = null;
  24050. while (!(option = parserInput.$re(/^(all)(?=\s*(\)|,))/))) {
  24051. e = this.element();
  24052. if (!e) {
  24053. break;
  24054. }
  24055. if (elements) {
  24056. elements.push(e);
  24057. }
  24058. else {
  24059. elements = [e];
  24060. }
  24061. }
  24062. option = option && option[1];
  24063. if (!elements) {
  24064. error('Missing target selector for :extend().');
  24065. }
  24066. extend = new (tree.Extend)(new (tree.Selector)(elements), option, index, fileInfo);
  24067. if (extendList) {
  24068. extendList.push(extend);
  24069. }
  24070. else {
  24071. extendList = [extend];
  24072. }
  24073. } while (parserInput.$char(','));
  24074. expect(/^\)/);
  24075. if (isRule) {
  24076. expect(/^;/);
  24077. }
  24078. return extendList;
  24079. },
  24080. //
  24081. // extendRule - used in a rule to extend all the parent selectors
  24082. //
  24083. extendRule: function () {
  24084. return this.extend(true);
  24085. },
  24086. //
  24087. // Mixins
  24088. //
  24089. mixin: {
  24090. //
  24091. // A Mixin call, with an optional argument list
  24092. //
  24093. // #mixins > .square(#fff);
  24094. // #mixins.square(#fff);
  24095. // .rounded(4px, black);
  24096. // .button;
  24097. //
  24098. // We can lookup / return a value using the lookup syntax:
  24099. //
  24100. // color: #mixin.square(#fff)[@color];
  24101. //
  24102. // The `while` loop is there because mixins can be
  24103. // namespaced, but we only support the child and descendant
  24104. // selector for now.
  24105. //
  24106. call: function (inValue, getLookup) {
  24107. var s = parserInput.currentChar();
  24108. var important = false;
  24109. var lookups;
  24110. var index = parserInput.i;
  24111. var elements;
  24112. var args;
  24113. var hasParens;
  24114. if (s !== '.' && s !== '#') {
  24115. return;
  24116. }
  24117. parserInput.save(); // stop us absorbing part of an invalid selector
  24118. elements = this.elements();
  24119. if (elements) {
  24120. if (parserInput.$char('(')) {
  24121. args = this.args(true).args;
  24122. expectChar(')');
  24123. hasParens = true;
  24124. }
  24125. if (getLookup !== false) {
  24126. lookups = this.ruleLookups();
  24127. }
  24128. if (getLookup === true && !lookups) {
  24129. parserInput.restore();
  24130. return;
  24131. }
  24132. if (inValue && !lookups && !hasParens) {
  24133. // This isn't a valid in-value mixin call
  24134. parserInput.restore();
  24135. return;
  24136. }
  24137. if (!inValue && parsers.important()) {
  24138. important = true;
  24139. }
  24140. if (inValue || parsers.end()) {
  24141. parserInput.forget();
  24142. var mixin = new (tree.mixin.Call)(elements, args, index, fileInfo, !lookups && important);
  24143. if (lookups) {
  24144. return new tree.NamespaceValue(mixin, lookups);
  24145. }
  24146. else {
  24147. return mixin;
  24148. }
  24149. }
  24150. }
  24151. parserInput.restore();
  24152. },
  24153. /**
  24154. * Matching elements for mixins
  24155. * (Start with . or # and can have > )
  24156. */
  24157. elements: function () {
  24158. var elements;
  24159. var e;
  24160. var c;
  24161. var elem;
  24162. var elemIndex;
  24163. var re = /^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/;
  24164. while (true) {
  24165. elemIndex = parserInput.i;
  24166. e = parserInput.$re(re);
  24167. if (!e) {
  24168. break;
  24169. }
  24170. elem = new (tree.Element)(c, e, false, elemIndex, fileInfo);
  24171. if (elements) {
  24172. elements.push(elem);
  24173. }
  24174. else {
  24175. elements = [elem];
  24176. }
  24177. c = parserInput.$char('>');
  24178. }
  24179. return elements;
  24180. },
  24181. args: function (isCall) {
  24182. var entities = parsers.entities;
  24183. var returner = { args: null, variadic: false };
  24184. var expressions = [];
  24185. var argsSemiColon = [];
  24186. var argsComma = [];
  24187. var isSemiColonSeparated;
  24188. var expressionContainsNamed;
  24189. var name;
  24190. var nameLoop;
  24191. var value;
  24192. var arg;
  24193. var expand;
  24194. var hasSep = true;
  24195. parserInput.save();
  24196. while (true) {
  24197. if (isCall) {
  24198. arg = parsers.detachedRuleset() || parsers.expression();
  24199. }
  24200. else {
  24201. parserInput.commentStore.length = 0;
  24202. if (parserInput.$str('...')) {
  24203. returner.variadic = true;
  24204. if (parserInput.$char(';') && !isSemiColonSeparated) {
  24205. isSemiColonSeparated = true;
  24206. }
  24207. (isSemiColonSeparated ? argsSemiColon : argsComma)
  24208. .push({ variadic: true });
  24209. break;
  24210. }
  24211. arg = entities.variable() || entities.property() || entities.literal() || entities.keyword() || this.call(true);
  24212. }
  24213. if (!arg || !hasSep) {
  24214. break;
  24215. }
  24216. nameLoop = null;
  24217. if (arg.throwAwayComments) {
  24218. arg.throwAwayComments();
  24219. }
  24220. value = arg;
  24221. var val = null;
  24222. if (isCall) {
  24223. // Variable
  24224. if (arg.value && arg.value.length == 1) {
  24225. val = arg.value[0];
  24226. }
  24227. }
  24228. else {
  24229. val = arg;
  24230. }
  24231. if (val && (val instanceof tree.Variable || val instanceof tree.Property)) {
  24232. if (parserInput.$char(':')) {
  24233. if (expressions.length > 0) {
  24234. if (isSemiColonSeparated) {
  24235. error('Cannot mix ; and , as delimiter types');
  24236. }
  24237. expressionContainsNamed = true;
  24238. }
  24239. value = parsers.detachedRuleset() || parsers.expression();
  24240. if (!value) {
  24241. if (isCall) {
  24242. error('could not understand value for named argument');
  24243. }
  24244. else {
  24245. parserInput.restore();
  24246. returner.args = [];
  24247. return returner;
  24248. }
  24249. }
  24250. nameLoop = (name = val.name);
  24251. }
  24252. else if (parserInput.$str('...')) {
  24253. if (!isCall) {
  24254. returner.variadic = true;
  24255. if (parserInput.$char(';') && !isSemiColonSeparated) {
  24256. isSemiColonSeparated = true;
  24257. }
  24258. (isSemiColonSeparated ? argsSemiColon : argsComma)
  24259. .push({ name: arg.name, variadic: true });
  24260. break;
  24261. }
  24262. else {
  24263. expand = true;
  24264. }
  24265. }
  24266. else if (!isCall) {
  24267. name = nameLoop = val.name;
  24268. value = null;
  24269. }
  24270. }
  24271. if (value) {
  24272. expressions.push(value);
  24273. }
  24274. argsComma.push({ name: nameLoop, value: value, expand: expand });
  24275. if (parserInput.$char(',')) {
  24276. hasSep = true;
  24277. continue;
  24278. }
  24279. hasSep = parserInput.$char(';') === ';';
  24280. if (hasSep || isSemiColonSeparated) {
  24281. if (expressionContainsNamed) {
  24282. error('Cannot mix ; and , as delimiter types');
  24283. }
  24284. isSemiColonSeparated = true;
  24285. if (expressions.length > 1) {
  24286. value = new (tree.Value)(expressions);
  24287. }
  24288. argsSemiColon.push({ name: name, value: value, expand: expand });
  24289. name = null;
  24290. expressions = [];
  24291. expressionContainsNamed = false;
  24292. }
  24293. }
  24294. parserInput.forget();
  24295. returner.args = isSemiColonSeparated ? argsSemiColon : argsComma;
  24296. return returner;
  24297. },
  24298. //
  24299. // A Mixin definition, with a list of parameters
  24300. //
  24301. // .rounded (@radius: 2px, @color) {
  24302. // ...
  24303. // }
  24304. //
  24305. // Until we have a finer grained state-machine, we have to
  24306. // do a look-ahead, to make sure we don't have a mixin call.
  24307. // See the `rule` function for more information.
  24308. //
  24309. // We start by matching `.rounded (`, and then proceed on to
  24310. // the argument list, which has optional default values.
  24311. // We store the parameters in `params`, with a `value` key,
  24312. // if there is a value, such as in the case of `@radius`.
  24313. //
  24314. // Once we've got our params list, and a closing `)`, we parse
  24315. // the `{...}` block.
  24316. //
  24317. definition: function () {
  24318. var name;
  24319. var params = [];
  24320. var match;
  24321. var ruleset;
  24322. var cond;
  24323. var variadic = false;
  24324. if ((parserInput.currentChar() !== '.' && parserInput.currentChar() !== '#') ||
  24325. parserInput.peek(/^[^{]*\}/)) {
  24326. return;
  24327. }
  24328. parserInput.save();
  24329. match = parserInput.$re(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/);
  24330. if (match) {
  24331. name = match[1];
  24332. var argInfo = this.args(false);
  24333. params = argInfo.args;
  24334. variadic = argInfo.variadic;
  24335. // .mixincall("@{a}");
  24336. // looks a bit like a mixin definition..
  24337. // also
  24338. // .mixincall(@a: {rule: set;});
  24339. // so we have to be nice and restore
  24340. if (!parserInput.$char(')')) {
  24341. parserInput.restore('Missing closing \')\'');
  24342. return;
  24343. }
  24344. parserInput.commentStore.length = 0;
  24345. if (parserInput.$str('when')) { // Guard
  24346. cond = expect(parsers.conditions, 'expected condition');
  24347. }
  24348. ruleset = parsers.block();
  24349. if (ruleset) {
  24350. parserInput.forget();
  24351. return new (tree.mixin.Definition)(name, params, ruleset, cond, variadic);
  24352. }
  24353. else {
  24354. parserInput.restore();
  24355. }
  24356. }
  24357. else {
  24358. parserInput.restore();
  24359. }
  24360. },
  24361. ruleLookups: function () {
  24362. var rule;
  24363. var lookups = [];
  24364. if (parserInput.currentChar() !== '[') {
  24365. return;
  24366. }
  24367. while (true) {
  24368. parserInput.save();
  24369. rule = this.lookupValue();
  24370. if (!rule && rule !== '') {
  24371. parserInput.restore();
  24372. break;
  24373. }
  24374. lookups.push(rule);
  24375. parserInput.forget();
  24376. }
  24377. if (lookups.length > 0) {
  24378. return lookups;
  24379. }
  24380. },
  24381. lookupValue: function () {
  24382. parserInput.save();
  24383. if (!parserInput.$char('[')) {
  24384. parserInput.restore();
  24385. return;
  24386. }
  24387. var name = parserInput.$re(/^(?:[@$]{0,2})[_a-zA-Z0-9-]*/);
  24388. if (!parserInput.$char(']')) {
  24389. parserInput.restore();
  24390. return;
  24391. }
  24392. if (name || name === '') {
  24393. parserInput.forget();
  24394. return name;
  24395. }
  24396. parserInput.restore();
  24397. }
  24398. },
  24399. //
  24400. // Entities are the smallest recognized token,
  24401. // and can be found inside a rule's value.
  24402. //
  24403. entity: function () {
  24404. var entities = this.entities;
  24405. return this.comment() || entities.literal() || entities.variable() || entities.url() ||
  24406. entities.property() || entities.call() || entities.keyword() || this.mixin.call(true) ||
  24407. entities.javascript();
  24408. },
  24409. //
  24410. // A Declaration terminator. Note that we use `peek()` to check for '}',
  24411. // because the `block` rule will be expecting it, but we still need to make sure
  24412. // it's there, if ';' was omitted.
  24413. //
  24414. end: function () {
  24415. return parserInput.$char(';') || parserInput.peek('}');
  24416. },
  24417. //
  24418. // IE's alpha function
  24419. //
  24420. // alpha(opacity=88)
  24421. //
  24422. ieAlpha: function () {
  24423. var value;
  24424. // http://jsperf.com/case-insensitive-regex-vs-strtolower-then-regex/18
  24425. if (!parserInput.$re(/^opacity=/i)) {
  24426. return;
  24427. }
  24428. value = parserInput.$re(/^\d+/);
  24429. if (!value) {
  24430. value = expect(parsers.entities.variable, 'Could not parse alpha');
  24431. value = "@{" + value.name.slice(1) + "}";
  24432. }
  24433. expectChar(')');
  24434. return new tree.Quoted('', "alpha(opacity=" + value + ")");
  24435. },
  24436. //
  24437. // A Selector Element
  24438. //
  24439. // div
  24440. // + h1
  24441. // #socks
  24442. // input[type="text"]
  24443. //
  24444. // Elements are the building blocks for Selectors,
  24445. // they are made out of a `Combinator` (see combinator rule),
  24446. // and an element name, such as a tag a class, or `*`.
  24447. //
  24448. element: function () {
  24449. var e;
  24450. var c;
  24451. var v;
  24452. var index = parserInput.i;
  24453. c = this.combinator();
  24454. e = parserInput.$re(/^(?:\d+\.\d+|\d+)%/) ||
  24455. parserInput.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
  24456. parserInput.$char('*') || parserInput.$char('&') || this.attribute() ||
  24457. parserInput.$re(/^\([^&()@]+\)/) || parserInput.$re(/^[\.#:](?=@)/) ||
  24458. this.entities.variableCurly();
  24459. if (!e) {
  24460. parserInput.save();
  24461. if (parserInput.$char('(')) {
  24462. if ((v = this.selector(false)) && parserInput.$char(')')) {
  24463. e = new (tree.Paren)(v);
  24464. parserInput.forget();
  24465. }
  24466. else {
  24467. parserInput.restore('Missing closing \')\'');
  24468. }
  24469. }
  24470. else {
  24471. parserInput.forget();
  24472. }
  24473. }
  24474. if (e) {
  24475. return new (tree.Element)(c, e, e instanceof tree.Variable, index, fileInfo);
  24476. }
  24477. },
  24478. //
  24479. // Combinators combine elements together, in a Selector.
  24480. //
  24481. // Because our parser isn't white-space sensitive, special care
  24482. // has to be taken, when parsing the descendant combinator, ` `,
  24483. // as it's an empty space. We have to check the previous character
  24484. // in the input, to see if it's a ` ` character. More info on how
  24485. // we deal with this in *combinator.js*.
  24486. //
  24487. combinator: function () {
  24488. var c = parserInput.currentChar();
  24489. if (c === '/') {
  24490. parserInput.save();
  24491. var slashedCombinator = parserInput.$re(/^\/[a-z]+\//i);
  24492. if (slashedCombinator) {
  24493. parserInput.forget();
  24494. return new (tree.Combinator)(slashedCombinator);
  24495. }
  24496. parserInput.restore();
  24497. }
  24498. if (c === '>' || c === '+' || c === '~' || c === '|' || c === '^') {
  24499. parserInput.i++;
  24500. if (c === '^' && parserInput.currentChar() === '^') {
  24501. c = '^^';
  24502. parserInput.i++;
  24503. }
  24504. while (parserInput.isWhitespace()) {
  24505. parserInput.i++;
  24506. }
  24507. return new (tree.Combinator)(c);
  24508. }
  24509. else if (parserInput.isWhitespace(-1)) {
  24510. return new (tree.Combinator)(' ');
  24511. }
  24512. else {
  24513. return new (tree.Combinator)(null);
  24514. }
  24515. },
  24516. //
  24517. // A CSS Selector
  24518. // with less extensions e.g. the ability to extend and guard
  24519. //
  24520. // .class > div + h1
  24521. // li a:hover
  24522. //
  24523. // Selectors are made out of one or more Elements, see above.
  24524. //
  24525. selector: function (isLess) {
  24526. var index = parserInput.i;
  24527. var elements;
  24528. var extendList;
  24529. var c;
  24530. var e;
  24531. var allExtends;
  24532. var when;
  24533. var condition;
  24534. isLess = isLess !== false;
  24535. while ((isLess && (extendList = this.extend())) || (isLess && (when = parserInput.$str('when'))) || (e = this.element())) {
  24536. if (when) {
  24537. condition = expect(this.conditions, 'expected condition');
  24538. }
  24539. else if (condition) {
  24540. error('CSS guard can only be used at the end of selector');
  24541. }
  24542. else if (extendList) {
  24543. if (allExtends) {
  24544. allExtends = allExtends.concat(extendList);
  24545. }
  24546. else {
  24547. allExtends = extendList;
  24548. }
  24549. }
  24550. else {
  24551. if (allExtends) {
  24552. error('Extend can only be used at the end of selector');
  24553. }
  24554. c = parserInput.currentChar();
  24555. if (elements) {
  24556. elements.push(e);
  24557. }
  24558. else {
  24559. elements = [e];
  24560. }
  24561. e = null;
  24562. }
  24563. if (c === '{' || c === '}' || c === ';' || c === ',' || c === ')') {
  24564. break;
  24565. }
  24566. }
  24567. if (elements) {
  24568. return new (tree.Selector)(elements, allExtends, condition, index, fileInfo);
  24569. }
  24570. if (allExtends) {
  24571. error('Extend must be used to extend a selector, it cannot be used on its own');
  24572. }
  24573. },
  24574. selectors: function () {
  24575. var s;
  24576. var selectors;
  24577. while (true) {
  24578. s = this.selector();
  24579. if (!s) {
  24580. break;
  24581. }
  24582. if (selectors) {
  24583. selectors.push(s);
  24584. }
  24585. else {
  24586. selectors = [s];
  24587. }
  24588. parserInput.commentStore.length = 0;
  24589. if (s.condition && selectors.length > 1) {
  24590. error("Guards are only currently allowed on a single selector.");
  24591. }
  24592. if (!parserInput.$char(',')) {
  24593. break;
  24594. }
  24595. if (s.condition) {
  24596. error("Guards are only currently allowed on a single selector.");
  24597. }
  24598. parserInput.commentStore.length = 0;
  24599. }
  24600. return selectors;
  24601. },
  24602. attribute: function () {
  24603. if (!parserInput.$char('[')) {
  24604. return;
  24605. }
  24606. var entities = this.entities;
  24607. var key;
  24608. var val;
  24609. var op;
  24610. if (!(key = entities.variableCurly())) {
  24611. key = expect(/^(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/);
  24612. }
  24613. op = parserInput.$re(/^[|~*$^]?=/);
  24614. if (op) {
  24615. val = entities.quoted() || parserInput.$re(/^[0-9]+%/) || parserInput.$re(/^[\w-]+/) || entities.variableCurly();
  24616. }
  24617. expectChar(']');
  24618. return new (tree.Attribute)(key, op, val);
  24619. },
  24620. //
  24621. // The `block` rule is used by `ruleset` and `mixin.definition`.
  24622. // It's a wrapper around the `primary` rule, with added `{}`.
  24623. //
  24624. block: function () {
  24625. var content;
  24626. if (parserInput.$char('{') && (content = this.primary()) && parserInput.$char('}')) {
  24627. return content;
  24628. }
  24629. },
  24630. blockRuleset: function () {
  24631. var block = this.block();
  24632. if (block) {
  24633. block = new tree.Ruleset(null, block);
  24634. }
  24635. return block;
  24636. },
  24637. detachedRuleset: function () {
  24638. var argInfo;
  24639. var params;
  24640. var variadic;
  24641. parserInput.save();
  24642. if (parserInput.$re(/^[.#]\(/)) {
  24643. /**
  24644. * DR args currently only implemented for each() function, and not
  24645. * yet settable as `@dr: #(@arg) {}`
  24646. * This should be done when DRs are merged with mixins.
  24647. * See: https://github.com/less/less-meta/issues/16
  24648. */
  24649. argInfo = this.mixin.args(false);
  24650. params = argInfo.args;
  24651. variadic = argInfo.variadic;
  24652. if (!parserInput.$char(')')) {
  24653. parserInput.restore();
  24654. return;
  24655. }
  24656. }
  24657. var blockRuleset = this.blockRuleset();
  24658. if (blockRuleset) {
  24659. parserInput.forget();
  24660. if (params) {
  24661. return new tree.mixin.Definition(null, params, blockRuleset, null, variadic);
  24662. }
  24663. return new tree.DetachedRuleset(blockRuleset);
  24664. }
  24665. parserInput.restore();
  24666. },
  24667. //
  24668. // div, .class, body > p {...}
  24669. //
  24670. ruleset: function () {
  24671. var selectors;
  24672. var rules;
  24673. var debugInfo;
  24674. parserInput.save();
  24675. if (context.dumpLineNumbers) {
  24676. debugInfo = getDebugInfo(parserInput.i);
  24677. }
  24678. selectors = this.selectors();
  24679. if (selectors && (rules = this.block())) {
  24680. parserInput.forget();
  24681. var ruleset = new (tree.Ruleset)(selectors, rules, context.strictImports);
  24682. if (context.dumpLineNumbers) {
  24683. ruleset.debugInfo = debugInfo;
  24684. }
  24685. return ruleset;
  24686. }
  24687. else {
  24688. parserInput.restore();
  24689. }
  24690. },
  24691. declaration: function () {
  24692. var name;
  24693. var value;
  24694. var index = parserInput.i;
  24695. var hasDR;
  24696. var c = parserInput.currentChar();
  24697. var important;
  24698. var merge;
  24699. var isVariable;
  24700. if (c === '.' || c === '#' || c === '&' || c === ':') {
  24701. return;
  24702. }
  24703. parserInput.save();
  24704. name = this.variable() || this.ruleProperty();
  24705. if (name) {
  24706. isVariable = typeof name === 'string';
  24707. if (isVariable) {
  24708. value = this.detachedRuleset();
  24709. if (value) {
  24710. hasDR = true;
  24711. }
  24712. }
  24713. parserInput.commentStore.length = 0;
  24714. if (!value) {
  24715. // a name returned by this.ruleProperty() is always an array of the form:
  24716. // [string-1, ..., string-n, ""] or [string-1, ..., string-n, "+"]
  24717. // where each item is a tree.Keyword or tree.Variable
  24718. merge = !isVariable && name.length > 1 && name.pop().value;
  24719. // Custom property values get permissive parsing
  24720. if (name[0].value && name[0].value.slice(0, 2) === '--') {
  24721. value = this.permissiveValue();
  24722. }
  24723. // Try to store values as anonymous
  24724. // If we need the value later we'll re-parse it in ruleset.parseValue
  24725. else {
  24726. value = this.anonymousValue();
  24727. }
  24728. if (value) {
  24729. parserInput.forget();
  24730. // anonymous values absorb the end ';' which is required for them to work
  24731. return new (tree.Declaration)(name, value, false, merge, index, fileInfo);
  24732. }
  24733. if (!value) {
  24734. value = this.value();
  24735. }
  24736. if (value) {
  24737. important = this.important();
  24738. }
  24739. else if (isVariable) {
  24740. // As a last resort, try permissiveValue
  24741. value = this.permissiveValue();
  24742. }
  24743. }
  24744. if (value && (this.end() || hasDR)) {
  24745. parserInput.forget();
  24746. return new (tree.Declaration)(name, value, important, merge, index, fileInfo);
  24747. }
  24748. else {
  24749. parserInput.restore();
  24750. }
  24751. }
  24752. else {
  24753. parserInput.restore();
  24754. }
  24755. },
  24756. anonymousValue: function () {
  24757. var index = parserInput.i;
  24758. var match = parserInput.$re(/^([^.#@\$+\/'"*`(;{}-]*);/);
  24759. if (match) {
  24760. return new (tree.Anonymous)(match[1], index);
  24761. }
  24762. },
  24763. /**
  24764. * Used for custom properties, at-rules, and variables (as fallback)
  24765. * Parses almost anything inside of {} [] () "" blocks
  24766. * until it reaches outer-most tokens.
  24767. *
  24768. * First, it will try to parse comments and entities to reach
  24769. * the end. This is mostly like the Expression parser except no
  24770. * math is allowed.
  24771. */
  24772. permissiveValue: function (untilTokens) {
  24773. var i;
  24774. var e;
  24775. var done;
  24776. var value;
  24777. var tok = untilTokens || ';';
  24778. var index = parserInput.i;
  24779. var result = [];
  24780. function testCurrentChar() {
  24781. var char = parserInput.currentChar();
  24782. if (typeof tok === 'string') {
  24783. return char === tok;
  24784. }
  24785. else {
  24786. return tok.test(char);
  24787. }
  24788. }
  24789. if (testCurrentChar()) {
  24790. return;
  24791. }
  24792. value = [];
  24793. do {
  24794. e = this.comment();
  24795. if (e) {
  24796. value.push(e);
  24797. continue;
  24798. }
  24799. e = this.entity();
  24800. if (e) {
  24801. value.push(e);
  24802. }
  24803. } while (e);
  24804. done = testCurrentChar();
  24805. if (value.length > 0) {
  24806. value = new (tree.Expression)(value);
  24807. if (done) {
  24808. return value;
  24809. }
  24810. else {
  24811. result.push(value);
  24812. }
  24813. // Preserve space before $parseUntil as it will not
  24814. if (parserInput.prevChar() === ' ') {
  24815. result.push(new tree.Anonymous(' ', index));
  24816. }
  24817. }
  24818. parserInput.save();
  24819. value = parserInput.$parseUntil(tok);
  24820. if (value) {
  24821. if (typeof value === 'string') {
  24822. error("Expected '" + value + "'", 'Parse');
  24823. }
  24824. if (value.length === 1 && value[0] === ' ') {
  24825. parserInput.forget();
  24826. return new tree.Anonymous('', index);
  24827. }
  24828. var item = void 0;
  24829. for (i = 0; i < value.length; i++) {
  24830. item = value[i];
  24831. if (Array.isArray(item)) {
  24832. // Treat actual quotes as normal quoted values
  24833. result.push(new tree.Quoted(item[0], item[1], true, index, fileInfo));
  24834. }
  24835. else {
  24836. if (i === value.length - 1) {
  24837. item = item.trim();
  24838. }
  24839. // Treat like quoted values, but replace vars like unquoted expressions
  24840. var quote = new tree.Quoted('\'', item, true, index, fileInfo);
  24841. quote.variableRegex = /@([\w-]+)/g;
  24842. quote.propRegex = /\$([\w-]+)/g;
  24843. result.push(quote);
  24844. }
  24845. }
  24846. parserInput.forget();
  24847. return new tree.Expression(result, true);
  24848. }
  24849. parserInput.restore();
  24850. },
  24851. //
  24852. // An @import atrule
  24853. //
  24854. // @import "lib";
  24855. //
  24856. // Depending on our environment, importing is done differently:
  24857. // In the browser, it's an XHR request, in Node, it would be a
  24858. // file-system operation. The function used for importing is
  24859. // stored in `import`, which we pass to the Import constructor.
  24860. //
  24861. 'import': function () {
  24862. var path;
  24863. var features;
  24864. var index = parserInput.i;
  24865. var dir = parserInput.$re(/^@import?\s+/);
  24866. if (dir) {
  24867. var options = (dir ? this.importOptions() : null) || {};
  24868. if ((path = this.entities.quoted() || this.entities.url())) {
  24869. features = this.mediaFeatures();
  24870. if (!parserInput.$char(';')) {
  24871. parserInput.i = index;
  24872. error('missing semi-colon or unrecognised media features on import');
  24873. }
  24874. features = features && new (tree.Value)(features);
  24875. return new (tree.Import)(path, features, options, index, fileInfo);
  24876. }
  24877. else {
  24878. parserInput.i = index;
  24879. error('malformed import statement');
  24880. }
  24881. }
  24882. },
  24883. importOptions: function () {
  24884. var o;
  24885. var options = {};
  24886. var optionName;
  24887. var value;
  24888. // list of options, surrounded by parens
  24889. if (!parserInput.$char('(')) {
  24890. return null;
  24891. }
  24892. do {
  24893. o = this.importOption();
  24894. if (o) {
  24895. optionName = o;
  24896. value = true;
  24897. switch (optionName) {
  24898. case 'css':
  24899. optionName = 'less';
  24900. value = false;
  24901. break;
  24902. case 'once':
  24903. optionName = 'multiple';
  24904. value = false;
  24905. break;
  24906. }
  24907. options[optionName] = value;
  24908. if (!parserInput.$char(',')) {
  24909. break;
  24910. }
  24911. }
  24912. } while (o);
  24913. expectChar(')');
  24914. return options;
  24915. },
  24916. importOption: function () {
  24917. var opt = parserInput.$re(/^(less|css|multiple|once|inline|reference|optional)/);
  24918. if (opt) {
  24919. return opt[1];
  24920. }
  24921. },
  24922. mediaFeature: function () {
  24923. var entities = this.entities;
  24924. var nodes = [];
  24925. var e;
  24926. var p;
  24927. parserInput.save();
  24928. do {
  24929. e = entities.keyword() || entities.variable() || entities.mixinLookup();
  24930. if (e) {
  24931. nodes.push(e);
  24932. }
  24933. else if (parserInput.$char('(')) {
  24934. p = this.property();
  24935. e = this.value();
  24936. if (parserInput.$char(')')) {
  24937. if (p && e) {
  24938. nodes.push(new (tree.Paren)(new (tree.Declaration)(p, e, null, null, parserInput.i, fileInfo, true)));
  24939. }
  24940. else if (e) {
  24941. nodes.push(new (tree.Paren)(e));
  24942. }
  24943. else {
  24944. error('badly formed media feature definition');
  24945. }
  24946. }
  24947. else {
  24948. error('Missing closing \')\'', 'Parse');
  24949. }
  24950. }
  24951. } while (e);
  24952. parserInput.forget();
  24953. if (nodes.length > 0) {
  24954. return new (tree.Expression)(nodes);
  24955. }
  24956. },
  24957. mediaFeatures: function () {
  24958. var entities = this.entities;
  24959. var features = [];
  24960. var e;
  24961. do {
  24962. e = this.mediaFeature();
  24963. if (e) {
  24964. features.push(e);
  24965. if (!parserInput.$char(',')) {
  24966. break;
  24967. }
  24968. }
  24969. else {
  24970. e = entities.variable() || entities.mixinLookup();
  24971. if (e) {
  24972. features.push(e);
  24973. if (!parserInput.$char(',')) {
  24974. break;
  24975. }
  24976. }
  24977. }
  24978. } while (e);
  24979. return features.length > 0 ? features : null;
  24980. },
  24981. media: function () {
  24982. var features;
  24983. var rules;
  24984. var media;
  24985. var debugInfo;
  24986. var index = parserInput.i;
  24987. if (context.dumpLineNumbers) {
  24988. debugInfo = getDebugInfo(index);
  24989. }
  24990. parserInput.save();
  24991. if (parserInput.$str('@media')) {
  24992. features = this.mediaFeatures();
  24993. rules = this.block();
  24994. if (!rules) {
  24995. error('media definitions require block statements after any features');
  24996. }
  24997. parserInput.forget();
  24998. media = new (tree.Media)(rules, features, index, fileInfo);
  24999. if (context.dumpLineNumbers) {
  25000. media.debugInfo = debugInfo;
  25001. }
  25002. return media;
  25003. }
  25004. parserInput.restore();
  25005. },
  25006. //
  25007. // A @plugin directive, used to import plugins dynamically.
  25008. //
  25009. // @plugin (args) "lib";
  25010. //
  25011. plugin: function () {
  25012. var path;
  25013. var args;
  25014. var options;
  25015. var index = parserInput.i;
  25016. var dir = parserInput.$re(/^@plugin?\s+/);
  25017. if (dir) {
  25018. args = this.pluginArgs();
  25019. if (args) {
  25020. options = {
  25021. pluginArgs: args,
  25022. isPlugin: true
  25023. };
  25024. }
  25025. else {
  25026. options = { isPlugin: true };
  25027. }
  25028. if ((path = this.entities.quoted() || this.entities.url())) {
  25029. if (!parserInput.$char(';')) {
  25030. parserInput.i = index;
  25031. error('missing semi-colon on @plugin');
  25032. }
  25033. return new (tree.Import)(path, null, options, index, fileInfo);
  25034. }
  25035. else {
  25036. parserInput.i = index;
  25037. error('malformed @plugin statement');
  25038. }
  25039. }
  25040. },
  25041. pluginArgs: function () {
  25042. // list of options, surrounded by parens
  25043. parserInput.save();
  25044. if (!parserInput.$char('(')) {
  25045. parserInput.restore();
  25046. return null;
  25047. }
  25048. var args = parserInput.$re(/^\s*([^\);]+)\)\s*/);
  25049. if (args[1]) {
  25050. parserInput.forget();
  25051. return args[1].trim();
  25052. }
  25053. else {
  25054. parserInput.restore();
  25055. return null;
  25056. }
  25057. },
  25058. //
  25059. // A CSS AtRule
  25060. //
  25061. // @charset "utf-8";
  25062. //
  25063. atrule: function () {
  25064. var index = parserInput.i;
  25065. var name;
  25066. var value;
  25067. var rules;
  25068. var nonVendorSpecificName;
  25069. var hasIdentifier;
  25070. var hasExpression;
  25071. var hasUnknown;
  25072. var hasBlock = true;
  25073. var isRooted = true;
  25074. if (parserInput.currentChar() !== '@') {
  25075. return;
  25076. }
  25077. value = this['import']() || this.plugin() || this.media();
  25078. if (value) {
  25079. return value;
  25080. }
  25081. parserInput.save();
  25082. name = parserInput.$re(/^@[a-z-]+/);
  25083. if (!name) {
  25084. return;
  25085. }
  25086. nonVendorSpecificName = name;
  25087. if (name.charAt(1) == '-' && name.indexOf('-', 2) > 0) {
  25088. nonVendorSpecificName = "@" + name.slice(name.indexOf('-', 2) + 1);
  25089. }
  25090. switch (nonVendorSpecificName) {
  25091. case '@charset':
  25092. hasIdentifier = true;
  25093. hasBlock = false;
  25094. break;
  25095. case '@namespace':
  25096. hasExpression = true;
  25097. hasBlock = false;
  25098. break;
  25099. case '@keyframes':
  25100. case '@counter-style':
  25101. hasIdentifier = true;
  25102. break;
  25103. case '@document':
  25104. case '@supports':
  25105. hasUnknown = true;
  25106. isRooted = false;
  25107. break;
  25108. default:
  25109. hasUnknown = true;
  25110. break;
  25111. }
  25112. parserInput.commentStore.length = 0;
  25113. if (hasIdentifier) {
  25114. value = this.entity();
  25115. if (!value) {
  25116. error("expected " + name + " identifier");
  25117. }
  25118. }
  25119. else if (hasExpression) {
  25120. value = this.expression();
  25121. if (!value) {
  25122. error("expected " + name + " expression");
  25123. }
  25124. }
  25125. else if (hasUnknown) {
  25126. value = this.permissiveValue(/^[{;]/);
  25127. hasBlock = (parserInput.currentChar() === '{');
  25128. if (!value) {
  25129. if (!hasBlock && parserInput.currentChar() !== ';') {
  25130. error(name + " rule is missing block or ending semi-colon");
  25131. }
  25132. }
  25133. else if (!value.value) {
  25134. value = null;
  25135. }
  25136. }
  25137. if (hasBlock) {
  25138. rules = this.blockRuleset();
  25139. }
  25140. if (rules || (!hasBlock && value && parserInput.$char(';'))) {
  25141. parserInput.forget();
  25142. return new (tree.AtRule)(name, value, rules, index, fileInfo, context.dumpLineNumbers ? getDebugInfo(index) : null, isRooted);
  25143. }
  25144. parserInput.restore('at-rule options not recognised');
  25145. },
  25146. //
  25147. // A Value is a comma-delimited list of Expressions
  25148. //
  25149. // font-family: Baskerville, Georgia, serif;
  25150. //
  25151. // In a Rule, a Value represents everything after the `:`,
  25152. // and before the `;`.
  25153. //
  25154. value: function () {
  25155. var e;
  25156. var expressions = [];
  25157. var index = parserInput.i;
  25158. do {
  25159. e = this.expression();
  25160. if (e) {
  25161. expressions.push(e);
  25162. if (!parserInput.$char(',')) {
  25163. break;
  25164. }
  25165. }
  25166. } while (e);
  25167. if (expressions.length > 0) {
  25168. return new (tree.Value)(expressions, index);
  25169. }
  25170. },
  25171. important: function () {
  25172. if (parserInput.currentChar() === '!') {
  25173. return parserInput.$re(/^! *important/);
  25174. }
  25175. },
  25176. sub: function () {
  25177. var a;
  25178. var e;
  25179. parserInput.save();
  25180. if (parserInput.$char('(')) {
  25181. a = this.addition();
  25182. if (a && parserInput.$char(')')) {
  25183. parserInput.forget();
  25184. e = new (tree.Expression)([a]);
  25185. e.parens = true;
  25186. return e;
  25187. }
  25188. parserInput.restore('Expected \')\'');
  25189. return;
  25190. }
  25191. parserInput.restore();
  25192. },
  25193. multiplication: function () {
  25194. var m;
  25195. var a;
  25196. var op;
  25197. var operation;
  25198. var isSpaced;
  25199. m = this.operand();
  25200. if (m) {
  25201. isSpaced = parserInput.isWhitespace(-1);
  25202. while (true) {
  25203. if (parserInput.peek(/^\/[*\/]/)) {
  25204. break;
  25205. }
  25206. parserInput.save();
  25207. op = parserInput.$char('/') || parserInput.$char('*') || parserInput.$str('./');
  25208. if (!op) {
  25209. parserInput.forget();
  25210. break;
  25211. }
  25212. a = this.operand();
  25213. if (!a) {
  25214. parserInput.restore();
  25215. break;
  25216. }
  25217. parserInput.forget();
  25218. m.parensInOp = true;
  25219. a.parensInOp = true;
  25220. operation = new (tree.Operation)(op, [operation || m, a], isSpaced);
  25221. isSpaced = parserInput.isWhitespace(-1);
  25222. }
  25223. return operation || m;
  25224. }
  25225. },
  25226. addition: function () {
  25227. var m;
  25228. var a;
  25229. var op;
  25230. var operation;
  25231. var isSpaced;
  25232. m = this.multiplication();
  25233. if (m) {
  25234. isSpaced = parserInput.isWhitespace(-1);
  25235. while (true) {
  25236. op = parserInput.$re(/^[-+]\s+/) || (!isSpaced && (parserInput.$char('+') || parserInput.$char('-')));
  25237. if (!op) {
  25238. break;
  25239. }
  25240. a = this.multiplication();
  25241. if (!a) {
  25242. break;
  25243. }
  25244. m.parensInOp = true;
  25245. a.parensInOp = true;
  25246. operation = new (tree.Operation)(op, [operation || m, a], isSpaced);
  25247. isSpaced = parserInput.isWhitespace(-1);
  25248. }
  25249. return operation || m;
  25250. }
  25251. },
  25252. conditions: function () {
  25253. var a;
  25254. var b;
  25255. var index = parserInput.i;
  25256. var condition;
  25257. a = this.condition(true);
  25258. if (a) {
  25259. while (true) {
  25260. if (!parserInput.peek(/^,\s*(not\s*)?\(/) || !parserInput.$char(',')) {
  25261. break;
  25262. }
  25263. b = this.condition(true);
  25264. if (!b) {
  25265. break;
  25266. }
  25267. condition = new (tree.Condition)('or', condition || a, b, index);
  25268. }
  25269. return condition || a;
  25270. }
  25271. },
  25272. condition: function (needsParens) {
  25273. var result;
  25274. var logical;
  25275. var next;
  25276. function or() {
  25277. return parserInput.$str('or');
  25278. }
  25279. result = this.conditionAnd(needsParens);
  25280. if (!result) {
  25281. return;
  25282. }
  25283. logical = or();
  25284. if (logical) {
  25285. next = this.condition(needsParens);
  25286. if (next) {
  25287. result = new (tree.Condition)(logical, result, next);
  25288. }
  25289. else {
  25290. return;
  25291. }
  25292. }
  25293. return result;
  25294. },
  25295. conditionAnd: function (needsParens) {
  25296. var result;
  25297. var logical;
  25298. var next;
  25299. var self = this;
  25300. function insideCondition() {
  25301. var cond = self.negatedCondition(needsParens) || self.parenthesisCondition(needsParens);
  25302. if (!cond && !needsParens) {
  25303. return self.atomicCondition(needsParens);
  25304. }
  25305. return cond;
  25306. }
  25307. function and() {
  25308. return parserInput.$str('and');
  25309. }
  25310. result = insideCondition();
  25311. if (!result) {
  25312. return;
  25313. }
  25314. logical = and();
  25315. if (logical) {
  25316. next = this.conditionAnd(needsParens);
  25317. if (next) {
  25318. result = new (tree.Condition)(logical, result, next);
  25319. }
  25320. else {
  25321. return;
  25322. }
  25323. }
  25324. return result;
  25325. },
  25326. negatedCondition: function (needsParens) {
  25327. if (parserInput.$str('not')) {
  25328. var result = this.parenthesisCondition(needsParens);
  25329. if (result) {
  25330. result.negate = !result.negate;
  25331. }
  25332. return result;
  25333. }
  25334. },
  25335. parenthesisCondition: function (needsParens) {
  25336. function tryConditionFollowedByParenthesis(me) {
  25337. var body;
  25338. parserInput.save();
  25339. body = me.condition(needsParens);
  25340. if (!body) {
  25341. parserInput.restore();
  25342. return;
  25343. }
  25344. if (!parserInput.$char(')')) {
  25345. parserInput.restore();
  25346. return;
  25347. }
  25348. parserInput.forget();
  25349. return body;
  25350. }
  25351. var body;
  25352. parserInput.save();
  25353. if (!parserInput.$str('(')) {
  25354. parserInput.restore();
  25355. return;
  25356. }
  25357. body = tryConditionFollowedByParenthesis(this);
  25358. if (body) {
  25359. parserInput.forget();
  25360. return body;
  25361. }
  25362. body = this.atomicCondition(needsParens);
  25363. if (!body) {
  25364. parserInput.restore();
  25365. return;
  25366. }
  25367. if (!parserInput.$char(')')) {
  25368. parserInput.restore("expected ')' got '" + parserInput.currentChar() + "'");
  25369. return;
  25370. }
  25371. parserInput.forget();
  25372. return body;
  25373. },
  25374. atomicCondition: function (needsParens) {
  25375. var entities = this.entities;
  25376. var index = parserInput.i;
  25377. var a;
  25378. var b;
  25379. var c;
  25380. var op;
  25381. function cond() {
  25382. return this.addition() || entities.keyword() || entities.quoted() || entities.mixinLookup();
  25383. }
  25384. cond = cond.bind(this);
  25385. a = cond();
  25386. if (a) {
  25387. if (parserInput.$char('>')) {
  25388. if (parserInput.$char('=')) {
  25389. op = '>=';
  25390. }
  25391. else {
  25392. op = '>';
  25393. }
  25394. }
  25395. else if (parserInput.$char('<')) {
  25396. if (parserInput.$char('=')) {
  25397. op = '<=';
  25398. }
  25399. else {
  25400. op = '<';
  25401. }
  25402. }
  25403. else if (parserInput.$char('=')) {
  25404. if (parserInput.$char('>')) {
  25405. op = '=>';
  25406. }
  25407. else if (parserInput.$char('<')) {
  25408. op = '=<';
  25409. }
  25410. else {
  25411. op = '=';
  25412. }
  25413. }
  25414. if (op) {
  25415. b = cond();
  25416. if (b) {
  25417. c = new (tree.Condition)(op, a, b, index, false);
  25418. }
  25419. else {
  25420. error('expected expression');
  25421. }
  25422. }
  25423. else {
  25424. c = new (tree.Condition)('=', a, new (tree.Keyword)('true'), index, false);
  25425. }
  25426. return c;
  25427. }
  25428. },
  25429. //
  25430. // An operand is anything that can be part of an operation,
  25431. // such as a Color, or a Variable
  25432. //
  25433. operand: function () {
  25434. var entities = this.entities;
  25435. var negate;
  25436. if (parserInput.peek(/^-[@\$\(]/)) {
  25437. negate = parserInput.$char('-');
  25438. }
  25439. var o = this.sub() || entities.dimension() ||
  25440. entities.color() || entities.variable() ||
  25441. entities.property() || entities.call() ||
  25442. entities.quoted(true) || entities.colorKeyword() ||
  25443. entities.mixinLookup();
  25444. if (negate) {
  25445. o.parensInOp = true;
  25446. o = new (tree.Negative)(o);
  25447. }
  25448. return o;
  25449. },
  25450. //
  25451. // Expressions either represent mathematical operations,
  25452. // or white-space delimited Entities.
  25453. //
  25454. // 1px solid black
  25455. // @var * 2
  25456. //
  25457. expression: function () {
  25458. var entities = [];
  25459. var e;
  25460. var delim;
  25461. var index = parserInput.i;
  25462. do {
  25463. e = this.comment();
  25464. if (e) {
  25465. entities.push(e);
  25466. continue;
  25467. }
  25468. e = this.addition() || this.entity();
  25469. if (e instanceof tree.Comment) {
  25470. e = null;
  25471. }
  25472. if (e) {
  25473. entities.push(e);
  25474. // operations do not allow keyword "/" dimension (e.g. small/20px) so we support that here
  25475. if (!parserInput.peek(/^\/[\/*]/)) {
  25476. delim = parserInput.$char('/');
  25477. if (delim) {
  25478. entities.push(new (tree.Anonymous)(delim, index));
  25479. }
  25480. }
  25481. }
  25482. } while (e);
  25483. if (entities.length > 0) {
  25484. return new (tree.Expression)(entities);
  25485. }
  25486. },
  25487. property: function () {
  25488. var name = parserInput.$re(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/);
  25489. if (name) {
  25490. return name[1];
  25491. }
  25492. },
  25493. ruleProperty: function () {
  25494. var name = [];
  25495. var index = [];
  25496. var s;
  25497. var k;
  25498. parserInput.save();
  25499. var simpleProperty = parserInput.$re(/^([_a-zA-Z0-9-]+)\s*:/);
  25500. if (simpleProperty) {
  25501. name = [new (tree.Keyword)(simpleProperty[1])];
  25502. parserInput.forget();
  25503. return name;
  25504. }
  25505. function match(re) {
  25506. var i = parserInput.i;
  25507. var chunk = parserInput.$re(re);
  25508. if (chunk) {
  25509. index.push(i);
  25510. return name.push(chunk[1]);
  25511. }
  25512. }
  25513. match(/^(\*?)/);
  25514. while (true) {
  25515. if (!match(/^((?:[\w-]+)|(?:[@\$]\{[\w-]+\}))/)) {
  25516. break;
  25517. }
  25518. }
  25519. if ((name.length > 1) && match(/^((?:\+_|\+)?)\s*:/)) {
  25520. parserInput.forget();
  25521. // at last, we have the complete match now. move forward,
  25522. // convert name particles to tree objects and return:
  25523. if (name[0] === '') {
  25524. name.shift();
  25525. index.shift();
  25526. }
  25527. for (k = 0; k < name.length; k++) {
  25528. s = name[k];
  25529. name[k] = (s.charAt(0) !== '@' && s.charAt(0) !== '$') ?
  25530. new (tree.Keyword)(s) :
  25531. (s.charAt(0) === '@' ?
  25532. new (tree.Variable)("@" + s.slice(2, -1), index[k], fileInfo) :
  25533. new (tree.Property)("$" + s.slice(2, -1), index[k], fileInfo));
  25534. }
  25535. return name;
  25536. }
  25537. parserInput.restore();
  25538. }
  25539. }
  25540. };
  25541. };
  25542. Parser.serializeVars = function (vars) {
  25543. var s = '';
  25544. for (var name_1 in vars) {
  25545. if (Object.hasOwnProperty.call(vars, name_1)) {
  25546. var value = vars[name_1];
  25547. s += ((name_1[0] === '@') ? '' : '@') + name_1 + ": " + value + ((String(value).slice(-1) === ';') ? '' : ';');
  25548. }
  25549. }
  25550. return s;
  25551. };
  25552. function boolean(condition) {
  25553. return condition ? Keyword.True : Keyword.False;
  25554. }
  25555. /**
  25556. * Functions with evalArgs set to false are sent context
  25557. * as the first argument.
  25558. */
  25559. function If(context, condition, trueValue, falseValue) {
  25560. return condition.eval(context) ? trueValue.eval(context)
  25561. : (falseValue ? falseValue.eval(context) : new Anonymous);
  25562. }
  25563. If.evalArgs = false;
  25564. var boolean$1 = { boolean: boolean, 'if': If };
  25565. var colorFunctions;
  25566. function clamp$1(val) {
  25567. return Math.min(1, Math.max(0, val));
  25568. }
  25569. function hsla(origColor, hsl) {
  25570. var color = colorFunctions.hsla(hsl.h, hsl.s, hsl.l, hsl.a);
  25571. if (color) {
  25572. if (origColor.value &&
  25573. /^(rgb|hsl)/.test(origColor.value)) {
  25574. color.value = origColor.value;
  25575. }
  25576. else {
  25577. color.value = 'rgb';
  25578. }
  25579. return color;
  25580. }
  25581. }
  25582. function toHSL(color) {
  25583. if (color.toHSL) {
  25584. return color.toHSL();
  25585. }
  25586. else {
  25587. throw new Error('Argument cannot be evaluated to a color');
  25588. }
  25589. }
  25590. function toHSV(color) {
  25591. if (color.toHSV) {
  25592. return color.toHSV();
  25593. }
  25594. else {
  25595. throw new Error('Argument cannot be evaluated to a color');
  25596. }
  25597. }
  25598. function number(n) {
  25599. if (n instanceof Dimension) {
  25600. return parseFloat(n.unit.is('%') ? n.value / 100 : n.value);
  25601. }
  25602. else if (typeof n === 'number') {
  25603. return n;
  25604. }
  25605. else {
  25606. throw {
  25607. type: 'Argument',
  25608. message: 'color functions take numbers as parameters'
  25609. };
  25610. }
  25611. }
  25612. function scaled(n, size) {
  25613. if (n instanceof Dimension && n.unit.is('%')) {
  25614. return parseFloat(n.value * size / 100);
  25615. }
  25616. else {
  25617. return number(n);
  25618. }
  25619. }
  25620. colorFunctions = {
  25621. rgb: function (r, g, b) {
  25622. var color = colorFunctions.rgba(r, g, b, 1.0);
  25623. if (color) {
  25624. color.value = 'rgb';
  25625. return color;
  25626. }
  25627. },
  25628. rgba: function (r, g, b, a) {
  25629. try {
  25630. if (r instanceof Color) {
  25631. if (g) {
  25632. a = number(g);
  25633. }
  25634. else {
  25635. a = r.alpha;
  25636. }
  25637. return new Color(r.rgb, a, 'rgba');
  25638. }
  25639. var rgb = [r, g, b].map(function (c) { return scaled(c, 255); });
  25640. a = number(a);
  25641. return new Color(rgb, a, 'rgba');
  25642. }
  25643. catch (e) { }
  25644. },
  25645. hsl: function (h, s, l) {
  25646. var color = colorFunctions.hsla(h, s, l, 1.0);
  25647. if (color) {
  25648. color.value = 'hsl';
  25649. return color;
  25650. }
  25651. },
  25652. hsla: function (h, s, l, a) {
  25653. try {
  25654. if (h instanceof Color) {
  25655. if (s) {
  25656. a = number(s);
  25657. }
  25658. else {
  25659. a = h.alpha;
  25660. }
  25661. return new Color(h.rgb, a, 'hsla');
  25662. }
  25663. var m1_1;
  25664. var m2_1;
  25665. function hue(h) {
  25666. h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
  25667. if (h * 6 < 1) {
  25668. return m1_1 + (m2_1 - m1_1) * h * 6;
  25669. }
  25670. else if (h * 2 < 1) {
  25671. return m2_1;
  25672. }
  25673. else if (h * 3 < 2) {
  25674. return m1_1 + (m2_1 - m1_1) * (2 / 3 - h) * 6;
  25675. }
  25676. else {
  25677. return m1_1;
  25678. }
  25679. }
  25680. h = (number(h) % 360) / 360;
  25681. s = clamp$1(number(s));
  25682. l = clamp$1(number(l));
  25683. a = clamp$1(number(a));
  25684. m2_1 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
  25685. m1_1 = l * 2 - m2_1;
  25686. var rgb = [
  25687. hue(h + 1 / 3) * 255,
  25688. hue(h) * 255,
  25689. hue(h - 1 / 3) * 255
  25690. ];
  25691. a = number(a);
  25692. return new Color(rgb, a, 'hsla');
  25693. }
  25694. catch (e) { }
  25695. },
  25696. hsv: function (h, s, v) {
  25697. return colorFunctions.hsva(h, s, v, 1.0);
  25698. },
  25699. hsva: function (h, s, v, a) {
  25700. h = ((number(h) % 360) / 360) * 360;
  25701. s = number(s);
  25702. v = number(v);
  25703. a = number(a);
  25704. var i;
  25705. var f;
  25706. i = Math.floor((h / 60) % 6);
  25707. f = (h / 60) - i;
  25708. var vs = [v,
  25709. v * (1 - s),
  25710. v * (1 - f * s),
  25711. v * (1 - (1 - f) * s)];
  25712. var perm = [[0, 3, 1],
  25713. [2, 0, 1],
  25714. [1, 0, 3],
  25715. [1, 2, 0],
  25716. [3, 1, 0],
  25717. [0, 1, 2]];
  25718. return colorFunctions.rgba(vs[perm[i][0]] * 255, vs[perm[i][1]] * 255, vs[perm[i][2]] * 255, a);
  25719. },
  25720. hue: function (color) {
  25721. return new Dimension(toHSL(color).h);
  25722. },
  25723. saturation: function (color) {
  25724. return new Dimension(toHSL(color).s * 100, '%');
  25725. },
  25726. lightness: function (color) {
  25727. return new Dimension(toHSL(color).l * 100, '%');
  25728. },
  25729. hsvhue: function (color) {
  25730. return new Dimension(toHSV(color).h);
  25731. },
  25732. hsvsaturation: function (color) {
  25733. return new Dimension(toHSV(color).s * 100, '%');
  25734. },
  25735. hsvvalue: function (color) {
  25736. return new Dimension(toHSV(color).v * 100, '%');
  25737. },
  25738. red: function (color) {
  25739. return new Dimension(color.rgb[0]);
  25740. },
  25741. green: function (color) {
  25742. return new Dimension(color.rgb[1]);
  25743. },
  25744. blue: function (color) {
  25745. return new Dimension(color.rgb[2]);
  25746. },
  25747. alpha: function (color) {
  25748. return new Dimension(toHSL(color).a);
  25749. },
  25750. luma: function (color) {
  25751. return new Dimension(color.luma() * color.alpha * 100, '%');
  25752. },
  25753. luminance: function (color) {
  25754. var luminance = (0.2126 * color.rgb[0] / 255) +
  25755. (0.7152 * color.rgb[1] / 255) +
  25756. (0.0722 * color.rgb[2] / 255);
  25757. return new Dimension(luminance * color.alpha * 100, '%');
  25758. },
  25759. saturate: function (color, amount, method) {
  25760. // filter: saturate(3.2);
  25761. // should be kept as is, so check for color
  25762. if (!color.rgb) {
  25763. return null;
  25764. }
  25765. var hsl = toHSL(color);
  25766. if (typeof method !== 'undefined' && method.value === 'relative') {
  25767. hsl.s += hsl.s * amount.value / 100;
  25768. }
  25769. else {
  25770. hsl.s += amount.value / 100;
  25771. }
  25772. hsl.s = clamp$1(hsl.s);
  25773. return hsla(color, hsl);
  25774. },
  25775. desaturate: function (color, amount, method) {
  25776. var hsl = toHSL(color);
  25777. if (typeof method !== 'undefined' && method.value === 'relative') {
  25778. hsl.s -= hsl.s * amount.value / 100;
  25779. }
  25780. else {
  25781. hsl.s -= amount.value / 100;
  25782. }
  25783. hsl.s = clamp$1(hsl.s);
  25784. return hsla(color, hsl);
  25785. },
  25786. lighten: function (color, amount, method) {
  25787. var hsl = toHSL(color);
  25788. if (typeof method !== 'undefined' && method.value === 'relative') {
  25789. hsl.l += hsl.l * amount.value / 100;
  25790. }
  25791. else {
  25792. hsl.l += amount.value / 100;
  25793. }
  25794. hsl.l = clamp$1(hsl.l);
  25795. return hsla(color, hsl);
  25796. },
  25797. darken: function (color, amount, method) {
  25798. var hsl = toHSL(color);
  25799. if (typeof method !== 'undefined' && method.value === 'relative') {
  25800. hsl.l -= hsl.l * amount.value / 100;
  25801. }
  25802. else {
  25803. hsl.l -= amount.value / 100;
  25804. }
  25805. hsl.l = clamp$1(hsl.l);
  25806. return hsla(color, hsl);
  25807. },
  25808. fadein: function (color, amount, method) {
  25809. var hsl = toHSL(color);
  25810. if (typeof method !== 'undefined' && method.value === 'relative') {
  25811. hsl.a += hsl.a * amount.value / 100;
  25812. }
  25813. else {
  25814. hsl.a += amount.value / 100;
  25815. }
  25816. hsl.a = clamp$1(hsl.a);
  25817. return hsla(color, hsl);
  25818. },
  25819. fadeout: function (color, amount, method) {
  25820. var hsl = toHSL(color);
  25821. if (typeof method !== 'undefined' && method.value === 'relative') {
  25822. hsl.a -= hsl.a * amount.value / 100;
  25823. }
  25824. else {
  25825. hsl.a -= amount.value / 100;
  25826. }
  25827. hsl.a = clamp$1(hsl.a);
  25828. return hsla(color, hsl);
  25829. },
  25830. fade: function (color, amount) {
  25831. var hsl = toHSL(color);
  25832. hsl.a = amount.value / 100;
  25833. hsl.a = clamp$1(hsl.a);
  25834. return hsla(color, hsl);
  25835. },
  25836. spin: function (color, amount) {
  25837. var hsl = toHSL(color);
  25838. var hue = (hsl.h + amount.value) % 360;
  25839. hsl.h = hue < 0 ? 360 + hue : hue;
  25840. return hsla(color, hsl);
  25841. },
  25842. //
  25843. // Copyright (c) 2006-2009 Hampton Catlin, Natalie Weizenbaum, and Chris Eppstein
  25844. // http://sass-lang.com
  25845. //
  25846. mix: function (color1, color2, weight) {
  25847. if (!weight) {
  25848. weight = new Dimension(50);
  25849. }
  25850. var p = weight.value / 100.0;
  25851. var w = p * 2 - 1;
  25852. var a = toHSL(color1).a - toHSL(color2).a;
  25853. var w1 = (((w * a == -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
  25854. var w2 = 1 - w1;
  25855. var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2,
  25856. color1.rgb[1] * w1 + color2.rgb[1] * w2,
  25857. color1.rgb[2] * w1 + color2.rgb[2] * w2];
  25858. var alpha = color1.alpha * p + color2.alpha * (1 - p);
  25859. return new Color(rgb, alpha);
  25860. },
  25861. greyscale: function (color) {
  25862. return colorFunctions.desaturate(color, new Dimension(100));
  25863. },
  25864. contrast: function (color, dark, light, threshold) {
  25865. // filter: contrast(3.2);
  25866. // should be kept as is, so check for color
  25867. if (!color.rgb) {
  25868. return null;
  25869. }
  25870. if (typeof light === 'undefined') {
  25871. light = colorFunctions.rgba(255, 255, 255, 1.0);
  25872. }
  25873. if (typeof dark === 'undefined') {
  25874. dark = colorFunctions.rgba(0, 0, 0, 1.0);
  25875. }
  25876. // Figure out which is actually light and dark:
  25877. if (dark.luma() > light.luma()) {
  25878. var t = light;
  25879. light = dark;
  25880. dark = t;
  25881. }
  25882. if (typeof threshold === 'undefined') {
  25883. threshold = 0.43;
  25884. }
  25885. else {
  25886. threshold = number(threshold);
  25887. }
  25888. if (color.luma() < threshold) {
  25889. return light;
  25890. }
  25891. else {
  25892. return dark;
  25893. }
  25894. },
  25895. // Changes made in 2.7.0 - Reverted in 3.0.0
  25896. // contrast: function (color, color1, color2, threshold) {
  25897. // // Return which of `color1` and `color2` has the greatest contrast with `color`
  25898. // // according to the standard WCAG contrast ratio calculation.
  25899. // // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
  25900. // // The threshold param is no longer used, in line with SASS.
  25901. // // filter: contrast(3.2);
  25902. // // should be kept as is, so check for color
  25903. // if (!color.rgb) {
  25904. // return null;
  25905. // }
  25906. // if (typeof color1 === 'undefined') {
  25907. // color1 = colorFunctions.rgba(0, 0, 0, 1.0);
  25908. // }
  25909. // if (typeof color2 === 'undefined') {
  25910. // color2 = colorFunctions.rgba(255, 255, 255, 1.0);
  25911. // }
  25912. // var contrast1, contrast2;
  25913. // var luma = color.luma();
  25914. // var luma1 = color1.luma();
  25915. // var luma2 = color2.luma();
  25916. // // Calculate contrast ratios for each color
  25917. // if (luma > luma1) {
  25918. // contrast1 = (luma + 0.05) / (luma1 + 0.05);
  25919. // } else {
  25920. // contrast1 = (luma1 + 0.05) / (luma + 0.05);
  25921. // }
  25922. // if (luma > luma2) {
  25923. // contrast2 = (luma + 0.05) / (luma2 + 0.05);
  25924. // } else {
  25925. // contrast2 = (luma2 + 0.05) / (luma + 0.05);
  25926. // }
  25927. // if (contrast1 > contrast2) {
  25928. // return color1;
  25929. // } else {
  25930. // return color2;
  25931. // }
  25932. // },
  25933. argb: function (color) {
  25934. return new Anonymous(color.toARGB());
  25935. },
  25936. color: function (c) {
  25937. if ((c instanceof Quoted) &&
  25938. (/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})$/i.test(c.value))) {
  25939. var val = c.value.slice(1);
  25940. return new Color(val, undefined, "#" + val);
  25941. }
  25942. if ((c instanceof Color) || (c = Color.fromKeyword(c.value))) {
  25943. c.value = undefined;
  25944. return c;
  25945. }
  25946. throw {
  25947. type: 'Argument',
  25948. message: 'argument must be a color keyword or 3|4|6|8 digit hex e.g. #FFF'
  25949. };
  25950. },
  25951. tint: function (color, amount) {
  25952. return colorFunctions.mix(colorFunctions.rgb(255, 255, 255), color, amount);
  25953. },
  25954. shade: function (color, amount) {
  25955. return colorFunctions.mix(colorFunctions.rgb(0, 0, 0), color, amount);
  25956. }
  25957. };
  25958. var color = colorFunctions;
  25959. // Color Blending
  25960. // ref: http://www.w3.org/TR/compositing-1
  25961. function colorBlend(mode, color1, color2) {
  25962. var ab = color1.alpha; // result
  25963. var // backdrop
  25964. cb;
  25965. var as = color2.alpha;
  25966. var // source
  25967. cs;
  25968. var ar;
  25969. var cr;
  25970. var r = [];
  25971. ar = as + ab * (1 - as);
  25972. for (var i = 0; i < 3; i++) {
  25973. cb = color1.rgb[i] / 255;
  25974. cs = color2.rgb[i] / 255;
  25975. cr = mode(cb, cs);
  25976. if (ar) {
  25977. cr = (as * cs + ab * (cb -
  25978. as * (cb + cs - cr))) / ar;
  25979. }
  25980. r[i] = cr * 255;
  25981. }
  25982. return new Color(r, ar);
  25983. }
  25984. var colorBlendModeFunctions = {
  25985. multiply: function (cb, cs) {
  25986. return cb * cs;
  25987. },
  25988. screen: function (cb, cs) {
  25989. return cb + cs - cb * cs;
  25990. },
  25991. overlay: function (cb, cs) {
  25992. cb *= 2;
  25993. return (cb <= 1) ?
  25994. colorBlendModeFunctions.multiply(cb, cs) :
  25995. colorBlendModeFunctions.screen(cb - 1, cs);
  25996. },
  25997. softlight: function (cb, cs) {
  25998. var d = 1;
  25999. var e = cb;
  26000. if (cs > 0.5) {
  26001. e = 1;
  26002. d = (cb > 0.25) ? Math.sqrt(cb)
  26003. : ((16 * cb - 12) * cb + 4) * cb;
  26004. }
  26005. return cb - (1 - 2 * cs) * e * (d - cb);
  26006. },
  26007. hardlight: function (cb, cs) {
  26008. return colorBlendModeFunctions.overlay(cs, cb);
  26009. },
  26010. difference: function (cb, cs) {
  26011. return Math.abs(cb - cs);
  26012. },
  26013. exclusion: function (cb, cs) {
  26014. return cb + cs - 2 * cb * cs;
  26015. },
  26016. // non-w3c functions:
  26017. average: function (cb, cs) {
  26018. return (cb + cs) / 2;
  26019. },
  26020. negation: function (cb, cs) {
  26021. return 1 - Math.abs(cb + cs - 1);
  26022. }
  26023. };
  26024. for (var f in colorBlendModeFunctions) {
  26025. if (colorBlendModeFunctions.hasOwnProperty(f)) {
  26026. colorBlend[f] = colorBlend.bind(null, colorBlendModeFunctions[f]);
  26027. }
  26028. }
  26029. var dataUri = (function (environment) {
  26030. var fallback = function (functionThis, node) { return new URL(node, functionThis.index, functionThis.currentFileInfo).eval(functionThis.context); };
  26031. return { 'data-uri': function (mimetypeNode, filePathNode) {
  26032. if (!filePathNode) {
  26033. filePathNode = mimetypeNode;
  26034. mimetypeNode = null;
  26035. }
  26036. var mimetype = mimetypeNode && mimetypeNode.value;
  26037. var filePath = filePathNode.value;
  26038. var currentFileInfo = this.currentFileInfo;
  26039. var currentDirectory = currentFileInfo.rewriteUrls ?
  26040. currentFileInfo.currentDirectory : currentFileInfo.entryPath;
  26041. var fragmentStart = filePath.indexOf('#');
  26042. var fragment = '';
  26043. if (fragmentStart !== -1) {
  26044. fragment = filePath.slice(fragmentStart);
  26045. filePath = filePath.slice(0, fragmentStart);
  26046. }
  26047. var context = clone(this.context);
  26048. context.rawBuffer = true;
  26049. var fileManager = environment.getFileManager(filePath, currentDirectory, context, environment, true);
  26050. if (!fileManager) {
  26051. return fallback(this, filePathNode);
  26052. }
  26053. var useBase64 = false;
  26054. // detect the mimetype if not given
  26055. if (!mimetypeNode) {
  26056. mimetype = environment.mimeLookup(filePath);
  26057. if (mimetype === 'image/svg+xml') {
  26058. useBase64 = false;
  26059. }
  26060. else {
  26061. // use base 64 unless it's an ASCII or UTF-8 format
  26062. var charset = environment.charsetLookup(mimetype);
  26063. useBase64 = ['US-ASCII', 'UTF-8'].indexOf(charset) < 0;
  26064. }
  26065. if (useBase64) {
  26066. mimetype += ';base64';
  26067. }
  26068. }
  26069. else {
  26070. useBase64 = /;base64$/.test(mimetype);
  26071. }
  26072. var fileSync = fileManager.loadFileSync(filePath, currentDirectory, context, environment);
  26073. if (!fileSync.contents) {
  26074. logger.warn("Skipped data-uri embedding of " + filePath + " because file not found");
  26075. return fallback(this, filePathNode || mimetypeNode);
  26076. }
  26077. var buf = fileSync.contents;
  26078. if (useBase64 && !environment.encodeBase64) {
  26079. return fallback(this, filePathNode);
  26080. }
  26081. buf = useBase64 ? environment.encodeBase64(buf) : encodeURIComponent(buf);
  26082. var uri = "data:" + mimetype + "," + buf + fragment;
  26083. return new URL(new Quoted("\"" + uri + "\"", uri, false, this.index, this.currentFileInfo), this.index, this.currentFileInfo);
  26084. } };
  26085. });
  26086. var getItemsFromNode = function (node) {
  26087. // handle non-array values as an array of length 1
  26088. // return 'undefined' if index is invalid
  26089. var items = Array.isArray(node.value) ?
  26090. node.value : Array(node);
  26091. return items;
  26092. };
  26093. var list = {
  26094. _SELF: function (n) {
  26095. return n;
  26096. },
  26097. extract: function (values, index) {
  26098. // (1-based index)
  26099. index = index.value - 1;
  26100. return getItemsFromNode(values)[index];
  26101. },
  26102. length: function (values) {
  26103. return new Dimension(getItemsFromNode(values).length);
  26104. },
  26105. /**
  26106. * Creates a Less list of incremental values.
  26107. * Modeled after Lodash's range function, also exists natively in PHP
  26108. *
  26109. * @param {Dimension} [start=1]
  26110. * @param {Dimension} end - e.g. 10 or 10px - unit is added to output
  26111. * @param {Dimension} [step=1]
  26112. */
  26113. range: function (start, end, step) {
  26114. var from;
  26115. var to;
  26116. var stepValue = 1;
  26117. var list = [];
  26118. if (end) {
  26119. to = end;
  26120. from = start.value;
  26121. if (step) {
  26122. stepValue = step.value;
  26123. }
  26124. }
  26125. else {
  26126. from = 1;
  26127. to = start;
  26128. }
  26129. for (var i = from; i <= to.value; i += stepValue) {
  26130. list.push(new Dimension(i, to.unit));
  26131. }
  26132. return new Expression(list);
  26133. },
  26134. each: function (list, rs) {
  26135. var _this = this;
  26136. var rules = [];
  26137. var newRules;
  26138. var iterator;
  26139. var tryEval = function (val) {
  26140. if (val instanceof Node) {
  26141. return val.eval(_this.context);
  26142. }
  26143. return val;
  26144. };
  26145. if (list.value && !(list instanceof Quoted)) {
  26146. if (Array.isArray(list.value)) {
  26147. iterator = list.value.map(tryEval);
  26148. }
  26149. else {
  26150. iterator = [tryEval(list.value)];
  26151. }
  26152. }
  26153. else if (list.ruleset) {
  26154. iterator = tryEval(list.ruleset).rules;
  26155. }
  26156. else if (list.rules) {
  26157. iterator = list.rules.map(tryEval);
  26158. }
  26159. else if (Array.isArray(list)) {
  26160. iterator = list.map(tryEval);
  26161. }
  26162. else {
  26163. iterator = [tryEval(list)];
  26164. }
  26165. var valueName = '@value';
  26166. var keyName = '@key';
  26167. var indexName = '@index';
  26168. if (rs.params) {
  26169. valueName = rs.params[0] && rs.params[0].name;
  26170. keyName = rs.params[1] && rs.params[1].name;
  26171. indexName = rs.params[2] && rs.params[2].name;
  26172. rs = rs.rules;
  26173. }
  26174. else {
  26175. rs = rs.ruleset;
  26176. }
  26177. for (var i = 0; i < iterator.length; i++) {
  26178. var key = void 0;
  26179. var value = void 0;
  26180. var item = iterator[i];
  26181. if (item instanceof Declaration) {
  26182. key = typeof item.name === 'string' ? item.name : item.name[0].value;
  26183. value = item.value;
  26184. }
  26185. else {
  26186. key = new Dimension(i + 1);
  26187. value = item;
  26188. }
  26189. if (item instanceof Comment) {
  26190. continue;
  26191. }
  26192. newRules = rs.rules.slice(0);
  26193. if (valueName) {
  26194. newRules.push(new Declaration(valueName, value, false, false, this.index, this.currentFileInfo));
  26195. }
  26196. if (indexName) {
  26197. newRules.push(new Declaration(indexName, new Dimension(i + 1), false, false, this.index, this.currentFileInfo));
  26198. }
  26199. if (keyName) {
  26200. newRules.push(new Declaration(keyName, key, false, false, this.index, this.currentFileInfo));
  26201. }
  26202. rules.push(new Ruleset([new (Selector)([new Element("", '&')])], newRules, rs.strictImports, rs.visibilityInfo()));
  26203. }
  26204. return new Ruleset([new (Selector)([new Element("", '&')])], rules, rs.strictImports, rs.visibilityInfo()).eval(this.context);
  26205. }
  26206. };
  26207. var MathHelper = function (fn, unit, n) {
  26208. if (!(n instanceof Dimension)) {
  26209. throw { type: 'Argument', message: 'argument must be a number' };
  26210. }
  26211. if (unit == null) {
  26212. unit = n.unit;
  26213. }
  26214. else {
  26215. n = n.unify();
  26216. }
  26217. return new Dimension(fn(parseFloat(n.value)), unit);
  26218. };
  26219. var mathFunctions = {
  26220. // name, unit
  26221. ceil: null,
  26222. floor: null,
  26223. sqrt: null,
  26224. abs: null,
  26225. tan: '',
  26226. sin: '',
  26227. cos: '',
  26228. atan: 'rad',
  26229. asin: 'rad',
  26230. acos: 'rad'
  26231. };
  26232. for (var f$1 in mathFunctions) {
  26233. if (mathFunctions.hasOwnProperty(f$1)) {
  26234. mathFunctions[f$1] = MathHelper.bind(null, Math[f$1], mathFunctions[f$1]);
  26235. }
  26236. }
  26237. mathFunctions.round = function (n, f) {
  26238. var fraction = typeof f === 'undefined' ? 0 : f.value;
  26239. return MathHelper(function (num) { return num.toFixed(fraction); }, null, n);
  26240. };
  26241. var minMax = function (isMin, args) {
  26242. args = Array.prototype.slice.call(args);
  26243. switch (args.length) {
  26244. case 0: throw { type: 'Argument', message: 'one or more arguments required' };
  26245. }
  26246. var i; // key is the unit.toString() for unified Dimension values,
  26247. var j;
  26248. var current;
  26249. var currentUnified;
  26250. var referenceUnified;
  26251. var unit;
  26252. var unitStatic;
  26253. var unitClone;
  26254. var // elems only contains original argument values.
  26255. order = [];
  26256. var values = {};
  26257. // value is the index into the order array.
  26258. for (i = 0; i < args.length; i++) {
  26259. current = args[i];
  26260. if (!(current instanceof Dimension)) {
  26261. if (Array.isArray(args[i].value)) {
  26262. Array.prototype.push.apply(args, Array.prototype.slice.call(args[i].value));
  26263. }
  26264. continue;
  26265. }
  26266. currentUnified = current.unit.toString() === '' && unitClone !== undefined ? new Dimension(current.value, unitClone).unify() : current.unify();
  26267. unit = currentUnified.unit.toString() === '' && unitStatic !== undefined ? unitStatic : currentUnified.unit.toString();
  26268. unitStatic = unit !== '' && unitStatic === undefined || unit !== '' && order[0].unify().unit.toString() === '' ? unit : unitStatic;
  26269. unitClone = unit !== '' && unitClone === undefined ? current.unit.toString() : unitClone;
  26270. j = values[''] !== undefined && unit !== '' && unit === unitStatic ? values[''] : values[unit];
  26271. if (j === undefined) {
  26272. if (unitStatic !== undefined && unit !== unitStatic) {
  26273. throw { type: 'Argument', message: 'incompatible types' };
  26274. }
  26275. values[unit] = order.length;
  26276. order.push(current);
  26277. continue;
  26278. }
  26279. referenceUnified = order[j].unit.toString() === '' && unitClone !== undefined ? new Dimension(order[j].value, unitClone).unify() : order[j].unify();
  26280. if (isMin && currentUnified.value < referenceUnified.value ||
  26281. !isMin && currentUnified.value > referenceUnified.value) {
  26282. order[j] = current;
  26283. }
  26284. }
  26285. if (order.length == 1) {
  26286. return order[0];
  26287. }
  26288. args = order.map(function (a) { return a.toCSS(this.context); }).join(this.context.compress ? ',' : ', ');
  26289. return new Anonymous((isMin ? 'min' : 'max') + "(" + args + ")");
  26290. };
  26291. var number$1 = {
  26292. min: function () {
  26293. var args = [];
  26294. for (var _i = 0; _i < arguments.length; _i++) {
  26295. args[_i] = arguments[_i];
  26296. }
  26297. return minMax(true, args);
  26298. },
  26299. max: function () {
  26300. var args = [];
  26301. for (var _i = 0; _i < arguments.length; _i++) {
  26302. args[_i] = arguments[_i];
  26303. }
  26304. return minMax(false, args);
  26305. },
  26306. convert: function (val, unit) {
  26307. return val.convertTo(unit.value);
  26308. },
  26309. pi: function () {
  26310. return new Dimension(Math.PI);
  26311. },
  26312. mod: function (a, b) {
  26313. return new Dimension(a.value % b.value, a.unit);
  26314. },
  26315. pow: function (x, y) {
  26316. if (typeof x === 'number' && typeof y === 'number') {
  26317. x = new Dimension(x);
  26318. y = new Dimension(y);
  26319. }
  26320. else if (!(x instanceof Dimension) || !(y instanceof Dimension)) {
  26321. throw { type: 'Argument', message: 'arguments must be numbers' };
  26322. }
  26323. return new Dimension(Math.pow(x.value, y.value), x.unit);
  26324. },
  26325. percentage: function (n) {
  26326. var result = MathHelper(function (num) { return num * 100; }, '%', n);
  26327. return result;
  26328. }
  26329. };
  26330. var string = {
  26331. e: function (str) {
  26332. return new Quoted('"', str instanceof JavaScript ? str.evaluated : str.value, true);
  26333. },
  26334. escape: function (str) {
  26335. return new Anonymous(encodeURI(str.value).replace(/=/g, '%3D').replace(/:/g, '%3A').replace(/#/g, '%23').replace(/;/g, '%3B')
  26336. .replace(/\(/g, '%28').replace(/\)/g, '%29'));
  26337. },
  26338. replace: function (string, pattern, replacement, flags) {
  26339. var result = string.value;
  26340. replacement = (replacement.type === 'Quoted') ?
  26341. replacement.value : replacement.toCSS();
  26342. result = result.replace(new RegExp(pattern.value, flags ? flags.value : ''), replacement);
  26343. return new Quoted(string.quote || '', result, string.escaped);
  26344. },
  26345. '%': function (string /* arg, arg, ... */) {
  26346. var args = Array.prototype.slice.call(arguments, 1);
  26347. var result = string.value;
  26348. var _loop_1 = function (i) {
  26349. /* jshint loopfunc:true */
  26350. result = result.replace(/%[sda]/i, function (token) {
  26351. var value = ((args[i].type === 'Quoted') &&
  26352. token.match(/s/i)) ? args[i].value : args[i].toCSS();
  26353. return token.match(/[A-Z]$/) ? encodeURIComponent(value) : value;
  26354. });
  26355. };
  26356. for (var i = 0; i < args.length; i++) {
  26357. _loop_1(i);
  26358. }
  26359. result = result.replace(/%%/g, '%');
  26360. return new Quoted(string.quote || '', result, string.escaped);
  26361. }
  26362. };
  26363. var svg = (function (environment) {
  26364. return { 'svg-gradient': function (direction) {
  26365. var stops;
  26366. var gradientDirectionSvg;
  26367. var gradientType = 'linear';
  26368. var rectangleDimension = 'x="0" y="0" width="1" height="1"';
  26369. var renderEnv = { compress: false };
  26370. var returner;
  26371. var directionValue = direction.toCSS(renderEnv);
  26372. var i;
  26373. var color;
  26374. var position;
  26375. var positionValue;
  26376. var alpha;
  26377. function throwArgumentDescriptor() {
  26378. throw { type: 'Argument',
  26379. message: 'svg-gradient expects direction, start_color [start_position], [color position,]...,' +
  26380. ' end_color [end_position] or direction, color list' };
  26381. }
  26382. if (arguments.length == 2) {
  26383. if (arguments[1].value.length < 2) {
  26384. throwArgumentDescriptor();
  26385. }
  26386. stops = arguments[1].value;
  26387. }
  26388. else if (arguments.length < 3) {
  26389. throwArgumentDescriptor();
  26390. }
  26391. else {
  26392. stops = Array.prototype.slice.call(arguments, 1);
  26393. }
  26394. switch (directionValue) {
  26395. case 'to bottom':
  26396. gradientDirectionSvg = 'x1="0%" y1="0%" x2="0%" y2="100%"';
  26397. break;
  26398. case 'to right':
  26399. gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="0%"';
  26400. break;
  26401. case 'to bottom right':
  26402. gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="100%"';
  26403. break;
  26404. case 'to top right':
  26405. gradientDirectionSvg = 'x1="0%" y1="100%" x2="100%" y2="0%"';
  26406. break;
  26407. case 'ellipse':
  26408. case 'ellipse at center':
  26409. gradientType = 'radial';
  26410. gradientDirectionSvg = 'cx="50%" cy="50%" r="75%"';
  26411. rectangleDimension = 'x="-50" y="-50" width="101" height="101"';
  26412. break;
  26413. default:
  26414. throw { type: 'Argument', message: 'svg-gradient direction must be \'to bottom\', \'to right\',' +
  26415. ' \'to bottom right\', \'to top right\' or \'ellipse at center\'' };
  26416. }
  26417. returner = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1 1\"><" + gradientType + "Gradient id=\"g\" " + gradientDirectionSvg + ">";
  26418. for (i = 0; i < stops.length; i += 1) {
  26419. if (stops[i] instanceof Expression) {
  26420. color = stops[i].value[0];
  26421. position = stops[i].value[1];
  26422. }
  26423. else {
  26424. color = stops[i];
  26425. position = undefined;
  26426. }
  26427. if (!(color instanceof Color) || (!((i === 0 || i + 1 === stops.length) && position === undefined) && !(position instanceof Dimension))) {
  26428. throwArgumentDescriptor();
  26429. }
  26430. positionValue = position ? position.toCSS(renderEnv) : i === 0 ? '0%' : '100%';
  26431. alpha = color.alpha;
  26432. returner += "<stop offset=\"" + positionValue + "\" stop-color=\"" + color.toRGB() + "\"" + (alpha < 1 ? " stop-opacity=\"" + alpha + "\"" : '') + "/>";
  26433. }
  26434. returner += "</" + gradientType + "Gradient><rect " + rectangleDimension + " fill=\"url(#g)\" /></svg>";
  26435. returner = encodeURIComponent(returner);
  26436. returner = "data:image/svg+xml," + returner;
  26437. return new URL(new Quoted("'" + returner + "'", returner, false, this.index, this.currentFileInfo), this.index, this.currentFileInfo);
  26438. } };
  26439. });
  26440. var isa = function (n, Type) { return (n instanceof Type) ? Keyword.True : Keyword.False; };
  26441. var isunit = function (n, unit) {
  26442. if (unit === undefined) {
  26443. throw { type: 'Argument', message: 'missing the required second argument to isunit.' };
  26444. }
  26445. unit = typeof unit.value === 'string' ? unit.value : unit;
  26446. if (typeof unit !== 'string') {
  26447. throw { type: 'Argument', message: 'Second argument to isunit should be a unit or a string.' };
  26448. }
  26449. return (n instanceof Dimension) && n.unit.is(unit) ? Keyword.True : Keyword.False;
  26450. };
  26451. var types = {
  26452. isruleset: function (n) {
  26453. return isa(n, DetachedRuleset);
  26454. },
  26455. iscolor: function (n) {
  26456. return isa(n, Color);
  26457. },
  26458. isnumber: function (n) {
  26459. return isa(n, Dimension);
  26460. },
  26461. isstring: function (n) {
  26462. return isa(n, Quoted);
  26463. },
  26464. iskeyword: function (n) {
  26465. return isa(n, Keyword);
  26466. },
  26467. isurl: function (n) {
  26468. return isa(n, URL);
  26469. },
  26470. ispixel: function (n) {
  26471. return isunit(n, 'px');
  26472. },
  26473. ispercentage: function (n) {
  26474. return isunit(n, '%');
  26475. },
  26476. isem: function (n) {
  26477. return isunit(n, 'em');
  26478. },
  26479. isunit: isunit,
  26480. unit: function (val, unit) {
  26481. if (!(val instanceof Dimension)) {
  26482. throw { type: 'Argument', message: "the first argument to unit must be a number" + (val instanceof Operation ? '. Have you forgotten parenthesis?' : '') };
  26483. }
  26484. if (unit) {
  26485. if (unit instanceof Keyword) {
  26486. unit = unit.value;
  26487. }
  26488. else {
  26489. unit = unit.toCSS();
  26490. }
  26491. }
  26492. else {
  26493. unit = '';
  26494. }
  26495. return new Dimension(val.value, unit);
  26496. },
  26497. 'get-unit': function (n) {
  26498. return new Anonymous(n.unit);
  26499. }
  26500. };
  26501. var Functions = (function (environment) {
  26502. var functions = { functionRegistry: functionRegistry, functionCaller: functionCaller };
  26503. // register functions
  26504. functionRegistry.addMultiple(boolean$1);
  26505. functionRegistry.add('default', defaultFunc.eval.bind(defaultFunc));
  26506. functionRegistry.addMultiple(color);
  26507. functionRegistry.addMultiple(colorBlend);
  26508. functionRegistry.addMultiple(dataUri(environment));
  26509. functionRegistry.addMultiple(list);
  26510. functionRegistry.addMultiple(mathFunctions);
  26511. functionRegistry.addMultiple(number$1);
  26512. functionRegistry.addMultiple(string);
  26513. functionRegistry.addMultiple(svg());
  26514. functionRegistry.addMultiple(types);
  26515. return functions;
  26516. });
  26517. var sourceMapOutput = (function (environment) {
  26518. var SourceMapOutput = /** @class */ (function () {
  26519. function SourceMapOutput(options) {
  26520. this._css = [];
  26521. this._rootNode = options.rootNode;
  26522. this._contentsMap = options.contentsMap;
  26523. this._contentsIgnoredCharsMap = options.contentsIgnoredCharsMap;
  26524. if (options.sourceMapFilename) {
  26525. this._sourceMapFilename = options.sourceMapFilename.replace(/\\/g, '/');
  26526. }
  26527. this._outputFilename = options.outputFilename;
  26528. this.sourceMapURL = options.sourceMapURL;
  26529. if (options.sourceMapBasepath) {
  26530. this._sourceMapBasepath = options.sourceMapBasepath.replace(/\\/g, '/');
  26531. }
  26532. if (options.sourceMapRootpath) {
  26533. this._sourceMapRootpath = options.sourceMapRootpath.replace(/\\/g, '/');
  26534. if (this._sourceMapRootpath.charAt(this._sourceMapRootpath.length - 1) !== '/') {
  26535. this._sourceMapRootpath += '/';
  26536. }
  26537. }
  26538. else {
  26539. this._sourceMapRootpath = '';
  26540. }
  26541. this._outputSourceFiles = options.outputSourceFiles;
  26542. this._sourceMapGeneratorConstructor = environment.getSourceMapGenerator();
  26543. this._lineNumber = 0;
  26544. this._column = 0;
  26545. }
  26546. SourceMapOutput.prototype.removeBasepath = function (path) {
  26547. if (this._sourceMapBasepath && path.indexOf(this._sourceMapBasepath) === 0) {
  26548. path = path.substring(this._sourceMapBasepath.length);
  26549. if (path.charAt(0) === '\\' || path.charAt(0) === '/') {
  26550. path = path.substring(1);
  26551. }
  26552. }
  26553. return path;
  26554. };
  26555. SourceMapOutput.prototype.normalizeFilename = function (filename) {
  26556. filename = filename.replace(/\\/g, '/');
  26557. filename = this.removeBasepath(filename);
  26558. return (this._sourceMapRootpath || '') + filename;
  26559. };
  26560. SourceMapOutput.prototype.add = function (chunk, fileInfo, index, mapLines) {
  26561. // ignore adding empty strings
  26562. if (!chunk) {
  26563. return;
  26564. }
  26565. var lines;
  26566. var sourceLines;
  26567. var columns;
  26568. var sourceColumns;
  26569. var i;
  26570. if (fileInfo && fileInfo.filename) {
  26571. var inputSource = this._contentsMap[fileInfo.filename];
  26572. // remove vars/banner added to the top of the file
  26573. if (this._contentsIgnoredCharsMap[fileInfo.filename]) {
  26574. // adjust the index
  26575. index -= this._contentsIgnoredCharsMap[fileInfo.filename];
  26576. if (index < 0) {
  26577. index = 0;
  26578. }
  26579. // adjust the source
  26580. inputSource = inputSource.slice(this._contentsIgnoredCharsMap[fileInfo.filename]);
  26581. }
  26582. /**
  26583. * ignore empty content, or failsafe
  26584. * if contents map is incorrect
  26585. */
  26586. if (inputSource === undefined) {
  26587. this._css.push(chunk);
  26588. return;
  26589. }
  26590. inputSource = inputSource.substring(0, index);
  26591. sourceLines = inputSource.split('\n');
  26592. sourceColumns = sourceLines[sourceLines.length - 1];
  26593. }
  26594. lines = chunk.split('\n');
  26595. columns = lines[lines.length - 1];
  26596. if (fileInfo && fileInfo.filename) {
  26597. if (!mapLines) {
  26598. this._sourceMapGenerator.addMapping({ generated: { line: this._lineNumber + 1, column: this._column },
  26599. original: { line: sourceLines.length, column: sourceColumns.length },
  26600. source: this.normalizeFilename(fileInfo.filename) });
  26601. }
  26602. else {
  26603. for (i = 0; i < lines.length; i++) {
  26604. this._sourceMapGenerator.addMapping({ generated: { line: this._lineNumber + i + 1, column: i === 0 ? this._column : 0 },
  26605. original: { line: sourceLines.length + i, column: i === 0 ? sourceColumns.length : 0 },
  26606. source: this.normalizeFilename(fileInfo.filename) });
  26607. }
  26608. }
  26609. }
  26610. if (lines.length === 1) {
  26611. this._column += columns.length;
  26612. }
  26613. else {
  26614. this._lineNumber += lines.length - 1;
  26615. this._column = columns.length;
  26616. }
  26617. this._css.push(chunk);
  26618. };
  26619. SourceMapOutput.prototype.isEmpty = function () {
  26620. return this._css.length === 0;
  26621. };
  26622. SourceMapOutput.prototype.toCSS = function (context) {
  26623. this._sourceMapGenerator = new this._sourceMapGeneratorConstructor({ file: this._outputFilename, sourceRoot: null });
  26624. if (this._outputSourceFiles) {
  26625. for (var filename in this._contentsMap) {
  26626. if (this._contentsMap.hasOwnProperty(filename)) {
  26627. var source = this._contentsMap[filename];
  26628. if (this._contentsIgnoredCharsMap[filename]) {
  26629. source = source.slice(this._contentsIgnoredCharsMap[filename]);
  26630. }
  26631. this._sourceMapGenerator.setSourceContent(this.normalizeFilename(filename), source);
  26632. }
  26633. }
  26634. }
  26635. this._rootNode.genCSS(context, this);
  26636. if (this._css.length > 0) {
  26637. var sourceMapURL = void 0;
  26638. var sourceMapContent = JSON.stringify(this._sourceMapGenerator.toJSON());
  26639. if (this.sourceMapURL) {
  26640. sourceMapURL = this.sourceMapURL;
  26641. }
  26642. else if (this._sourceMapFilename) {
  26643. sourceMapURL = this._sourceMapFilename;
  26644. }
  26645. this.sourceMapURL = sourceMapURL;
  26646. this.sourceMap = sourceMapContent;
  26647. }
  26648. return this._css.join('');
  26649. };
  26650. return SourceMapOutput;
  26651. }());
  26652. return SourceMapOutput;
  26653. });
  26654. var sourceMapBuilder = (function (SourceMapOutput, environment) {
  26655. var SourceMapBuilder = /** @class */ (function () {
  26656. function SourceMapBuilder(options) {
  26657. this.options = options;
  26658. }
  26659. SourceMapBuilder.prototype.toCSS = function (rootNode, options, imports) {
  26660. var sourceMapOutput = new SourceMapOutput({
  26661. contentsIgnoredCharsMap: imports.contentsIgnoredChars,
  26662. rootNode: rootNode,
  26663. contentsMap: imports.contents,
  26664. sourceMapFilename: this.options.sourceMapFilename,
  26665. sourceMapURL: this.options.sourceMapURL,
  26666. outputFilename: this.options.sourceMapOutputFilename,
  26667. sourceMapBasepath: this.options.sourceMapBasepath,
  26668. sourceMapRootpath: this.options.sourceMapRootpath,
  26669. outputSourceFiles: this.options.outputSourceFiles,
  26670. sourceMapGenerator: this.options.sourceMapGenerator,
  26671. sourceMapFileInline: this.options.sourceMapFileInline,
  26672. disableSourcemapAnnotation: this.options.disableSourcemapAnnotation
  26673. });
  26674. var css = sourceMapOutput.toCSS(options);
  26675. this.sourceMap = sourceMapOutput.sourceMap;
  26676. this.sourceMapURL = sourceMapOutput.sourceMapURL;
  26677. if (this.options.sourceMapInputFilename) {
  26678. this.sourceMapInputFilename = sourceMapOutput.normalizeFilename(this.options.sourceMapInputFilename);
  26679. }
  26680. if (this.options.sourceMapBasepath !== undefined && this.sourceMapURL !== undefined) {
  26681. this.sourceMapURL = sourceMapOutput.removeBasepath(this.sourceMapURL);
  26682. }
  26683. return css + this.getCSSAppendage();
  26684. };
  26685. SourceMapBuilder.prototype.getCSSAppendage = function () {
  26686. var sourceMapURL = this.sourceMapURL;
  26687. if (this.options.sourceMapFileInline) {
  26688. if (this.sourceMap === undefined) {
  26689. return '';
  26690. }
  26691. sourceMapURL = "data:application/json;base64," + environment.encodeBase64(this.sourceMap);
  26692. }
  26693. if (this.options.disableSourcemapAnnotation) {
  26694. return '';
  26695. }
  26696. if (sourceMapURL) {
  26697. return "/*# sourceMappingURL=" + sourceMapURL + " */";
  26698. }
  26699. return '';
  26700. };
  26701. SourceMapBuilder.prototype.getExternalSourceMap = function () {
  26702. return this.sourceMap;
  26703. };
  26704. SourceMapBuilder.prototype.setExternalSourceMap = function (sourceMap) {
  26705. this.sourceMap = sourceMap;
  26706. };
  26707. SourceMapBuilder.prototype.isInline = function () {
  26708. return this.options.sourceMapFileInline;
  26709. };
  26710. SourceMapBuilder.prototype.getSourceMapURL = function () {
  26711. return this.sourceMapURL;
  26712. };
  26713. SourceMapBuilder.prototype.getOutputFilename = function () {
  26714. return this.options.sourceMapOutputFilename;
  26715. };
  26716. SourceMapBuilder.prototype.getInputFilename = function () {
  26717. return this.sourceMapInputFilename;
  26718. };
  26719. return SourceMapBuilder;
  26720. }());
  26721. return SourceMapBuilder;
  26722. });
  26723. var transformTree = (function (root, options) {
  26724. if (options === void 0) { options = {}; }
  26725. var evaldRoot;
  26726. var variables = options.variables;
  26727. var evalEnv = new contexts.Eval(options);
  26728. //
  26729. // Allows setting variables with a hash, so:
  26730. //
  26731. // `{ color: new tree.Color('#f01') }` will become:
  26732. //
  26733. // new tree.Declaration('@color',
  26734. // new tree.Value([
  26735. // new tree.Expression([
  26736. // new tree.Color('#f01')
  26737. // ])
  26738. // ])
  26739. // )
  26740. //
  26741. if (typeof variables === 'object' && !Array.isArray(variables)) {
  26742. variables = Object.keys(variables).map(function (k) {
  26743. var value = variables[k];
  26744. if (!(value instanceof tree.Value)) {
  26745. if (!(value instanceof tree.Expression)) {
  26746. value = new tree.Expression([value]);
  26747. }
  26748. value = new tree.Value([value]);
  26749. }
  26750. return new tree.Declaration("@" + k, value, false, null, 0);
  26751. });
  26752. evalEnv.frames = [new tree.Ruleset(null, variables)];
  26753. }
  26754. var visitors$1 = [
  26755. new visitors.JoinSelectorVisitor(),
  26756. new visitors.MarkVisibleSelectorsVisitor(true),
  26757. new visitors.ExtendVisitor(),
  26758. new visitors.ToCSSVisitor({ compress: Boolean(options.compress) })
  26759. ];
  26760. var preEvalVisitors = [];
  26761. var v;
  26762. var visitorIterator;
  26763. /**
  26764. * first() / get() allows visitors to be added while visiting
  26765. *
  26766. * @todo Add scoping for visitors just like functions for @plugin; right now they're global
  26767. */
  26768. if (options.pluginManager) {
  26769. visitorIterator = options.pluginManager.visitor();
  26770. for (var i = 0; i < 2; i++) {
  26771. visitorIterator.first();
  26772. while ((v = visitorIterator.get())) {
  26773. if (v.isPreEvalVisitor) {
  26774. if (i === 0 || preEvalVisitors.indexOf(v) === -1) {
  26775. preEvalVisitors.push(v);
  26776. v.run(root);
  26777. }
  26778. }
  26779. else {
  26780. if (i === 0 || visitors$1.indexOf(v) === -1) {
  26781. if (v.isPreVisitor) {
  26782. visitors$1.unshift(v);
  26783. }
  26784. else {
  26785. visitors$1.push(v);
  26786. }
  26787. }
  26788. }
  26789. }
  26790. }
  26791. }
  26792. evaldRoot = root.eval(evalEnv);
  26793. for (var i = 0; i < visitors$1.length; i++) {
  26794. visitors$1[i].run(evaldRoot);
  26795. }
  26796. // Run any remaining visitors added after eval pass
  26797. if (options.pluginManager) {
  26798. visitorIterator.first();
  26799. while ((v = visitorIterator.get())) {
  26800. if (visitors$1.indexOf(v) === -1 && preEvalVisitors.indexOf(v) === -1) {
  26801. v.run(evaldRoot);
  26802. }
  26803. }
  26804. }
  26805. return evaldRoot;
  26806. });
  26807. var parseTree = (function (SourceMapBuilder) {
  26808. var ParseTree = /** @class */ (function () {
  26809. function ParseTree(root, imports) {
  26810. this.root = root;
  26811. this.imports = imports;
  26812. }
  26813. ParseTree.prototype.toCSS = function (options) {
  26814. var evaldRoot;
  26815. var result = {};
  26816. var sourceMapBuilder;
  26817. try {
  26818. evaldRoot = transformTree(this.root, options);
  26819. }
  26820. catch (e) {
  26821. throw new LessError(e, this.imports);
  26822. }
  26823. try {
  26824. var compress = Boolean(options.compress);
  26825. if (compress) {
  26826. logger.warn('The compress option has been deprecated. ' +
  26827. 'We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.');
  26828. }
  26829. var toCSSOptions = {
  26830. compress: compress,
  26831. dumpLineNumbers: options.dumpLineNumbers,
  26832. strictUnits: Boolean(options.strictUnits),
  26833. numPrecision: 8
  26834. };
  26835. if (options.sourceMap) {
  26836. sourceMapBuilder = new SourceMapBuilder(options.sourceMap);
  26837. result.css = sourceMapBuilder.toCSS(evaldRoot, toCSSOptions, this.imports);
  26838. }
  26839. else {
  26840. result.css = evaldRoot.toCSS(toCSSOptions);
  26841. }
  26842. }
  26843. catch (e) {
  26844. throw new LessError(e, this.imports);
  26845. }
  26846. if (options.pluginManager) {
  26847. var postProcessors = options.pluginManager.getPostProcessors();
  26848. for (var i = 0; i < postProcessors.length; i++) {
  26849. result.css = postProcessors[i].process(result.css, { sourceMap: sourceMapBuilder, options: options, imports: this.imports });
  26850. }
  26851. }
  26852. if (options.sourceMap) {
  26853. result.map = sourceMapBuilder.getExternalSourceMap();
  26854. }
  26855. result.imports = [];
  26856. for (var file in this.imports.files) {
  26857. if (this.imports.files.hasOwnProperty(file) && file !== this.imports.rootFilename) {
  26858. result.imports.push(file);
  26859. }
  26860. }
  26861. return result;
  26862. };
  26863. return ParseTree;
  26864. }());
  26865. return ParseTree;
  26866. });
  26867. function importManager (environment) {
  26868. // FileInfo = {
  26869. // 'rewriteUrls' - option - whether to adjust URL's to be relative
  26870. // 'filename' - full resolved filename of current file
  26871. // 'rootpath' - path to append to normal URLs for this node
  26872. // 'currentDirectory' - path to the current file, absolute
  26873. // 'rootFilename' - filename of the base file
  26874. // 'entryPath' - absolute path to the entry file
  26875. // 'reference' - whether the file should not be output and only output parts that are referenced
  26876. var ImportManager = /** @class */ (function () {
  26877. function ImportManager(less, context, rootFileInfo) {
  26878. this.less = less;
  26879. this.rootFilename = rootFileInfo.filename;
  26880. this.paths = context.paths || []; // Search paths, when importing
  26881. this.contents = {}; // map - filename to contents of all the files
  26882. this.contentsIgnoredChars = {}; // map - filename to lines at the beginning of each file to ignore
  26883. this.mime = context.mime;
  26884. this.error = null;
  26885. this.context = context;
  26886. // Deprecated? Unused outside of here, could be useful.
  26887. this.queue = []; // Files which haven't been imported yet
  26888. this.files = {}; // Holds the imported parse trees.
  26889. }
  26890. /**
  26891. * Add an import to be imported
  26892. * @param path - the raw path
  26893. * @param tryAppendExtension - whether to try appending a file extension (.less or .js if the path has no extension)
  26894. * @param currentFileInfo - the current file info (used for instance to work out relative paths)
  26895. * @param importOptions - import options
  26896. * @param callback - callback for when it is imported
  26897. */
  26898. ImportManager.prototype.push = function (path, tryAppendExtension, currentFileInfo, importOptions, callback) {
  26899. var importManager = this, pluginLoader = this.context.pluginManager.Loader;
  26900. this.queue.push(path);
  26901. var fileParsedFunc = function (e, root, fullPath) {
  26902. importManager.queue.splice(importManager.queue.indexOf(path), 1); // Remove the path from the queue
  26903. var importedEqualsRoot = fullPath === importManager.rootFilename;
  26904. if (importOptions.optional && e) {
  26905. callback(null, { rules: [] }, false, null);
  26906. logger.info("The file " + fullPath + " was skipped because it was not found and the import was marked optional.");
  26907. }
  26908. else {
  26909. // Inline imports aren't cached here.
  26910. // If we start to cache them, please make sure they won't conflict with non-inline imports of the
  26911. // same name as they used to do before this comment and the condition below have been added.
  26912. if (!importManager.files[fullPath] && !importOptions.inline) {
  26913. importManager.files[fullPath] = { root: root, options: importOptions };
  26914. }
  26915. if (e && !importManager.error) {
  26916. importManager.error = e;
  26917. }
  26918. callback(e, root, importedEqualsRoot, fullPath);
  26919. }
  26920. };
  26921. var newFileInfo = {
  26922. rewriteUrls: this.context.rewriteUrls,
  26923. entryPath: currentFileInfo.entryPath,
  26924. rootpath: currentFileInfo.rootpath,
  26925. rootFilename: currentFileInfo.rootFilename
  26926. };
  26927. var fileManager = environment.getFileManager(path, currentFileInfo.currentDirectory, this.context, environment);
  26928. if (!fileManager) {
  26929. fileParsedFunc({ message: "Could not find a file-manager for " + path });
  26930. return;
  26931. }
  26932. var loadFileCallback = function (loadedFile) {
  26933. var plugin;
  26934. var resolvedFilename = loadedFile.filename;
  26935. var contents = loadedFile.contents.replace(/^\uFEFF/, '');
  26936. // Pass on an updated rootpath if path of imported file is relative and file
  26937. // is in a (sub|sup) directory
  26938. //
  26939. // Examples:
  26940. // - If path of imported file is 'module/nav/nav.less' and rootpath is 'less/',
  26941. // then rootpath should become 'less/module/nav/'
  26942. // - If path of imported file is '../mixins.less' and rootpath is 'less/',
  26943. // then rootpath should become 'less/../'
  26944. newFileInfo.currentDirectory = fileManager.getPath(resolvedFilename);
  26945. if (newFileInfo.rewriteUrls) {
  26946. newFileInfo.rootpath = fileManager.join((importManager.context.rootpath || ''), fileManager.pathDiff(newFileInfo.currentDirectory, newFileInfo.entryPath));
  26947. if (!fileManager.isPathAbsolute(newFileInfo.rootpath) && fileManager.alwaysMakePathsAbsolute()) {
  26948. newFileInfo.rootpath = fileManager.join(newFileInfo.entryPath, newFileInfo.rootpath);
  26949. }
  26950. }
  26951. newFileInfo.filename = resolvedFilename;
  26952. var newEnv = new contexts.Parse(importManager.context);
  26953. newEnv.processImports = false;
  26954. importManager.contents[resolvedFilename] = contents;
  26955. if (currentFileInfo.reference || importOptions.reference) {
  26956. newFileInfo.reference = true;
  26957. }
  26958. if (importOptions.isPlugin) {
  26959. plugin = pluginLoader.evalPlugin(contents, newEnv, importManager, importOptions.pluginArgs, newFileInfo);
  26960. if (plugin instanceof LessError) {
  26961. fileParsedFunc(plugin, null, resolvedFilename);
  26962. }
  26963. else {
  26964. fileParsedFunc(null, plugin, resolvedFilename);
  26965. }
  26966. }
  26967. else if (importOptions.inline) {
  26968. fileParsedFunc(null, contents, resolvedFilename);
  26969. }
  26970. else {
  26971. // import (multiple) parse trees apparently get altered and can't be cached.
  26972. // TODO: investigate why this is
  26973. if (importManager.files[resolvedFilename]
  26974. && !importManager.files[resolvedFilename].options.multiple
  26975. && !importOptions.multiple) {
  26976. fileParsedFunc(null, importManager.files[resolvedFilename].root, resolvedFilename);
  26977. }
  26978. else {
  26979. new Parser(newEnv, importManager, newFileInfo).parse(contents, function (e, root) {
  26980. fileParsedFunc(e, root, resolvedFilename);
  26981. });
  26982. }
  26983. }
  26984. };
  26985. var loadedFile;
  26986. var promise;
  26987. var context = clone(this.context);
  26988. if (tryAppendExtension) {
  26989. context.ext = importOptions.isPlugin ? '.js' : '.less';
  26990. }
  26991. if (importOptions.isPlugin) {
  26992. context.mime = 'application/javascript';
  26993. if (context.syncImport) {
  26994. loadedFile = pluginLoader.loadPluginSync(path, currentFileInfo.currentDirectory, context, environment, fileManager);
  26995. }
  26996. else {
  26997. promise = pluginLoader.loadPlugin(path, currentFileInfo.currentDirectory, context, environment, fileManager);
  26998. }
  26999. }
  27000. else {
  27001. if (context.syncImport) {
  27002. loadedFile = fileManager.loadFileSync(path, currentFileInfo.currentDirectory, context, environment);
  27003. }
  27004. else {
  27005. promise = fileManager.loadFile(path, currentFileInfo.currentDirectory, context, environment, function (err, loadedFile) {
  27006. if (err) {
  27007. fileParsedFunc(err);
  27008. }
  27009. else {
  27010. loadFileCallback(loadedFile);
  27011. }
  27012. });
  27013. }
  27014. }
  27015. if (loadedFile) {
  27016. if (!loadedFile.filename) {
  27017. fileParsedFunc(loadedFile);
  27018. }
  27019. else {
  27020. loadFileCallback(loadedFile);
  27021. }
  27022. }
  27023. else if (promise) {
  27024. promise.then(loadFileCallback, fileParsedFunc);
  27025. }
  27026. };
  27027. return ImportManager;
  27028. }());
  27029. return ImportManager;
  27030. }
  27031. var Render = (function (environment, ParseTree, ImportManager) {
  27032. var render = function (input, options, callback) {
  27033. if (typeof options === 'function') {
  27034. callback = options;
  27035. options = copyOptions(this.options, {});
  27036. }
  27037. else {
  27038. options = copyOptions(this.options, options || {});
  27039. }
  27040. if (!callback) {
  27041. var self_1 = this;
  27042. return new Promise(function (resolve, reject) {
  27043. render.call(self_1, input, options, function (err, output) {
  27044. if (err) {
  27045. reject(err);
  27046. }
  27047. else {
  27048. resolve(output);
  27049. }
  27050. });
  27051. });
  27052. }
  27053. else {
  27054. this.parse(input, options, function (err, root, imports, options) {
  27055. if (err) {
  27056. return callback(err);
  27057. }
  27058. var result;
  27059. try {
  27060. var parseTree = new ParseTree(root, imports);
  27061. result = parseTree.toCSS(options);
  27062. }
  27063. catch (err) {
  27064. return callback(err);
  27065. }
  27066. callback(null, result);
  27067. });
  27068. }
  27069. };
  27070. return render;
  27071. });
  27072. /**
  27073. * Plugin Manager
  27074. */
  27075. var PluginManager = /** @class */ (function () {
  27076. function PluginManager(less) {
  27077. this.less = less;
  27078. this.visitors = [];
  27079. this.preProcessors = [];
  27080. this.postProcessors = [];
  27081. this.installedPlugins = [];
  27082. this.fileManagers = [];
  27083. this.iterator = -1;
  27084. this.pluginCache = {};
  27085. this.Loader = new less.PluginLoader(less);
  27086. }
  27087. /**
  27088. * Adds all the plugins in the array
  27089. * @param {Array} plugins
  27090. */
  27091. PluginManager.prototype.addPlugins = function (plugins) {
  27092. if (plugins) {
  27093. for (var i = 0; i < plugins.length; i++) {
  27094. this.addPlugin(plugins[i]);
  27095. }
  27096. }
  27097. };
  27098. /**
  27099. *
  27100. * @param plugin
  27101. * @param {String} filename
  27102. */
  27103. PluginManager.prototype.addPlugin = function (plugin, filename, functionRegistry) {
  27104. this.installedPlugins.push(plugin);
  27105. if (filename) {
  27106. this.pluginCache[filename] = plugin;
  27107. }
  27108. if (plugin.install) {
  27109. plugin.install(this.less, this, functionRegistry || this.less.functions.functionRegistry);
  27110. }
  27111. };
  27112. /**
  27113. *
  27114. * @param filename
  27115. */
  27116. PluginManager.prototype.get = function (filename) {
  27117. return this.pluginCache[filename];
  27118. };
  27119. /**
  27120. * Adds a visitor. The visitor object has options on itself to determine
  27121. * when it should run.
  27122. * @param visitor
  27123. */
  27124. PluginManager.prototype.addVisitor = function (visitor) {
  27125. this.visitors.push(visitor);
  27126. };
  27127. /**
  27128. * Adds a pre processor object
  27129. * @param {object} preProcessor
  27130. * @param {number} priority - guidelines 1 = before import, 1000 = import, 2000 = after import
  27131. */
  27132. PluginManager.prototype.addPreProcessor = function (preProcessor, priority) {
  27133. var indexToInsertAt;
  27134. for (indexToInsertAt = 0; indexToInsertAt < this.preProcessors.length; indexToInsertAt++) {
  27135. if (this.preProcessors[indexToInsertAt].priority >= priority) {
  27136. break;
  27137. }
  27138. }
  27139. this.preProcessors.splice(indexToInsertAt, 0, { preProcessor: preProcessor, priority: priority });
  27140. };
  27141. /**
  27142. * Adds a post processor object
  27143. * @param {object} postProcessor
  27144. * @param {number} priority - guidelines 1 = before compression, 1000 = compression, 2000 = after compression
  27145. */
  27146. PluginManager.prototype.addPostProcessor = function (postProcessor, priority) {
  27147. var indexToInsertAt;
  27148. for (indexToInsertAt = 0; indexToInsertAt < this.postProcessors.length; indexToInsertAt++) {
  27149. if (this.postProcessors[indexToInsertAt].priority >= priority) {
  27150. break;
  27151. }
  27152. }
  27153. this.postProcessors.splice(indexToInsertAt, 0, { postProcessor: postProcessor, priority: priority });
  27154. };
  27155. /**
  27156. *
  27157. * @param manager
  27158. */
  27159. PluginManager.prototype.addFileManager = function (manager) {
  27160. this.fileManagers.push(manager);
  27161. };
  27162. /**
  27163. *
  27164. * @returns {Array}
  27165. * @private
  27166. */
  27167. PluginManager.prototype.getPreProcessors = function () {
  27168. var preProcessors = [];
  27169. for (var i = 0; i < this.preProcessors.length; i++) {
  27170. preProcessors.push(this.preProcessors[i].preProcessor);
  27171. }
  27172. return preProcessors;
  27173. };
  27174. /**
  27175. *
  27176. * @returns {Array}
  27177. * @private
  27178. */
  27179. PluginManager.prototype.getPostProcessors = function () {
  27180. var postProcessors = [];
  27181. for (var i = 0; i < this.postProcessors.length; i++) {
  27182. postProcessors.push(this.postProcessors[i].postProcessor);
  27183. }
  27184. return postProcessors;
  27185. };
  27186. /**
  27187. *
  27188. * @returns {Array}
  27189. * @private
  27190. */
  27191. PluginManager.prototype.getVisitors = function () {
  27192. return this.visitors;
  27193. };
  27194. PluginManager.prototype.visitor = function () {
  27195. var self = this;
  27196. return {
  27197. first: function () {
  27198. self.iterator = -1;
  27199. return self.visitors[self.iterator];
  27200. },
  27201. get: function () {
  27202. self.iterator += 1;
  27203. return self.visitors[self.iterator];
  27204. }
  27205. };
  27206. };
  27207. /**
  27208. *
  27209. * @returns {Array}
  27210. * @private
  27211. */
  27212. PluginManager.prototype.getFileManagers = function () {
  27213. return this.fileManagers;
  27214. };
  27215. return PluginManager;
  27216. }());
  27217. var pm;
  27218. function PluginManagerFactory(less, newFactory) {
  27219. if (newFactory || !pm) {
  27220. pm = new PluginManager(less);
  27221. }
  27222. return pm;
  27223. }
  27224. var Parse = (function (environment, ParseTree, ImportManager) {
  27225. var parse = function (input, options, callback) {
  27226. if (typeof options === 'function') {
  27227. callback = options;
  27228. options = copyOptions(this.options, {});
  27229. }
  27230. else {
  27231. options = copyOptions(this.options, options || {});
  27232. }
  27233. if (!callback) {
  27234. var self_1 = this;
  27235. return new Promise(function (resolve, reject) {
  27236. parse.call(self_1, input, options, function (err, output) {
  27237. if (err) {
  27238. reject(err);
  27239. }
  27240. else {
  27241. resolve(output);
  27242. }
  27243. });
  27244. });
  27245. }
  27246. else {
  27247. var context_1;
  27248. var rootFileInfo = void 0;
  27249. var pluginManager_1 = new PluginManagerFactory(this, !options.reUsePluginManager);
  27250. options.pluginManager = pluginManager_1;
  27251. context_1 = new contexts.Parse(options);
  27252. if (options.rootFileInfo) {
  27253. rootFileInfo = options.rootFileInfo;
  27254. }
  27255. else {
  27256. var filename = options.filename || 'input';
  27257. var entryPath = filename.replace(/[^\/\\]*$/, '');
  27258. rootFileInfo = {
  27259. filename: filename,
  27260. rewriteUrls: context_1.rewriteUrls,
  27261. rootpath: context_1.rootpath || '',
  27262. currentDirectory: entryPath,
  27263. entryPath: entryPath,
  27264. rootFilename: filename
  27265. };
  27266. // add in a missing trailing slash
  27267. if (rootFileInfo.rootpath && rootFileInfo.rootpath.slice(-1) !== '/') {
  27268. rootFileInfo.rootpath += '/';
  27269. }
  27270. }
  27271. var imports_1 = new ImportManager(this, context_1, rootFileInfo);
  27272. this.importManager = imports_1;
  27273. // TODO: allow the plugins to be just a list of paths or names
  27274. // Do an async plugin queue like lessc
  27275. if (options.plugins) {
  27276. options.plugins.forEach(function (plugin) {
  27277. var evalResult;
  27278. var contents;
  27279. if (plugin.fileContent) {
  27280. contents = plugin.fileContent.replace(/^\uFEFF/, '');
  27281. evalResult = pluginManager_1.Loader.evalPlugin(contents, context_1, imports_1, plugin.options, plugin.filename);
  27282. if (evalResult instanceof LessError) {
  27283. return callback(evalResult);
  27284. }
  27285. }
  27286. else {
  27287. pluginManager_1.addPlugin(plugin);
  27288. }
  27289. });
  27290. }
  27291. new Parser(context_1, imports_1, rootFileInfo)
  27292. .parse(input, function (e, root) {
  27293. if (e) {
  27294. return callback(e);
  27295. }
  27296. callback(null, root, imports_1, options);
  27297. }, options);
  27298. }
  27299. };
  27300. return parse;
  27301. });
  27302. var lessRoot = (function (environment$1, fileManagers) {
  27303. /**
  27304. * @todo
  27305. * This original code could be improved quite a bit.
  27306. * Many classes / modules currently add side-effects / mutations to passed in objects,
  27307. * which makes it hard to refactor and reason about.
  27308. */
  27309. environment$1 = new environment(environment$1, fileManagers);
  27310. var SourceMapOutput = sourceMapOutput(environment$1);
  27311. var SourceMapBuilder = sourceMapBuilder(SourceMapOutput, environment$1);
  27312. var ParseTree = parseTree(SourceMapBuilder);
  27313. var ImportManager = importManager(environment$1);
  27314. var render = Render(environment$1, ParseTree);
  27315. var parse = Parse(environment$1, ParseTree, ImportManager);
  27316. var functions = Functions(environment$1);
  27317. /**
  27318. * @todo
  27319. * This root properties / methods need to be organized.
  27320. * It's not clear what should / must be public and why.
  27321. */
  27322. var initial = {
  27323. version: [3, 13, 1],
  27324. data: data,
  27325. tree: tree,
  27326. Environment: environment,
  27327. AbstractFileManager: AbstractFileManager,
  27328. AbstractPluginLoader: AbstractPluginLoader,
  27329. environment: environment$1,
  27330. visitors: visitors,
  27331. Parser: Parser,
  27332. functions: functions,
  27333. contexts: contexts,
  27334. SourceMapOutput: SourceMapOutput,
  27335. SourceMapBuilder: SourceMapBuilder,
  27336. ParseTree: ParseTree,
  27337. ImportManager: ImportManager,
  27338. render: render,
  27339. parse: parse,
  27340. LessError: LessError,
  27341. transformTree: transformTree,
  27342. utils: utils,
  27343. PluginManager: PluginManagerFactory,
  27344. logger: logger
  27345. };
  27346. // Create a public API
  27347. var ctor = function (t) { return function () {
  27348. var args = [];
  27349. for (var _i = 0; _i < arguments.length; _i++) {
  27350. args[_i] = arguments[_i];
  27351. }
  27352. return new (t.bind.apply(t, __spreadArrays([void 0], args)))();
  27353. }; };
  27354. var t;
  27355. var api = Object.create(initial);
  27356. for (var n in initial.tree) {
  27357. /* eslint guard-for-in: 0 */
  27358. t = initial.tree[n];
  27359. if (typeof t === 'function') {
  27360. api[n.toLowerCase()] = ctor(t);
  27361. }
  27362. else {
  27363. api[n] = Object.create(null);
  27364. for (var o in t) {
  27365. /* eslint guard-for-in: 0 */
  27366. api[n][o.toLowerCase()] = ctor(t[o]);
  27367. }
  27368. }
  27369. }
  27370. /**
  27371. * Some of the functions assume a `this` context of the API object,
  27372. * which causes it to fail when wrapped for ES6 imports.
  27373. *
  27374. * An assumed `this` should be removed in the future.
  27375. */
  27376. initial.parse = initial.parse.bind(api);
  27377. initial.render = initial.render.bind(api);
  27378. return api;
  27379. });
  27380. /* global window, XMLHttpRequest */
  27381. var options;
  27382. var logger$1;
  27383. var fileCache = {};
  27384. // TODOS - move log somewhere. pathDiff and doing something similar in node. use pathDiff in the other browser file for the initial load
  27385. var FileManager = /** @class */ (function (_super) {
  27386. __extends(FileManager, _super);
  27387. function FileManager() {
  27388. return _super !== null && _super.apply(this, arguments) || this;
  27389. }
  27390. FileManager.prototype.alwaysMakePathsAbsolute = function () {
  27391. return true;
  27392. };
  27393. FileManager.prototype.join = function (basePath, laterPath) {
  27394. if (!basePath) {
  27395. return laterPath;
  27396. }
  27397. return this.extractUrlParts(laterPath, basePath).path;
  27398. };
  27399. FileManager.prototype.doXHR = function (url, type, callback, errback) {
  27400. var xhr = new XMLHttpRequest();
  27401. var async = options.isFileProtocol ? options.fileAsync : true;
  27402. if (typeof xhr.overrideMimeType === 'function') {
  27403. xhr.overrideMimeType('text/css');
  27404. }
  27405. logger$1.debug("XHR: Getting '" + url + "'");
  27406. xhr.open('GET', url, async);
  27407. xhr.setRequestHeader('Accept', type || 'text/x-less, text/css; q=0.9, */*; q=0.5');
  27408. xhr.send(null);
  27409. function handleResponse(xhr, callback, errback) {
  27410. if (xhr.status >= 200 && xhr.status < 300) {
  27411. callback(xhr.responseText, xhr.getResponseHeader('Last-Modified'));
  27412. }
  27413. else if (typeof errback === 'function') {
  27414. errback(xhr.status, url);
  27415. }
  27416. }
  27417. if (options.isFileProtocol && !options.fileAsync) {
  27418. if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 300)) {
  27419. callback(xhr.responseText);
  27420. }
  27421. else {
  27422. errback(xhr.status, url);
  27423. }
  27424. }
  27425. else if (async) {
  27426. xhr.onreadystatechange = function () {
  27427. if (xhr.readyState == 4) {
  27428. handleResponse(xhr, callback, errback);
  27429. }
  27430. };
  27431. }
  27432. else {
  27433. handleResponse(xhr, callback, errback);
  27434. }
  27435. };
  27436. FileManager.prototype.supports = function () {
  27437. return true;
  27438. };
  27439. FileManager.prototype.clearFileCache = function () {
  27440. fileCache = {};
  27441. };
  27442. FileManager.prototype.loadFile = function (filename, currentDirectory, options, environment) {
  27443. // TODO: Add prefix support like less-node?
  27444. // What about multiple paths?
  27445. if (currentDirectory && !this.isPathAbsolute(filename)) {
  27446. filename = currentDirectory + filename;
  27447. }
  27448. filename = options.ext ? this.tryAppendExtension(filename, options.ext) : filename;
  27449. options = options || {};
  27450. // sheet may be set to the stylesheet for the initial load or a collection of properties including
  27451. // some context variables for imports
  27452. var hrefParts = this.extractUrlParts(filename, window.location.href);
  27453. var href = hrefParts.url;
  27454. var self = this;
  27455. return new Promise(function (resolve, reject) {
  27456. if (options.useFileCache && fileCache[href]) {
  27457. try {
  27458. var lessText = fileCache[href];
  27459. return resolve({ contents: lessText, filename: href, webInfo: { lastModified: new Date() } });
  27460. }
  27461. catch (e) {
  27462. return reject({ filename: href, message: "Error loading file " + href + " error was " + e.message });
  27463. }
  27464. }
  27465. self.doXHR(href, options.mime, function doXHRCallback(data, lastModified) {
  27466. // per file cache
  27467. fileCache[href] = data;
  27468. // Use remote copy (re-parse)
  27469. resolve({ contents: data, filename: href, webInfo: { lastModified: lastModified } });
  27470. }, function doXHRError(status, url) {
  27471. reject({ type: 'File', message: "'" + url + "' wasn't found (" + status + ")", href: href });
  27472. });
  27473. });
  27474. };
  27475. return FileManager;
  27476. }(AbstractFileManager));
  27477. var FM = (function (opts, log) {
  27478. options = opts;
  27479. logger$1 = log;
  27480. return FileManager;
  27481. });
  27482. // TODO: Add tests for browser @plugin
  27483. /**
  27484. * Browser Plugin Loader
  27485. */
  27486. var PluginLoader = /** @class */ (function (_super) {
  27487. __extends(PluginLoader, _super);
  27488. function PluginLoader(less) {
  27489. var _this = _super.call(this) || this;
  27490. _this.less = less;
  27491. return _this;
  27492. // Should we shim this.require for browser? Probably not?
  27493. }
  27494. PluginLoader.prototype.loadPlugin = function (filename, basePath, context, environment, fileManager) {
  27495. return new Promise(function (fulfill, reject) {
  27496. fileManager.loadFile(filename, basePath, context, environment)
  27497. .then(fulfill).catch(reject);
  27498. });
  27499. };
  27500. return PluginLoader;
  27501. }(AbstractPluginLoader));
  27502. var LogListener = (function (less, options) {
  27503. var logLevel_debug = 4;
  27504. var logLevel_info = 3;
  27505. var logLevel_warn = 2;
  27506. var logLevel_error = 1;
  27507. // The amount of logging in the javascript console.
  27508. // 3 - Debug, information and errors
  27509. // 2 - Information and errors
  27510. // 1 - Errors
  27511. // 0 - None
  27512. // Defaults to 2
  27513. options.logLevel = typeof options.logLevel !== 'undefined' ? options.logLevel : (options.env === 'development' ? logLevel_info : logLevel_error);
  27514. if (!options.loggers) {
  27515. options.loggers = [{
  27516. debug: function (msg) {
  27517. if (options.logLevel >= logLevel_debug) {
  27518. console.log(msg);
  27519. }
  27520. },
  27521. info: function (msg) {
  27522. if (options.logLevel >= logLevel_info) {
  27523. console.log(msg);
  27524. }
  27525. },
  27526. warn: function (msg) {
  27527. if (options.logLevel >= logLevel_warn) {
  27528. console.warn(msg);
  27529. }
  27530. },
  27531. error: function (msg) {
  27532. if (options.logLevel >= logLevel_error) {
  27533. console.error(msg);
  27534. }
  27535. }
  27536. }];
  27537. }
  27538. for (var i = 0; i < options.loggers.length; i++) {
  27539. less.logger.addListener(options.loggers[i]);
  27540. }
  27541. });
  27542. var ErrorReporting = (function (window, less, options) {
  27543. function errorHTML(e, rootHref) {
  27544. var id = "less-error-message:" + extractId(rootHref || '');
  27545. var template = '<li><label>{line}</label><pre class="{class}">{content}</pre></li>';
  27546. var elem = window.document.createElement('div');
  27547. var timer;
  27548. var content;
  27549. var errors = [];
  27550. var filename = e.filename || rootHref;
  27551. var filenameNoPath = filename.match(/([^\/]+(\?.*)?)$/)[1];
  27552. elem.id = id;
  27553. elem.className = 'less-error-message';
  27554. content = "<h3>" + (e.type || 'Syntax') + "Error: " + (e.message || 'There is an error in your .less file') +
  27555. ("</h3><p>in <a href=\"" + filename + "\">" + filenameNoPath + "</a> ");
  27556. var errorline = function (e, i, classname) {
  27557. if (e.extract[i] !== undefined) {
  27558. errors.push(template.replace(/\{line\}/, (parseInt(e.line, 10) || 0) + (i - 1))
  27559. .replace(/\{class\}/, classname)
  27560. .replace(/\{content\}/, e.extract[i]));
  27561. }
  27562. };
  27563. if (e.line) {
  27564. errorline(e, 0, '');
  27565. errorline(e, 1, 'line');
  27566. errorline(e, 2, '');
  27567. content += "on line " + e.line + ", column " + (e.column + 1) + ":</p><ul>" + errors.join('') + "</ul>";
  27568. }
  27569. if (e.stack && (e.extract || options.logLevel >= 4)) {
  27570. content += "<br/>Stack Trace</br />" + e.stack.split('\n').slice(1).join('<br/>');
  27571. }
  27572. elem.innerHTML = content;
  27573. // CSS for error messages
  27574. browser.createCSS(window.document, [
  27575. '.less-error-message ul, .less-error-message li {',
  27576. 'list-style-type: none;',
  27577. 'margin-right: 15px;',
  27578. 'padding: 4px 0;',
  27579. 'margin: 0;',
  27580. '}',
  27581. '.less-error-message label {',
  27582. 'font-size: 12px;',
  27583. 'margin-right: 15px;',
  27584. 'padding: 4px 0;',
  27585. 'color: #cc7777;',
  27586. '}',
  27587. '.less-error-message pre {',
  27588. 'color: #dd6666;',
  27589. 'padding: 4px 0;',
  27590. 'margin: 0;',
  27591. 'display: inline-block;',
  27592. '}',
  27593. '.less-error-message pre.line {',
  27594. 'color: #ff0000;',
  27595. '}',
  27596. '.less-error-message h3 {',
  27597. 'font-size: 20px;',
  27598. 'font-weight: bold;',
  27599. 'padding: 15px 0 5px 0;',
  27600. 'margin: 0;',
  27601. '}',
  27602. '.less-error-message a {',
  27603. 'color: #10a',
  27604. '}',
  27605. '.less-error-message .error {',
  27606. 'color: red;',
  27607. 'font-weight: bold;',
  27608. 'padding-bottom: 2px;',
  27609. 'border-bottom: 1px dashed red;',
  27610. '}'
  27611. ].join('\n'), { title: 'error-message' });
  27612. elem.style.cssText = [
  27613. 'font-family: Arial, sans-serif',
  27614. 'border: 1px solid #e00',
  27615. 'background-color: #eee',
  27616. 'border-radius: 5px',
  27617. '-webkit-border-radius: 5px',
  27618. '-moz-border-radius: 5px',
  27619. 'color: #e00',
  27620. 'padding: 15px',
  27621. 'margin-bottom: 15px'
  27622. ].join(';');
  27623. if (options.env === 'development') {
  27624. timer = setInterval(function () {
  27625. var document = window.document;
  27626. var body = document.body;
  27627. if (body) {
  27628. if (document.getElementById(id)) {
  27629. body.replaceChild(elem, document.getElementById(id));
  27630. }
  27631. else {
  27632. body.insertBefore(elem, body.firstChild);
  27633. }
  27634. clearInterval(timer);
  27635. }
  27636. }, 10);
  27637. }
  27638. }
  27639. function removeErrorHTML(path) {
  27640. var node = window.document.getElementById("less-error-message:" + extractId(path));
  27641. if (node) {
  27642. node.parentNode.removeChild(node);
  27643. }
  27644. }
  27645. function removeError(path) {
  27646. if (!options.errorReporting || options.errorReporting === 'html') {
  27647. removeErrorHTML(path);
  27648. }
  27649. else if (options.errorReporting === 'console') ;
  27650. else if (typeof options.errorReporting === 'function') {
  27651. options.errorReporting('remove', path);
  27652. }
  27653. }
  27654. function errorConsole(e, rootHref) {
  27655. var template = '{line} {content}';
  27656. var filename = e.filename || rootHref;
  27657. var errors = [];
  27658. var content = (e.type || 'Syntax') + "Error: " + (e.message || 'There is an error in your .less file') + " in " + filename;
  27659. var errorline = function (e, i, classname) {
  27660. if (e.extract[i] !== undefined) {
  27661. errors.push(template.replace(/\{line\}/, (parseInt(e.line, 10) || 0) + (i - 1))
  27662. .replace(/\{class\}/, classname)
  27663. .replace(/\{content\}/, e.extract[i]));
  27664. }
  27665. };
  27666. if (e.line) {
  27667. errorline(e, 0, '');
  27668. errorline(e, 1, 'line');
  27669. errorline(e, 2, '');
  27670. content += " on line " + e.line + ", column " + (e.column + 1) + ":\n" + errors.join('\n');
  27671. }
  27672. if (e.stack && (e.extract || options.logLevel >= 4)) {
  27673. content += "\nStack Trace\n" + e.stack;
  27674. }
  27675. less.logger.error(content);
  27676. }
  27677. function error(e, rootHref) {
  27678. if (!options.errorReporting || options.errorReporting === 'html') {
  27679. errorHTML(e, rootHref);
  27680. }
  27681. else if (options.errorReporting === 'console') {
  27682. errorConsole(e, rootHref);
  27683. }
  27684. else if (typeof options.errorReporting === 'function') {
  27685. options.errorReporting('add', e, rootHref);
  27686. }
  27687. }
  27688. return {
  27689. add: error,
  27690. remove: removeError
  27691. };
  27692. });
  27693. // Cache system is a bit outdated and could do with work
  27694. var Cache = (function (window, options, logger) {
  27695. var cache = null;
  27696. if (options.env !== 'development') {
  27697. try {
  27698. cache = (typeof window.localStorage === 'undefined') ? null : window.localStorage;
  27699. }
  27700. catch (_) { }
  27701. }
  27702. return {
  27703. setCSS: function (path, lastModified, modifyVars, styles) {
  27704. if (cache) {
  27705. logger.info("saving " + path + " to cache.");
  27706. try {
  27707. cache.setItem(path, styles);
  27708. cache.setItem(path + ":timestamp", lastModified);
  27709. if (modifyVars) {
  27710. cache.setItem(path + ":vars", JSON.stringify(modifyVars));
  27711. }
  27712. }
  27713. catch (e) {
  27714. // TODO - could do with adding more robust error handling
  27715. logger.error("failed to save \"" + path + "\" to local storage for caching.");
  27716. }
  27717. }
  27718. },
  27719. getCSS: function (path, webInfo, modifyVars) {
  27720. var css = cache && cache.getItem(path);
  27721. var timestamp = cache && cache.getItem(path + ":timestamp");
  27722. var vars = cache && cache.getItem(path + ":vars");
  27723. modifyVars = modifyVars || {};
  27724. vars = vars || "{}"; // if not set, treat as the JSON representation of an empty object
  27725. if (timestamp && webInfo.lastModified &&
  27726. (new Date(webInfo.lastModified).valueOf() ===
  27727. new Date(timestamp).valueOf()) &&
  27728. JSON.stringify(modifyVars) === vars) {
  27729. // Use local copy
  27730. return css;
  27731. }
  27732. }
  27733. };
  27734. });
  27735. var ImageSize = (function () {
  27736. function imageSize() {
  27737. throw {
  27738. type: 'Runtime',
  27739. message: 'Image size functions are not supported in browser version of less'
  27740. };
  27741. }
  27742. var imageFunctions = {
  27743. 'image-size': function (filePathNode) {
  27744. imageSize();
  27745. return -1;
  27746. },
  27747. 'image-width': function (filePathNode) {
  27748. imageSize();
  27749. return -1;
  27750. },
  27751. 'image-height': function (filePathNode) {
  27752. imageSize();
  27753. return -1;
  27754. }
  27755. };
  27756. functionRegistry.addMultiple(imageFunctions);
  27757. });
  27758. //
  27759. var root = (function (window, options) {
  27760. var document = window.document;
  27761. var less = lessRoot();
  27762. less.options = options;
  27763. var environment = less.environment;
  27764. var FileManager = FM(options, less.logger);
  27765. var fileManager = new FileManager();
  27766. environment.addFileManager(fileManager);
  27767. less.FileManager = FileManager;
  27768. less.PluginLoader = PluginLoader;
  27769. LogListener(less, options);
  27770. var errors = ErrorReporting(window, less, options);
  27771. var cache = less.cache = options.cache || Cache(window, options, less.logger);
  27772. ImageSize(less.environment);
  27773. // Setup user functions - Deprecate?
  27774. if (options.functions) {
  27775. less.functions.functionRegistry.addMultiple(options.functions);
  27776. }
  27777. var typePattern = /^text\/(x-)?less$/;
  27778. function clone(obj) {
  27779. var cloned = {};
  27780. for (var prop in obj) {
  27781. if (obj.hasOwnProperty(prop)) {
  27782. cloned[prop] = obj[prop];
  27783. }
  27784. }
  27785. return cloned;
  27786. }
  27787. // only really needed for phantom
  27788. function bind(func, thisArg) {
  27789. var curryArgs = Array.prototype.slice.call(arguments, 2);
  27790. return function () {
  27791. var args = curryArgs.concat(Array.prototype.slice.call(arguments, 0));
  27792. return func.apply(thisArg, args);
  27793. };
  27794. }
  27795. function loadStyles(modifyVars) {
  27796. var styles = document.getElementsByTagName('style');
  27797. var style;
  27798. for (var i = 0; i < styles.length; i++) {
  27799. style = styles[i];
  27800. if (style.type.match(typePattern)) {
  27801. var instanceOptions = clone(options);
  27802. instanceOptions.modifyVars = modifyVars;
  27803. var lessText = style.innerHTML || '';
  27804. instanceOptions.filename = document.location.href.replace(/#.*$/, '');
  27805. /* jshint loopfunc:true */
  27806. // use closure to store current style
  27807. less.render(lessText, instanceOptions, bind(function (style, e, result) {
  27808. if (e) {
  27809. errors.add(e, 'inline');
  27810. }
  27811. else {
  27812. style.type = 'text/css';
  27813. if (style.styleSheet) {
  27814. style.styleSheet.cssText = result.css;
  27815. }
  27816. else {
  27817. style.innerHTML = result.css;
  27818. }
  27819. }
  27820. }, null, style));
  27821. }
  27822. }
  27823. }
  27824. function loadStyleSheet(sheet, callback, reload, remaining, modifyVars) {
  27825. var instanceOptions = clone(options);
  27826. addDataAttr(instanceOptions, sheet);
  27827. instanceOptions.mime = sheet.type;
  27828. if (modifyVars) {
  27829. instanceOptions.modifyVars = modifyVars;
  27830. }
  27831. function loadInitialFileCallback(loadedFile) {
  27832. var data = loadedFile.contents;
  27833. var path = loadedFile.filename;
  27834. var webInfo = loadedFile.webInfo;
  27835. var newFileInfo = {
  27836. currentDirectory: fileManager.getPath(path),
  27837. filename: path,
  27838. rootFilename: path,
  27839. rewriteUrls: instanceOptions.rewriteUrls
  27840. };
  27841. newFileInfo.entryPath = newFileInfo.currentDirectory;
  27842. newFileInfo.rootpath = instanceOptions.rootpath || newFileInfo.currentDirectory;
  27843. if (webInfo) {
  27844. webInfo.remaining = remaining;
  27845. var css = cache.getCSS(path, webInfo, instanceOptions.modifyVars);
  27846. if (!reload && css) {
  27847. webInfo.local = true;
  27848. callback(null, css, data, sheet, webInfo, path);
  27849. return;
  27850. }
  27851. }
  27852. // TODO add tests around how this behaves when reloading
  27853. errors.remove(path);
  27854. instanceOptions.rootFileInfo = newFileInfo;
  27855. less.render(data, instanceOptions, function (e, result) {
  27856. if (e) {
  27857. e.href = path;
  27858. callback(e);
  27859. }
  27860. else {
  27861. cache.setCSS(sheet.href, webInfo.lastModified, instanceOptions.modifyVars, result.css);
  27862. callback(null, result.css, data, sheet, webInfo, path);
  27863. }
  27864. });
  27865. }
  27866. fileManager.loadFile(sheet.href, null, instanceOptions, environment)
  27867. .then(function (loadedFile) {
  27868. loadInitialFileCallback(loadedFile);
  27869. }).catch(function (err) {
  27870. console.log(err);
  27871. callback(err);
  27872. });
  27873. }
  27874. function loadStyleSheets(callback, reload, modifyVars) {
  27875. for (var i = 0; i < less.sheets.length; i++) {
  27876. loadStyleSheet(less.sheets[i], callback, reload, less.sheets.length - (i + 1), modifyVars);
  27877. }
  27878. }
  27879. function initRunningMode() {
  27880. if (less.env === 'development') {
  27881. less.watchTimer = setInterval(function () {
  27882. if (less.watchMode) {
  27883. fileManager.clearFileCache();
  27884. loadStyleSheets(function (e, css, _, sheet, webInfo) {
  27885. if (e) {
  27886. errors.add(e, e.href || sheet.href);
  27887. }
  27888. else if (css) {
  27889. browser.createCSS(window.document, css, sheet);
  27890. }
  27891. });
  27892. }
  27893. }, options.poll);
  27894. }
  27895. }
  27896. //
  27897. // Watch mode
  27898. //
  27899. less.watch = function () {
  27900. if (!less.watchMode) {
  27901. less.env = 'development';
  27902. initRunningMode();
  27903. }
  27904. this.watchMode = true;
  27905. return true;
  27906. };
  27907. less.unwatch = function () { clearInterval(less.watchTimer); this.watchMode = false; return false; };
  27908. //
  27909. // Synchronously get all <link> tags with the 'rel' attribute set to
  27910. // "stylesheet/less".
  27911. //
  27912. less.registerStylesheetsImmediately = function () {
  27913. var links = document.getElementsByTagName('link');
  27914. less.sheets = [];
  27915. for (var i = 0; i < links.length; i++) {
  27916. if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) &&
  27917. (links[i].type.match(typePattern)))) {
  27918. less.sheets.push(links[i]);
  27919. }
  27920. }
  27921. };
  27922. //
  27923. // Asynchronously get all <link> tags with the 'rel' attribute set to
  27924. // "stylesheet/less", returning a Promise.
  27925. //
  27926. less.registerStylesheets = function () { return new Promise(function (resolve, reject) {
  27927. less.registerStylesheetsImmediately();
  27928. resolve();
  27929. }); };
  27930. //
  27931. // With this function, it's possible to alter variables and re-render
  27932. // CSS without reloading less-files
  27933. //
  27934. less.modifyVars = function (record) { return less.refresh(true, record, false); };
  27935. less.refresh = function (reload, modifyVars, clearFileCache) {
  27936. if ((reload || clearFileCache) && clearFileCache !== false) {
  27937. fileManager.clearFileCache();
  27938. }
  27939. return new Promise(function (resolve, reject) {
  27940. var startTime;
  27941. var endTime;
  27942. var totalMilliseconds;
  27943. var remainingSheets;
  27944. startTime = endTime = new Date();
  27945. // Set counter for remaining unprocessed sheets
  27946. remainingSheets = less.sheets.length;
  27947. if (remainingSheets === 0) {
  27948. endTime = new Date();
  27949. totalMilliseconds = endTime - startTime;
  27950. less.logger.info('Less has finished and no sheets were loaded.');
  27951. resolve({
  27952. startTime: startTime,
  27953. endTime: endTime,
  27954. totalMilliseconds: totalMilliseconds,
  27955. sheets: less.sheets.length
  27956. });
  27957. }
  27958. else {
  27959. // Relies on less.sheets array, callback seems to be guaranteed to be called for every element of the array
  27960. loadStyleSheets(function (e, css, _, sheet, webInfo) {
  27961. if (e) {
  27962. errors.add(e, e.href || sheet.href);
  27963. reject(e);
  27964. return;
  27965. }
  27966. if (webInfo.local) {
  27967. less.logger.info("Loading " + sheet.href + " from cache.");
  27968. }
  27969. else {
  27970. less.logger.info("Rendered " + sheet.href + " successfully.");
  27971. }
  27972. browser.createCSS(window.document, css, sheet);
  27973. less.logger.info("CSS for " + sheet.href + " generated in " + (new Date() - endTime) + "ms");
  27974. // Count completed sheet
  27975. remainingSheets--;
  27976. // Check if the last remaining sheet was processed and then call the promise
  27977. if (remainingSheets === 0) {
  27978. totalMilliseconds = new Date() - startTime;
  27979. less.logger.info("Less has finished. CSS generated in " + totalMilliseconds + "ms");
  27980. resolve({
  27981. startTime: startTime,
  27982. endTime: endTime,
  27983. totalMilliseconds: totalMilliseconds,
  27984. sheets: less.sheets.length
  27985. });
  27986. }
  27987. endTime = new Date();
  27988. }, reload, modifyVars);
  27989. }
  27990. loadStyles(modifyVars);
  27991. });
  27992. };
  27993. less.refreshStyles = loadStyles;
  27994. return less;
  27995. });
  27996. /**
  27997. * Kicks off less and compiles any stylesheets
  27998. * used in the browser distributed version of less
  27999. * to kick-start less using the browser api
  28000. */
  28001. var options$1 = defaultOptions();
  28002. if (window.less) {
  28003. for (var key in window.less) {
  28004. if (window.less.hasOwnProperty(key)) {
  28005. options$1[key] = window.less[key];
  28006. }
  28007. }
  28008. }
  28009. addDefaultOptions(window, options$1);
  28010. options$1.plugins = options$1.plugins || [];
  28011. if (window.LESS_PLUGINS) {
  28012. options$1.plugins = options$1.plugins.concat(window.LESS_PLUGINS);
  28013. }
  28014. var less = root(window, options$1);
  28015. window.less = less;
  28016. var css;
  28017. var head;
  28018. var style;
  28019. // Always restore page visibility
  28020. function resolveOrReject(data) {
  28021. if (data.filename) {
  28022. console.warn(data);
  28023. }
  28024. if (!options$1.async) {
  28025. head.removeChild(style);
  28026. }
  28027. }
  28028. if (options$1.onReady) {
  28029. if (/!watch/.test(window.location.hash)) {
  28030. less.watch();
  28031. }
  28032. // Simulate synchronous stylesheet loading by hiding page rendering
  28033. if (!options$1.async) {
  28034. css = 'body { display: none !important }';
  28035. head = document.head || document.getElementsByTagName('head')[0];
  28036. style = document.createElement('style');
  28037. style.type = 'text/css';
  28038. if (style.styleSheet) {
  28039. style.styleSheet.cssText = css;
  28040. }
  28041. else {
  28042. style.appendChild(document.createTextNode(css));
  28043. }
  28044. head.appendChild(style);
  28045. }
  28046. less.registerStylesheetsImmediately();
  28047. less.pageLoadFinished = less.refresh(less.env === 'development').then(resolveOrReject, resolveOrReject);
  28048. }
  28049. return less;
  28050. })));
  28051. /***/ }),
  28052. /* 96 */
  28053. /***/ (function(module, exports, __webpack_require__) {
  28054. var csstree = __webpack_require__(1);
  28055. var parse = csstree.parse;
  28056. var compress = __webpack_require__(192);
  28057. var generate = csstree.generate;
  28058. function debugOutput(name, options, startTime, data) {
  28059. if (options.debug) {
  28060. console.error('## ' + name + ' done in %d ms\n', Date.now() - startTime);
  28061. }
  28062. return data;
  28063. }
  28064. function createDefaultLogger(level) {
  28065. var lastDebug;
  28066. return function logger(title, ast) {
  28067. var line = title;
  28068. if (ast) {
  28069. line = '[' + ((Date.now() - lastDebug) / 1000).toFixed(3) + 's] ' + line;
  28070. }
  28071. if (level > 1 && ast) {
  28072. var css = generate(ast);
  28073. // when level 2, limit css to 256 symbols
  28074. if (level === 2 && css.length > 256) {
  28075. css = css.substr(0, 256) + '...';
  28076. }
  28077. line += '\n ' + css + '\n';
  28078. }
  28079. console.error(line);
  28080. lastDebug = Date.now();
  28081. };
  28082. }
  28083. function copy(obj) {
  28084. var result = {};
  28085. for (var key in obj) {
  28086. result[key] = obj[key];
  28087. }
  28088. return result;
  28089. }
  28090. function buildCompressOptions(options) {
  28091. options = copy(options);
  28092. if (typeof options.logger !== 'function' && options.debug) {
  28093. options.logger = createDefaultLogger(options.debug);
  28094. }
  28095. return options;
  28096. }
  28097. function runHandler(ast, options, handlers) {
  28098. if (!Array.isArray(handlers)) {
  28099. handlers = [handlers];
  28100. }
  28101. handlers.forEach(function(fn) {
  28102. fn(ast, options);
  28103. });
  28104. }
  28105. function minify(context, source, options) {
  28106. options = options || {};
  28107. var filename = options.filename || '<unknown>';
  28108. var result;
  28109. // parse
  28110. var ast = debugOutput('parsing', options, Date.now(),
  28111. parse(source, {
  28112. context: context,
  28113. filename: filename,
  28114. positions: Boolean(options.sourceMap)
  28115. })
  28116. );
  28117. // before compress handlers
  28118. if (options.beforeCompress) {
  28119. debugOutput('beforeCompress', options, Date.now(),
  28120. runHandler(ast, options, options.beforeCompress)
  28121. );
  28122. }
  28123. // compress
  28124. var compressResult = debugOutput('compress', options, Date.now(),
  28125. compress(ast, buildCompressOptions(options))
  28126. );
  28127. // after compress handlers
  28128. if (options.afterCompress) {
  28129. debugOutput('afterCompress', options, Date.now(),
  28130. runHandler(compressResult, options, options.afterCompress)
  28131. );
  28132. }
  28133. // generate
  28134. if (options.sourceMap) {
  28135. result = debugOutput('generate(sourceMap: true)', options, Date.now(), (function() {
  28136. var tmp = generate(compressResult.ast, { sourceMap: true });
  28137. tmp.map._file = filename; // since other tools can relay on file in source map transform chain
  28138. tmp.map.setSourceContent(filename, source);
  28139. return tmp;
  28140. })());
  28141. } else {
  28142. result = debugOutput('generate', options, Date.now(), {
  28143. css: generate(compressResult.ast),
  28144. map: null
  28145. });
  28146. }
  28147. return result;
  28148. }
  28149. function minifyStylesheet(source, options) {
  28150. return minify('stylesheet', source, options);
  28151. }
  28152. function minifyBlock(source, options) {
  28153. return minify('declarationList', source, options);
  28154. }
  28155. module.exports = {
  28156. version: __webpack_require__(226).version,
  28157. // main methods
  28158. minify: minifyStylesheet,
  28159. minifyBlock: minifyBlock,
  28160. // compress an AST
  28161. compress: compress,
  28162. // css syntax parser/walkers/generator/etc
  28163. syntax: csstree
  28164. };
  28165. /***/ }),
  28166. /* 97 */
  28167. /***/ (function(module, exports, __webpack_require__) {
  28168. function merge() {
  28169. var dest = {};
  28170. for (var i = 0; i < arguments.length; i++) {
  28171. var src = arguments[i];
  28172. for (var key in src) {
  28173. dest[key] = src[key];
  28174. }
  28175. }
  28176. return dest;
  28177. }
  28178. module.exports = __webpack_require__(98).create(
  28179. merge(
  28180. __webpack_require__(125),
  28181. __webpack_require__(167),
  28182. __webpack_require__(191)
  28183. )
  28184. );
  28185. /***/ }),
  28186. /* 98 */
  28187. /***/ (function(module, exports, __webpack_require__) {
  28188. var List = __webpack_require__(7);
  28189. var Tokenizer = __webpack_require__(0);
  28190. var Lexer = __webpack_require__(101);
  28191. var grammar = __webpack_require__(109);
  28192. var createParser = __webpack_require__(110);
  28193. var createGenerator = __webpack_require__(112);
  28194. var createConvertor = __webpack_require__(121);
  28195. var createWalker = __webpack_require__(122);
  28196. var clone = __webpack_require__(123);
  28197. var names = __webpack_require__(26);
  28198. var mix = __webpack_require__(124);
  28199. function assign(dest, src) {
  28200. for (var key in src) {
  28201. dest[key] = src[key];
  28202. }
  28203. return dest;
  28204. }
  28205. function createSyntax(config) {
  28206. var parse = createParser(config);
  28207. var walk = createWalker(config);
  28208. var generate = createGenerator(config);
  28209. var convert = createConvertor(walk);
  28210. var syntax = {
  28211. List: List,
  28212. Tokenizer: Tokenizer,
  28213. Lexer: Lexer,
  28214. vendorPrefix: names.vendorPrefix,
  28215. keyword: names.keyword,
  28216. property: names.property,
  28217. isCustomProperty: names.isCustomProperty,
  28218. grammar: grammar,
  28219. lexer: null,
  28220. createLexer: function(config) {
  28221. return new Lexer(config, syntax, syntax.lexer.structure);
  28222. },
  28223. parse: parse,
  28224. walk: walk,
  28225. generate: generate,
  28226. clone: clone,
  28227. fromPlainObject: convert.fromPlainObject,
  28228. toPlainObject: convert.toPlainObject,
  28229. createSyntax: function(config) {
  28230. return createSyntax(mix({}, config));
  28231. },
  28232. fork: function(extension) {
  28233. var base = mix({}, config); // copy of config
  28234. return createSyntax(
  28235. typeof extension === 'function'
  28236. ? extension(base, assign)
  28237. : mix(base, extension)
  28238. );
  28239. }
  28240. };
  28241. syntax.lexer = new Lexer({
  28242. generic: true,
  28243. types: config.types,
  28244. properties: config.properties,
  28245. node: config.node
  28246. }, syntax);
  28247. return syntax;
  28248. };
  28249. exports.create = function(config) {
  28250. return createSyntax(mix({}, config));
  28251. };
  28252. /***/ }),
  28253. /* 99 */
  28254. /***/ (function(module, exports, __webpack_require__) {
  28255. "use strict";
  28256. var CssSyntaxError = __webpack_require__(100);
  28257. var constants = __webpack_require__(24);
  28258. var TYPE = constants.TYPE;
  28259. var NAME = constants.NAME;
  28260. var SYMBOL_TYPE = constants.SYMBOL_TYPE;
  28261. var utils = __webpack_require__(45);
  28262. var firstCharOffset = utils.firstCharOffset;
  28263. var cmpStr = utils.cmpStr;
  28264. var isNumber = utils.isNumber;
  28265. var findWhiteSpaceStart = utils.findWhiteSpaceStart;
  28266. var findWhiteSpaceEnd = utils.findWhiteSpaceEnd;
  28267. var findCommentEnd = utils.findCommentEnd;
  28268. var findStringEnd = utils.findStringEnd;
  28269. var findNumberEnd = utils.findNumberEnd;
  28270. var findIdentifierEnd = utils.findIdentifierEnd;
  28271. var findUrlRawEnd = utils.findUrlRawEnd;
  28272. var NULL = 0;
  28273. var WHITESPACE = TYPE.WhiteSpace;
  28274. var IDENTIFIER = TYPE.Identifier;
  28275. var NUMBER = TYPE.Number;
  28276. var STRING = TYPE.String;
  28277. var COMMENT = TYPE.Comment;
  28278. var PUNCTUATOR = TYPE.Punctuator;
  28279. var CDO = TYPE.CDO;
  28280. var CDC = TYPE.CDC;
  28281. var ATKEYWORD = TYPE.AtKeyword;
  28282. var FUNCTION = TYPE.Function;
  28283. var URL = TYPE.Url;
  28284. var RAW = TYPE.Raw;
  28285. var N = 10;
  28286. var F = 12;
  28287. var R = 13;
  28288. var STAR = TYPE.Asterisk;
  28289. var SLASH = TYPE.Solidus;
  28290. var FULLSTOP = TYPE.FullStop;
  28291. var PLUSSIGN = TYPE.PlusSign;
  28292. var HYPHENMINUS = TYPE.HyphenMinus;
  28293. var GREATERTHANSIGN = TYPE.GreaterThanSign;
  28294. var LESSTHANSIGN = TYPE.LessThanSign;
  28295. var EXCLAMATIONMARK = TYPE.ExclamationMark;
  28296. var COMMERCIALAT = TYPE.CommercialAt;
  28297. var QUOTATIONMARK = TYPE.QuotationMark;
  28298. var APOSTROPHE = TYPE.Apostrophe;
  28299. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  28300. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  28301. var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket;
  28302. var RIGHTCURLYBRACKET = TYPE.RightCurlyBracket;
  28303. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  28304. var RIGHTSQUAREBRACKET = TYPE.RightSquareBracket;
  28305. var MIN_BUFFER_SIZE = 16 * 1024;
  28306. var OFFSET_MASK = 0x00FFFFFF;
  28307. var TYPE_SHIFT = 24;
  28308. var SafeUint32Array = typeof Uint32Array !== 'undefined' ? Uint32Array : Array; // fallback on Array when TypedArray is not supported
  28309. function computeLinesAndColumns(tokenizer, source) {
  28310. var sourceLength = source.length;
  28311. var start = firstCharOffset(source);
  28312. var lines = tokenizer.lines;
  28313. var line = tokenizer.startLine;
  28314. var columns = tokenizer.columns;
  28315. var column = tokenizer.startColumn;
  28316. if (lines === null || lines.length < sourceLength + 1) {
  28317. lines = new SafeUint32Array(Math.max(sourceLength + 1024, MIN_BUFFER_SIZE));
  28318. columns = new SafeUint32Array(lines.length);
  28319. }
  28320. for (var i = start; i < sourceLength; i++) {
  28321. var code = source.charCodeAt(i);
  28322. lines[i] = line;
  28323. columns[i] = column++;
  28324. if (code === N || code === R || code === F) {
  28325. if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {
  28326. i++;
  28327. lines[i] = line;
  28328. columns[i] = column;
  28329. }
  28330. line++;
  28331. column = 1;
  28332. }
  28333. }
  28334. lines[i] = line;
  28335. columns[i] = column;
  28336. tokenizer.linesAnsColumnsComputed = true;
  28337. tokenizer.lines = lines;
  28338. tokenizer.columns = columns;
  28339. }
  28340. function tokenLayout(tokenizer, source, startPos) {
  28341. var sourceLength = source.length;
  28342. var offsetAndType = tokenizer.offsetAndType;
  28343. var balance = tokenizer.balance;
  28344. var tokenCount = 0;
  28345. var prevType = 0;
  28346. var offset = startPos;
  28347. var anchor = 0;
  28348. var balanceCloseCode = 0;
  28349. var balanceStart = 0;
  28350. var balancePrev = 0;
  28351. if (offsetAndType === null || offsetAndType.length < sourceLength + 1) {
  28352. offsetAndType = new SafeUint32Array(sourceLength + 1024);
  28353. balance = new SafeUint32Array(sourceLength + 1024);
  28354. }
  28355. while (offset < sourceLength) {
  28356. var code = source.charCodeAt(offset);
  28357. var type = code < 0x80 ? SYMBOL_TYPE[code] : IDENTIFIER;
  28358. balance[tokenCount] = sourceLength;
  28359. switch (type) {
  28360. case WHITESPACE:
  28361. offset = findWhiteSpaceEnd(source, offset + 1);
  28362. break;
  28363. case PUNCTUATOR:
  28364. switch (code) {
  28365. case balanceCloseCode:
  28366. balancePrev = balanceStart & OFFSET_MASK;
  28367. balanceStart = balance[balancePrev];
  28368. balanceCloseCode = balanceStart >> TYPE_SHIFT;
  28369. balance[tokenCount] = balancePrev;
  28370. balance[balancePrev++] = tokenCount;
  28371. for (; balancePrev < tokenCount; balancePrev++) {
  28372. if (balance[balancePrev] === sourceLength) {
  28373. balance[balancePrev] = tokenCount;
  28374. }
  28375. }
  28376. break;
  28377. case LEFTSQUAREBRACKET:
  28378. balance[tokenCount] = balanceStart;
  28379. balanceCloseCode = RIGHTSQUAREBRACKET;
  28380. balanceStart = (balanceCloseCode << TYPE_SHIFT) | tokenCount;
  28381. break;
  28382. case LEFTCURLYBRACKET:
  28383. balance[tokenCount] = balanceStart;
  28384. balanceCloseCode = RIGHTCURLYBRACKET;
  28385. balanceStart = (balanceCloseCode << TYPE_SHIFT) | tokenCount;
  28386. break;
  28387. case LEFTPARENTHESIS:
  28388. balance[tokenCount] = balanceStart;
  28389. balanceCloseCode = RIGHTPARENTHESIS;
  28390. balanceStart = (balanceCloseCode << TYPE_SHIFT) | tokenCount;
  28391. break;
  28392. }
  28393. // /*
  28394. if (code === STAR && prevType === SLASH) {
  28395. type = COMMENT;
  28396. offset = findCommentEnd(source, offset + 1);
  28397. tokenCount--; // rewrite prev token
  28398. break;
  28399. }
  28400. // edge case for -.123 and +.123
  28401. if (code === FULLSTOP && (prevType === PLUSSIGN || prevType === HYPHENMINUS)) {
  28402. if (offset + 1 < sourceLength && isNumber(source.charCodeAt(offset + 1))) {
  28403. type = NUMBER;
  28404. offset = findNumberEnd(source, offset + 2, false);
  28405. tokenCount--; // rewrite prev token
  28406. break;
  28407. }
  28408. }
  28409. // <!--
  28410. if (code === EXCLAMATIONMARK && prevType === LESSTHANSIGN) {
  28411. if (offset + 2 < sourceLength &&
  28412. source.charCodeAt(offset + 1) === HYPHENMINUS &&
  28413. source.charCodeAt(offset + 2) === HYPHENMINUS) {
  28414. type = CDO;
  28415. offset = offset + 3;
  28416. tokenCount--; // rewrite prev token
  28417. break;
  28418. }
  28419. }
  28420. // -->
  28421. if (code === HYPHENMINUS && prevType === HYPHENMINUS) {
  28422. if (offset + 1 < sourceLength && source.charCodeAt(offset + 1) === GREATERTHANSIGN) {
  28423. type = CDC;
  28424. offset = offset + 2;
  28425. tokenCount--; // rewrite prev token
  28426. break;
  28427. }
  28428. }
  28429. // ident(
  28430. if (code === LEFTPARENTHESIS && prevType === IDENTIFIER) {
  28431. offset = offset + 1;
  28432. tokenCount--; // rewrite prev token
  28433. balance[tokenCount] = balance[tokenCount + 1];
  28434. balanceStart--;
  28435. // 4 char length identifier and equal to `url(` (case insensitive)
  28436. if (offset - anchor === 4 && cmpStr(source, anchor, offset, 'url(')) {
  28437. // special case for url() because it can contain any symbols sequence with few exceptions
  28438. anchor = findWhiteSpaceEnd(source, offset);
  28439. code = source.charCodeAt(anchor);
  28440. if (code !== LEFTPARENTHESIS &&
  28441. code !== RIGHTPARENTHESIS &&
  28442. code !== QUOTATIONMARK &&
  28443. code !== APOSTROPHE) {
  28444. // url(
  28445. offsetAndType[tokenCount++] = (URL << TYPE_SHIFT) | offset;
  28446. balance[tokenCount] = sourceLength;
  28447. // ws*
  28448. if (anchor !== offset) {
  28449. offsetAndType[tokenCount++] = (WHITESPACE << TYPE_SHIFT) | anchor;
  28450. balance[tokenCount] = sourceLength;
  28451. }
  28452. // raw
  28453. type = RAW;
  28454. offset = findUrlRawEnd(source, anchor);
  28455. } else {
  28456. type = URL;
  28457. }
  28458. } else {
  28459. type = FUNCTION;
  28460. }
  28461. break;
  28462. }
  28463. type = code;
  28464. offset = offset + 1;
  28465. break;
  28466. case NUMBER:
  28467. offset = findNumberEnd(source, offset + 1, prevType !== FULLSTOP);
  28468. // merge number with a preceding dot, dash or plus
  28469. if (prevType === FULLSTOP ||
  28470. prevType === HYPHENMINUS ||
  28471. prevType === PLUSSIGN) {
  28472. tokenCount--; // rewrite prev token
  28473. }
  28474. break;
  28475. case STRING:
  28476. offset = findStringEnd(source, offset + 1, code);
  28477. break;
  28478. default:
  28479. anchor = offset;
  28480. offset = findIdentifierEnd(source, offset);
  28481. // merge identifier with a preceding dash
  28482. if (prevType === HYPHENMINUS) {
  28483. // rewrite prev token
  28484. tokenCount--;
  28485. // restore prev prev token type
  28486. // for case @-prefix-ident
  28487. prevType = tokenCount === 0 ? 0 : offsetAndType[tokenCount - 1] >> TYPE_SHIFT;
  28488. }
  28489. if (prevType === COMMERCIALAT) {
  28490. // rewrite prev token and change type to <at-keyword-token>
  28491. tokenCount--;
  28492. type = ATKEYWORD;
  28493. }
  28494. }
  28495. offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | offset;
  28496. prevType = type;
  28497. }
  28498. // finalize arrays
  28499. offsetAndType[tokenCount] = offset;
  28500. balance[tokenCount] = sourceLength;
  28501. balance[sourceLength] = sourceLength; // prevents false positive balance match with any token
  28502. while (balanceStart !== 0) {
  28503. balancePrev = balanceStart & OFFSET_MASK;
  28504. balanceStart = balance[balancePrev];
  28505. balance[balancePrev] = sourceLength;
  28506. }
  28507. tokenizer.offsetAndType = offsetAndType;
  28508. tokenizer.tokenCount = tokenCount;
  28509. tokenizer.balance = balance;
  28510. }
  28511. //
  28512. // tokenizer
  28513. //
  28514. var Tokenizer = function(source, startOffset, startLine, startColumn) {
  28515. this.offsetAndType = null;
  28516. this.balance = null;
  28517. this.lines = null;
  28518. this.columns = null;
  28519. this.setSource(source, startOffset, startLine, startColumn);
  28520. };
  28521. Tokenizer.prototype = {
  28522. setSource: function(source, startOffset, startLine, startColumn) {
  28523. var safeSource = String(source || '');
  28524. var start = firstCharOffset(safeSource);
  28525. this.source = safeSource;
  28526. this.firstCharOffset = start;
  28527. this.startOffset = typeof startOffset === 'undefined' ? 0 : startOffset;
  28528. this.startLine = typeof startLine === 'undefined' ? 1 : startLine;
  28529. this.startColumn = typeof startColumn === 'undefined' ? 1 : startColumn;
  28530. this.linesAnsColumnsComputed = false;
  28531. this.eof = false;
  28532. this.currentToken = -1;
  28533. this.tokenType = 0;
  28534. this.tokenStart = start;
  28535. this.tokenEnd = start;
  28536. tokenLayout(this, safeSource, start);
  28537. this.next();
  28538. },
  28539. lookupType: function(offset) {
  28540. offset += this.currentToken;
  28541. if (offset < this.tokenCount) {
  28542. return this.offsetAndType[offset] >> TYPE_SHIFT;
  28543. }
  28544. return NULL;
  28545. },
  28546. lookupNonWSType: function(offset) {
  28547. offset += this.currentToken;
  28548. for (var type; offset < this.tokenCount; offset++) {
  28549. type = this.offsetAndType[offset] >> TYPE_SHIFT;
  28550. if (type !== WHITESPACE) {
  28551. return type;
  28552. }
  28553. }
  28554. return NULL;
  28555. },
  28556. lookupValue: function(offset, referenceStr) {
  28557. offset += this.currentToken;
  28558. if (offset < this.tokenCount) {
  28559. return cmpStr(
  28560. this.source,
  28561. this.offsetAndType[offset - 1] & OFFSET_MASK,
  28562. this.offsetAndType[offset] & OFFSET_MASK,
  28563. referenceStr
  28564. );
  28565. }
  28566. return false;
  28567. },
  28568. getTokenStart: function(tokenNum) {
  28569. if (tokenNum === this.currentToken) {
  28570. return this.tokenStart;
  28571. }
  28572. if (tokenNum > 0) {
  28573. return tokenNum < this.tokenCount
  28574. ? this.offsetAndType[tokenNum - 1] & OFFSET_MASK
  28575. : this.offsetAndType[this.tokenCount] & OFFSET_MASK;
  28576. }
  28577. return this.firstCharOffset;
  28578. },
  28579. getOffsetExcludeWS: function() {
  28580. if (this.currentToken > 0) {
  28581. if ((this.offsetAndType[this.currentToken - 1] >> TYPE_SHIFT) === WHITESPACE) {
  28582. return this.currentToken > 1
  28583. ? this.offsetAndType[this.currentToken - 2] & OFFSET_MASK
  28584. : this.firstCharOffset;
  28585. }
  28586. }
  28587. return this.tokenStart;
  28588. },
  28589. getRawLength: function(startToken, endTokenType1, endTokenType2, includeTokenType2) {
  28590. var cursor = startToken;
  28591. var balanceEnd;
  28592. loop:
  28593. for (; cursor < this.tokenCount; cursor++) {
  28594. balanceEnd = this.balance[cursor];
  28595. // belance end points to offset before start
  28596. if (balanceEnd < startToken) {
  28597. break loop;
  28598. }
  28599. // check token is stop type
  28600. switch (this.offsetAndType[cursor] >> TYPE_SHIFT) {
  28601. case endTokenType1:
  28602. break loop;
  28603. case endTokenType2:
  28604. if (includeTokenType2) {
  28605. cursor++;
  28606. }
  28607. break loop;
  28608. default:
  28609. // fast forward to the end of balanced block
  28610. if (this.balance[balanceEnd] === cursor) {
  28611. cursor = balanceEnd;
  28612. }
  28613. }
  28614. }
  28615. return cursor - this.currentToken;
  28616. },
  28617. isBalanceEdge: function(pos) {
  28618. var balanceStart = this.balance[this.currentToken];
  28619. return balanceStart < pos;
  28620. },
  28621. getTokenValue: function() {
  28622. return this.source.substring(this.tokenStart, this.tokenEnd);
  28623. },
  28624. substrToCursor: function(start) {
  28625. return this.source.substring(start, this.tokenStart);
  28626. },
  28627. skipWS: function() {
  28628. for (var i = this.currentToken, skipTokenCount = 0; i < this.tokenCount; i++, skipTokenCount++) {
  28629. if ((this.offsetAndType[i] >> TYPE_SHIFT) !== WHITESPACE) {
  28630. break;
  28631. }
  28632. }
  28633. if (skipTokenCount > 0) {
  28634. this.skip(skipTokenCount);
  28635. }
  28636. },
  28637. skipSC: function() {
  28638. while (this.tokenType === WHITESPACE || this.tokenType === COMMENT) {
  28639. this.next();
  28640. }
  28641. },
  28642. skip: function(tokenCount) {
  28643. var next = this.currentToken + tokenCount;
  28644. if (next < this.tokenCount) {
  28645. this.currentToken = next;
  28646. this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;
  28647. next = this.offsetAndType[next];
  28648. this.tokenType = next >> TYPE_SHIFT;
  28649. this.tokenEnd = next & OFFSET_MASK;
  28650. } else {
  28651. this.currentToken = this.tokenCount;
  28652. this.next();
  28653. }
  28654. },
  28655. next: function() {
  28656. var next = this.currentToken + 1;
  28657. if (next < this.tokenCount) {
  28658. this.currentToken = next;
  28659. this.tokenStart = this.tokenEnd;
  28660. next = this.offsetAndType[next];
  28661. this.tokenType = next >> TYPE_SHIFT;
  28662. this.tokenEnd = next & OFFSET_MASK;
  28663. } else {
  28664. this.currentToken = this.tokenCount;
  28665. this.eof = true;
  28666. this.tokenType = NULL;
  28667. this.tokenStart = this.tokenEnd = this.source.length;
  28668. }
  28669. },
  28670. eat: function(tokenType) {
  28671. if (this.tokenType !== tokenType) {
  28672. var offset = this.tokenStart;
  28673. var message = NAME[tokenType] + ' is expected';
  28674. // tweak message and offset
  28675. if (tokenType === IDENTIFIER) {
  28676. // when identifier is expected but there is a function or url
  28677. if (this.tokenType === FUNCTION || this.tokenType === URL) {
  28678. offset = this.tokenEnd - 1;
  28679. message += ' but function found';
  28680. }
  28681. } else {
  28682. // when test type is part of another token show error for current position + 1
  28683. // e.g. eat(HYPHENMINUS) will fail on "-foo", but pointing on "-" is odd
  28684. if (this.source.charCodeAt(this.tokenStart) === tokenType) {
  28685. offset = offset + 1;
  28686. }
  28687. }
  28688. this.error(message, offset);
  28689. }
  28690. this.next();
  28691. },
  28692. eatNonWS: function(tokenType) {
  28693. this.skipWS();
  28694. this.eat(tokenType);
  28695. },
  28696. consume: function(tokenType) {
  28697. var value = this.getTokenValue();
  28698. this.eat(tokenType);
  28699. return value;
  28700. },
  28701. consumeFunctionName: function() {
  28702. var name = this.source.substring(this.tokenStart, this.tokenEnd - 1);
  28703. this.eat(FUNCTION);
  28704. return name;
  28705. },
  28706. consumeNonWS: function(tokenType) {
  28707. this.skipWS();
  28708. return this.consume(tokenType);
  28709. },
  28710. expectIdentifier: function(name) {
  28711. if (this.tokenType !== IDENTIFIER || cmpStr(this.source, this.tokenStart, this.tokenEnd, name) === false) {
  28712. this.error('Identifier `' + name + '` is expected');
  28713. }
  28714. this.next();
  28715. },
  28716. getLocation: function(offset, filename) {
  28717. if (!this.linesAnsColumnsComputed) {
  28718. computeLinesAndColumns(this, this.source);
  28719. }
  28720. return {
  28721. source: filename,
  28722. offset: this.startOffset + offset,
  28723. line: this.lines[offset],
  28724. column: this.columns[offset]
  28725. };
  28726. },
  28727. getLocationRange: function(start, end, filename) {
  28728. if (!this.linesAnsColumnsComputed) {
  28729. computeLinesAndColumns(this, this.source);
  28730. }
  28731. return {
  28732. source: filename,
  28733. start: {
  28734. offset: this.startOffset + start,
  28735. line: this.lines[start],
  28736. column: this.columns[start]
  28737. },
  28738. end: {
  28739. offset: this.startOffset + end,
  28740. line: this.lines[end],
  28741. column: this.columns[end]
  28742. }
  28743. };
  28744. },
  28745. error: function(message, offset) {
  28746. var location = typeof offset !== 'undefined' && offset < this.source.length
  28747. ? this.getLocation(offset)
  28748. : this.eof
  28749. ? this.getLocation(findWhiteSpaceStart(this.source, this.source.length - 1))
  28750. : this.getLocation(this.tokenStart);
  28751. throw new CssSyntaxError(
  28752. message || 'Unexpected input',
  28753. this.source,
  28754. location.offset,
  28755. location.line,
  28756. location.column
  28757. );
  28758. },
  28759. dump: function() {
  28760. var offset = 0;
  28761. return Array.prototype.slice.call(this.offsetAndType, 0, this.tokenCount).map(function(item, idx) {
  28762. var start = offset;
  28763. var end = item & OFFSET_MASK;
  28764. offset = end;
  28765. return {
  28766. idx: idx,
  28767. type: NAME[item >> TYPE_SHIFT],
  28768. chunk: this.source.substring(start, end),
  28769. balance: this.balance[idx]
  28770. };
  28771. }, this);
  28772. }
  28773. };
  28774. // extend with error class
  28775. Tokenizer.CssSyntaxError = CssSyntaxError;
  28776. // extend tokenizer with constants
  28777. Object.keys(constants).forEach(function(key) {
  28778. Tokenizer[key] = constants[key];
  28779. });
  28780. // extend tokenizer with static methods from utils
  28781. Object.keys(utils).forEach(function(key) {
  28782. Tokenizer[key] = utils[key];
  28783. });
  28784. // warm up tokenizer to elimitate code branches that never execute
  28785. // fix soft deoptimizations (insufficient type feedback)
  28786. new Tokenizer('\n\r\r\n\f<!---->//""\'\'/*\r\n\f*/1a;.\\31\t\+2{url(a);func();+1.2e3 -.4e-5 .6e+7}').getLocation();
  28787. module.exports = Tokenizer;
  28788. /***/ }),
  28789. /* 100 */
  28790. /***/ (function(module, exports, __webpack_require__) {
  28791. "use strict";
  28792. var createCustomError = __webpack_require__(23);
  28793. var MAX_LINE_LENGTH = 100;
  28794. var OFFSET_CORRECTION = 60;
  28795. var TAB_REPLACEMENT = ' ';
  28796. function sourceFragment(error, extraLines) {
  28797. function processLines(start, end) {
  28798. return lines.slice(start, end).map(function(line, idx) {
  28799. var num = String(start + idx + 1);
  28800. while (num.length < maxNumLength) {
  28801. num = ' ' + num;
  28802. }
  28803. return num + ' |' + line;
  28804. }).join('\n');
  28805. }
  28806. var lines = error.source.split(/\r\n?|\n|\f/);
  28807. var line = error.line;
  28808. var column = error.column;
  28809. var startLine = Math.max(1, line - extraLines) - 1;
  28810. var endLine = Math.min(line + extraLines, lines.length + 1);
  28811. var maxNumLength = Math.max(4, String(endLine).length) + 1;
  28812. var cutLeft = 0;
  28813. // column correction according to replaced tab before column
  28814. column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length;
  28815. if (column > MAX_LINE_LENGTH) {
  28816. cutLeft = column - OFFSET_CORRECTION + 3;
  28817. column = OFFSET_CORRECTION - 2;
  28818. }
  28819. for (var i = startLine; i <= endLine; i++) {
  28820. if (i >= 0 && i < lines.length) {
  28821. lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT);
  28822. lines[i] =
  28823. (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') +
  28824. lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +
  28825. (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : '');
  28826. }
  28827. }
  28828. return [
  28829. processLines(startLine, line),
  28830. new Array(column + maxNumLength + 2).join('-') + '^',
  28831. processLines(line, endLine)
  28832. ].filter(Boolean).join('\n');
  28833. }
  28834. var CssSyntaxError = function(message, source, offset, line, column) {
  28835. var error = createCustomError('CssSyntaxError', message);
  28836. error.source = source;
  28837. error.offset = offset;
  28838. error.line = line;
  28839. error.column = column;
  28840. error.sourceFragment = function(extraLines) {
  28841. return sourceFragment(error, isNaN(extraLines) ? 0 : extraLines);
  28842. };
  28843. Object.defineProperty(error, 'formattedMessage', {
  28844. get: function() {
  28845. return (
  28846. 'Parse error: ' + error.message + '\n' +
  28847. sourceFragment(error, 2)
  28848. );
  28849. }
  28850. });
  28851. // for backward capability
  28852. error.parseError = {
  28853. offset: offset,
  28854. line: line,
  28855. column: column
  28856. };
  28857. return error;
  28858. };
  28859. module.exports = CssSyntaxError;
  28860. /***/ }),
  28861. /* 101 */
  28862. /***/ (function(module, exports, __webpack_require__) {
  28863. "use strict";
  28864. var SyntaxReferenceError = __webpack_require__(46).SyntaxReferenceError;
  28865. var MatchError = __webpack_require__(46).MatchError;
  28866. var names = __webpack_require__(26);
  28867. var generic = __webpack_require__(102);
  28868. var parse = __webpack_require__(27);
  28869. var generate = __webpack_require__(25);
  28870. var walk = __webpack_require__(48);
  28871. var astToTokens = __webpack_require__(104);
  28872. var buildMatchGraph = __webpack_require__(49).buildMatchGraph;
  28873. var matchAsTree = __webpack_require__(105).matchAsTree;
  28874. var trace = __webpack_require__(106);
  28875. var search = __webpack_require__(107);
  28876. var getStructureFromConfig = __webpack_require__(108).getStructureFromConfig;
  28877. var cssWideKeywords = buildMatchGraph(parse('inherit | initial | unset'));
  28878. var cssWideKeywordsWithExpression = buildMatchGraph(parse('inherit | initial | unset | <expression>'));
  28879. function dumpMapSyntax(map, syntaxAsAst) {
  28880. var result = {};
  28881. for (var name in map) {
  28882. if (map[name].syntax) {
  28883. result[name] = syntaxAsAst ? map[name].syntax : generate(map[name].syntax);
  28884. }
  28885. }
  28886. return result;
  28887. }
  28888. function valueHasVar(value) {
  28889. var hasVar = false;
  28890. this.syntax.walk(value, function(node) {
  28891. if (node.type === 'Function' && node.name.toLowerCase() === 'var') {
  28892. hasVar = true;
  28893. }
  28894. });
  28895. return hasVar;
  28896. }
  28897. function buildMatchResult(match, error, iterations) {
  28898. return {
  28899. matched: match,
  28900. iterations: iterations,
  28901. error: error,
  28902. getTrace: trace.getTrace,
  28903. isType: trace.isType,
  28904. isProperty: trace.isProperty,
  28905. isKeyword: trace.isKeyword
  28906. };
  28907. }
  28908. function matchSyntax(lexer, syntax, node, useCommon) {
  28909. if (!node) {
  28910. return buildMatchResult(null, new Error('Node is undefined'));
  28911. }
  28912. if (valueHasVar.call(lexer, node)) {
  28913. return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));
  28914. }
  28915. var tokens = lexer.syntax.generate(node, astToTokens);
  28916. var result;
  28917. if (useCommon) {
  28918. result = matchAsTree(tokens, lexer.valueCommonSyntax, lexer);
  28919. }
  28920. if (!useCommon || !result.match) {
  28921. result = matchAsTree(tokens, syntax.match, lexer);
  28922. if (!result.match) {
  28923. return buildMatchResult(
  28924. null,
  28925. new MatchError(result.reason, lexer, syntax.syntax, node, result),
  28926. result.iterations
  28927. );
  28928. }
  28929. }
  28930. return buildMatchResult(result.match, null, result.iterations);
  28931. }
  28932. var Lexer = function(config, syntax, structure) {
  28933. this.valueCommonSyntax = cssWideKeywords;
  28934. this.syntax = syntax;
  28935. this.generic = false;
  28936. this.properties = {};
  28937. this.types = {};
  28938. this.structure = structure || getStructureFromConfig(config);
  28939. if (config) {
  28940. if (config.generic) {
  28941. this.generic = true;
  28942. for (var name in generic) {
  28943. this.addType_(name, generic[name]);
  28944. }
  28945. }
  28946. if (config.types) {
  28947. for (var name in config.types) {
  28948. this.addType_(name, config.types[name]);
  28949. }
  28950. }
  28951. if (config.properties) {
  28952. for (var name in config.properties) {
  28953. this.addProperty_(name, config.properties[name]);
  28954. }
  28955. }
  28956. }
  28957. };
  28958. Lexer.prototype = {
  28959. structure: {},
  28960. checkStructure: function(ast) {
  28961. function collectWarning(node, message) {
  28962. warns.push({
  28963. node: node,
  28964. message: message
  28965. });
  28966. }
  28967. var structure = this.structure;
  28968. var warns = [];
  28969. this.syntax.walk(ast, function(node) {
  28970. if (structure.hasOwnProperty(node.type)) {
  28971. structure[node.type].check(node, collectWarning);
  28972. } else {
  28973. collectWarning(node, 'Unknown node type `' + node.type + '`');
  28974. }
  28975. });
  28976. return warns.length ? warns : false;
  28977. },
  28978. createDescriptor: function(syntax, type, name) {
  28979. var ref = {
  28980. type: type,
  28981. name: name
  28982. };
  28983. var descriptor = {
  28984. type: type,
  28985. name: name,
  28986. syntax: null,
  28987. match: null
  28988. };
  28989. if (typeof syntax === 'function') {
  28990. descriptor.match = buildMatchGraph(syntax, ref);
  28991. } else {
  28992. if (typeof syntax === 'string') {
  28993. // lazy parsing on first access
  28994. Object.defineProperty(descriptor, 'syntax', {
  28995. get: function() {
  28996. Object.defineProperty(descriptor, 'syntax', {
  28997. value: parse(syntax)
  28998. });
  28999. return descriptor.syntax;
  29000. }
  29001. });
  29002. } else {
  29003. descriptor.syntax = syntax;
  29004. }
  29005. Object.defineProperty(descriptor, 'match', {
  29006. get: function() {
  29007. Object.defineProperty(descriptor, 'match', {
  29008. value: buildMatchGraph(descriptor.syntax, ref)
  29009. });
  29010. return descriptor.match;
  29011. }
  29012. });
  29013. }
  29014. return descriptor;
  29015. },
  29016. addProperty_: function(name, syntax) {
  29017. this.properties[name] = this.createDescriptor(syntax, 'Property', name);
  29018. },
  29019. addType_: function(name, syntax) {
  29020. this.types[name] = this.createDescriptor(syntax, 'Type', name);
  29021. if (syntax === generic.expression) {
  29022. this.valueCommonSyntax = cssWideKeywordsWithExpression;
  29023. }
  29024. },
  29025. matchDeclaration: function(node) {
  29026. if (node.type !== 'Declaration') {
  29027. return buildMatchResult(null, new Error('Not a Declaration node'));
  29028. }
  29029. return this.matchProperty(node.property, node.value);
  29030. },
  29031. matchProperty: function(propertyName, value) {
  29032. var property = names.property(propertyName);
  29033. // don't match syntax for a custom property
  29034. if (property.custom) {
  29035. return buildMatchResult(null, new Error('Lexer matching doesn\'t applicable for custom properties'));
  29036. }
  29037. var propertySyntax = property.vendor
  29038. ? this.getProperty(property.name) || this.getProperty(property.basename)
  29039. : this.getProperty(property.name);
  29040. if (!propertySyntax) {
  29041. return buildMatchResult(null, new SyntaxReferenceError('Unknown property', propertyName));
  29042. }
  29043. return matchSyntax(this, propertySyntax, value, true);
  29044. },
  29045. matchType: function(typeName, value) {
  29046. var typeSyntax = this.getType(typeName);
  29047. if (!typeSyntax) {
  29048. return buildMatchResult(null, new SyntaxReferenceError('Unknown type', typeName));
  29049. }
  29050. return matchSyntax(this, typeSyntax, value, false);
  29051. },
  29052. match: function(syntax, value) {
  29053. if (!syntax || !syntax.type) {
  29054. return buildMatchResult(null, new SyntaxReferenceError('Bad syntax'));
  29055. }
  29056. if (!syntax.match) {
  29057. syntax = this.createDescriptor(syntax);
  29058. }
  29059. return matchSyntax(this, syntax, value, false);
  29060. },
  29061. findValueFragments: function(propertyName, value, type, name) {
  29062. return search.matchFragments(this, value, this.matchProperty(propertyName, value), type, name);
  29063. },
  29064. findDeclarationValueFragments: function(declaration, type, name) {
  29065. return search.matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);
  29066. },
  29067. findAllFragments: function(ast, type, name) {
  29068. var result = [];
  29069. this.syntax.walk(ast, {
  29070. visit: 'Declaration',
  29071. enter: function(declaration) {
  29072. result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));
  29073. }.bind(this)
  29074. });
  29075. return result;
  29076. },
  29077. getProperty: function(name) {
  29078. return this.properties.hasOwnProperty(name) ? this.properties[name] : null;
  29079. },
  29080. getType: function(name) {
  29081. return this.types.hasOwnProperty(name) ? this.types[name] : null;
  29082. },
  29083. validate: function() {
  29084. function validate(syntax, name, broken, descriptor) {
  29085. if (broken.hasOwnProperty(name)) {
  29086. return broken[name];
  29087. }
  29088. broken[name] = false;
  29089. if (descriptor.syntax !== null) {
  29090. walk(descriptor.syntax, function(node) {
  29091. if (node.type !== 'Type' && node.type !== 'Property') {
  29092. return;
  29093. }
  29094. var map = node.type === 'Type' ? syntax.types : syntax.properties;
  29095. var brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;
  29096. if (!map.hasOwnProperty(node.name) || validate(syntax, node.name, brokenMap, map[node.name])) {
  29097. broken[name] = true;
  29098. }
  29099. }, this);
  29100. }
  29101. }
  29102. var brokenTypes = {};
  29103. var brokenProperties = {};
  29104. for (var key in this.types) {
  29105. validate(this, key, brokenTypes, this.types[key]);
  29106. }
  29107. for (var key in this.properties) {
  29108. validate(this, key, brokenProperties, this.properties[key]);
  29109. }
  29110. brokenTypes = Object.keys(brokenTypes).filter(function(name) {
  29111. return brokenTypes[name];
  29112. });
  29113. brokenProperties = Object.keys(brokenProperties).filter(function(name) {
  29114. return brokenProperties[name];
  29115. });
  29116. if (brokenTypes.length || brokenProperties.length) {
  29117. return {
  29118. types: brokenTypes,
  29119. properties: brokenProperties
  29120. };
  29121. }
  29122. return null;
  29123. },
  29124. dump: function(syntaxAsAst) {
  29125. return {
  29126. generic: this.generic,
  29127. types: dumpMapSyntax(this.types, syntaxAsAst),
  29128. properties: dumpMapSyntax(this.properties, syntaxAsAst)
  29129. };
  29130. },
  29131. toString: function() {
  29132. return JSON.stringify(this.dump());
  29133. }
  29134. };
  29135. module.exports = Lexer;
  29136. /***/ }),
  29137. /* 102 */
  29138. /***/ (function(module, exports, __webpack_require__) {
  29139. var tokenizerUtils = __webpack_require__(45);
  29140. var findIdentifierEnd = tokenizerUtils.findIdentifierEnd;
  29141. var findNumberEnd = tokenizerUtils.findNumberEnd;
  29142. var findDecimalNumberEnd = tokenizerUtils.findDecimalNumberEnd;
  29143. var isHex = tokenizerUtils.isHex;
  29144. var tokenizerConst = __webpack_require__(24);
  29145. var SYMBOL_TYPE = tokenizerConst.SYMBOL_TYPE;
  29146. var IDENTIFIER = tokenizerConst.TYPE.Identifier;
  29147. var PLUSSIGN = tokenizerConst.TYPE.PlusSign;
  29148. var HYPHENMINUS = tokenizerConst.TYPE.HyphenMinus;
  29149. var NUMBERSIGN = tokenizerConst.TYPE.NumberSign;
  29150. var PERCENTAGE = {
  29151. '%': true
  29152. };
  29153. // https://www.w3.org/TR/css-values-3/#lengths
  29154. var LENGTH = {
  29155. // absolute length units
  29156. 'px': true,
  29157. 'mm': true,
  29158. 'cm': true,
  29159. 'in': true,
  29160. 'pt': true,
  29161. 'pc': true,
  29162. 'q': true,
  29163. // relative length units
  29164. 'em': true,
  29165. 'ex': true,
  29166. 'ch': true,
  29167. 'rem': true,
  29168. // viewport-percentage lengths
  29169. 'vh': true,
  29170. 'vw': true,
  29171. 'vmin': true,
  29172. 'vmax': true,
  29173. 'vm': true
  29174. };
  29175. var ANGLE = {
  29176. 'deg': true,
  29177. 'grad': true,
  29178. 'rad': true,
  29179. 'turn': true
  29180. };
  29181. var TIME = {
  29182. 's': true,
  29183. 'ms': true
  29184. };
  29185. var FREQUENCY = {
  29186. 'hz': true,
  29187. 'khz': true
  29188. };
  29189. // https://www.w3.org/TR/css-values-3/#resolution (https://drafts.csswg.org/css-values/#resolution)
  29190. var RESOLUTION = {
  29191. 'dpi': true,
  29192. 'dpcm': true,
  29193. 'dppx': true,
  29194. 'x': true // https://github.com/w3c/csswg-drafts/issues/461
  29195. };
  29196. // https://drafts.csswg.org/css-grid/#fr-unit
  29197. var FLEX = {
  29198. 'fr': true
  29199. };
  29200. // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume
  29201. var DECIBEL = {
  29202. 'db': true
  29203. };
  29204. // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch
  29205. var SEMITONES = {
  29206. 'st': true
  29207. };
  29208. function consumeFunction(token, addTokenToMatch, getNextToken) {
  29209. var length = 1;
  29210. var cursor;
  29211. do {
  29212. cursor = getNextToken(length++);
  29213. } while (cursor !== null && cursor.node !== token.node);
  29214. if (cursor === null) {
  29215. return false;
  29216. }
  29217. while (true) {
  29218. // consume tokens until cursor
  29219. if (addTokenToMatch() === cursor) {
  29220. break;
  29221. }
  29222. }
  29223. return true;
  29224. }
  29225. // TODO: implement
  29226. // can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed
  29227. // https://drafts.csswg.org/css-values/#calc-notation
  29228. function calc(token, addTokenToMatch, getNextToken) {
  29229. if (token === null) {
  29230. return false;
  29231. }
  29232. var name = token.value.toLowerCase();
  29233. if (name !== 'calc(' &&
  29234. name !== '-moz-calc(' &&
  29235. name !== '-webkit-calc(') {
  29236. return false;
  29237. }
  29238. return consumeFunction(token, addTokenToMatch, getNextToken);
  29239. }
  29240. function attr(token, addTokenToMatch, getNextToken) {
  29241. if (token === null || token.value.toLowerCase() !== 'attr(') {
  29242. return false;
  29243. }
  29244. return consumeFunction(token, addTokenToMatch, getNextToken);
  29245. }
  29246. function expression(token, addTokenToMatch, getNextToken) {
  29247. if (token === null || token.value.toLowerCase() !== 'expression(') {
  29248. return false;
  29249. }
  29250. return consumeFunction(token, addTokenToMatch, getNextToken);
  29251. }
  29252. function url(token, addTokenToMatch, getNextToken) {
  29253. if (token === null || token.value.toLowerCase() !== 'url(') {
  29254. return false;
  29255. }
  29256. return consumeFunction(token, addTokenToMatch, getNextToken);
  29257. }
  29258. function idSelector(token, addTokenToMatch) {
  29259. if (token === null) {
  29260. return false;
  29261. }
  29262. if (token.value.charCodeAt(0) !== NUMBERSIGN) {
  29263. return false;
  29264. }
  29265. if (consumeIdentifier(token.value, 1) !== token.value.length) {
  29266. return false;
  29267. }
  29268. addTokenToMatch();
  29269. return true;
  29270. }
  29271. function isNumber(str) {
  29272. return /^[-+]?(\d+|\d*\.\d+)([eE][-+]?\d+)?$/.test(str);
  29273. }
  29274. function consumeNumber(str, allowFraction) {
  29275. var code = str.charCodeAt(0);
  29276. return findNumberEnd(str, code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0, allowFraction);
  29277. }
  29278. function consumeIdentifier(str, offset) {
  29279. var code = str.charCodeAt(offset);
  29280. if (code < 0x80 && SYMBOL_TYPE[code] !== IDENTIFIER && code !== HYPHENMINUS) {
  29281. return offset;
  29282. }
  29283. return findIdentifierEnd(str, offset + 1);
  29284. }
  29285. function astNode(type) {
  29286. return function(token, addTokenToMatch) {
  29287. if (token === null || token.node.type !== type) {
  29288. return false;
  29289. }
  29290. addTokenToMatch();
  29291. return true;
  29292. };
  29293. }
  29294. function dimension(type) {
  29295. return function(token, addTokenToMatch, getNextToken) {
  29296. if (calc(token, addTokenToMatch, getNextToken)) {
  29297. return true;
  29298. }
  29299. if (token === null) {
  29300. return false;
  29301. }
  29302. var numberEnd = consumeNumber(token.value, true);
  29303. if (numberEnd === 0) {
  29304. return false;
  29305. }
  29306. if (type) {
  29307. if (!type.hasOwnProperty(token.value.substr(numberEnd).toLowerCase())) {
  29308. return false;
  29309. }
  29310. } else {
  29311. var unitEnd = consumeIdentifier(token.value, numberEnd);
  29312. if (unitEnd === numberEnd || unitEnd !== token.value.length) {
  29313. return false;
  29314. }
  29315. }
  29316. addTokenToMatch();
  29317. return true;
  29318. };
  29319. }
  29320. function zeroUnitlessDimension(type) {
  29321. var isDimension = dimension(type);
  29322. return function(token, addTokenToMatch, getNextToken) {
  29323. if (isDimension(token, addTokenToMatch, getNextToken)) {
  29324. return true;
  29325. }
  29326. if (token === null || Number(token.value) !== 0) {
  29327. return false;
  29328. }
  29329. addTokenToMatch();
  29330. return true;
  29331. };
  29332. }
  29333. function number(token, addTokenToMatch, getNextToken) {
  29334. if (calc(token, addTokenToMatch, getNextToken)) {
  29335. return true;
  29336. }
  29337. if (token === null) {
  29338. return false;
  29339. }
  29340. var numberEnd = consumeNumber(token.value, true);
  29341. if (numberEnd !== token.value.length) {
  29342. return false;
  29343. }
  29344. addTokenToMatch();
  29345. return true;
  29346. }
  29347. function numberZeroOne(token, addTokenToMatch, getNextToken) {
  29348. if (calc(token, addTokenToMatch, getNextToken)) {
  29349. return true;
  29350. }
  29351. if (token === null || !isNumber(token.value)) {
  29352. return false;
  29353. }
  29354. var value = Number(token.value);
  29355. if (value < 0 || value > 1) {
  29356. return false;
  29357. }
  29358. addTokenToMatch();
  29359. return true;
  29360. }
  29361. function numberOneOrGreater(token, addTokenToMatch, getNextToken) {
  29362. if (calc(token, addTokenToMatch, getNextToken)) {
  29363. return true;
  29364. }
  29365. if (token === null || !isNumber(token.value)) {
  29366. return false;
  29367. }
  29368. var value = Number(token.value);
  29369. if (value < 1) {
  29370. return false;
  29371. }
  29372. addTokenToMatch();
  29373. return true;
  29374. }
  29375. // TODO: fail on 10e-2
  29376. function integer(token, addTokenToMatch, getNextToken) {
  29377. if (calc(token, addTokenToMatch, getNextToken)) {
  29378. return true;
  29379. }
  29380. if (token === null) {
  29381. return false;
  29382. }
  29383. var numberEnd = consumeNumber(token.value, false);
  29384. if (numberEnd !== token.value.length) {
  29385. return false;
  29386. }
  29387. addTokenToMatch();
  29388. return true;
  29389. }
  29390. // TODO: fail on 10e-2
  29391. function positiveInteger(token, addTokenToMatch, getNextToken) {
  29392. if (calc(token, addTokenToMatch, getNextToken)) {
  29393. return true;
  29394. }
  29395. if (token === null) {
  29396. return false;
  29397. }
  29398. var numberEnd = findDecimalNumberEnd(token.value, 0);
  29399. if (numberEnd !== token.value.length || token.value.charCodeAt(0) === HYPHENMINUS) {
  29400. return false;
  29401. }
  29402. addTokenToMatch();
  29403. return true;
  29404. }
  29405. function hexColor(token, addTokenToMatch) {
  29406. if (token === null || token.value.charCodeAt(0) !== NUMBERSIGN) {
  29407. return false;
  29408. }
  29409. var length = token.value.length - 1;
  29410. // valid length is 3, 4, 6 and 8 (+1 for #)
  29411. if (length !== 3 && length !== 4 && length !== 6 && length !== 8) {
  29412. return false;
  29413. }
  29414. for (var i = 1; i < length; i++) {
  29415. if (!isHex(token.value.charCodeAt(i))) {
  29416. return false;
  29417. }
  29418. }
  29419. addTokenToMatch();
  29420. return true;
  29421. }
  29422. // https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident
  29423. // https://drafts.csswg.org/css-values-4/#identifier-value
  29424. function customIdent(token, addTokenToMatch) {
  29425. if (token === null) {
  29426. return false;
  29427. }
  29428. var identEnd = consumeIdentifier(token.value, 0);
  29429. if (identEnd !== token.value.length) {
  29430. return false;
  29431. }
  29432. var name = token.value.toLowerCase();
  29433. // § 3.2. Author-defined Identifiers: the <custom-ident> type
  29434. // The CSS-wide keywords are not valid <custom-ident>s
  29435. if (name === 'unset' || name === 'initial' || name === 'inherit') {
  29436. return false;
  29437. }
  29438. // The default keyword is reserved and is also not a valid <custom-ident>
  29439. if (name === 'default') {
  29440. return false;
  29441. }
  29442. // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)
  29443. addTokenToMatch();
  29444. return true;
  29445. }
  29446. module.exports = {
  29447. 'angle': zeroUnitlessDimension(ANGLE),
  29448. 'attr()': attr,
  29449. 'custom-ident': customIdent,
  29450. 'decibel': dimension(DECIBEL),
  29451. 'dimension': dimension(),
  29452. 'frequency': dimension(FREQUENCY),
  29453. 'flex': dimension(FLEX),
  29454. 'hex-color': hexColor,
  29455. 'id-selector': idSelector, // element( <id-selector> )
  29456. 'ident': astNode('Identifier'),
  29457. 'integer': integer,
  29458. 'length': zeroUnitlessDimension(LENGTH),
  29459. 'number': number,
  29460. 'number-zero-one': numberZeroOne,
  29461. 'number-one-or-greater': numberOneOrGreater,
  29462. 'percentage': dimension(PERCENTAGE),
  29463. 'positive-integer': positiveInteger,
  29464. 'resolution': dimension(RESOLUTION),
  29465. 'semitones': dimension(SEMITONES),
  29466. 'string': astNode('String'),
  29467. 'time': dimension(TIME),
  29468. 'unicode-range': astNode('UnicodeRange'),
  29469. 'url': url,
  29470. // old IE stuff
  29471. 'progid': astNode('Raw'),
  29472. 'expression': expression
  29473. };
  29474. /***/ }),
  29475. /* 103 */
  29476. /***/ (function(module, exports, __webpack_require__) {
  29477. var SyntaxParseError = __webpack_require__(47).SyntaxParseError;
  29478. var TAB = 9;
  29479. var N = 10;
  29480. var F = 12;
  29481. var R = 13;
  29482. var SPACE = 32;
  29483. var Tokenizer = function(str) {
  29484. this.str = str;
  29485. this.pos = 0;
  29486. };
  29487. Tokenizer.prototype = {
  29488. charCodeAt: function(pos) {
  29489. return pos < this.str.length ? this.str.charCodeAt(pos) : 0;
  29490. },
  29491. charCode: function() {
  29492. return this.charCodeAt(this.pos);
  29493. },
  29494. nextCharCode: function() {
  29495. return this.charCodeAt(this.pos + 1);
  29496. },
  29497. nextNonWsCode: function(pos) {
  29498. return this.charCodeAt(this.findWsEnd(pos));
  29499. },
  29500. findWsEnd: function(pos) {
  29501. for (; pos < this.str.length; pos++) {
  29502. var code = this.str.charCodeAt(pos);
  29503. if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {
  29504. break;
  29505. }
  29506. }
  29507. return pos;
  29508. },
  29509. substringToPos: function(end) {
  29510. return this.str.substring(this.pos, this.pos = end);
  29511. },
  29512. eat: function(code) {
  29513. if (this.charCode() !== code) {
  29514. this.error('Expect `' + String.fromCharCode(code) + '`');
  29515. }
  29516. this.pos++;
  29517. },
  29518. peek: function() {
  29519. return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';
  29520. },
  29521. error: function(message) {
  29522. throw new SyntaxParseError(message, this.str, this.pos);
  29523. }
  29524. };
  29525. module.exports = Tokenizer;
  29526. /***/ }),
  29527. /* 104 */
  29528. /***/ (function(module, exports) {
  29529. module.exports = {
  29530. decorator: function(handlers) {
  29531. var curNode = null;
  29532. var prev = null;
  29533. var tokens = [];
  29534. return {
  29535. children: handlers.children,
  29536. node: function(node) {
  29537. var tmp = curNode;
  29538. curNode = node;
  29539. handlers.node.call(this, node);
  29540. curNode = tmp;
  29541. },
  29542. chunk: function(chunk) {
  29543. if (tokens.length > 0) {
  29544. switch (curNode.type) {
  29545. case 'Dimension':
  29546. case 'HexColor':
  29547. case 'IdSelector':
  29548. case 'Percentage':
  29549. if (prev.node === curNode) {
  29550. prev.value += chunk;
  29551. return;
  29552. }
  29553. break;
  29554. case 'Function':
  29555. case 'PseudoClassSelector':
  29556. case 'PseudoElementSelector':
  29557. case 'Url':
  29558. if (chunk === '(') {
  29559. prev.value += chunk;
  29560. return;
  29561. }
  29562. break;
  29563. case 'Atrule':
  29564. if (prev.node === curNode && prev.value === '@') {
  29565. prev.value += chunk;
  29566. return;
  29567. }
  29568. break;
  29569. }
  29570. }
  29571. tokens.push(prev = {
  29572. value: chunk,
  29573. node: curNode
  29574. });
  29575. },
  29576. result: function() {
  29577. return tokens;
  29578. }
  29579. };
  29580. }
  29581. };
  29582. /***/ }),
  29583. /* 105 */
  29584. /***/ (function(module, exports, __webpack_require__) {
  29585. "use strict";
  29586. var hasOwnProperty = Object.prototype.hasOwnProperty;
  29587. var matchGraph = __webpack_require__(49);
  29588. var MATCH = matchGraph.MATCH;
  29589. var MISMATCH = matchGraph.MISMATCH;
  29590. var DISALLOW_EMPTY = matchGraph.DISALLOW_EMPTY;
  29591. var TOKEN = 1;
  29592. var OPEN_SYNTAX = 2;
  29593. var CLOSE_SYNTAX = 3;
  29594. var EXIT_REASON_MATCH = 'Match';
  29595. var EXIT_REASON_MISMATCH = 'Mismatch';
  29596. var EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';
  29597. var ITERATION_LIMIT = 10000;
  29598. var totalIterationCount = 0;
  29599. function mapList(list, fn) {
  29600. var result = [];
  29601. while (list) {
  29602. result.unshift(fn(list));
  29603. list = list.prev;
  29604. }
  29605. return result;
  29606. }
  29607. function isCommaContextStart(token) {
  29608. if (token === null) {
  29609. return true;
  29610. }
  29611. token = token.value.charAt(token.value.length - 1);
  29612. return (
  29613. token === ',' ||
  29614. token === '(' ||
  29615. token === '[' ||
  29616. token === '/'
  29617. );
  29618. }
  29619. function isCommaContextEnd(token) {
  29620. if (token === null) {
  29621. return true;
  29622. }
  29623. token = token.value.charAt(0);
  29624. return (
  29625. token === ')' ||
  29626. token === ']' ||
  29627. token === '/'
  29628. );
  29629. }
  29630. function internalMatch(tokens, syntax, syntaxes) {
  29631. function moveToNextToken() {
  29632. do {
  29633. tokenCursor++;
  29634. token = tokenCursor < tokens.length ? tokens[tokenCursor] : null;
  29635. } while (token !== null && !/\S/.test(token.value));
  29636. }
  29637. function getNextToken(offset) {
  29638. var nextIndex = tokenCursor + offset;
  29639. return nextIndex < tokens.length ? tokens[nextIndex] : null;
  29640. }
  29641. function pushThenStack(nextSyntax) {
  29642. thenStack = {
  29643. nextSyntax: nextSyntax,
  29644. matchStack: matchStack,
  29645. syntaxStack: syntaxStack,
  29646. prev: thenStack
  29647. };
  29648. }
  29649. function pushElseStack(nextSyntax) {
  29650. elseStack = {
  29651. nextSyntax: nextSyntax,
  29652. matchStack: matchStack,
  29653. syntaxStack: syntaxStack,
  29654. thenStack: thenStack,
  29655. tokenCursor: tokenCursor,
  29656. token: token,
  29657. prev: elseStack
  29658. };
  29659. }
  29660. function addTokenToMatch() {
  29661. matchStack = {
  29662. type: TOKEN,
  29663. syntax: syntax.syntax,
  29664. token: token,
  29665. prev: matchStack
  29666. };
  29667. moveToNextToken();
  29668. if (tokenCursor > longestMatch) {
  29669. longestMatch = tokenCursor;
  29670. }
  29671. return matchStack.token;
  29672. }
  29673. function openSyntax() {
  29674. syntaxStack = {
  29675. syntax: syntax,
  29676. prev: syntaxStack
  29677. };
  29678. matchStack = {
  29679. type: OPEN_SYNTAX,
  29680. syntax: syntax.syntax,
  29681. token: matchStack.token,
  29682. prev: matchStack
  29683. };
  29684. }
  29685. function closeSyntax() {
  29686. if (matchStack.type === OPEN_SYNTAX) {
  29687. matchStack = matchStack.prev;
  29688. } else {
  29689. matchStack = {
  29690. type: CLOSE_SYNTAX,
  29691. syntax: syntaxStack.syntax,
  29692. token: matchStack.token,
  29693. prev: matchStack
  29694. };
  29695. }
  29696. syntaxStack = syntaxStack.prev;
  29697. }
  29698. var syntaxStack = null;
  29699. var thenStack = null;
  29700. var elseStack = null;
  29701. var iterationCount = 0;
  29702. var exitReason = EXIT_REASON_MATCH;
  29703. var matchStack = { type: 'Stub', syntax: null, token: null, tokenCursor: -1, prev: null };
  29704. var longestMatch = 0;
  29705. var tokenCursor = -1;
  29706. var token = null;
  29707. moveToNextToken();
  29708. while (true) {
  29709. // console.log('--\n',
  29710. // '#' + iterationCount,
  29711. // require('util').inspect({
  29712. // match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? x.type + '!' + x.syntax.name : null),
  29713. // elseStack: mapList(elseStack, x => x.id),
  29714. // thenStack: mapList(thenStack, x => x.id),
  29715. // token: token && token.value,
  29716. // tokenCursor,
  29717. // syntax
  29718. // }, { depth: null })
  29719. // );
  29720. // prevent infinite loop
  29721. if (++iterationCount === ITERATION_LIMIT) {
  29722. console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');
  29723. exitReason = EXIT_REASON_ITERATION_LIMIT;
  29724. break;
  29725. }
  29726. if (syntax === MATCH) {
  29727. if (thenStack === null) {
  29728. // turn to MISMATCH when some tokens left unmatched
  29729. if (token !== null) {
  29730. // doesn't mismatch if just one token left and it's an IE hack
  29731. if (tokenCursor !== tokens.length - 1 || (token.value !== '\\0' && token.value !== '\\9')) {
  29732. syntax = MISMATCH;
  29733. continue;
  29734. }
  29735. }
  29736. // break the main loop, return a result - MATCH
  29737. exitReason = EXIT_REASON_MATCH;
  29738. break;
  29739. }
  29740. // go to next syntax (`then` branch)
  29741. syntax = thenStack.nextSyntax;
  29742. // check match is not empty
  29743. if (syntax === DISALLOW_EMPTY) {
  29744. if (thenStack.matchStack.token === matchStack.token) {
  29745. syntax = MISMATCH;
  29746. continue;
  29747. } else {
  29748. syntax = MATCH;
  29749. }
  29750. }
  29751. // close syntax if needed
  29752. while (syntaxStack !== null && thenStack.syntaxStack !== syntaxStack) {
  29753. closeSyntax();
  29754. }
  29755. // pop stack
  29756. thenStack = thenStack.prev;
  29757. continue;
  29758. }
  29759. if (syntax === MISMATCH) {
  29760. if (elseStack === null) {
  29761. // break the main loop, return a result - MISMATCH
  29762. exitReason = EXIT_REASON_MISMATCH;
  29763. break;
  29764. }
  29765. // go to next syntax (`else` branch)
  29766. syntax = elseStack.nextSyntax;
  29767. // restore all the rest stack states
  29768. thenStack = elseStack.thenStack;
  29769. syntaxStack = elseStack.syntaxStack;
  29770. matchStack = elseStack.matchStack;
  29771. tokenCursor = elseStack.tokenCursor;
  29772. token = elseStack.token;
  29773. // pop stack
  29774. elseStack = elseStack.prev;
  29775. continue;
  29776. }
  29777. switch (syntax.type) {
  29778. case 'MatchGraph':
  29779. syntax = syntax.match;
  29780. break;
  29781. case 'If':
  29782. // IMPORTANT: else stack push must go first,
  29783. // since it stores the state of thenStack before changes
  29784. if (syntax.else !== MISMATCH) {
  29785. pushElseStack(syntax.else);
  29786. }
  29787. if (syntax.then !== MATCH) {
  29788. pushThenStack(syntax.then);
  29789. }
  29790. syntax = syntax.match;
  29791. break;
  29792. case 'MatchOnce':
  29793. syntax = {
  29794. type: 'MatchOnceBuffer',
  29795. terms: syntax.terms,
  29796. all: syntax.all,
  29797. matchStack: matchStack,
  29798. index: 0,
  29799. mask: 0
  29800. };
  29801. break;
  29802. case 'MatchOnceBuffer':
  29803. if (syntax.index === syntax.terms.length) {
  29804. // if no matches during a cycle
  29805. if (syntax.matchStack === matchStack) {
  29806. // no matches at all or it's required all terms to be matched
  29807. if (syntax.mask === 0 || syntax.all) {
  29808. syntax = MISMATCH;
  29809. break;
  29810. }
  29811. // a partial match is ok
  29812. syntax = MATCH;
  29813. break;
  29814. } else {
  29815. // start trying to match from the start
  29816. syntax.index = 0;
  29817. syntax.matchStack = matchStack;
  29818. }
  29819. }
  29820. for (; syntax.index < syntax.terms.length; syntax.index++) {
  29821. if ((syntax.mask & (1 << syntax.index)) === 0) {
  29822. // IMPORTANT: else stack push must go first,
  29823. // since it stores the state of thenStack before changes
  29824. pushElseStack(syntax);
  29825. pushThenStack({
  29826. type: 'AddMatchOnce',
  29827. buffer: syntax
  29828. });
  29829. // match
  29830. syntax = syntax.terms[syntax.index++];
  29831. break;
  29832. }
  29833. }
  29834. break;
  29835. case 'AddMatchOnce':
  29836. syntax = syntax.buffer;
  29837. var newMask = syntax.mask | (1 << (syntax.index - 1));
  29838. // all terms are matched
  29839. if (newMask === (1 << syntax.terms.length) - 1) {
  29840. syntax = MATCH;
  29841. continue;
  29842. }
  29843. syntax = {
  29844. type: 'MatchOnceBuffer',
  29845. terms: syntax.terms,
  29846. all: syntax.all,
  29847. matchStack: syntax.matchStack,
  29848. index: syntax.index,
  29849. mask: newMask
  29850. };
  29851. break;
  29852. case 'Enum':
  29853. var name = token !== null ? token.value.toLowerCase() : '';
  29854. // drop \0 and \9 hack from keyword name
  29855. if (name.indexOf('\\') !== -1) {
  29856. name = name.replace(/\\[09].*$/, '');
  29857. }
  29858. if (hasOwnProperty.call(syntax.map, name)) {
  29859. syntax = syntax.map[name];
  29860. } else {
  29861. syntax = MISMATCH;
  29862. }
  29863. break;
  29864. case 'Generic':
  29865. syntax = syntax.fn(token, addTokenToMatch, getNextToken) ? MATCH : MISMATCH;
  29866. break;
  29867. case 'Type':
  29868. case 'Property':
  29869. openSyntax();
  29870. var syntaxDict = syntax.type === 'Type' ? 'types' : 'properties';
  29871. if (hasOwnProperty.call(syntaxes, syntaxDict) && syntaxes[syntaxDict][syntax.name]) {
  29872. syntax = syntaxes[syntaxDict][syntax.name].match;
  29873. } else {
  29874. syntax = undefined;
  29875. }
  29876. if (!syntax) {
  29877. throw new Error(
  29878. 'Bad syntax reference: ' +
  29879. (syntaxStack.syntax.type === 'Type'
  29880. ? '<' + syntaxStack.syntax.name + '>'
  29881. : '<\'' + syntaxStack.syntax.name + '\'>')
  29882. );
  29883. }
  29884. break;
  29885. case 'Keyword':
  29886. var name = syntax.name;
  29887. if (token !== null) {
  29888. var keywordName = token.value;
  29889. // drop \0 and \9 hack from keyword name
  29890. if (keywordName.indexOf('\\') !== -1) {
  29891. keywordName = keywordName.replace(/\\[09].*$/, '');
  29892. }
  29893. if (keywordName.toLowerCase() === name) {
  29894. addTokenToMatch();
  29895. syntax = MATCH;
  29896. break;
  29897. }
  29898. }
  29899. syntax = MISMATCH;
  29900. break;
  29901. case 'AtKeyword':
  29902. case 'Function':
  29903. if (token !== null && token.value.toLowerCase() === syntax.name) {
  29904. addTokenToMatch();
  29905. syntax = MATCH;
  29906. break;
  29907. }
  29908. syntax = MISMATCH;
  29909. break;
  29910. case 'Token':
  29911. if (token !== null && token.value === syntax.value) {
  29912. addTokenToMatch();
  29913. syntax = MATCH;
  29914. break;
  29915. }
  29916. syntax = MISMATCH;
  29917. break;
  29918. case 'Comma':
  29919. if (token !== null && token.value === ',') {
  29920. if (isCommaContextStart(matchStack.token)) {
  29921. syntax = MISMATCH;
  29922. } else {
  29923. addTokenToMatch();
  29924. syntax = isCommaContextEnd(token) ? MISMATCH : MATCH;
  29925. }
  29926. } else {
  29927. syntax = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? MATCH : MISMATCH;
  29928. }
  29929. break;
  29930. // case 'String':
  29931. // TODO: strings with length other than 1 char
  29932. default:
  29933. throw new Error('Unknown node type: ' + syntax.type);
  29934. }
  29935. }
  29936. totalIterationCount += iterationCount;
  29937. if (exitReason === EXIT_REASON_MATCH) {
  29938. while (syntaxStack !== null) {
  29939. closeSyntax();
  29940. }
  29941. } else {
  29942. matchStack = null;
  29943. }
  29944. return {
  29945. tokens: tokens,
  29946. reason: exitReason,
  29947. iterations: iterationCount,
  29948. match: matchStack,
  29949. longestMatch: longestMatch
  29950. };
  29951. }
  29952. function matchAsList(tokens, matchGraph, syntaxes) {
  29953. var matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
  29954. if (matchResult.match !== null) {
  29955. matchResult.match = mapList(matchResult.match, function(item) {
  29956. if (item.type === OPEN_SYNTAX || item.type === CLOSE_SYNTAX) {
  29957. return { type: item.type, syntax: item.syntax };
  29958. }
  29959. return {
  29960. syntax: item.syntax,
  29961. token: item.token && item.token.value,
  29962. node: item.token && item.token.node
  29963. };
  29964. }).slice(1);
  29965. }
  29966. return matchResult;
  29967. }
  29968. function matchAsTree(tokens, matchGraph, syntaxes) {
  29969. var matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
  29970. if (matchResult.match === null) {
  29971. return matchResult;
  29972. }
  29973. var cursor = matchResult.match;
  29974. var host = matchResult.match = {
  29975. syntax: matchGraph.syntax || null,
  29976. match: []
  29977. };
  29978. var stack = [host];
  29979. // revert a list
  29980. var prev = null;
  29981. var next = null;
  29982. while (cursor !== null) {
  29983. next = cursor.prev;
  29984. cursor.prev = prev;
  29985. prev = cursor;
  29986. cursor = next;
  29987. }
  29988. // init the cursor to start with 2nd item since 1st is a stub item
  29989. cursor = prev.prev;
  29990. // build a tree
  29991. while (cursor !== null && cursor.syntax !== null) {
  29992. var entry = cursor;
  29993. switch (entry.type) {
  29994. case OPEN_SYNTAX:
  29995. host.match.push(host = {
  29996. syntax: entry.syntax,
  29997. match: []
  29998. });
  29999. stack.push(host);
  30000. break;
  30001. case CLOSE_SYNTAX:
  30002. stack.pop();
  30003. host = stack[stack.length - 1];
  30004. break;
  30005. default:
  30006. host.match.push({
  30007. syntax: entry.syntax || null,
  30008. token: entry.token.value,
  30009. node: entry.token.node
  30010. });
  30011. }
  30012. cursor = cursor.prev;
  30013. }
  30014. return matchResult;
  30015. }
  30016. module.exports = {
  30017. matchAsList: matchAsList,
  30018. matchAsTree: matchAsTree,
  30019. getTotalIterationCount: function() {
  30020. return totalIterationCount;
  30021. }
  30022. };
  30023. /***/ }),
  30024. /* 106 */
  30025. /***/ (function(module, exports) {
  30026. function getTrace(node) {
  30027. function shouldPutToTrace(syntax) {
  30028. if (syntax === null) {
  30029. return false;
  30030. }
  30031. return (
  30032. syntax.type === 'Type' ||
  30033. syntax.type === 'Property' ||
  30034. syntax.type === 'Keyword'
  30035. );
  30036. }
  30037. function hasMatch(matchNode) {
  30038. if (Array.isArray(matchNode.match)) {
  30039. // use for-loop for better perfomance
  30040. for (var i = 0; i < matchNode.match.length; i++) {
  30041. if (hasMatch(matchNode.match[i])) {
  30042. if (shouldPutToTrace(matchNode.syntax)) {
  30043. result.unshift(matchNode.syntax);
  30044. }
  30045. return true;
  30046. }
  30047. }
  30048. } else if (matchNode.node === node) {
  30049. result = shouldPutToTrace(matchNode.syntax)
  30050. ? [matchNode.syntax]
  30051. : [];
  30052. return true;
  30053. }
  30054. return false;
  30055. }
  30056. var result = null;
  30057. if (this.matched !== null) {
  30058. hasMatch(this.matched);
  30059. }
  30060. return result;
  30061. }
  30062. function testNode(match, node, fn) {
  30063. var trace = getTrace.call(match, node);
  30064. if (trace === null) {
  30065. return false;
  30066. }
  30067. return trace.some(fn);
  30068. }
  30069. function isType(node, type) {
  30070. return testNode(this, node, function(matchNode) {
  30071. return matchNode.type === 'Type' && matchNode.name === type;
  30072. });
  30073. }
  30074. function isProperty(node, property) {
  30075. return testNode(this, node, function(matchNode) {
  30076. return matchNode.type === 'Property' && matchNode.name === property;
  30077. });
  30078. }
  30079. function isKeyword(node) {
  30080. return testNode(this, node, function(matchNode) {
  30081. return matchNode.type === 'Keyword';
  30082. });
  30083. }
  30084. module.exports = {
  30085. getTrace: getTrace,
  30086. isType: isType,
  30087. isProperty: isProperty,
  30088. isKeyword: isKeyword
  30089. };
  30090. /***/ }),
  30091. /* 107 */
  30092. /***/ (function(module, exports, __webpack_require__) {
  30093. var List = __webpack_require__(7);
  30094. function getFirstMatchNode(matchNode) {
  30095. if ('node' in matchNode) {
  30096. return matchNode.node;
  30097. }
  30098. return getFirstMatchNode(matchNode.match[0]);
  30099. }
  30100. function getLastMatchNode(matchNode) {
  30101. if ('node' in matchNode) {
  30102. return matchNode.node;
  30103. }
  30104. return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);
  30105. }
  30106. function matchFragments(lexer, ast, match, type, name) {
  30107. function findFragments(matchNode) {
  30108. if (matchNode.syntax !== null &&
  30109. matchNode.syntax.type === type &&
  30110. matchNode.syntax.name === name) {
  30111. var start = getFirstMatchNode(matchNode);
  30112. var end = getLastMatchNode(matchNode);
  30113. lexer.syntax.walk(ast, function(node, item, list) {
  30114. if (node === start) {
  30115. var nodes = new List();
  30116. do {
  30117. nodes.appendData(item.data);
  30118. if (item.data === end) {
  30119. break;
  30120. }
  30121. item = item.next;
  30122. } while (item !== null);
  30123. fragments.push({
  30124. parent: list,
  30125. nodes: nodes
  30126. });
  30127. }
  30128. });
  30129. }
  30130. if (Array.isArray(matchNode.match)) {
  30131. matchNode.match.forEach(findFragments);
  30132. }
  30133. }
  30134. var fragments = [];
  30135. if (match.matched !== null) {
  30136. findFragments(match.matched);
  30137. }
  30138. return fragments;
  30139. }
  30140. module.exports = {
  30141. matchFragments: matchFragments
  30142. };
  30143. /***/ }),
  30144. /* 108 */
  30145. /***/ (function(module, exports, __webpack_require__) {
  30146. var List = __webpack_require__(7);
  30147. var hasOwnProperty = Object.prototype.hasOwnProperty;
  30148. function isValidNumber(value) {
  30149. // Number.isInteger(value) && value >= 0
  30150. return (
  30151. typeof value === 'number' &&
  30152. isFinite(value) &&
  30153. Math.floor(value) === value &&
  30154. value >= 0
  30155. );
  30156. }
  30157. function isValidLocation(loc) {
  30158. return (
  30159. Boolean(loc) &&
  30160. isValidNumber(loc.offset) &&
  30161. isValidNumber(loc.line) &&
  30162. isValidNumber(loc.column)
  30163. );
  30164. }
  30165. function createNodeStructureChecker(type, fields) {
  30166. return function checkNode(node, warn) {
  30167. if (!node || node.constructor !== Object) {
  30168. return warn(node, 'Type of node should be an Object');
  30169. }
  30170. for (var key in node) {
  30171. var valid = true;
  30172. if (hasOwnProperty.call(node, key) === false) {
  30173. continue;
  30174. }
  30175. if (key === 'type') {
  30176. if (node.type !== type) {
  30177. warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');
  30178. }
  30179. } else if (key === 'loc') {
  30180. if (node.loc === null) {
  30181. continue;
  30182. } else if (node.loc && node.loc.constructor === Object) {
  30183. if (typeof node.loc.source !== 'string') {
  30184. key += '.source';
  30185. } else if (!isValidLocation(node.loc.start)) {
  30186. key += '.start';
  30187. } else if (!isValidLocation(node.loc.end)) {
  30188. key += '.end';
  30189. } else {
  30190. continue;
  30191. }
  30192. }
  30193. valid = false;
  30194. } else if (fields.hasOwnProperty(key)) {
  30195. for (var i = 0, valid = false; !valid && i < fields[key].length; i++) {
  30196. var fieldType = fields[key][i];
  30197. switch (fieldType) {
  30198. case String:
  30199. valid = typeof node[key] === 'string';
  30200. break;
  30201. case Boolean:
  30202. valid = typeof node[key] === 'boolean';
  30203. break;
  30204. case null:
  30205. valid = node[key] === null;
  30206. break;
  30207. default:
  30208. if (typeof fieldType === 'string') {
  30209. valid = node[key] && node[key].type === fieldType;
  30210. } else if (Array.isArray(fieldType)) {
  30211. valid = node[key] instanceof List;
  30212. }
  30213. }
  30214. }
  30215. } else {
  30216. warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');
  30217. }
  30218. if (!valid) {
  30219. warn(node, 'Bad value for `' + type + '.' + key + '`');
  30220. }
  30221. }
  30222. for (var key in fields) {
  30223. if (hasOwnProperty.call(fields, key) &&
  30224. hasOwnProperty.call(node, key) === false) {
  30225. warn(node, 'Field `' + type + '.' + key + '` is missed');
  30226. }
  30227. }
  30228. };
  30229. }
  30230. function processStructure(name, nodeType) {
  30231. var structure = nodeType.structure;
  30232. var fields = {
  30233. type: String,
  30234. loc: true
  30235. };
  30236. var docs = {
  30237. type: '"' + name + '"'
  30238. };
  30239. for (var key in structure) {
  30240. if (hasOwnProperty.call(structure, key) === false) {
  30241. continue;
  30242. }
  30243. var docsTypes = [];
  30244. var fieldTypes = fields[key] = Array.isArray(structure[key])
  30245. ? structure[key].slice()
  30246. : [structure[key]];
  30247. for (var i = 0; i < fieldTypes.length; i++) {
  30248. var fieldType = fieldTypes[i];
  30249. if (fieldType === String || fieldType === Boolean) {
  30250. docsTypes.push(fieldType.name);
  30251. } else if (fieldType === null) {
  30252. docsTypes.push('null');
  30253. } else if (typeof fieldType === 'string') {
  30254. docsTypes.push('<' + fieldType + '>');
  30255. } else if (Array.isArray(fieldType)) {
  30256. docsTypes.push('List'); // TODO: use type enum
  30257. } else {
  30258. throw new Error('Wrong value `' + fieldType + '` in `' + name + '.' + key + '` structure definition');
  30259. }
  30260. }
  30261. docs[key] = docsTypes.join(' | ');
  30262. }
  30263. return {
  30264. docs: docs,
  30265. check: createNodeStructureChecker(name, fields)
  30266. };
  30267. }
  30268. module.exports = {
  30269. getStructureFromConfig: function(config) {
  30270. var structure = {};
  30271. if (config.node) {
  30272. for (var name in config.node) {
  30273. if (hasOwnProperty.call(config.node, name)) {
  30274. var nodeType = config.node[name];
  30275. if (nodeType.structure) {
  30276. structure[name] = processStructure(name, nodeType);
  30277. } else {
  30278. throw new Error('Missed `structure` field in `' + name + '` node type definition');
  30279. }
  30280. }
  30281. }
  30282. }
  30283. return structure;
  30284. }
  30285. };
  30286. /***/ }),
  30287. /* 109 */
  30288. /***/ (function(module, exports, __webpack_require__) {
  30289. module.exports = {
  30290. SyntaxParseError: __webpack_require__(47).SyntaxParseError,
  30291. parse: __webpack_require__(27),
  30292. generate: __webpack_require__(25),
  30293. walk: __webpack_require__(48)
  30294. };
  30295. /***/ }),
  30296. /* 110 */
  30297. /***/ (function(module, exports, __webpack_require__) {
  30298. "use strict";
  30299. var Tokenizer = __webpack_require__(0);
  30300. var List = __webpack_require__(7);
  30301. var sequence = __webpack_require__(111);
  30302. var noop = function() {};
  30303. function createParseContext(name) {
  30304. return function() {
  30305. return this[name]();
  30306. };
  30307. }
  30308. function processConfig(config) {
  30309. var parserConfig = {
  30310. context: {},
  30311. scope: {},
  30312. atrule: {},
  30313. pseudo: {}
  30314. };
  30315. if (config.parseContext) {
  30316. for (var name in config.parseContext) {
  30317. switch (typeof config.parseContext[name]) {
  30318. case 'function':
  30319. parserConfig.context[name] = config.parseContext[name];
  30320. break;
  30321. case 'string':
  30322. parserConfig.context[name] = createParseContext(config.parseContext[name]);
  30323. break;
  30324. }
  30325. }
  30326. }
  30327. if (config.scope) {
  30328. for (var name in config.scope) {
  30329. parserConfig.scope[name] = config.scope[name];
  30330. }
  30331. }
  30332. if (config.atrule) {
  30333. for (var name in config.atrule) {
  30334. var atrule = config.atrule[name];
  30335. if (atrule.parse) {
  30336. parserConfig.atrule[name] = atrule.parse;
  30337. }
  30338. }
  30339. }
  30340. if (config.pseudo) {
  30341. for (var name in config.pseudo) {
  30342. var pseudo = config.pseudo[name];
  30343. if (pseudo.parse) {
  30344. parserConfig.pseudo[name] = pseudo.parse;
  30345. }
  30346. }
  30347. }
  30348. if (config.node) {
  30349. for (var name in config.node) {
  30350. parserConfig[name] = config.node[name].parse;
  30351. }
  30352. }
  30353. return parserConfig;
  30354. }
  30355. module.exports = function createParser(config) {
  30356. var parser = {
  30357. scanner: new Tokenizer(),
  30358. filename: '<unknown>',
  30359. needPositions: false,
  30360. onParseError: noop,
  30361. onParseErrorThrow: false,
  30362. parseAtrulePrelude: true,
  30363. parseRulePrelude: true,
  30364. parseValue: true,
  30365. parseCustomProperty: false,
  30366. readSequence: sequence,
  30367. createList: function() {
  30368. return new List();
  30369. },
  30370. createSingleNodeList: function(node) {
  30371. return new List().appendData(node);
  30372. },
  30373. getFirstListNode: function(list) {
  30374. return list && list.first();
  30375. },
  30376. getLastListNode: function(list) {
  30377. return list.last();
  30378. },
  30379. parseWithFallback: function(consumer, fallback) {
  30380. var startToken = this.scanner.currentToken;
  30381. try {
  30382. return consumer.call(this);
  30383. } catch (e) {
  30384. if (this.onParseErrorThrow) {
  30385. throw e;
  30386. }
  30387. var fallbackNode = fallback.call(this, startToken);
  30388. this.onParseErrorThrow = true;
  30389. this.onParseError(e, fallbackNode);
  30390. this.onParseErrorThrow = false;
  30391. return fallbackNode;
  30392. }
  30393. },
  30394. getLocation: function(start, end) {
  30395. if (this.needPositions) {
  30396. return this.scanner.getLocationRange(
  30397. start,
  30398. end,
  30399. this.filename
  30400. );
  30401. }
  30402. return null;
  30403. },
  30404. getLocationFromList: function(list) {
  30405. if (this.needPositions) {
  30406. var head = this.getFirstListNode(list);
  30407. var tail = this.getLastListNode(list);
  30408. return this.scanner.getLocationRange(
  30409. head !== null ? head.loc.start.offset - this.scanner.startOffset : this.scanner.tokenStart,
  30410. tail !== null ? tail.loc.end.offset - this.scanner.startOffset : this.scanner.tokenStart,
  30411. this.filename
  30412. );
  30413. }
  30414. return null;
  30415. }
  30416. };
  30417. config = processConfig(config || {});
  30418. for (var key in config) {
  30419. parser[key] = config[key];
  30420. }
  30421. return function(source, options) {
  30422. options = options || {};
  30423. var context = options.context || 'default';
  30424. var ast;
  30425. parser.scanner.setSource(source, options.offset, options.line, options.column);
  30426. parser.filename = options.filename || '<unknown>';
  30427. parser.needPositions = Boolean(options.positions);
  30428. parser.onParseError = typeof options.onParseError === 'function' ? options.onParseError : noop;
  30429. parser.onParseErrorThrow = false;
  30430. parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;
  30431. parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;
  30432. parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;
  30433. parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;
  30434. if (!parser.context.hasOwnProperty(context)) {
  30435. throw new Error('Unknown context `' + context + '`');
  30436. }
  30437. ast = parser.context[context].call(parser, options);
  30438. if (!parser.scanner.eof) {
  30439. parser.scanner.error();
  30440. }
  30441. return ast;
  30442. };
  30443. };
  30444. /***/ }),
  30445. /* 111 */
  30446. /***/ (function(module, exports, __webpack_require__) {
  30447. var TYPE = __webpack_require__(0).TYPE;
  30448. var WHITESPACE = TYPE.WhiteSpace;
  30449. var COMMENT = TYPE.Comment;
  30450. module.exports = function readSequence(recognizer) {
  30451. var children = this.createList();
  30452. var child = null;
  30453. var context = {
  30454. recognizer: recognizer,
  30455. space: null,
  30456. ignoreWS: false,
  30457. ignoreWSAfter: false
  30458. };
  30459. this.scanner.skipSC();
  30460. while (!this.scanner.eof) {
  30461. switch (this.scanner.tokenType) {
  30462. case COMMENT:
  30463. this.scanner.next();
  30464. continue;
  30465. case WHITESPACE:
  30466. if (context.ignoreWS) {
  30467. this.scanner.next();
  30468. } else {
  30469. context.space = this.WhiteSpace();
  30470. }
  30471. continue;
  30472. }
  30473. child = recognizer.getNode.call(this, context);
  30474. if (child === undefined) {
  30475. break;
  30476. }
  30477. if (context.space !== null) {
  30478. children.push(context.space);
  30479. context.space = null;
  30480. }
  30481. children.push(child);
  30482. if (context.ignoreWSAfter) {
  30483. context.ignoreWSAfter = false;
  30484. context.ignoreWS = true;
  30485. } else {
  30486. context.ignoreWS = false;
  30487. }
  30488. }
  30489. return children;
  30490. };
  30491. /***/ }),
  30492. /* 112 */
  30493. /***/ (function(module, exports, __webpack_require__) {
  30494. "use strict";
  30495. var sourceMap = __webpack_require__(113);
  30496. var hasOwnProperty = Object.prototype.hasOwnProperty;
  30497. function processChildren(node, delimeter) {
  30498. var list = node.children;
  30499. var prev = null;
  30500. if (typeof delimeter !== 'function') {
  30501. list.forEach(this.node, this);
  30502. } else {
  30503. list.forEach(function(node) {
  30504. if (prev !== null) {
  30505. delimeter.call(this, prev);
  30506. }
  30507. this.node(node);
  30508. prev = node;
  30509. }, this);
  30510. }
  30511. }
  30512. module.exports = function createGenerator(config) {
  30513. function processNode(node) {
  30514. if (hasOwnProperty.call(types, node.type)) {
  30515. types[node.type].call(this, node);
  30516. } else {
  30517. throw new Error('Unknown node type: ' + node.type);
  30518. }
  30519. }
  30520. var types = {};
  30521. if (config.node) {
  30522. for (var name in config.node) {
  30523. types[name] = config.node[name].generate;
  30524. }
  30525. }
  30526. return function(node, options) {
  30527. var buffer = '';
  30528. var handlers = {
  30529. children: processChildren,
  30530. node: processNode,
  30531. chunk: function(chunk) {
  30532. buffer += chunk;
  30533. },
  30534. result: function() {
  30535. return buffer;
  30536. }
  30537. };
  30538. if (options) {
  30539. if (typeof options.decorator === 'function') {
  30540. handlers = options.decorator(handlers);
  30541. }
  30542. if (options.sourceMap) {
  30543. handlers = sourceMap(handlers);
  30544. }
  30545. }
  30546. handlers.node(node);
  30547. return handlers.result();
  30548. };
  30549. };
  30550. /***/ }),
  30551. /* 113 */
  30552. /***/ (function(module, exports, __webpack_require__) {
  30553. "use strict";
  30554. var SourceMapGenerator = __webpack_require__(114).SourceMapGenerator;
  30555. var trackNodes = {
  30556. Atrule: true,
  30557. Selector: true,
  30558. Declaration: true
  30559. };
  30560. module.exports = function generateSourceMap(handlers) {
  30561. var map = new SourceMapGenerator();
  30562. var line = 1;
  30563. var column = 0;
  30564. var generated = {
  30565. line: 1,
  30566. column: 0
  30567. };
  30568. var original = {
  30569. line: 0, // should be zero to add first mapping
  30570. column: 0
  30571. };
  30572. var sourceMappingActive = false;
  30573. var activatedGenerated = {
  30574. line: 1,
  30575. column: 0
  30576. };
  30577. var activatedMapping = {
  30578. generated: activatedGenerated
  30579. };
  30580. var handlersNode = handlers.node;
  30581. handlers.node = function(node) {
  30582. if (node.loc && node.loc.start && trackNodes.hasOwnProperty(node.type)) {
  30583. var nodeLine = node.loc.start.line;
  30584. var nodeColumn = node.loc.start.column - 1;
  30585. if (original.line !== nodeLine ||
  30586. original.column !== nodeColumn) {
  30587. original.line = nodeLine;
  30588. original.column = nodeColumn;
  30589. generated.line = line;
  30590. generated.column = column;
  30591. if (sourceMappingActive) {
  30592. sourceMappingActive = false;
  30593. if (generated.line !== activatedGenerated.line ||
  30594. generated.column !== activatedGenerated.column) {
  30595. map.addMapping(activatedMapping);
  30596. }
  30597. }
  30598. sourceMappingActive = true;
  30599. map.addMapping({
  30600. source: node.loc.source,
  30601. original: original,
  30602. generated: generated
  30603. });
  30604. }
  30605. }
  30606. handlersNode.call(this, node);
  30607. if (sourceMappingActive && trackNodes.hasOwnProperty(node.type)) {
  30608. activatedGenerated.line = line;
  30609. activatedGenerated.column = column;
  30610. }
  30611. };
  30612. var handlersChunk = handlers.chunk;
  30613. handlers.chunk = function(chunk) {
  30614. for (var i = 0; i < chunk.length; i++) {
  30615. if (chunk.charCodeAt(i) === 10) { // \n
  30616. line++;
  30617. column = 0;
  30618. } else {
  30619. column++;
  30620. }
  30621. }
  30622. handlersChunk(chunk);
  30623. };
  30624. var handlersResult = handlers.result;
  30625. handlers.result = function() {
  30626. if (sourceMappingActive) {
  30627. map.addMapping(activatedMapping);
  30628. }
  30629. return {
  30630. css: handlersResult(),
  30631. map: map
  30632. };
  30633. };
  30634. return handlers;
  30635. };
  30636. /***/ }),
  30637. /* 114 */
  30638. /***/ (function(module, exports, __webpack_require__) {
  30639. /*
  30640. * Copyright 2009-2011 Mozilla Foundation and contributors
  30641. * Licensed under the New BSD license. See LICENSE.txt or:
  30642. * http://opensource.org/licenses/BSD-3-Clause
  30643. */
  30644. exports.SourceMapGenerator = __webpack_require__(50).SourceMapGenerator;
  30645. exports.SourceMapConsumer = __webpack_require__(117).SourceMapConsumer;
  30646. exports.SourceNode = __webpack_require__(120).SourceNode;
  30647. /***/ }),
  30648. /* 115 */
  30649. /***/ (function(module, exports) {
  30650. /* -*- Mode: js; js-indent-level: 2; -*- */
  30651. /*
  30652. * Copyright 2011 Mozilla Foundation and contributors
  30653. * Licensed under the New BSD license. See LICENSE or:
  30654. * http://opensource.org/licenses/BSD-3-Clause
  30655. */
  30656. var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
  30657. /**
  30658. * Encode an integer in the range of 0 to 63 to a single base 64 digit.
  30659. */
  30660. exports.encode = function (number) {
  30661. if (0 <= number && number < intToCharMap.length) {
  30662. return intToCharMap[number];
  30663. }
  30664. throw new TypeError("Must be between 0 and 63: " + number);
  30665. };
  30666. /**
  30667. * Decode a single base 64 character code digit to an integer. Returns -1 on
  30668. * failure.
  30669. */
  30670. exports.decode = function (charCode) {
  30671. var bigA = 65; // 'A'
  30672. var bigZ = 90; // 'Z'
  30673. var littleA = 97; // 'a'
  30674. var littleZ = 122; // 'z'
  30675. var zero = 48; // '0'
  30676. var nine = 57; // '9'
  30677. var plus = 43; // '+'
  30678. var slash = 47; // '/'
  30679. var littleOffset = 26;
  30680. var numberOffset = 52;
  30681. // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  30682. if (bigA <= charCode && charCode <= bigZ) {
  30683. return (charCode - bigA);
  30684. }
  30685. // 26 - 51: abcdefghijklmnopqrstuvwxyz
  30686. if (littleA <= charCode && charCode <= littleZ) {
  30687. return (charCode - littleA + littleOffset);
  30688. }
  30689. // 52 - 61: 0123456789
  30690. if (zero <= charCode && charCode <= nine) {
  30691. return (charCode - zero + numberOffset);
  30692. }
  30693. // 62: +
  30694. if (charCode == plus) {
  30695. return 62;
  30696. }
  30697. // 63: /
  30698. if (charCode == slash) {
  30699. return 63;
  30700. }
  30701. // Invalid base64 digit.
  30702. return -1;
  30703. };
  30704. /***/ }),
  30705. /* 116 */
  30706. /***/ (function(module, exports, __webpack_require__) {
  30707. /* -*- Mode: js; js-indent-level: 2; -*- */
  30708. /*
  30709. * Copyright 2014 Mozilla Foundation and contributors
  30710. * Licensed under the New BSD license. See LICENSE or:
  30711. * http://opensource.org/licenses/BSD-3-Clause
  30712. */
  30713. var util = __webpack_require__(9);
  30714. /**
  30715. * Determine whether mappingB is after mappingA with respect to generated
  30716. * position.
  30717. */
  30718. function generatedPositionAfter(mappingA, mappingB) {
  30719. // Optimized for most common case
  30720. var lineA = mappingA.generatedLine;
  30721. var lineB = mappingB.generatedLine;
  30722. var columnA = mappingA.generatedColumn;
  30723. var columnB = mappingB.generatedColumn;
  30724. return lineB > lineA || lineB == lineA && columnB >= columnA ||
  30725. util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
  30726. }
  30727. /**
  30728. * A data structure to provide a sorted view of accumulated mappings in a
  30729. * performance conscious manner. It trades a neglibable overhead in general
  30730. * case for a large speedup in case of mappings being added in order.
  30731. */
  30732. function MappingList() {
  30733. this._array = [];
  30734. this._sorted = true;
  30735. // Serves as infimum
  30736. this._last = {generatedLine: -1, generatedColumn: 0};
  30737. }
  30738. /**
  30739. * Iterate through internal items. This method takes the same arguments that
  30740. * `Array.prototype.forEach` takes.
  30741. *
  30742. * NOTE: The order of the mappings is NOT guaranteed.
  30743. */
  30744. MappingList.prototype.unsortedForEach =
  30745. function MappingList_forEach(aCallback, aThisArg) {
  30746. this._array.forEach(aCallback, aThisArg);
  30747. };
  30748. /**
  30749. * Add the given source mapping.
  30750. *
  30751. * @param Object aMapping
  30752. */
  30753. MappingList.prototype.add = function MappingList_add(aMapping) {
  30754. if (generatedPositionAfter(this._last, aMapping)) {
  30755. this._last = aMapping;
  30756. this._array.push(aMapping);
  30757. } else {
  30758. this._sorted = false;
  30759. this._array.push(aMapping);
  30760. }
  30761. };
  30762. /**
  30763. * Returns the flat, sorted array of mappings. The mappings are sorted by
  30764. * generated position.
  30765. *
  30766. * WARNING: This method returns internal data without copying, for
  30767. * performance. The return value must NOT be mutated, and should be treated as
  30768. * an immutable borrow. If you want to take ownership, you must make your own
  30769. * copy.
  30770. */
  30771. MappingList.prototype.toArray = function MappingList_toArray() {
  30772. if (!this._sorted) {
  30773. this._array.sort(util.compareByGeneratedPositionsInflated);
  30774. this._sorted = true;
  30775. }
  30776. return this._array;
  30777. };
  30778. exports.MappingList = MappingList;
  30779. /***/ }),
  30780. /* 117 */
  30781. /***/ (function(module, exports, __webpack_require__) {
  30782. /* -*- Mode: js; js-indent-level: 2; -*- */
  30783. /*
  30784. * Copyright 2011 Mozilla Foundation and contributors
  30785. * Licensed under the New BSD license. See LICENSE or:
  30786. * http://opensource.org/licenses/BSD-3-Clause
  30787. */
  30788. var util = __webpack_require__(9);
  30789. var binarySearch = __webpack_require__(118);
  30790. var ArraySet = __webpack_require__(52).ArraySet;
  30791. var base64VLQ = __webpack_require__(51);
  30792. var quickSort = __webpack_require__(119).quickSort;
  30793. function SourceMapConsumer(aSourceMap) {
  30794. var sourceMap = aSourceMap;
  30795. if (typeof aSourceMap === 'string') {
  30796. sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
  30797. }
  30798. return sourceMap.sections != null
  30799. ? new IndexedSourceMapConsumer(sourceMap)
  30800. : new BasicSourceMapConsumer(sourceMap);
  30801. }
  30802. SourceMapConsumer.fromSourceMap = function(aSourceMap) {
  30803. return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
  30804. }
  30805. /**
  30806. * The version of the source mapping spec that we are consuming.
  30807. */
  30808. SourceMapConsumer.prototype._version = 3;
  30809. // `__generatedMappings` and `__originalMappings` are arrays that hold the
  30810. // parsed mapping coordinates from the source map's "mappings" attribute. They
  30811. // are lazily instantiated, accessed via the `_generatedMappings` and
  30812. // `_originalMappings` getters respectively, and we only parse the mappings
  30813. // and create these arrays once queried for a source location. We jump through
  30814. // these hoops because there can be many thousands of mappings, and parsing
  30815. // them is expensive, so we only want to do it if we must.
  30816. //
  30817. // Each object in the arrays is of the form:
  30818. //
  30819. // {
  30820. // generatedLine: The line number in the generated code,
  30821. // generatedColumn: The column number in the generated code,
  30822. // source: The path to the original source file that generated this
  30823. // chunk of code,
  30824. // originalLine: The line number in the original source that
  30825. // corresponds to this chunk of generated code,
  30826. // originalColumn: The column number in the original source that
  30827. // corresponds to this chunk of generated code,
  30828. // name: The name of the original symbol which generated this chunk of
  30829. // code.
  30830. // }
  30831. //
  30832. // All properties except for `generatedLine` and `generatedColumn` can be
  30833. // `null`.
  30834. //
  30835. // `_generatedMappings` is ordered by the generated positions.
  30836. //
  30837. // `_originalMappings` is ordered by the original positions.
  30838. SourceMapConsumer.prototype.__generatedMappings = null;
  30839. Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
  30840. get: function () {
  30841. if (!this.__generatedMappings) {
  30842. this._parseMappings(this._mappings, this.sourceRoot);
  30843. }
  30844. return this.__generatedMappings;
  30845. }
  30846. });
  30847. SourceMapConsumer.prototype.__originalMappings = null;
  30848. Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
  30849. get: function () {
  30850. if (!this.__originalMappings) {
  30851. this._parseMappings(this._mappings, this.sourceRoot);
  30852. }
  30853. return this.__originalMappings;
  30854. }
  30855. });
  30856. SourceMapConsumer.prototype._charIsMappingSeparator =
  30857. function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
  30858. var c = aStr.charAt(index);
  30859. return c === ";" || c === ",";
  30860. };
  30861. /**
  30862. * Parse the mappings in a string in to a data structure which we can easily
  30863. * query (the ordered arrays in the `this.__generatedMappings` and
  30864. * `this.__originalMappings` properties).
  30865. */
  30866. SourceMapConsumer.prototype._parseMappings =
  30867. function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  30868. throw new Error("Subclasses must implement _parseMappings");
  30869. };
  30870. SourceMapConsumer.GENERATED_ORDER = 1;
  30871. SourceMapConsumer.ORIGINAL_ORDER = 2;
  30872. SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
  30873. SourceMapConsumer.LEAST_UPPER_BOUND = 2;
  30874. /**
  30875. * Iterate over each mapping between an original source/line/column and a
  30876. * generated line/column in this source map.
  30877. *
  30878. * @param Function aCallback
  30879. * The function that is called with each mapping.
  30880. * @param Object aContext
  30881. * Optional. If specified, this object will be the value of `this` every
  30882. * time that `aCallback` is called.
  30883. * @param aOrder
  30884. * Either `SourceMapConsumer.GENERATED_ORDER` or
  30885. * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
  30886. * iterate over the mappings sorted by the generated file's line/column
  30887. * order or the original's source/line/column order, respectively. Defaults to
  30888. * `SourceMapConsumer.GENERATED_ORDER`.
  30889. */
  30890. SourceMapConsumer.prototype.eachMapping =
  30891. function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
  30892. var context = aContext || null;
  30893. var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
  30894. var mappings;
  30895. switch (order) {
  30896. case SourceMapConsumer.GENERATED_ORDER:
  30897. mappings = this._generatedMappings;
  30898. break;
  30899. case SourceMapConsumer.ORIGINAL_ORDER:
  30900. mappings = this._originalMappings;
  30901. break;
  30902. default:
  30903. throw new Error("Unknown order of iteration.");
  30904. }
  30905. var sourceRoot = this.sourceRoot;
  30906. mappings.map(function (mapping) {
  30907. var source = mapping.source === null ? null : this._sources.at(mapping.source);
  30908. if (source != null && sourceRoot != null) {
  30909. source = util.join(sourceRoot, source);
  30910. }
  30911. return {
  30912. source: source,
  30913. generatedLine: mapping.generatedLine,
  30914. generatedColumn: mapping.generatedColumn,
  30915. originalLine: mapping.originalLine,
  30916. originalColumn: mapping.originalColumn,
  30917. name: mapping.name === null ? null : this._names.at(mapping.name)
  30918. };
  30919. }, this).forEach(aCallback, context);
  30920. };
  30921. /**
  30922. * Returns all generated line and column information for the original source,
  30923. * line, and column provided. If no column is provided, returns all mappings
  30924. * corresponding to a either the line we are searching for or the next
  30925. * closest line that has any mappings. Otherwise, returns all mappings
  30926. * corresponding to the given line and either the column we are searching for
  30927. * or the next closest column that has any offsets.
  30928. *
  30929. * The only argument is an object with the following properties:
  30930. *
  30931. * - source: The filename of the original source.
  30932. * - line: The line number in the original source.
  30933. * - column: Optional. the column number in the original source.
  30934. *
  30935. * and an array of objects is returned, each with the following properties:
  30936. *
  30937. * - line: The line number in the generated source, or null.
  30938. * - column: The column number in the generated source, or null.
  30939. */
  30940. SourceMapConsumer.prototype.allGeneratedPositionsFor =
  30941. function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
  30942. var line = util.getArg(aArgs, 'line');
  30943. // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
  30944. // returns the index of the closest mapping less than the needle. By
  30945. // setting needle.originalColumn to 0, we thus find the last mapping for
  30946. // the given line, provided such a mapping exists.
  30947. var needle = {
  30948. source: util.getArg(aArgs, 'source'),
  30949. originalLine: line,
  30950. originalColumn: util.getArg(aArgs, 'column', 0)
  30951. };
  30952. if (this.sourceRoot != null) {
  30953. needle.source = util.relative(this.sourceRoot, needle.source);
  30954. }
  30955. if (!this._sources.has(needle.source)) {
  30956. return [];
  30957. }
  30958. needle.source = this._sources.indexOf(needle.source);
  30959. var mappings = [];
  30960. var index = this._findMapping(needle,
  30961. this._originalMappings,
  30962. "originalLine",
  30963. "originalColumn",
  30964. util.compareByOriginalPositions,
  30965. binarySearch.LEAST_UPPER_BOUND);
  30966. if (index >= 0) {
  30967. var mapping = this._originalMappings[index];
  30968. if (aArgs.column === undefined) {
  30969. var originalLine = mapping.originalLine;
  30970. // Iterate until either we run out of mappings, or we run into
  30971. // a mapping for a different line than the one we found. Since
  30972. // mappings are sorted, this is guaranteed to find all mappings for
  30973. // the line we found.
  30974. while (mapping && mapping.originalLine === originalLine) {
  30975. mappings.push({
  30976. line: util.getArg(mapping, 'generatedLine', null),
  30977. column: util.getArg(mapping, 'generatedColumn', null),
  30978. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  30979. });
  30980. mapping = this._originalMappings[++index];
  30981. }
  30982. } else {
  30983. var originalColumn = mapping.originalColumn;
  30984. // Iterate until either we run out of mappings, or we run into
  30985. // a mapping for a different line than the one we were searching for.
  30986. // Since mappings are sorted, this is guaranteed to find all mappings for
  30987. // the line we are searching for.
  30988. while (mapping &&
  30989. mapping.originalLine === line &&
  30990. mapping.originalColumn == originalColumn) {
  30991. mappings.push({
  30992. line: util.getArg(mapping, 'generatedLine', null),
  30993. column: util.getArg(mapping, 'generatedColumn', null),
  30994. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  30995. });
  30996. mapping = this._originalMappings[++index];
  30997. }
  30998. }
  30999. }
  31000. return mappings;
  31001. };
  31002. exports.SourceMapConsumer = SourceMapConsumer;
  31003. /**
  31004. * A BasicSourceMapConsumer instance represents a parsed source map which we can
  31005. * query for information about the original file positions by giving it a file
  31006. * position in the generated source.
  31007. *
  31008. * The only parameter is the raw source map (either as a JSON string, or
  31009. * already parsed to an object). According to the spec, source maps have the
  31010. * following attributes:
  31011. *
  31012. * - version: Which version of the source map spec this map is following.
  31013. * - sources: An array of URLs to the original source files.
  31014. * - names: An array of identifiers which can be referrenced by individual mappings.
  31015. * - sourceRoot: Optional. The URL root from which all sources are relative.
  31016. * - sourcesContent: Optional. An array of contents of the original source files.
  31017. * - mappings: A string of base64 VLQs which contain the actual mappings.
  31018. * - file: Optional. The generated file this source map is associated with.
  31019. *
  31020. * Here is an example source map, taken from the source map spec[0]:
  31021. *
  31022. * {
  31023. * version : 3,
  31024. * file: "out.js",
  31025. * sourceRoot : "",
  31026. * sources: ["foo.js", "bar.js"],
  31027. * names: ["src", "maps", "are", "fun"],
  31028. * mappings: "AA,AB;;ABCDE;"
  31029. * }
  31030. *
  31031. * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
  31032. */
  31033. function BasicSourceMapConsumer(aSourceMap) {
  31034. var sourceMap = aSourceMap;
  31035. if (typeof aSourceMap === 'string') {
  31036. sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
  31037. }
  31038. var version = util.getArg(sourceMap, 'version');
  31039. var sources = util.getArg(sourceMap, 'sources');
  31040. // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
  31041. // requires the array) to play nice here.
  31042. var names = util.getArg(sourceMap, 'names', []);
  31043. var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  31044. var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  31045. var mappings = util.getArg(sourceMap, 'mappings');
  31046. var file = util.getArg(sourceMap, 'file', null);
  31047. // Once again, Sass deviates from the spec and supplies the version as a
  31048. // string rather than a number, so we use loose equality checking here.
  31049. if (version != this._version) {
  31050. throw new Error('Unsupported version: ' + version);
  31051. }
  31052. sources = sources
  31053. .map(String)
  31054. // Some source maps produce relative source paths like "./foo.js" instead of
  31055. // "foo.js". Normalize these first so that future comparisons will succeed.
  31056. // See bugzil.la/1090768.
  31057. .map(util.normalize)
  31058. // Always ensure that absolute sources are internally stored relative to
  31059. // the source root, if the source root is absolute. Not doing this would
  31060. // be particularly problematic when the source root is a prefix of the
  31061. // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
  31062. .map(function (source) {
  31063. return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
  31064. ? util.relative(sourceRoot, source)
  31065. : source;
  31066. });
  31067. // Pass `true` below to allow duplicate names and sources. While source maps
  31068. // are intended to be compressed and deduplicated, the TypeScript compiler
  31069. // sometimes generates source maps with duplicates in them. See Github issue
  31070. // #72 and bugzil.la/889492.
  31071. this._names = ArraySet.fromArray(names.map(String), true);
  31072. this._sources = ArraySet.fromArray(sources, true);
  31073. this.sourceRoot = sourceRoot;
  31074. this.sourcesContent = sourcesContent;
  31075. this._mappings = mappings;
  31076. this.file = file;
  31077. }
  31078. BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
  31079. BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
  31080. /**
  31081. * Create a BasicSourceMapConsumer from a SourceMapGenerator.
  31082. *
  31083. * @param SourceMapGenerator aSourceMap
  31084. * The source map that will be consumed.
  31085. * @returns BasicSourceMapConsumer
  31086. */
  31087. BasicSourceMapConsumer.fromSourceMap =
  31088. function SourceMapConsumer_fromSourceMap(aSourceMap) {
  31089. var smc = Object.create(BasicSourceMapConsumer.prototype);
  31090. var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
  31091. var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
  31092. smc.sourceRoot = aSourceMap._sourceRoot;
  31093. smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
  31094. smc.sourceRoot);
  31095. smc.file = aSourceMap._file;
  31096. // Because we are modifying the entries (by converting string sources and
  31097. // names to indices into the sources and names ArraySets), we have to make
  31098. // a copy of the entry or else bad things happen. Shared mutable state
  31099. // strikes again! See github issue #191.
  31100. var generatedMappings = aSourceMap._mappings.toArray().slice();
  31101. var destGeneratedMappings = smc.__generatedMappings = [];
  31102. var destOriginalMappings = smc.__originalMappings = [];
  31103. for (var i = 0, length = generatedMappings.length; i < length; i++) {
  31104. var srcMapping = generatedMappings[i];
  31105. var destMapping = new Mapping;
  31106. destMapping.generatedLine = srcMapping.generatedLine;
  31107. destMapping.generatedColumn = srcMapping.generatedColumn;
  31108. if (srcMapping.source) {
  31109. destMapping.source = sources.indexOf(srcMapping.source);
  31110. destMapping.originalLine = srcMapping.originalLine;
  31111. destMapping.originalColumn = srcMapping.originalColumn;
  31112. if (srcMapping.name) {
  31113. destMapping.name = names.indexOf(srcMapping.name);
  31114. }
  31115. destOriginalMappings.push(destMapping);
  31116. }
  31117. destGeneratedMappings.push(destMapping);
  31118. }
  31119. quickSort(smc.__originalMappings, util.compareByOriginalPositions);
  31120. return smc;
  31121. };
  31122. /**
  31123. * The version of the source mapping spec that we are consuming.
  31124. */
  31125. BasicSourceMapConsumer.prototype._version = 3;
  31126. /**
  31127. * The list of original sources.
  31128. */
  31129. Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
  31130. get: function () {
  31131. return this._sources.toArray().map(function (s) {
  31132. return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
  31133. }, this);
  31134. }
  31135. });
  31136. /**
  31137. * Provide the JIT with a nice shape / hidden class.
  31138. */
  31139. function Mapping() {
  31140. this.generatedLine = 0;
  31141. this.generatedColumn = 0;
  31142. this.source = null;
  31143. this.originalLine = null;
  31144. this.originalColumn = null;
  31145. this.name = null;
  31146. }
  31147. /**
  31148. * Parse the mappings in a string in to a data structure which we can easily
  31149. * query (the ordered arrays in the `this.__generatedMappings` and
  31150. * `this.__originalMappings` properties).
  31151. */
  31152. BasicSourceMapConsumer.prototype._parseMappings =
  31153. function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  31154. var generatedLine = 1;
  31155. var previousGeneratedColumn = 0;
  31156. var previousOriginalLine = 0;
  31157. var previousOriginalColumn = 0;
  31158. var previousSource = 0;
  31159. var previousName = 0;
  31160. var length = aStr.length;
  31161. var index = 0;
  31162. var cachedSegments = {};
  31163. var temp = {};
  31164. var originalMappings = [];
  31165. var generatedMappings = [];
  31166. var mapping, str, segment, end, value;
  31167. while (index < length) {
  31168. if (aStr.charAt(index) === ';') {
  31169. generatedLine++;
  31170. index++;
  31171. previousGeneratedColumn = 0;
  31172. }
  31173. else if (aStr.charAt(index) === ',') {
  31174. index++;
  31175. }
  31176. else {
  31177. mapping = new Mapping();
  31178. mapping.generatedLine = generatedLine;
  31179. // Because each offset is encoded relative to the previous one,
  31180. // many segments often have the same encoding. We can exploit this
  31181. // fact by caching the parsed variable length fields of each segment,
  31182. // allowing us to avoid a second parse if we encounter the same
  31183. // segment again.
  31184. for (end = index; end < length; end++) {
  31185. if (this._charIsMappingSeparator(aStr, end)) {
  31186. break;
  31187. }
  31188. }
  31189. str = aStr.slice(index, end);
  31190. segment = cachedSegments[str];
  31191. if (segment) {
  31192. index += str.length;
  31193. } else {
  31194. segment = [];
  31195. while (index < end) {
  31196. base64VLQ.decode(aStr, index, temp);
  31197. value = temp.value;
  31198. index = temp.rest;
  31199. segment.push(value);
  31200. }
  31201. if (segment.length === 2) {
  31202. throw new Error('Found a source, but no line and column');
  31203. }
  31204. if (segment.length === 3) {
  31205. throw new Error('Found a source and line, but no column');
  31206. }
  31207. cachedSegments[str] = segment;
  31208. }
  31209. // Generated column.
  31210. mapping.generatedColumn = previousGeneratedColumn + segment[0];
  31211. previousGeneratedColumn = mapping.generatedColumn;
  31212. if (segment.length > 1) {
  31213. // Original source.
  31214. mapping.source = previousSource + segment[1];
  31215. previousSource += segment[1];
  31216. // Original line.
  31217. mapping.originalLine = previousOriginalLine + segment[2];
  31218. previousOriginalLine = mapping.originalLine;
  31219. // Lines are stored 0-based
  31220. mapping.originalLine += 1;
  31221. // Original column.
  31222. mapping.originalColumn = previousOriginalColumn + segment[3];
  31223. previousOriginalColumn = mapping.originalColumn;
  31224. if (segment.length > 4) {
  31225. // Original name.
  31226. mapping.name = previousName + segment[4];
  31227. previousName += segment[4];
  31228. }
  31229. }
  31230. generatedMappings.push(mapping);
  31231. if (typeof mapping.originalLine === 'number') {
  31232. originalMappings.push(mapping);
  31233. }
  31234. }
  31235. }
  31236. quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
  31237. this.__generatedMappings = generatedMappings;
  31238. quickSort(originalMappings, util.compareByOriginalPositions);
  31239. this.__originalMappings = originalMappings;
  31240. };
  31241. /**
  31242. * Find the mapping that best matches the hypothetical "needle" mapping that
  31243. * we are searching for in the given "haystack" of mappings.
  31244. */
  31245. BasicSourceMapConsumer.prototype._findMapping =
  31246. function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
  31247. aColumnName, aComparator, aBias) {
  31248. // To return the position we are searching for, we must first find the
  31249. // mapping for the given position and then return the opposite position it
  31250. // points to. Because the mappings are sorted, we can use binary search to
  31251. // find the best mapping.
  31252. if (aNeedle[aLineName] <= 0) {
  31253. throw new TypeError('Line must be greater than or equal to 1, got '
  31254. + aNeedle[aLineName]);
  31255. }
  31256. if (aNeedle[aColumnName] < 0) {
  31257. throw new TypeError('Column must be greater than or equal to 0, got '
  31258. + aNeedle[aColumnName]);
  31259. }
  31260. return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
  31261. };
  31262. /**
  31263. * Compute the last column for each generated mapping. The last column is
  31264. * inclusive.
  31265. */
  31266. BasicSourceMapConsumer.prototype.computeColumnSpans =
  31267. function SourceMapConsumer_computeColumnSpans() {
  31268. for (var index = 0; index < this._generatedMappings.length; ++index) {
  31269. var mapping = this._generatedMappings[index];
  31270. // Mappings do not contain a field for the last generated columnt. We
  31271. // can come up with an optimistic estimate, however, by assuming that
  31272. // mappings are contiguous (i.e. given two consecutive mappings, the
  31273. // first mapping ends where the second one starts).
  31274. if (index + 1 < this._generatedMappings.length) {
  31275. var nextMapping = this._generatedMappings[index + 1];
  31276. if (mapping.generatedLine === nextMapping.generatedLine) {
  31277. mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
  31278. continue;
  31279. }
  31280. }
  31281. // The last mapping for each line spans the entire line.
  31282. mapping.lastGeneratedColumn = Infinity;
  31283. }
  31284. };
  31285. /**
  31286. * Returns the original source, line, and column information for the generated
  31287. * source's line and column positions provided. The only argument is an object
  31288. * with the following properties:
  31289. *
  31290. * - line: The line number in the generated source.
  31291. * - column: The column number in the generated source.
  31292. * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
  31293. * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
  31294. * closest element that is smaller than or greater than the one we are
  31295. * searching for, respectively, if the exact element cannot be found.
  31296. * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
  31297. *
  31298. * and an object is returned with the following properties:
  31299. *
  31300. * - source: The original source file, or null.
  31301. * - line: The line number in the original source, or null.
  31302. * - column: The column number in the original source, or null.
  31303. * - name: The original identifier, or null.
  31304. */
  31305. BasicSourceMapConsumer.prototype.originalPositionFor =
  31306. function SourceMapConsumer_originalPositionFor(aArgs) {
  31307. var needle = {
  31308. generatedLine: util.getArg(aArgs, 'line'),
  31309. generatedColumn: util.getArg(aArgs, 'column')
  31310. };
  31311. var index = this._findMapping(
  31312. needle,
  31313. this._generatedMappings,
  31314. "generatedLine",
  31315. "generatedColumn",
  31316. util.compareByGeneratedPositionsDeflated,
  31317. util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
  31318. );
  31319. if (index >= 0) {
  31320. var mapping = this._generatedMappings[index];
  31321. if (mapping.generatedLine === needle.generatedLine) {
  31322. var source = util.getArg(mapping, 'source', null);
  31323. if (source !== null) {
  31324. source = this._sources.at(source);
  31325. if (this.sourceRoot != null) {
  31326. source = util.join(this.sourceRoot, source);
  31327. }
  31328. }
  31329. var name = util.getArg(mapping, 'name', null);
  31330. if (name !== null) {
  31331. name = this._names.at(name);
  31332. }
  31333. return {
  31334. source: source,
  31335. line: util.getArg(mapping, 'originalLine', null),
  31336. column: util.getArg(mapping, 'originalColumn', null),
  31337. name: name
  31338. };
  31339. }
  31340. }
  31341. return {
  31342. source: null,
  31343. line: null,
  31344. column: null,
  31345. name: null
  31346. };
  31347. };
  31348. /**
  31349. * Return true if we have the source content for every source in the source
  31350. * map, false otherwise.
  31351. */
  31352. BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
  31353. function BasicSourceMapConsumer_hasContentsOfAllSources() {
  31354. if (!this.sourcesContent) {
  31355. return false;
  31356. }
  31357. return this.sourcesContent.length >= this._sources.size() &&
  31358. !this.sourcesContent.some(function (sc) { return sc == null; });
  31359. };
  31360. /**
  31361. * Returns the original source content. The only argument is the url of the
  31362. * original source file. Returns null if no original source content is
  31363. * available.
  31364. */
  31365. BasicSourceMapConsumer.prototype.sourceContentFor =
  31366. function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
  31367. if (!this.sourcesContent) {
  31368. return null;
  31369. }
  31370. if (this.sourceRoot != null) {
  31371. aSource = util.relative(this.sourceRoot, aSource);
  31372. }
  31373. if (this._sources.has(aSource)) {
  31374. return this.sourcesContent[this._sources.indexOf(aSource)];
  31375. }
  31376. var url;
  31377. if (this.sourceRoot != null
  31378. && (url = util.urlParse(this.sourceRoot))) {
  31379. // XXX: file:// URIs and absolute paths lead to unexpected behavior for
  31380. // many users. We can help them out when they expect file:// URIs to
  31381. // behave like it would if they were running a local HTTP server. See
  31382. // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
  31383. var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
  31384. if (url.scheme == "file"
  31385. && this._sources.has(fileUriAbsPath)) {
  31386. return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
  31387. }
  31388. if ((!url.path || url.path == "/")
  31389. && this._sources.has("/" + aSource)) {
  31390. return this.sourcesContent[this._sources.indexOf("/" + aSource)];
  31391. }
  31392. }
  31393. // This function is used recursively from
  31394. // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
  31395. // don't want to throw if we can't find the source - we just want to
  31396. // return null, so we provide a flag to exit gracefully.
  31397. if (nullOnMissing) {
  31398. return null;
  31399. }
  31400. else {
  31401. throw new Error('"' + aSource + '" is not in the SourceMap.');
  31402. }
  31403. };
  31404. /**
  31405. * Returns the generated line and column information for the original source,
  31406. * line, and column positions provided. The only argument is an object with
  31407. * the following properties:
  31408. *
  31409. * - source: The filename of the original source.
  31410. * - line: The line number in the original source.
  31411. * - column: The column number in the original source.
  31412. * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
  31413. * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
  31414. * closest element that is smaller than or greater than the one we are
  31415. * searching for, respectively, if the exact element cannot be found.
  31416. * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
  31417. *
  31418. * and an object is returned with the following properties:
  31419. *
  31420. * - line: The line number in the generated source, or null.
  31421. * - column: The column number in the generated source, or null.
  31422. */
  31423. BasicSourceMapConsumer.prototype.generatedPositionFor =
  31424. function SourceMapConsumer_generatedPositionFor(aArgs) {
  31425. var source = util.getArg(aArgs, 'source');
  31426. if (this.sourceRoot != null) {
  31427. source = util.relative(this.sourceRoot, source);
  31428. }
  31429. if (!this._sources.has(source)) {
  31430. return {
  31431. line: null,
  31432. column: null,
  31433. lastColumn: null
  31434. };
  31435. }
  31436. source = this._sources.indexOf(source);
  31437. var needle = {
  31438. source: source,
  31439. originalLine: util.getArg(aArgs, 'line'),
  31440. originalColumn: util.getArg(aArgs, 'column')
  31441. };
  31442. var index = this._findMapping(
  31443. needle,
  31444. this._originalMappings,
  31445. "originalLine",
  31446. "originalColumn",
  31447. util.compareByOriginalPositions,
  31448. util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
  31449. );
  31450. if (index >= 0) {
  31451. var mapping = this._originalMappings[index];
  31452. if (mapping.source === needle.source) {
  31453. return {
  31454. line: util.getArg(mapping, 'generatedLine', null),
  31455. column: util.getArg(mapping, 'generatedColumn', null),
  31456. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  31457. };
  31458. }
  31459. }
  31460. return {
  31461. line: null,
  31462. column: null,
  31463. lastColumn: null
  31464. };
  31465. };
  31466. exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
  31467. /**
  31468. * An IndexedSourceMapConsumer instance represents a parsed source map which
  31469. * we can query for information. It differs from BasicSourceMapConsumer in
  31470. * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
  31471. * input.
  31472. *
  31473. * The only parameter is a raw source map (either as a JSON string, or already
  31474. * parsed to an object). According to the spec for indexed source maps, they
  31475. * have the following attributes:
  31476. *
  31477. * - version: Which version of the source map spec this map is following.
  31478. * - file: Optional. The generated file this source map is associated with.
  31479. * - sections: A list of section definitions.
  31480. *
  31481. * Each value under the "sections" field has two fields:
  31482. * - offset: The offset into the original specified at which this section
  31483. * begins to apply, defined as an object with a "line" and "column"
  31484. * field.
  31485. * - map: A source map definition. This source map could also be indexed,
  31486. * but doesn't have to be.
  31487. *
  31488. * Instead of the "map" field, it's also possible to have a "url" field
  31489. * specifying a URL to retrieve a source map from, but that's currently
  31490. * unsupported.
  31491. *
  31492. * Here's an example source map, taken from the source map spec[0], but
  31493. * modified to omit a section which uses the "url" field.
  31494. *
  31495. * {
  31496. * version : 3,
  31497. * file: "app.js",
  31498. * sections: [{
  31499. * offset: {line:100, column:10},
  31500. * map: {
  31501. * version : 3,
  31502. * file: "section.js",
  31503. * sources: ["foo.js", "bar.js"],
  31504. * names: ["src", "maps", "are", "fun"],
  31505. * mappings: "AAAA,E;;ABCDE;"
  31506. * }
  31507. * }],
  31508. * }
  31509. *
  31510. * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
  31511. */
  31512. function IndexedSourceMapConsumer(aSourceMap) {
  31513. var sourceMap = aSourceMap;
  31514. if (typeof aSourceMap === 'string') {
  31515. sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
  31516. }
  31517. var version = util.getArg(sourceMap, 'version');
  31518. var sections = util.getArg(sourceMap, 'sections');
  31519. if (version != this._version) {
  31520. throw new Error('Unsupported version: ' + version);
  31521. }
  31522. this._sources = new ArraySet();
  31523. this._names = new ArraySet();
  31524. var lastOffset = {
  31525. line: -1,
  31526. column: 0
  31527. };
  31528. this._sections = sections.map(function (s) {
  31529. if (s.url) {
  31530. // The url field will require support for asynchronicity.
  31531. // See https://github.com/mozilla/source-map/issues/16
  31532. throw new Error('Support for url field in sections not implemented.');
  31533. }
  31534. var offset = util.getArg(s, 'offset');
  31535. var offsetLine = util.getArg(offset, 'line');
  31536. var offsetColumn = util.getArg(offset, 'column');
  31537. if (offsetLine < lastOffset.line ||
  31538. (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
  31539. throw new Error('Section offsets must be ordered and non-overlapping.');
  31540. }
  31541. lastOffset = offset;
  31542. return {
  31543. generatedOffset: {
  31544. // The offset fields are 0-based, but we use 1-based indices when
  31545. // encoding/decoding from VLQ.
  31546. generatedLine: offsetLine + 1,
  31547. generatedColumn: offsetColumn + 1
  31548. },
  31549. consumer: new SourceMapConsumer(util.getArg(s, 'map'))
  31550. }
  31551. });
  31552. }
  31553. IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
  31554. IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
  31555. /**
  31556. * The version of the source mapping spec that we are consuming.
  31557. */
  31558. IndexedSourceMapConsumer.prototype._version = 3;
  31559. /**
  31560. * The list of original sources.
  31561. */
  31562. Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
  31563. get: function () {
  31564. var sources = [];
  31565. for (var i = 0; i < this._sections.length; i++) {
  31566. for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
  31567. sources.push(this._sections[i].consumer.sources[j]);
  31568. }
  31569. }
  31570. return sources;
  31571. }
  31572. });
  31573. /**
  31574. * Returns the original source, line, and column information for the generated
  31575. * source's line and column positions provided. The only argument is an object
  31576. * with the following properties:
  31577. *
  31578. * - line: The line number in the generated source.
  31579. * - column: The column number in the generated source.
  31580. *
  31581. * and an object is returned with the following properties:
  31582. *
  31583. * - source: The original source file, or null.
  31584. * - line: The line number in the original source, or null.
  31585. * - column: The column number in the original source, or null.
  31586. * - name: The original identifier, or null.
  31587. */
  31588. IndexedSourceMapConsumer.prototype.originalPositionFor =
  31589. function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
  31590. var needle = {
  31591. generatedLine: util.getArg(aArgs, 'line'),
  31592. generatedColumn: util.getArg(aArgs, 'column')
  31593. };
  31594. // Find the section containing the generated position we're trying to map
  31595. // to an original position.
  31596. var sectionIndex = binarySearch.search(needle, this._sections,
  31597. function(needle, section) {
  31598. var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
  31599. if (cmp) {
  31600. return cmp;
  31601. }
  31602. return (needle.generatedColumn -
  31603. section.generatedOffset.generatedColumn);
  31604. });
  31605. var section = this._sections[sectionIndex];
  31606. if (!section) {
  31607. return {
  31608. source: null,
  31609. line: null,
  31610. column: null,
  31611. name: null
  31612. };
  31613. }
  31614. return section.consumer.originalPositionFor({
  31615. line: needle.generatedLine -
  31616. (section.generatedOffset.generatedLine - 1),
  31617. column: needle.generatedColumn -
  31618. (section.generatedOffset.generatedLine === needle.generatedLine
  31619. ? section.generatedOffset.generatedColumn - 1
  31620. : 0),
  31621. bias: aArgs.bias
  31622. });
  31623. };
  31624. /**
  31625. * Return true if we have the source content for every source in the source
  31626. * map, false otherwise.
  31627. */
  31628. IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
  31629. function IndexedSourceMapConsumer_hasContentsOfAllSources() {
  31630. return this._sections.every(function (s) {
  31631. return s.consumer.hasContentsOfAllSources();
  31632. });
  31633. };
  31634. /**
  31635. * Returns the original source content. The only argument is the url of the
  31636. * original source file. Returns null if no original source content is
  31637. * available.
  31638. */
  31639. IndexedSourceMapConsumer.prototype.sourceContentFor =
  31640. function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
  31641. for (var i = 0; i < this._sections.length; i++) {
  31642. var section = this._sections[i];
  31643. var content = section.consumer.sourceContentFor(aSource, true);
  31644. if (content) {
  31645. return content;
  31646. }
  31647. }
  31648. if (nullOnMissing) {
  31649. return null;
  31650. }
  31651. else {
  31652. throw new Error('"' + aSource + '" is not in the SourceMap.');
  31653. }
  31654. };
  31655. /**
  31656. * Returns the generated line and column information for the original source,
  31657. * line, and column positions provided. The only argument is an object with
  31658. * the following properties:
  31659. *
  31660. * - source: The filename of the original source.
  31661. * - line: The line number in the original source.
  31662. * - column: The column number in the original source.
  31663. *
  31664. * and an object is returned with the following properties:
  31665. *
  31666. * - line: The line number in the generated source, or null.
  31667. * - column: The column number in the generated source, or null.
  31668. */
  31669. IndexedSourceMapConsumer.prototype.generatedPositionFor =
  31670. function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
  31671. for (var i = 0; i < this._sections.length; i++) {
  31672. var section = this._sections[i];
  31673. // Only consider this section if the requested source is in the list of
  31674. // sources of the consumer.
  31675. if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
  31676. continue;
  31677. }
  31678. var generatedPosition = section.consumer.generatedPositionFor(aArgs);
  31679. if (generatedPosition) {
  31680. var ret = {
  31681. line: generatedPosition.line +
  31682. (section.generatedOffset.generatedLine - 1),
  31683. column: generatedPosition.column +
  31684. (section.generatedOffset.generatedLine === generatedPosition.line
  31685. ? section.generatedOffset.generatedColumn - 1
  31686. : 0)
  31687. };
  31688. return ret;
  31689. }
  31690. }
  31691. return {
  31692. line: null,
  31693. column: null
  31694. };
  31695. };
  31696. /**
  31697. * Parse the mappings in a string in to a data structure which we can easily
  31698. * query (the ordered arrays in the `this.__generatedMappings` and
  31699. * `this.__originalMappings` properties).
  31700. */
  31701. IndexedSourceMapConsumer.prototype._parseMappings =
  31702. function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  31703. this.__generatedMappings = [];
  31704. this.__originalMappings = [];
  31705. for (var i = 0; i < this._sections.length; i++) {
  31706. var section = this._sections[i];
  31707. var sectionMappings = section.consumer._generatedMappings;
  31708. for (var j = 0; j < sectionMappings.length; j++) {
  31709. var mapping = sectionMappings[j];
  31710. var source = section.consumer._sources.at(mapping.source);
  31711. if (section.consumer.sourceRoot !== null) {
  31712. source = util.join(section.consumer.sourceRoot, source);
  31713. }
  31714. this._sources.add(source);
  31715. source = this._sources.indexOf(source);
  31716. var name = section.consumer._names.at(mapping.name);
  31717. this._names.add(name);
  31718. name = this._names.indexOf(name);
  31719. // The mappings coming from the consumer for the section have
  31720. // generated positions relative to the start of the section, so we
  31721. // need to offset them to be relative to the start of the concatenated
  31722. // generated file.
  31723. var adjustedMapping = {
  31724. source: source,
  31725. generatedLine: mapping.generatedLine +
  31726. (section.generatedOffset.generatedLine - 1),
  31727. generatedColumn: mapping.generatedColumn +
  31728. (section.generatedOffset.generatedLine === mapping.generatedLine
  31729. ? section.generatedOffset.generatedColumn - 1
  31730. : 0),
  31731. originalLine: mapping.originalLine,
  31732. originalColumn: mapping.originalColumn,
  31733. name: name
  31734. };
  31735. this.__generatedMappings.push(adjustedMapping);
  31736. if (typeof adjustedMapping.originalLine === 'number') {
  31737. this.__originalMappings.push(adjustedMapping);
  31738. }
  31739. }
  31740. }
  31741. quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
  31742. quickSort(this.__originalMappings, util.compareByOriginalPositions);
  31743. };
  31744. exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
  31745. /***/ }),
  31746. /* 118 */
  31747. /***/ (function(module, exports) {
  31748. /* -*- Mode: js; js-indent-level: 2; -*- */
  31749. /*
  31750. * Copyright 2011 Mozilla Foundation and contributors
  31751. * Licensed under the New BSD license. See LICENSE or:
  31752. * http://opensource.org/licenses/BSD-3-Clause
  31753. */
  31754. exports.GREATEST_LOWER_BOUND = 1;
  31755. exports.LEAST_UPPER_BOUND = 2;
  31756. /**
  31757. * Recursive implementation of binary search.
  31758. *
  31759. * @param aLow Indices here and lower do not contain the needle.
  31760. * @param aHigh Indices here and higher do not contain the needle.
  31761. * @param aNeedle The element being searched for.
  31762. * @param aHaystack The non-empty array being searched.
  31763. * @param aCompare Function which takes two elements and returns -1, 0, or 1.
  31764. * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
  31765. * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
  31766. * closest element that is smaller than or greater than the one we are
  31767. * searching for, respectively, if the exact element cannot be found.
  31768. */
  31769. function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
  31770. // This function terminates when one of the following is true:
  31771. //
  31772. // 1. We find the exact element we are looking for.
  31773. //
  31774. // 2. We did not find the exact element, but we can return the index of
  31775. // the next-closest element.
  31776. //
  31777. // 3. We did not find the exact element, and there is no next-closest
  31778. // element than the one we are searching for, so we return -1.
  31779. var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  31780. var cmp = aCompare(aNeedle, aHaystack[mid], true);
  31781. if (cmp === 0) {
  31782. // Found the element we are looking for.
  31783. return mid;
  31784. }
  31785. else if (cmp > 0) {
  31786. // Our needle is greater than aHaystack[mid].
  31787. if (aHigh - mid > 1) {
  31788. // The element is in the upper half.
  31789. return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
  31790. }
  31791. // The exact needle element was not found in this haystack. Determine if
  31792. // we are in termination case (3) or (2) and return the appropriate thing.
  31793. if (aBias == exports.LEAST_UPPER_BOUND) {
  31794. return aHigh < aHaystack.length ? aHigh : -1;
  31795. } else {
  31796. return mid;
  31797. }
  31798. }
  31799. else {
  31800. // Our needle is less than aHaystack[mid].
  31801. if (mid - aLow > 1) {
  31802. // The element is in the lower half.
  31803. return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
  31804. }
  31805. // we are in termination case (3) or (2) and return the appropriate thing.
  31806. if (aBias == exports.LEAST_UPPER_BOUND) {
  31807. return mid;
  31808. } else {
  31809. return aLow < 0 ? -1 : aLow;
  31810. }
  31811. }
  31812. }
  31813. /**
  31814. * This is an implementation of binary search which will always try and return
  31815. * the index of the closest element if there is no exact hit. This is because
  31816. * mappings between original and generated line/col pairs are single points,
  31817. * and there is an implicit region between each of them, so a miss just means
  31818. * that you aren't on the very start of a region.
  31819. *
  31820. * @param aNeedle The element you are looking for.
  31821. * @param aHaystack The array that is being searched.
  31822. * @param aCompare A function which takes the needle and an element in the
  31823. * array and returns -1, 0, or 1 depending on whether the needle is less
  31824. * than, equal to, or greater than the element, respectively.
  31825. * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
  31826. * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
  31827. * closest element that is smaller than or greater than the one we are
  31828. * searching for, respectively, if the exact element cannot be found.
  31829. * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
  31830. */
  31831. exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
  31832. if (aHaystack.length === 0) {
  31833. return -1;
  31834. }
  31835. var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
  31836. aCompare, aBias || exports.GREATEST_LOWER_BOUND);
  31837. if (index < 0) {
  31838. return -1;
  31839. }
  31840. // We have found either the exact element, or the next-closest element than
  31841. // the one we are searching for. However, there may be more than one such
  31842. // element. Make sure we always return the smallest of these.
  31843. while (index - 1 >= 0) {
  31844. if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
  31845. break;
  31846. }
  31847. --index;
  31848. }
  31849. return index;
  31850. };
  31851. /***/ }),
  31852. /* 119 */
  31853. /***/ (function(module, exports) {
  31854. /* -*- Mode: js; js-indent-level: 2; -*- */
  31855. /*
  31856. * Copyright 2011 Mozilla Foundation and contributors
  31857. * Licensed under the New BSD license. See LICENSE or:
  31858. * http://opensource.org/licenses/BSD-3-Clause
  31859. */
  31860. // It turns out that some (most?) JavaScript engines don't self-host
  31861. // `Array.prototype.sort`. This makes sense because C++ will likely remain
  31862. // faster than JS when doing raw CPU-intensive sorting. However, when using a
  31863. // custom comparator function, calling back and forth between the VM's C++ and
  31864. // JIT'd JS is rather slow *and* loses JIT type information, resulting in
  31865. // worse generated code for the comparator function than would be optimal. In
  31866. // fact, when sorting with a comparator, these costs outweigh the benefits of
  31867. // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
  31868. // a ~3500ms mean speed-up in `bench/bench.html`.
  31869. /**
  31870. * Swap the elements indexed by `x` and `y` in the array `ary`.
  31871. *
  31872. * @param {Array} ary
  31873. * The array.
  31874. * @param {Number} x
  31875. * The index of the first item.
  31876. * @param {Number} y
  31877. * The index of the second item.
  31878. */
  31879. function swap(ary, x, y) {
  31880. var temp = ary[x];
  31881. ary[x] = ary[y];
  31882. ary[y] = temp;
  31883. }
  31884. /**
  31885. * Returns a random integer within the range `low .. high` inclusive.
  31886. *
  31887. * @param {Number} low
  31888. * The lower bound on the range.
  31889. * @param {Number} high
  31890. * The upper bound on the range.
  31891. */
  31892. function randomIntInRange(low, high) {
  31893. return Math.round(low + (Math.random() * (high - low)));
  31894. }
  31895. /**
  31896. * The Quick Sort algorithm.
  31897. *
  31898. * @param {Array} ary
  31899. * An array to sort.
  31900. * @param {function} comparator
  31901. * Function to use to compare two items.
  31902. * @param {Number} p
  31903. * Start index of the array
  31904. * @param {Number} r
  31905. * End index of the array
  31906. */
  31907. function doQuickSort(ary, comparator, p, r) {
  31908. // If our lower bound is less than our upper bound, we (1) partition the
  31909. // array into two pieces and (2) recurse on each half. If it is not, this is
  31910. // the empty array and our base case.
  31911. if (p < r) {
  31912. // (1) Partitioning.
  31913. //
  31914. // The partitioning chooses a pivot between `p` and `r` and moves all
  31915. // elements that are less than or equal to the pivot to the before it, and
  31916. // all the elements that are greater than it after it. The effect is that
  31917. // once partition is done, the pivot is in the exact place it will be when
  31918. // the array is put in sorted order, and it will not need to be moved
  31919. // again. This runs in O(n) time.
  31920. // Always choose a random pivot so that an input array which is reverse
  31921. // sorted does not cause O(n^2) running time.
  31922. var pivotIndex = randomIntInRange(p, r);
  31923. var i = p - 1;
  31924. swap(ary, pivotIndex, r);
  31925. var pivot = ary[r];
  31926. // Immediately after `j` is incremented in this loop, the following hold
  31927. // true:
  31928. //
  31929. // * Every element in `ary[p .. i]` is less than or equal to the pivot.
  31930. //
  31931. // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
  31932. for (var j = p; j < r; j++) {
  31933. if (comparator(ary[j], pivot) <= 0) {
  31934. i += 1;
  31935. swap(ary, i, j);
  31936. }
  31937. }
  31938. swap(ary, i + 1, j);
  31939. var q = i + 1;
  31940. // (2) Recurse on each half.
  31941. doQuickSort(ary, comparator, p, q - 1);
  31942. doQuickSort(ary, comparator, q + 1, r);
  31943. }
  31944. }
  31945. /**
  31946. * Sort the given array in-place with the given comparator function.
  31947. *
  31948. * @param {Array} ary
  31949. * An array to sort.
  31950. * @param {function} comparator
  31951. * Function to use to compare two items.
  31952. */
  31953. exports.quickSort = function (ary, comparator) {
  31954. doQuickSort(ary, comparator, 0, ary.length - 1);
  31955. };
  31956. /***/ }),
  31957. /* 120 */
  31958. /***/ (function(module, exports, __webpack_require__) {
  31959. /* -*- Mode: js; js-indent-level: 2; -*- */
  31960. /*
  31961. * Copyright 2011 Mozilla Foundation and contributors
  31962. * Licensed under the New BSD license. See LICENSE or:
  31963. * http://opensource.org/licenses/BSD-3-Clause
  31964. */
  31965. var SourceMapGenerator = __webpack_require__(50).SourceMapGenerator;
  31966. var util = __webpack_require__(9);
  31967. // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
  31968. // operating systems these days (capturing the result).
  31969. var REGEX_NEWLINE = /(\r?\n)/;
  31970. // Newline character code for charCodeAt() comparisons
  31971. var NEWLINE_CODE = 10;
  31972. // Private symbol for identifying `SourceNode`s when multiple versions of
  31973. // the source-map library are loaded. This MUST NOT CHANGE across
  31974. // versions!
  31975. var isSourceNode = "$$$isSourceNode$$$";
  31976. /**
  31977. * SourceNodes provide a way to abstract over interpolating/concatenating
  31978. * snippets of generated JavaScript source code while maintaining the line and
  31979. * column information associated with the original source code.
  31980. *
  31981. * @param aLine The original line number.
  31982. * @param aColumn The original column number.
  31983. * @param aSource The original source's filename.
  31984. * @param aChunks Optional. An array of strings which are snippets of
  31985. * generated JS, or other SourceNodes.
  31986. * @param aName The original identifier.
  31987. */
  31988. function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  31989. this.children = [];
  31990. this.sourceContents = {};
  31991. this.line = aLine == null ? null : aLine;
  31992. this.column = aColumn == null ? null : aColumn;
  31993. this.source = aSource == null ? null : aSource;
  31994. this.name = aName == null ? null : aName;
  31995. this[isSourceNode] = true;
  31996. if (aChunks != null) this.add(aChunks);
  31997. }
  31998. /**
  31999. * Creates a SourceNode from generated code and a SourceMapConsumer.
  32000. *
  32001. * @param aGeneratedCode The generated code
  32002. * @param aSourceMapConsumer The SourceMap for the generated code
  32003. * @param aRelativePath Optional. The path that relative sources in the
  32004. * SourceMapConsumer should be relative to.
  32005. */
  32006. SourceNode.fromStringWithSourceMap =
  32007. function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
  32008. // The SourceNode we want to fill with the generated code
  32009. // and the SourceMap
  32010. var node = new SourceNode();
  32011. // All even indices of this array are one line of the generated code,
  32012. // while all odd indices are the newlines between two adjacent lines
  32013. // (since `REGEX_NEWLINE` captures its match).
  32014. // Processed fragments are accessed by calling `shiftNextLine`.
  32015. var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
  32016. var remainingLinesIndex = 0;
  32017. var shiftNextLine = function() {
  32018. var lineContents = getNextLine();
  32019. // The last line of a file might not have a newline.
  32020. var newLine = getNextLine() || "";
  32021. return lineContents + newLine;
  32022. function getNextLine() {
  32023. return remainingLinesIndex < remainingLines.length ?
  32024. remainingLines[remainingLinesIndex++] : undefined;
  32025. }
  32026. };
  32027. // We need to remember the position of "remainingLines"
  32028. var lastGeneratedLine = 1, lastGeneratedColumn = 0;
  32029. // The generate SourceNodes we need a code range.
  32030. // To extract it current and last mapping is used.
  32031. // Here we store the last mapping.
  32032. var lastMapping = null;
  32033. aSourceMapConsumer.eachMapping(function (mapping) {
  32034. if (lastMapping !== null) {
  32035. // We add the code from "lastMapping" to "mapping":
  32036. // First check if there is a new line in between.
  32037. if (lastGeneratedLine < mapping.generatedLine) {
  32038. // Associate first line with "lastMapping"
  32039. addMappingWithCode(lastMapping, shiftNextLine());
  32040. lastGeneratedLine++;
  32041. lastGeneratedColumn = 0;
  32042. // The remaining code is added without mapping
  32043. } else {
  32044. // There is no new line in between.
  32045. // Associate the code between "lastGeneratedColumn" and
  32046. // "mapping.generatedColumn" with "lastMapping"
  32047. var nextLine = remainingLines[remainingLinesIndex];
  32048. var code = nextLine.substr(0, mapping.generatedColumn -
  32049. lastGeneratedColumn);
  32050. remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
  32051. lastGeneratedColumn);
  32052. lastGeneratedColumn = mapping.generatedColumn;
  32053. addMappingWithCode(lastMapping, code);
  32054. // No more remaining code, continue
  32055. lastMapping = mapping;
  32056. return;
  32057. }
  32058. }
  32059. // We add the generated code until the first mapping
  32060. // to the SourceNode without any mapping.
  32061. // Each line is added as separate string.
  32062. while (lastGeneratedLine < mapping.generatedLine) {
  32063. node.add(shiftNextLine());
  32064. lastGeneratedLine++;
  32065. }
  32066. if (lastGeneratedColumn < mapping.generatedColumn) {
  32067. var nextLine = remainingLines[remainingLinesIndex];
  32068. node.add(nextLine.substr(0, mapping.generatedColumn));
  32069. remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
  32070. lastGeneratedColumn = mapping.generatedColumn;
  32071. }
  32072. lastMapping = mapping;
  32073. }, this);
  32074. // We have processed all mappings.
  32075. if (remainingLinesIndex < remainingLines.length) {
  32076. if (lastMapping) {
  32077. // Associate the remaining code in the current line with "lastMapping"
  32078. addMappingWithCode(lastMapping, shiftNextLine());
  32079. }
  32080. // and add the remaining lines without any mapping
  32081. node.add(remainingLines.splice(remainingLinesIndex).join(""));
  32082. }
  32083. // Copy sourcesContent into SourceNode
  32084. aSourceMapConsumer.sources.forEach(function (sourceFile) {
  32085. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  32086. if (content != null) {
  32087. if (aRelativePath != null) {
  32088. sourceFile = util.join(aRelativePath, sourceFile);
  32089. }
  32090. node.setSourceContent(sourceFile, content);
  32091. }
  32092. });
  32093. return node;
  32094. function addMappingWithCode(mapping, code) {
  32095. if (mapping === null || mapping.source === undefined) {
  32096. node.add(code);
  32097. } else {
  32098. var source = aRelativePath
  32099. ? util.join(aRelativePath, mapping.source)
  32100. : mapping.source;
  32101. node.add(new SourceNode(mapping.originalLine,
  32102. mapping.originalColumn,
  32103. source,
  32104. code,
  32105. mapping.name));
  32106. }
  32107. }
  32108. };
  32109. /**
  32110. * Add a chunk of generated JS to this source node.
  32111. *
  32112. * @param aChunk A string snippet of generated JS code, another instance of
  32113. * SourceNode, or an array where each member is one of those things.
  32114. */
  32115. SourceNode.prototype.add = function SourceNode_add(aChunk) {
  32116. if (Array.isArray(aChunk)) {
  32117. aChunk.forEach(function (chunk) {
  32118. this.add(chunk);
  32119. }, this);
  32120. }
  32121. else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  32122. if (aChunk) {
  32123. this.children.push(aChunk);
  32124. }
  32125. }
  32126. else {
  32127. throw new TypeError(
  32128. "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
  32129. );
  32130. }
  32131. return this;
  32132. };
  32133. /**
  32134. * Add a chunk of generated JS to the beginning of this source node.
  32135. *
  32136. * @param aChunk A string snippet of generated JS code, another instance of
  32137. * SourceNode, or an array where each member is one of those things.
  32138. */
  32139. SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  32140. if (Array.isArray(aChunk)) {
  32141. for (var i = aChunk.length-1; i >= 0; i--) {
  32142. this.prepend(aChunk[i]);
  32143. }
  32144. }
  32145. else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  32146. this.children.unshift(aChunk);
  32147. }
  32148. else {
  32149. throw new TypeError(
  32150. "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
  32151. );
  32152. }
  32153. return this;
  32154. };
  32155. /**
  32156. * Walk over the tree of JS snippets in this node and its children. The
  32157. * walking function is called once for each snippet of JS and is passed that
  32158. * snippet and the its original associated source's line/column location.
  32159. *
  32160. * @param aFn The traversal function.
  32161. */
  32162. SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  32163. var chunk;
  32164. for (var i = 0, len = this.children.length; i < len; i++) {
  32165. chunk = this.children[i];
  32166. if (chunk[isSourceNode]) {
  32167. chunk.walk(aFn);
  32168. }
  32169. else {
  32170. if (chunk !== '') {
  32171. aFn(chunk, { source: this.source,
  32172. line: this.line,
  32173. column: this.column,
  32174. name: this.name });
  32175. }
  32176. }
  32177. }
  32178. };
  32179. /**
  32180. * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
  32181. * each of `this.children`.
  32182. *
  32183. * @param aSep The separator.
  32184. */
  32185. SourceNode.prototype.join = function SourceNode_join(aSep) {
  32186. var newChildren;
  32187. var i;
  32188. var len = this.children.length;
  32189. if (len > 0) {
  32190. newChildren = [];
  32191. for (i = 0; i < len-1; i++) {
  32192. newChildren.push(this.children[i]);
  32193. newChildren.push(aSep);
  32194. }
  32195. newChildren.push(this.children[i]);
  32196. this.children = newChildren;
  32197. }
  32198. return this;
  32199. };
  32200. /**
  32201. * Call String.prototype.replace on the very right-most source snippet. Useful
  32202. * for trimming whitespace from the end of a source node, etc.
  32203. *
  32204. * @param aPattern The pattern to replace.
  32205. * @param aReplacement The thing to replace the pattern with.
  32206. */
  32207. SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  32208. var lastChild = this.children[this.children.length - 1];
  32209. if (lastChild[isSourceNode]) {
  32210. lastChild.replaceRight(aPattern, aReplacement);
  32211. }
  32212. else if (typeof lastChild === 'string') {
  32213. this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  32214. }
  32215. else {
  32216. this.children.push(''.replace(aPattern, aReplacement));
  32217. }
  32218. return this;
  32219. };
  32220. /**
  32221. * Set the source content for a source file. This will be added to the SourceMapGenerator
  32222. * in the sourcesContent field.
  32223. *
  32224. * @param aSourceFile The filename of the source file
  32225. * @param aSourceContent The content of the source file
  32226. */
  32227. SourceNode.prototype.setSourceContent =
  32228. function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
  32229. this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  32230. };
  32231. /**
  32232. * Walk over the tree of SourceNodes. The walking function is called for each
  32233. * source file content and is passed the filename and source content.
  32234. *
  32235. * @param aFn The traversal function.
  32236. */
  32237. SourceNode.prototype.walkSourceContents =
  32238. function SourceNode_walkSourceContents(aFn) {
  32239. for (var i = 0, len = this.children.length; i < len; i++) {
  32240. if (this.children[i][isSourceNode]) {
  32241. this.children[i].walkSourceContents(aFn);
  32242. }
  32243. }
  32244. var sources = Object.keys(this.sourceContents);
  32245. for (var i = 0, len = sources.length; i < len; i++) {
  32246. aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
  32247. }
  32248. };
  32249. /**
  32250. * Return the string representation of this source node. Walks over the tree
  32251. * and concatenates all the various snippets together to one string.
  32252. */
  32253. SourceNode.prototype.toString = function SourceNode_toString() {
  32254. var str = "";
  32255. this.walk(function (chunk) {
  32256. str += chunk;
  32257. });
  32258. return str;
  32259. };
  32260. /**
  32261. * Returns the string representation of this source node along with a source
  32262. * map.
  32263. */
  32264. SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  32265. var generated = {
  32266. code: "",
  32267. line: 1,
  32268. column: 0
  32269. };
  32270. var map = new SourceMapGenerator(aArgs);
  32271. var sourceMappingActive = false;
  32272. var lastOriginalSource = null;
  32273. var lastOriginalLine = null;
  32274. var lastOriginalColumn = null;
  32275. var lastOriginalName = null;
  32276. this.walk(function (chunk, original) {
  32277. generated.code += chunk;
  32278. if (original.source !== null
  32279. && original.line !== null
  32280. && original.column !== null) {
  32281. if(lastOriginalSource !== original.source
  32282. || lastOriginalLine !== original.line
  32283. || lastOriginalColumn !== original.column
  32284. || lastOriginalName !== original.name) {
  32285. map.addMapping({
  32286. source: original.source,
  32287. original: {
  32288. line: original.line,
  32289. column: original.column
  32290. },
  32291. generated: {
  32292. line: generated.line,
  32293. column: generated.column
  32294. },
  32295. name: original.name
  32296. });
  32297. }
  32298. lastOriginalSource = original.source;
  32299. lastOriginalLine = original.line;
  32300. lastOriginalColumn = original.column;
  32301. lastOriginalName = original.name;
  32302. sourceMappingActive = true;
  32303. } else if (sourceMappingActive) {
  32304. map.addMapping({
  32305. generated: {
  32306. line: generated.line,
  32307. column: generated.column
  32308. }
  32309. });
  32310. lastOriginalSource = null;
  32311. sourceMappingActive = false;
  32312. }
  32313. for (var idx = 0, length = chunk.length; idx < length; idx++) {
  32314. if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
  32315. generated.line++;
  32316. generated.column = 0;
  32317. // Mappings end at eol
  32318. if (idx + 1 === length) {
  32319. lastOriginalSource = null;
  32320. sourceMappingActive = false;
  32321. } else if (sourceMappingActive) {
  32322. map.addMapping({
  32323. source: original.source,
  32324. original: {
  32325. line: original.line,
  32326. column: original.column
  32327. },
  32328. generated: {
  32329. line: generated.line,
  32330. column: generated.column
  32331. },
  32332. name: original.name
  32333. });
  32334. }
  32335. } else {
  32336. generated.column++;
  32337. }
  32338. }
  32339. });
  32340. this.walkSourceContents(function (sourceFile, sourceContent) {
  32341. map.setSourceContent(sourceFile, sourceContent);
  32342. });
  32343. return { code: generated.code, map: map };
  32344. };
  32345. exports.SourceNode = SourceNode;
  32346. /***/ }),
  32347. /* 121 */
  32348. /***/ (function(module, exports, __webpack_require__) {
  32349. var List = __webpack_require__(7);
  32350. module.exports = function createConvertors(walk) {
  32351. return {
  32352. fromPlainObject: function(ast) {
  32353. walk(ast, {
  32354. enter: function(node) {
  32355. if (node.children && node.children instanceof List === false) {
  32356. node.children = new List().fromArray(node.children);
  32357. }
  32358. }
  32359. });
  32360. return ast;
  32361. },
  32362. toPlainObject: function(ast) {
  32363. walk(ast, {
  32364. leave: function(node) {
  32365. if (node.children && node.children instanceof List) {
  32366. node.children = node.children.toArray();
  32367. }
  32368. }
  32369. });
  32370. return ast;
  32371. }
  32372. };
  32373. };
  32374. /***/ }),
  32375. /* 122 */
  32376. /***/ (function(module, exports, __webpack_require__) {
  32377. "use strict";
  32378. var hasOwnProperty = Object.prototype.hasOwnProperty;
  32379. var noop = function() {};
  32380. function ensureFunction(value) {
  32381. return typeof value === 'function' ? value : noop;
  32382. }
  32383. function invokeForType(fn, type) {
  32384. return function(node, item, list) {
  32385. if (node.type === type) {
  32386. fn.call(this, node, item, list);
  32387. }
  32388. };
  32389. }
  32390. function getWalkersFromStructure(name, nodeType) {
  32391. var structure = nodeType.structure;
  32392. var walkers = [];
  32393. for (var key in structure) {
  32394. if (hasOwnProperty.call(structure, key) === false) {
  32395. continue;
  32396. }
  32397. var fieldTypes = structure[key];
  32398. var walker = {
  32399. name: key,
  32400. type: false,
  32401. nullable: false
  32402. };
  32403. if (!Array.isArray(structure[key])) {
  32404. fieldTypes = [structure[key]];
  32405. }
  32406. for (var i = 0; i < fieldTypes.length; i++) {
  32407. var fieldType = fieldTypes[i];
  32408. if (fieldType === null) {
  32409. walker.nullable = true;
  32410. } else if (typeof fieldType === 'string') {
  32411. walker.type = 'node';
  32412. } else if (Array.isArray(fieldType)) {
  32413. walker.type = 'list';
  32414. }
  32415. }
  32416. if (walker.type) {
  32417. walkers.push(walker);
  32418. }
  32419. }
  32420. if (walkers.length) {
  32421. return {
  32422. context: nodeType.walkContext,
  32423. fields: walkers
  32424. };
  32425. }
  32426. return null;
  32427. }
  32428. function getTypesFromConfig(config) {
  32429. var types = {};
  32430. for (var name in config.node) {
  32431. if (hasOwnProperty.call(config.node, name)) {
  32432. var nodeType = config.node[name];
  32433. if (!nodeType.structure) {
  32434. throw new Error('Missed `structure` field in `' + name + '` node type definition');
  32435. }
  32436. types[name] = getWalkersFromStructure(name, nodeType);
  32437. }
  32438. }
  32439. return types;
  32440. }
  32441. function createTypeIterator(config, reverse) {
  32442. var fields = reverse ? config.fields.slice().reverse() : config.fields;
  32443. var body = fields.map(function(field) {
  32444. var ref = 'node.' + field.name;
  32445. var line;
  32446. if (field.type === 'list') {
  32447. line = reverse
  32448. ? ref + '.forEachRight(walk);'
  32449. : ref + '.forEach(walk);';
  32450. } else {
  32451. line = 'walk(' + ref + ');';
  32452. }
  32453. if (field.nullable) {
  32454. line = 'if (' + ref + ') {\n ' + line + '}';
  32455. }
  32456. return line;
  32457. });
  32458. if (config.context) {
  32459. body = [].concat(
  32460. 'var old = context.' + config.context + ';',
  32461. 'context.' + config.context + ' = node;',
  32462. body,
  32463. 'context.' + config.context + ' = old;'
  32464. );
  32465. }
  32466. return new Function('node', 'context', 'walk', body.join('\n'));
  32467. }
  32468. function createFastTraveralMap(iterators) {
  32469. return {
  32470. Atrule: {
  32471. StyleSheet: iterators.StyleSheet,
  32472. Atrule: iterators.Atrule,
  32473. Rule: iterators.Rule,
  32474. Block: iterators.Block
  32475. },
  32476. Rule: {
  32477. StyleSheet: iterators.StyleSheet,
  32478. Atrule: iterators.Atrule,
  32479. Rule: iterators.Rule,
  32480. Block: iterators.Block
  32481. },
  32482. Declaration: {
  32483. StyleSheet: iterators.StyleSheet,
  32484. Atrule: iterators.Atrule,
  32485. Rule: iterators.Rule,
  32486. Block: iterators.Block
  32487. }
  32488. };
  32489. }
  32490. module.exports = function createWalker(config) {
  32491. var types = getTypesFromConfig(config);
  32492. var iteratorsNatural = {};
  32493. var iteratorsReverse = {};
  32494. for (var name in types) {
  32495. if (hasOwnProperty.call(types, name) && types[name] !== null) {
  32496. iteratorsNatural[name] = createTypeIterator(types[name], false);
  32497. iteratorsReverse[name] = createTypeIterator(types[name], true);
  32498. }
  32499. }
  32500. var fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);
  32501. var fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);
  32502. return function walk(root, options) {
  32503. function walkNode(node, item, list) {
  32504. enter.call(context, node, item, list);
  32505. if (iterators.hasOwnProperty(node.type)) {
  32506. iterators[node.type](node, context, walkNode);
  32507. }
  32508. leave.call(context, node, item, list);
  32509. }
  32510. var enter = noop;
  32511. var leave = noop;
  32512. var iterators = iteratorsNatural;
  32513. var context = {
  32514. root: root,
  32515. stylesheet: null,
  32516. atrule: null,
  32517. atrulePrelude: null,
  32518. rule: null,
  32519. selector: null,
  32520. block: null,
  32521. declaration: null,
  32522. function: null
  32523. };
  32524. if (typeof options === 'function') {
  32525. enter = options;
  32526. } else if (options) {
  32527. enter = ensureFunction(options.enter);
  32528. leave = ensureFunction(options.leave);
  32529. if (options.reverse) {
  32530. iterators = iteratorsReverse;
  32531. }
  32532. if (options.visit) {
  32533. if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {
  32534. iterators = options.reverse
  32535. ? fastTraversalIteratorsReverse[options.visit]
  32536. : fastTraversalIteratorsNatural[options.visit];
  32537. } else if (!types.hasOwnProperty(options.visit)) {
  32538. throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).join(', ') + ')');
  32539. }
  32540. enter = invokeForType(enter, options.visit);
  32541. leave = invokeForType(leave, options.visit);
  32542. }
  32543. }
  32544. if (enter === noop && leave === noop) {
  32545. throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
  32546. }
  32547. // swap handlers in reverse mode to invert visit order
  32548. if (options.reverse) {
  32549. var tmp = enter;
  32550. enter = leave;
  32551. leave = tmp;
  32552. }
  32553. walkNode(root);
  32554. };
  32555. };
  32556. /***/ }),
  32557. /* 123 */
  32558. /***/ (function(module, exports, __webpack_require__) {
  32559. "use strict";
  32560. var List = __webpack_require__(7);
  32561. module.exports = function clone(node) {
  32562. var result = {};
  32563. for (var key in node) {
  32564. var value = node[key];
  32565. if (value) {
  32566. if (Array.isArray(value) || value instanceof List) {
  32567. value = value.map(clone);
  32568. } else if (value.constructor === Object) {
  32569. value = clone(value);
  32570. }
  32571. }
  32572. result[key] = value;
  32573. }
  32574. return result;
  32575. };
  32576. /***/ }),
  32577. /* 124 */
  32578. /***/ (function(module, exports) {
  32579. var hasOwnProperty = Object.prototype.hasOwnProperty;
  32580. var shape = {
  32581. generic: true,
  32582. types: {},
  32583. properties: {},
  32584. parseContext: {},
  32585. scope: {},
  32586. atrule: ['parse'],
  32587. pseudo: ['parse'],
  32588. node: ['name', 'structure', 'parse', 'generate', 'walkContext']
  32589. };
  32590. function isObject(value) {
  32591. return value && value.constructor === Object;
  32592. }
  32593. function copy(value) {
  32594. if (isObject(value)) {
  32595. var res = {};
  32596. for (var key in value) {
  32597. if (hasOwnProperty.call(value, key)) {
  32598. res[key] = value[key];
  32599. }
  32600. }
  32601. return res;
  32602. } else {
  32603. return value;
  32604. }
  32605. }
  32606. function extend(dest, src) {
  32607. for (var key in src) {
  32608. if (hasOwnProperty.call(src, key)) {
  32609. if (isObject(dest[key])) {
  32610. extend(dest[key], copy(src[key]));
  32611. } else {
  32612. dest[key] = copy(src[key]);
  32613. }
  32614. }
  32615. }
  32616. }
  32617. function mix(dest, src, shape) {
  32618. for (var key in shape) {
  32619. if (hasOwnProperty.call(shape, key) === false) {
  32620. continue;
  32621. }
  32622. if (shape[key] === true) {
  32623. if (key in src) {
  32624. if (hasOwnProperty.call(src, key)) {
  32625. dest[key] = copy(src[key]);
  32626. }
  32627. }
  32628. } else if (shape[key]) {
  32629. if (isObject(shape[key])) {
  32630. var res = {};
  32631. extend(res, dest[key]);
  32632. extend(res, src[key]);
  32633. dest[key] = res;
  32634. } else if (Array.isArray(shape[key])) {
  32635. var res = {};
  32636. var innerShape = shape[key].reduce(function(s, k) {
  32637. s[k] = true;
  32638. return s;
  32639. }, {});
  32640. for (var name in dest[key]) {
  32641. if (hasOwnProperty.call(dest[key], name)) {
  32642. res[name] = {};
  32643. if (dest[key] && dest[key][name]) {
  32644. mix(res[name], dest[key][name], innerShape);
  32645. }
  32646. }
  32647. }
  32648. for (var name in src[key]) {
  32649. if (hasOwnProperty.call(src[key], name)) {
  32650. if (!res[name]) {
  32651. res[name] = {};
  32652. }
  32653. if (src[key] && src[key][name]) {
  32654. mix(res[name], src[key][name], innerShape);
  32655. }
  32656. }
  32657. }
  32658. dest[key] = res;
  32659. }
  32660. }
  32661. }
  32662. return dest;
  32663. }
  32664. module.exports = function(dest, src) {
  32665. return mix(dest, src, shape);
  32666. };
  32667. /***/ }),
  32668. /* 125 */
  32669. /***/ (function(module, exports, __webpack_require__) {
  32670. var data = __webpack_require__(126);
  32671. module.exports = {
  32672. generic: true,
  32673. types: data.types,
  32674. properties: data.properties,
  32675. node: __webpack_require__(28)
  32676. };
  32677. /***/ }),
  32678. /* 126 */
  32679. /***/ (function(module) {
  32680. module.exports = JSON.parse("{\"generic\":true,\"types\":{\"absolute-size\":\"xx-small | x-small | small | medium | large | x-large | xx-large\",\"alpha-value\":\"<number> | <percentage>\",\"angle-percentage\":\"<angle> | <percentage>\",\"animateable-feature\":\"scroll-position | contents | <custom-ident>\",\"attachment\":\"scroll | fixed | local\",\"auto-repeat\":\"repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )\",\"auto-track-list\":\"[ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>? <auto-repeat> [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?\",\"baseline-position\":\"[ first | last ]? baseline\",\"basic-shape\":\"<inset()> | <circle()> | <ellipse()> | <polygon()>\",\"bg-image\":\"none | <image>\",\"bg-layer\":\"<bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box>\",\"bg-position\":\"[ [ left | center | right | top | bottom | <length-percentage> ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ] | [ center | [ left | right ] <length-percentage>? ] && [ center | [ top | bottom ] <length-percentage>? ] ]\",\"bg-size\":\"[ <length-percentage> | auto ]{1,2} | cover | contain\",\"blur()\":\"blur( <length> )\",\"blend-mode\":\"normal | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation | color | luminosity\",\"box\":\"border-box | padding-box | content-box\",\"br-style\":\"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\",\"br-width\":\"<length> | thin | medium | thick\",\"brightness()\":\"brightness( <number-percentage> )\",\"calc()\":\"calc( <calc-sum> )\",\"calc-sum\":\"<calc-product> [ [ '+' | '-' ] <calc-product> ]*\",\"calc-product\":\"<calc-value> [ '*' <calc-value> | '/' <number> ]*\",\"calc-value\":\"<number> | <dimension> | <percentage> | ( <calc-sum> )\",\"cf-final-image\":\"<image> | <color>\",\"cf-mixing-image\":\"<percentage>? && <image>\",\"circle()\":\"circle( [ <shape-radius> ]? [ at <position> ]? )\",\"clip-source\":\"<url>\",\"color\":\"<rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>\",\"color-stop\":\"<color> <length-percentage>?\",\"color-stop-list\":\"<color-stop>#{2,}\",\"common-lig-values\":\"[ common-ligatures | no-common-ligatures ]\",\"composite-style\":\"clear | copy | source-over | source-in | source-out | source-atop | destination-over | destination-in | destination-out | destination-atop | xor\",\"compositing-operator\":\"add | subtract | intersect | exclude\",\"contextual-alt-values\":\"[ contextual | no-contextual ]\",\"content-distribution\":\"space-between | space-around | space-evenly | stretch\",\"content-list\":\"[ <string> | contents | <url> | <quote> | <attr()> | counter( <ident> , <'list-style-type'>? ) ]+\",\"content-position\":\"center | start | end | flex-start | flex-end\",\"content-replacement\":\"<image>\",\"contrast()\":\"contrast( [ <number-percentage> ] )\",\"counter-style\":\"<counter-style-name> | symbols( )\",\"counter-style-name\":\"<custom-ident>\",\"cross-fade()\":\"cross-fade( <cf-mixing-image> , <cf-final-image>? )\",\"cubic-bezier-timing-function\":\"ease | ease-in | ease-out | ease-in-out | cubic-bezier( <number> , <number> , <number> , <number> )\",\"deprecated-system-color\":\"ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonFace | ButtonHighlight | ButtonShadow | ButtonText | CaptionText | GrayText | Highlight | HighlightText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText\",\"discretionary-lig-values\":\"[ discretionary-ligatures | no-discretionary-ligatures ]\",\"display-box\":\"contents | none\",\"display-inside\":\"flow | flow-root | table | flex | grid | subgrid | ruby\",\"display-internal\":\"table-row-group | table-header-group | table-footer-group | table-row | table-cell | table-column-group | table-column | table-caption | ruby-base | ruby-text | ruby-base-container | ruby-text-container\",\"display-legacy\":\"inline-block | inline-list-item | inline-table | inline-flex | inline-grid\",\"display-listitem\":\"<display-outside>? && [ flow | flow-root ]? && list-item\",\"display-outside\":\"block | inline | run-in\",\"drop-shadow()\":\"drop-shadow( <length>{2,3} <color>? )\",\"east-asian-variant-values\":\"[ jis78 | jis83 | jis90 | jis04 | simplified | traditional ]\",\"east-asian-width-values\":\"[ full-width | proportional-width ]\",\"element()\":\"element( <id-selector> )\",\"ellipse()\":\"ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )\",\"ending-shape\":\"circle | ellipse\",\"explicit-track-list\":\"[ <line-names>? <track-size> ]+ <line-names>?\",\"family-name\":\"<string> | <custom-ident>+\",\"feature-tag-value\":\"<string> [ <integer> | on | off ]?\",\"feature-value-name\":\"<custom-ident>\",\"fill-rule\":\"nonzero | evenodd\",\"filter-function\":\"<blur()> | <brightness()> | <contrast()> | <drop-shadow()> | <grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <saturate()> | <sepia()>\",\"filter-function-list\":\"[ <filter-function> | <url> ]+\",\"final-bg-layer\":\"<'background-color'> || <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box>\",\"fit-content()\":\"fit-content( [ <length> | <percentage> ] )\",\"fixed-breadth\":\"<length-percentage>\",\"fixed-repeat\":\"repeat( [ <positive-integer> ] , [ <line-names>? <fixed-size> ]+ <line-names>? )\",\"fixed-size\":\"<fixed-breadth> | minmax( <fixed-breadth> , <track-breadth> ) | minmax( <inflexible-breadth> , <fixed-breadth> )\",\"font-variant-css21\":\"[ normal | small-caps ]\",\"frames-timing-function\":\"frames( <integer> )\",\"frequency-percentage\":\"<frequency> | <percentage>\",\"generic-family\":\"serif | sans-serif | cursive | fantasy | monospace | -apple-system\",\"generic-name\":\"serif | sans-serif | cursive | fantasy | monospace\",\"geometry-box\":\"<shape-box> | fill-box | stroke-box | view-box\",\"gradient\":\"<-legacy-gradient> | <linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()> | <repeating-radial-gradient()>\",\"grayscale()\":\"grayscale( <number-percentage> )\",\"grid-line\":\"auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]\",\"historical-lig-values\":\"[ historical-ligatures | no-historical-ligatures ]\",\"hsl()\":\"hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\"hsla()\":\"hsla( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\"hue\":\"<number> | <angle>\",\"hue-rotate()\":\"hue-rotate( <angle> )\",\"image\":\"<url> | <image()> | <image-set()> | <element()> | <cross-fade()> | <gradient>\",\"image()\":\"image( [ [ <image> | <string> ]? , <color>? ]! )\",\"image-set()\":\"image-set( <image-set-option># )\",\"image-set-option\":\"[ <image> | <string> ] <resolution>\",\"inflexible-breadth\":\"<length> | <percentage> | min-content | max-content | auto\",\"inset()\":\"inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )\",\"invert()\":\"invert( <number-percentage> )\",\"keyframes-name\":\"<custom-ident> | <string>\",\"keyframe-selector\":\"from | to | <percentage>\",\"leader()\":\"leader( <leader-type> )\",\"leader-type\":\"dotted | solid | space | <string>\",\"length-percentage\":\"<length> | <percentage>\",\"line-names\":\"'[' <custom-ident>* ']'\",\"line-name-list\":\"[ <line-names> | <name-repeat> ]+\",\"linear-gradient()\":\"linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )\",\"mask-layer\":\"<mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator> || <masking-mode>\",\"mask-position\":\"[ <length-percentage> | left | center | right ] [ <length-percentage> | top | center | bottom ]?\",\"mask-reference\":\"none | <image> | <mask-source>\",\"mask-source\":\"<url>\",\"masking-mode\":\"alpha | luminance | match-source\",\"matrix()\":\"matrix( <number> [, <number> ]{5} )\",\"matrix3d()\":\"matrix3d( <number> [, <number> ]{15} )\",\"media-type\":\"<ident>\",\"mf-boolean\":\"<mf-name>\",\"mf-name\":\"<ident>\",\"minmax()\":\"minmax( [ <length> | <percentage> | <flex> | min-content | max-content | auto ] , [ <length> | <percentage> | <flex> | min-content | max-content | auto ] )\",\"named-color\":\"transparent | aliceblue | antiquewhite | aqua | aquamarine | azure | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey | darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise | darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo | ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue | mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white | whitesmoke | yellow | yellowgreen | <-non-standard-color>\",\"namespace-prefix\":\"<ident>\",\"number-percentage\":\"<number> | <percentage>\",\"numeric-figure-values\":\"[ lining-nums | oldstyle-nums ]\",\"numeric-fraction-values\":\"[ diagonal-fractions | stacked-fractions ]\",\"numeric-spacing-values\":\"[ proportional-nums | tabular-nums ]\",\"opacity()\":\"opacity( [ <number-percentage> ] )\",\"overflow-position\":\"unsafe | safe\",\"outline-radius\":\"<border-radius>\",\"perspective()\":\"perspective( <length> )\",\"polygon()\":\"polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]# )\",\"position\":\"[ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ] ]\",\"quote\":\"open-quote | close-quote | no-open-quote | no-close-quote\",\"radial-gradient()\":\"radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )\",\"relative-size\":\"larger | smaller\",\"repeat-style\":\"repeat-x | repeat-y | [ repeat | space | round | no-repeat ]{1,2}\",\"repeating-linear-gradient()\":\"repeating-linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )\",\"repeating-radial-gradient()\":\"repeating-radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )\",\"rgb()\":\"rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )\",\"rgba()\":\"rgba( <percentage>{3} [ / <alpha-value> ]? ) | rgba( <number>{3} [ / <alpha-value> ]? ) | rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? )\",\"rotate()\":\"rotate( <angle> )\",\"rotate3d()\":\"rotate3d( <number> , <number> , <number> , <angle> )\",\"rotateX()\":\"rotateX( <angle> )\",\"rotateY()\":\"rotateY( <angle> )\",\"rotateZ()\":\"rotateZ( <angle> )\",\"saturate()\":\"saturate( <number-percentage> )\",\"scale()\":\"scale( <number> [, <number> ]? )\",\"scale3d()\":\"scale3d( <number> , <number> , <number> )\",\"scaleX()\":\"scaleX( <number> )\",\"scaleY()\":\"scaleY( <number> )\",\"scaleZ()\":\"scaleZ( <number> )\",\"self-position\":\"center | start | end | self-start | self-end | flex-start | flex-end\",\"shape-radius\":\"<length-percentage> | closest-side | farthest-side\",\"skew()\":\"skew( <angle> [, <angle> ]? )\",\"skewX()\":\"skewX( <angle> )\",\"skewY()\":\"skewY( <angle> )\",\"sepia()\":\"sepia( <number-percentage> )\",\"shadow\":\"inset? && <length>{2,4} && <color>?\",\"shadow-t\":\"[ <length>{2,3} && <color>? ]\",\"shape\":\"rect( [ [ <top> , <right> , <bottom> , <left> ] | [ <top> <right> <bottom> <left> ] ] )\",\"shape-box\":\"<box> | margin-box\",\"side-or-corner\":\"[ left | right ] || [ top | bottom ]\",\"single-animation\":\"<time> || <single-timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ]\",\"single-animation-direction\":\"normal | reverse | alternate | alternate-reverse\",\"single-animation-fill-mode\":\"none | forwards | backwards | both\",\"single-animation-iteration-count\":\"infinite | <number>\",\"single-animation-play-state\":\"running | paused\",\"single-timing-function\":\"linear | <cubic-bezier-timing-function> | <step-timing-function> | <frames-timing-function>\",\"single-transition\":\"<single-transition-timing-function> || [ none | <single-transition-property> ] || <time> || <time>\",\"single-transition-timing-function\":\"<single-timing-function>\",\"single-transition-property\":\"all | <custom-ident>\",\"size\":\"closest-side | farthest-side | closest-corner | farthest-corner | <length> | <length-percentage>{2}\",\"step-timing-function\":\"step-start | step-end | steps( <integer> [, [ start | end ] ]? )\",\"symbol\":\"<string> | <image> | <custom-ident>\",\"target\":\"<target-counter()> | <target-counters()> | <target-text()>\",\"target-counter()\":\"target-counter( [ <string> | <url> ] , <custom-ident> , <counter-style>? )\",\"target-counters()\":\"target-counters( [ <string> | <url> ] , <custom-ident> , <string> , <counter-style>? )\",\"target-text()\":\"target-text( [ <string> | <url> ] , [ content | before | after | first-letter ]? )\",\"time-percentage\":\"<time> | <percentage>\",\"track-breadth\":\"<length-percentage> | <flex> | min-content | max-content | auto\",\"track-list\":\"[ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?\",\"track-repeat\":\"repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )\",\"track-size\":\"<track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( [ <length> | <percentage> ] )\",\"transform-function\":\"<matrix()> | <translate()> | <translateX()> | <translateY()> | <scale()> | <scaleX()> | <scaleY()> | <rotate()> | <skew()> | <skewX()> | <skewY()> | <matrix3d()> | <translate3d()> | <translateZ()> | <scale3d()> | <scaleZ()> | <rotate3d()> | <rotateX()> | <rotateY()> | <rotateZ()> | <perspective()>\",\"transform-list\":\"<transform-function>+\",\"translate()\":\"translate( <length-percentage> [, <length-percentage> ]? )\",\"translate3d()\":\"translate3d( <length-percentage> , <length-percentage> , <length> )\",\"translateX()\":\"translateX( <length-percentage> )\",\"translateY()\":\"translateY( <length-percentage> )\",\"translateZ()\":\"translateZ( <length> )\",\"type-or-unit\":\"string | integer | color | url | integer | number | length | angle | time | frequency | em | ex | px | rem | vw | vh | vmin | vmax | mm | q | cm | in | pt | pc | deg | grad | rad | ms | s | Hz | kHz | %\",\"viewport-length\":\"auto | <length-percentage>\",\"-legacy-gradient\":\"<-webkit-gradient()> | <-legacy-linear-gradient> | <-legacy-repeating-linear-gradient> | <-legacy-radial-gradient> | <-legacy-repeating-radial-gradient>\",\"-legacy-linear-gradient\":\"-moz-linear-gradient( <-legacy-linear-gradient-arguments> ) | -webkit-linear-gradient( <-legacy-linear-gradient-arguments> ) | -o-linear-gradient( <-legacy-linear-gradient-arguments> )\",\"-legacy-repeating-linear-gradient\":\"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> ) | -webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> ) | -o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )\",\"-legacy-linear-gradient-arguments\":\"[ <angle> | <side-or-corner> ]? , <color-stop-list>\",\"-legacy-radial-gradient\":\"-moz-radial-gradient( <-legacy-radial-gradient-arguments> ) | -webkit-radial-gradient( <-legacy-radial-gradient-arguments> ) | -o-radial-gradient( <-legacy-radial-gradient-arguments> )\",\"-legacy-repeating-radial-gradient\":\"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> ) | -webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> ) | -o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )\",\"-legacy-radial-gradient-arguments\":\"[ <position> , ]? [ [ [ <-legacy-radial-gradient-shape> || <-legacy-radial-gradient-size> ] | [ <length> | <percentage> ]{2} ] , ]? <color-stop-list>\",\"-legacy-radial-gradient-size\":\"closest-side | closest-corner | farthest-side | farthest-corner | contain | cover\",\"-legacy-radial-gradient-shape\":\"circle | ellipse\",\"-non-standard-font\":\"-apple-system-body | -apple-system-headline | -apple-system-subheadline | -apple-system-caption1 | -apple-system-caption2 | -apple-system-footnote | -apple-system-short-body | -apple-system-short-headline | -apple-system-short-subheadline | -apple-system-short-caption1 | -apple-system-short-footnote | -apple-system-tall-body\",\"-non-standard-color\":\"-moz-ButtonDefault | -moz-ButtonHoverFace | -moz-ButtonHoverText | -moz-CellHighlight | -moz-CellHighlightText | -moz-Combobox | -moz-ComboboxText | -moz-Dialog | -moz-DialogText | -moz-dragtargetzone | -moz-EvenTreeRow | -moz-Field | -moz-FieldText | -moz-html-CellHighlight | -moz-html-CellHighlightText | -moz-mac-accentdarkestshadow | -moz-mac-accentdarkshadow | -moz-mac-accentface | -moz-mac-accentlightesthighlight | -moz-mac-accentlightshadow | -moz-mac-accentregularhighlight | -moz-mac-accentregularshadow | -moz-mac-chrome-active | -moz-mac-chrome-inactive | -moz-mac-focusring | -moz-mac-menuselect | -moz-mac-menushadow | -moz-mac-menutextselect | -moz-MenuHover | -moz-MenuHoverText | -moz-MenuBarText | -moz-MenuBarHoverText | -moz-nativehyperlinktext | -moz-OddTreeRow | -moz-win-communicationstext | -moz-win-mediatext | -moz-activehyperlinktext | -moz-default-background-color | -moz-default-color | -moz-hyperlinktext | -moz-visitedhyperlinktext | -webkit-activelink | -webkit-focus-ring-color | -webkit-link | -webkit-text\",\"-non-standard-image-rendering\":\"optimize-contrast | -moz-crisp-edges | -o-crisp-edges | -webkit-optimize-contrast\",\"-non-standard-overflow\":\"-moz-scrollbars-none | -moz-scrollbars-horizontal | -moz-scrollbars-vertical | -moz-hidden-unscrollable\",\"-non-standard-width\":\"min-intrinsic | intrinsic | -moz-min-content | -moz-max-content | -webkit-min-content | -webkit-max-content\",\"-non-standard-word-break\":\"break-word\",\"-webkit-gradient()\":\"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point> | , <-webkit-gradient-radius> , <-webkit-gradient-point> ] [, <-webkit-gradient-radius> ]? [, <-webkit-gradient-color-stop> ]* )\",\"-webkit-gradient-color-stop\":\"from( <color> ) | color-stop( [ <number-zero-one> | <percentage> ] , <color> ) | to( <color> )\",\"-webkit-gradient-point\":\"[ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]\",\"-webkit-gradient-radius\":\"<length> | <percentage>\",\"-webkit-gradient-type\":\"linear | radial\",\"-webkit-mask-box-repeat\":\"repeat | stretch | round\",\"-webkit-mask-clip-style\":\"border | border-box | padding | padding-box | content | content-box | text\",\"-ms-filter\":\"[ <progid> | FlipH | FlipV ]+\",\"age\":\"child | young | old\",\"border-radius\":\"<length-percentage>{1,2}\",\"bottom\":\"<length> | auto\",\"generic-voice\":\"[ <age>? <gender> <integer>? ]\",\"gender\":\"male | female | neutral\",\"left\":\"<length> | auto\",\"mask-image\":\"<mask-reference>#\",\"name-repeat\":\"repeat( [ <positive-integer> | auto-fill ] , <line-names>+ )\",\"paint\":\"none | currentColor | <color> | <url> [ none | currentColor | <color> ]?\",\"path()\":\"path( <string> )\",\"right\":\"<length> | auto\",\"svg-length\":\"<percentage> | <length> | <number>\",\"svg-writing-mode\":\"lr-tb | rl-tb | tb-rl | lr | rl | tb\",\"top\":\"<length> | auto\",\"x\":\"<number>\",\"y\":\"<number>\"},\"properties\":{\"-ms-accelerator\":\"false | true\",\"-ms-block-progression\":\"tb | rl | bt | lr\",\"-ms-content-zoom-chaining\":\"none | chained\",\"-ms-content-zooming\":\"none | zoom\",\"-ms-content-zoom-limit\":\"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",\"-ms-content-zoom-limit-max\":\"<percentage>\",\"-ms-content-zoom-limit-min\":\"<percentage>\",\"-ms-content-zoom-snap\":\"<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>\",\"-ms-content-zoom-snap-points\":\"snapInterval( <percentage> , <percentage> ) | snapList( <percentage># )\",\"-ms-content-zoom-snap-type\":\"none | proximity | mandatory\",\"-ms-filter\":\"<string>\",\"-ms-flow-from\":\"[ none | <custom-ident> ]#\",\"-ms-flow-into\":\"[ none | <custom-ident> ]#\",\"-ms-high-contrast-adjust\":\"auto | none\",\"-ms-hyphenate-limit-chars\":\"auto | <integer>{1,3}\",\"-ms-hyphenate-limit-lines\":\"no-limit | <integer>\",\"-ms-hyphenate-limit-zone\":\"<percentage> | <length>\",\"-ms-ime-align\":\"auto | after\",\"-ms-overflow-style\":\"auto | none | scrollbar | -ms-autohiding-scrollbar\",\"-ms-scrollbar-3dlight-color\":\"<color>\",\"-ms-scrollbar-arrow-color\":\"<color>\",\"-ms-scrollbar-base-color\":\"<color>\",\"-ms-scrollbar-darkshadow-color\":\"<color>\",\"-ms-scrollbar-face-color\":\"<color>\",\"-ms-scrollbar-highlight-color\":\"<color>\",\"-ms-scrollbar-shadow-color\":\"<color>\",\"-ms-scrollbar-track-color\":\"<color>\",\"-ms-scroll-chaining\":\"chained | none\",\"-ms-scroll-limit\":\"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",\"-ms-scroll-limit-x-max\":\"auto | <length>\",\"-ms-scroll-limit-x-min\":\"<length>\",\"-ms-scroll-limit-y-max\":\"auto | <length>\",\"-ms-scroll-limit-y-min\":\"<length>\",\"-ms-scroll-rails\":\"none | railed\",\"-ms-scroll-snap-points-x\":\"snapInterval( <length-percentage> , <length-percentage> ) | snapList( <length-percentage># )\",\"-ms-scroll-snap-points-y\":\"snapInterval( <length-percentage> , <length-percentage> ) | snapList( <length-percentage># )\",\"-ms-scroll-snap-type\":\"none | proximity | mandatory\",\"-ms-scroll-snap-x\":\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",\"-ms-scroll-snap-y\":\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",\"-ms-scroll-translation\":\"none | vertical-to-horizontal\",\"-ms-text-autospace\":\"none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space\",\"-ms-touch-select\":\"grippers | none\",\"-ms-user-select\":\"none | element | text\",\"-ms-wrap-flow\":\"auto | both | start | end | maximum | clear\",\"-ms-wrap-margin\":\"<length>\",\"-ms-wrap-through\":\"wrap | none\",\"-moz-appearance\":\"none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized\",\"-moz-binding\":\"<url> | none\",\"-moz-border-bottom-colors\":\"<color>+ | none\",\"-moz-border-left-colors\":\"<color>+ | none\",\"-moz-border-right-colors\":\"<color>+ | none\",\"-moz-border-top-colors\":\"<color>+ | none\",\"-moz-context-properties\":\"none | [ fill | fill-opacity | stroke | stroke-opacity ]#\",\"-moz-float-edge\":\"border-box | content-box | margin-box | padding-box\",\"-moz-force-broken-image-icon\":\"<integer>\",\"-moz-image-region\":\"<shape> | auto\",\"-moz-orient\":\"inline | block | horizontal | vertical\",\"-moz-outline-radius\":\"<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?\",\"-moz-outline-radius-bottomleft\":\"<outline-radius>\",\"-moz-outline-radius-bottomright\":\"<outline-radius>\",\"-moz-outline-radius-topleft\":\"<outline-radius>\",\"-moz-outline-radius-topright\":\"<outline-radius>\",\"-moz-stack-sizing\":\"ignore | stretch-to-fit\",\"-moz-text-blink\":\"none | blink\",\"-moz-user-focus\":\"ignore | normal | select-after | select-before | select-menu | select-same | select-all | none\",\"-moz-user-input\":\"auto | none | enabled | disabled\",\"-moz-user-modify\":\"read-only | read-write | write-only\",\"-moz-window-dragging\":\"drag | no-drag\",\"-moz-window-shadow\":\"default | menu | tooltip | sheet | none\",\"-webkit-appearance\":\"none | button | button-bevel | caps-lock-indicator | caret | checkbox | default-button | listbox | listitem | media-fullscreen-button | media-mute-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | push-button | radio | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbargripper-horizontal | scrollbargripper-vertical | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield\",\"-webkit-border-before\":\"<'border-width'> || <'border-style'> || <'color'>\",\"-webkit-border-before-color\":\"<'color'>\",\"-webkit-border-before-style\":\"<'border-style'>\",\"-webkit-border-before-width\":\"<'border-width'>\",\"-webkit-box-reflect\":\"[ above | below | right | left ]? <length>? <image>?\",\"-webkit-mask\":\"[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || [ <box> | border | padding | content | text ] || [ <box> | border | padding | content ] ]#\",\"-webkit-mask-attachment\":\"<attachment>#\",\"-webkit-mask-clip\":\"<-webkit-mask-clip-style> [, <-webkit-mask-clip-style> ]*\",\"-webkit-mask-composite\":\"<composite-style>#\",\"-webkit-mask-image\":\"<mask-reference>#\",\"-webkit-mask-origin\":\"[ <box> | border | padding | content ]#\",\"-webkit-mask-position\":\"<position>#\",\"-webkit-mask-position-x\":\"[ <length-percentage> | left | center | right ]#\",\"-webkit-mask-position-y\":\"[ <length-percentage> | top | center | bottom ]#\",\"-webkit-mask-repeat\":\"<repeat-style>#\",\"-webkit-mask-repeat-x\":\"repeat | no-repeat | space | round\",\"-webkit-mask-repeat-y\":\"repeat | no-repeat | space | round\",\"-webkit-mask-size\":\"<bg-size>#\",\"-webkit-overflow-scrolling\":\"auto | touch\",\"-webkit-tap-highlight-color\":\"<color>\",\"-webkit-text-fill-color\":\"<color>\",\"-webkit-text-stroke\":\"<length> || <color>\",\"-webkit-text-stroke-color\":\"<color>\",\"-webkit-text-stroke-width\":\"<length>\",\"-webkit-touch-callout\":\"default | none\",\"-webkit-user-modify\":\"read-only | read-write | read-write-plaintext-only\",\"align-content\":\"normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>\",\"align-items\":\"normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]\",\"align-self\":\"auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>\",\"all\":\"initial | inherit | unset | revert\",\"animation\":\"<single-animation>#\",\"animation-delay\":\"<time>#\",\"animation-direction\":\"<single-animation-direction>#\",\"animation-duration\":\"<time>#\",\"animation-fill-mode\":\"<single-animation-fill-mode>#\",\"animation-iteration-count\":\"<single-animation-iteration-count>#\",\"animation-name\":\"[ none | <keyframes-name> ]#\",\"animation-play-state\":\"<single-animation-play-state>#\",\"animation-timing-function\":\"<single-timing-function>#\",\"appearance\":\"auto | none\",\"azimuth\":\"<angle> | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards\",\"backdrop-filter\":\"none | <filter-function-list>\",\"backface-visibility\":\"visible | hidden\",\"background\":\"[ <bg-layer> , ]* <final-bg-layer>\",\"background-attachment\":\"<attachment>#\",\"background-blend-mode\":\"<blend-mode>#\",\"background-clip\":\"<box>#\",\"background-color\":\"<color>\",\"background-image\":\"<bg-image>#\",\"background-origin\":\"<box>#\",\"background-position\":\"<bg-position>#\",\"background-position-x\":\"[ center | [ left | right | x-start | x-end ]? <length-percentage>? ]#\",\"background-position-y\":\"[ center | [ top | bottom | y-start | y-end ]? <length-percentage>? ]#\",\"background-repeat\":\"<repeat-style>#\",\"background-size\":\"<bg-size>#\",\"block-overflow\":\"clip | ellipsis | <string>\",\"block-size\":\"<'width'>\",\"border\":\"<br-width> || <br-style> || <color>\",\"border-block-end\":\"<'border-width'> || <'border-style'> || <'color'>\",\"border-block-end-color\":\"<'color'>\",\"border-block-end-style\":\"<'border-style'>\",\"border-block-end-width\":\"<'border-width'>\",\"border-block-start\":\"<'border-width'> || <'border-style'> || <'color'>\",\"border-block-start-color\":\"<'color'>\",\"border-block-start-style\":\"<'border-style'>\",\"border-block-start-width\":\"<'border-width'>\",\"border-bottom\":\"<br-width> || <br-style> || <color>\",\"border-bottom-color\":\"<color>\",\"border-bottom-left-radius\":\"<length-percentage>{1,2}\",\"border-bottom-right-radius\":\"<length-percentage>{1,2}\",\"border-bottom-style\":\"<br-style>\",\"border-bottom-width\":\"<br-width>\",\"border-collapse\":\"collapse | separate\",\"border-color\":\"<color>{1,4}\",\"border-image\":\"<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>\",\"border-image-outset\":\"[ <length> | <number> ]{1,4}\",\"border-image-repeat\":\"[ stretch | repeat | round | space ]{1,2}\",\"border-image-slice\":\"<number-percentage>{1,4} && fill?\",\"border-image-source\":\"none | <image>\",\"border-image-width\":\"[ <length-percentage> | <number> | auto ]{1,4}\",\"border-inline-end\":\"<'border-width'> || <'border-style'> || <'color'>\",\"border-inline-end-color\":\"<'color'>\",\"border-inline-end-style\":\"<'border-style'>\",\"border-inline-end-width\":\"<'border-width'>\",\"border-inline-start\":\"<'border-width'> || <'border-style'> || <'color'>\",\"border-inline-start-color\":\"<'color'>\",\"border-inline-start-style\":\"<'border-style'>\",\"border-inline-start-width\":\"<'border-width'>\",\"border-left\":\"<br-width> || <br-style> || <color>\",\"border-left-color\":\"<color>\",\"border-left-style\":\"<br-style>\",\"border-left-width\":\"<br-width>\",\"border-radius\":\"<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?\",\"border-right\":\"<br-width> || <br-style> || <color>\",\"border-right-color\":\"<color>\",\"border-right-style\":\"<br-style>\",\"border-right-width\":\"<br-width>\",\"border-spacing\":\"<length> <length>?\",\"border-style\":\"<br-style>{1,4}\",\"border-top\":\"<br-width> || <br-style> || <color>\",\"border-top-color\":\"<color>\",\"border-top-left-radius\":\"<length-percentage>{1,2}\",\"border-top-right-radius\":\"<length-percentage>{1,2}\",\"border-top-style\":\"<br-style>\",\"border-top-width\":\"<br-width>\",\"border-width\":\"<br-width>{1,4}\",\"bottom\":\"<length> | <percentage> | auto\",\"box-align\":\"start | center | end | baseline | stretch\",\"box-decoration-break\":\"slice | clone\",\"box-direction\":\"normal | reverse | inherit\",\"box-flex\":\"<number>\",\"box-flex-group\":\"<integer>\",\"box-lines\":\"single | multiple\",\"box-ordinal-group\":\"<integer>\",\"box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"box-pack\":\"start | center | end | justify\",\"box-shadow\":\"none | <shadow>#\",\"box-sizing\":\"content-box | border-box\",\"break-after\":\"auto | avoid | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region\",\"break-before\":\"auto | avoid | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region\",\"break-inside\":\"auto | avoid | avoid-page | avoid-column | avoid-region\",\"caption-side\":\"top | bottom | block-start | block-end | inline-start | inline-end\",\"caret-color\":\"auto | <color>\",\"clear\":\"none | left | right | both | inline-start | inline-end\",\"clip\":\"<shape> | auto\",\"clip-path\":\"<clip-source> | [ <basic-shape> || <geometry-box> ] | none\",\"color\":\"<color>\",\"color-adjust\":\"economy | exact\",\"column-count\":\"<integer> | auto\",\"column-fill\":\"auto | balance | balance-all\",\"column-gap\":\"normal | <length-percentage>\",\"column-rule\":\"<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>\",\"column-rule-color\":\"<color>\",\"column-rule-style\":\"<'border-style'>\",\"column-rule-width\":\"<'border-width'>\",\"column-span\":\"none | all\",\"column-width\":\"<length> | auto\",\"columns\":\"<'column-width'> || <'column-count'>\",\"contain\":\"none | strict | content | [ size || layout || style || paint ]\",\"content\":\"normal | none | [ <content-replacement> | <content-list> ] [ / <string> ]?\",\"counter-increment\":\"[ <custom-ident> <integer>? ]+ | none\",\"counter-reset\":\"[ <custom-ident> <integer>? ]+ | none\",\"cursor\":\"[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing | hand | -webkit-grab | -webkit-grabbing | -webkit-zoom-in | -webkit-zoom-out | -moz-grab | -moz-grabbing | -moz-zoom-in | -moz-zoom-out ] ]\",\"direction\":\"ltr | rtl\",\"display\":\"none | inline | block | list-item | inline-list-item | inline-block | inline-table | table | table-cell | table-column | table-column-group | table-footer-group | table-header-group | table-row | table-row-group | flex | inline-flex | grid | inline-grid | run-in | ruby | ruby-base | ruby-text | ruby-base-container | ruby-text-container | contents | -ms-flexbox | -ms-inline-flexbox | -ms-grid | -ms-inline-grid | -webkit-flex | -webkit-inline-flex | -webkit-box | -webkit-inline-box | -moz-inline-stack | -moz-box | -moz-inline-box\",\"empty-cells\":\"show | hide\",\"filter\":\"none | <filter-function-list> | <-ms-filter>\",\"flex\":\"none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]\",\"flex-basis\":\"content | <'width'>\",\"flex-direction\":\"row | row-reverse | column | column-reverse\",\"flex-flow\":\"<'flex-direction'> || <'flex-wrap'>\",\"flex-grow\":\"<number>\",\"flex-shrink\":\"<number>\",\"flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"float\":\"left | right | none | inline-start | inline-end\",\"font\":\"[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar | <-non-standard-font>\",\"font-family\":\"[ <family-name> | <generic-family> ]#\",\"font-feature-settings\":\"normal | <feature-tag-value>#\",\"font-kerning\":\"auto | normal | none\",\"font-language-override\":\"normal | <string>\",\"font-optical-sizing\":\"auto | none\",\"font-variation-settings\":\"normal | [ <string> <number> ]#\",\"font-size\":\"<absolute-size> | <relative-size> | <length-percentage>\",\"font-size-adjust\":\"none | <number>\",\"font-stretch\":\"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded\",\"font-style\":\"normal | italic | oblique\",\"font-synthesis\":\"none | [ weight || style ]\",\"font-variant\":\"normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby ]\",\"font-variant-alternates\":\"normal | [ stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) ]\",\"font-variant-caps\":\"normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps\",\"font-variant-east-asian\":\"normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]\",\"font-variant-ligatures\":\"normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]\",\"font-variant-numeric\":\"normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]\",\"font-variant-position\":\"normal | sub | super\",\"font-weight\":\"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900\",\"gap\":\"<'row-gap'> <'column-gap'>?\",\"grid\":\"<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>\",\"grid-area\":\"<grid-line> [ / <grid-line> ]{0,3}\",\"grid-auto-columns\":\"<track-size>+\",\"grid-auto-flow\":\"[ row | column ] || dense\",\"grid-auto-rows\":\"<track-size>+\",\"grid-column\":\"<grid-line> [ / <grid-line> ]?\",\"grid-column-end\":\"<grid-line>\",\"grid-column-gap\":\"<length-percentage>\",\"grid-column-start\":\"<grid-line>\",\"grid-gap\":\"<'grid-row-gap'> <'grid-column-gap'>?\",\"grid-row\":\"<grid-line> [ / <grid-line> ]?\",\"grid-row-end\":\"<grid-line>\",\"grid-row-gap\":\"<length-percentage>\",\"grid-row-start\":\"<grid-line>\",\"grid-template\":\"none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?\",\"grid-template-areas\":\"none | <string>+\",\"grid-template-columns\":\"none | <track-list> | <auto-track-list>\",\"grid-template-rows\":\"none | <track-list> | <auto-track-list>\",\"hanging-punctuation\":\"none | [ first || [ force-end | allow-end ] || last ]\",\"height\":\"[ <length> | <percentage> ] && [ border-box | content-box ]? | available | min-content | max-content | fit-content | auto\",\"hyphens\":\"none | manual | auto\",\"image-orientation\":\"from-image | <angle> | [ <angle>? flip ]\",\"image-rendering\":\"auto | crisp-edges | pixelated | optimizeSpeed | optimizeQuality | <-non-standard-image-rendering>\",\"image-resolution\":\"[ from-image || <resolution> ] && snap?\",\"ime-mode\":\"auto | normal | active | inactive | disabled\",\"initial-letter\":\"normal | [ <number> <integer>? ]\",\"initial-letter-align\":\"[ auto | alphabetic | hanging | ideographic ]\",\"inline-size\":\"<'width'>\",\"isolation\":\"auto | isolate\",\"justify-content\":\"normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]\",\"justify-items\":\"normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]\",\"justify-self\":\"auto | normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ]\",\"left\":\"<length> | <percentage> | auto\",\"letter-spacing\":\"normal | <length-percentage>\",\"line-break\":\"auto | loose | normal | strict\",\"line-clamp\":\"none | <integer>\",\"line-height\":\"normal | <number> | <length> | <percentage>\",\"line-height-step\":\"none | <length>\",\"list-style\":\"<'list-style-type'> || <'list-style-position'> || <'list-style-image'>\",\"list-style-image\":\"<url> | none\",\"list-style-position\":\"inside | outside\",\"list-style-type\":\"<counter-style> | <string> | none\",\"margin\":\"[ <length> | <percentage> | auto ]{1,4}\",\"margin-block-end\":\"<'margin-left'>\",\"margin-block-start\":\"<'margin-left'>\",\"margin-bottom\":\"<length> | <percentage> | auto\",\"margin-inline-end\":\"<'margin-left'>\",\"margin-inline-start\":\"<'margin-left'>\",\"margin-left\":\"<length> | <percentage> | auto\",\"margin-right\":\"<length> | <percentage> | auto\",\"margin-top\":\"<length> | <percentage> | auto\",\"mask\":\"<mask-layer>#\",\"mask-border\":\"<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>\",\"mask-border-mode\":\"luminance | alpha\",\"mask-border-outset\":\"[ <length> | <number> ]{1,4}\",\"mask-border-repeat\":\"[ stretch | repeat | round | space ]{1,2}\",\"mask-border-slice\":\"<number-percentage>{1,4} fill?\",\"mask-border-source\":\"none | <image>\",\"mask-border-width\":\"[ <length-percentage> | <number> | auto ]{1,4}\",\"mask-clip\":\"[ <geometry-box> | no-clip ]#\",\"mask-composite\":\"<compositing-operator>#\",\"mask-image\":\"<mask-reference>#\",\"mask-mode\":\"<masking-mode>#\",\"mask-origin\":\"<geometry-box>#\",\"mask-position\":\"<position>#\",\"mask-repeat\":\"<repeat-style>#\",\"mask-size\":\"<bg-size>#\",\"mask-type\":\"luminance | alpha\",\"max-block-size\":\"<'max-width'>\",\"max-height\":\"<length> | <percentage> | none | max-content | min-content | fit-content | fill-available\",\"max-inline-size\":\"<'max-width'>\",\"max-lines\":\"none | <integer>\",\"max-width\":\"<length> | <percentage> | none | max-content | min-content | fit-content | fill-available | <-non-standard-width>\",\"min-block-size\":\"<'min-width'>\",\"min-height\":\"<length> | <percentage> | auto | max-content | min-content | fit-content | fill-available\",\"min-inline-size\":\"<'min-width'>\",\"min-width\":\"<length> | <percentage> | auto | max-content | min-content | fit-content | fill-available | <-non-standard-width>\",\"mix-blend-mode\":\"<blend-mode>\",\"object-fit\":\"fill | contain | cover | none | scale-down\",\"object-position\":\"<position>\",\"offset\":\"[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?\",\"offset-anchor\":\"auto | <position>\",\"offset-block-end\":\"<'left'>\",\"offset-block-start\":\"<'left'>\",\"offset-inline-end\":\"<'left'>\",\"offset-inline-start\":\"<'left'>\",\"offset-distance\":\"<length-percentage>\",\"offset-path\":\"none | ray( [ <angle> && <size>? && contain? ] ) | <path()> | <url> | [ <basic-shape> || <geometry-box> ]\",\"offset-position\":\"auto | <position>\",\"offset-rotate\":\"[ auto | reverse ] || <angle>\",\"opacity\":\"<number-zero-one>\",\"order\":\"<integer>\",\"orphans\":\"<integer>\",\"outline\":\"[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]\",\"outline-color\":\"<color> | invert\",\"outline-offset\":\"<length>\",\"outline-style\":\"auto | <br-style>\",\"outline-width\":\"<br-width>\",\"overflow\":\"visible | hidden | scroll | auto | <-non-standard-overflow>\",\"overflow-anchor\":\"auto | none\",\"overflow-block\":\"<'overflow'>\",\"overflow-clip-box\":\"padding-box | content-box\",\"overflow-inline\":\"<'overflow'>\",\"overflow-wrap\":\"normal | break-word\",\"overflow-x\":\"visible | hidden | clip | scroll | auto\",\"overflow-y\":\"visible | hidden | clip | scroll | auto\",\"overscroll-behavior\":\"[ contain | none | auto ]{1,2}\",\"overscroll-behavior-x\":\"contain | none | auto\",\"overscroll-behavior-y\":\"contain | none | auto\",\"padding\":\"[ <length> | <percentage> ]{1,4}\",\"padding-block-end\":\"<'padding-left'>\",\"padding-block-start\":\"<'padding-left'>\",\"padding-bottom\":\"<length> | <percentage>\",\"padding-inline-end\":\"<'padding-left'>\",\"padding-inline-start\":\"<'padding-left'>\",\"padding-left\":\"<length> | <percentage>\",\"padding-right\":\"<length> | <percentage>\",\"padding-top\":\"<length> | <percentage>\",\"page-break-after\":\"auto | always | avoid | left | right | recto | verso\",\"page-break-before\":\"auto | always | avoid | left | right | recto | verso\",\"page-break-inside\":\"auto | avoid\",\"paint-order\":\"normal | [ fill || stroke || markers ]\",\"perspective\":\"none | <length>\",\"perspective-origin\":\"<position>\",\"place-content\":\"<'align-content'> <'justify-content'>?\",\"pointer-events\":\"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",\"position\":\"static | relative | absolute | sticky | fixed | -webkit-sticky\",\"quotes\":\"none | [ <string> <string> ]+\",\"resize\":\"none | both | horizontal | vertical\",\"right\":\"<length> | <percentage> | auto\",\"rotate\":\"none | [ x | y | z | <number>{3} ]? && <angle>\",\"row-gap\":\"normal | <length-percentage>\",\"ruby-align\":\"start | center | space-between | space-around\",\"ruby-merge\":\"separate | collapse | auto\",\"ruby-position\":\"over | under | inter-character\",\"scale\":\"none | <number>{1,3}\",\"scroll-behavior\":\"auto | smooth\",\"scroll-snap-coordinate\":\"none | <position>#\",\"scroll-snap-destination\":\"<position>\",\"scroll-snap-points-x\":\"none | repeat( <length-percentage> )\",\"scroll-snap-points-y\":\"none | repeat( <length-percentage> )\",\"scroll-snap-type\":\"none | mandatory | proximity\",\"scroll-snap-type-x\":\"none | mandatory | proximity\",\"scroll-snap-type-y\":\"none | mandatory | proximity\",\"shape-image-threshold\":\"<number>\",\"shape-margin\":\"<length-percentage>\",\"shape-outside\":\"none | <shape-box> || <basic-shape> | <image>\",\"tab-size\":\"<integer> | <length>\",\"table-layout\":\"auto | fixed\",\"text-align\":\"start | end | left | right | center | justify | match-parent\",\"text-align-last\":\"auto | start | end | left | right | center | justify\",\"text-combine-upright\":\"none | all | [ digits <integer>? ]\",\"text-decoration\":\"<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'>\",\"text-decoration-color\":\"<color>\",\"text-decoration-line\":\"none | [ underline || overline || line-through || blink ]\",\"text-decoration-skip\":\"none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]\",\"text-decoration-skip-ink\":\"auto | none\",\"text-decoration-style\":\"solid | double | dotted | dashed | wavy\",\"text-emphasis\":\"<'text-emphasis-style'> || <'text-emphasis-color'>\",\"text-emphasis-color\":\"<color>\",\"text-emphasis-position\":\"[ over | under ] && [ right | left ]\",\"text-emphasis-style\":\"none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>\",\"text-indent\":\"<length-percentage> && hanging? && each-line?\",\"text-justify\":\"auto | inter-character | inter-word | none\",\"text-orientation\":\"mixed | upright | sideways\",\"text-overflow\":\"[ clip | ellipsis | <string> ]{1,2}\",\"text-rendering\":\"auto | optimizeSpeed | optimizeLegibility | geometricPrecision\",\"text-shadow\":\"none | <shadow-t>#\",\"text-size-adjust\":\"none | auto | <percentage>\",\"text-transform\":\"none | capitalize | uppercase | lowercase | full-width\",\"text-underline-position\":\"auto | [ under || [ left | right ] ]\",\"top\":\"<length> | <percentage> | auto\",\"touch-action\":\"auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation\",\"transform\":\"none | <transform-list>\",\"transform-box\":\"border-box | fill-box | view-box\",\"transform-origin\":\"[ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>? | [ <length-percentage> | left | center | right | top | bottom ]\",\"transform-style\":\"flat | preserve-3d\",\"transition\":\"<single-transition>#\",\"transition-delay\":\"<time>#\",\"transition-duration\":\"<time>#\",\"transition-property\":\"none | <single-transition-property>#\",\"transition-timing-function\":\"<single-transition-timing-function>#\",\"translate\":\"none | <length-percentage> [ <length-percentage> <length>? ]?\",\"unicode-bidi\":\"normal | embed | isolate | bidi-override | isolate-override | plaintext | -moz-isolate | -moz-isolate-override | -moz-plaintext | -webkit-isolate\",\"user-select\":\"auto | text | none | contain | all\",\"vertical-align\":\"baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>\",\"visibility\":\"visible | hidden | collapse\",\"white-space\":\"normal | pre | nowrap | pre-wrap | pre-line\",\"widows\":\"<integer>\",\"width\":\"[ <length> | <percentage> ] && [ border-box | content-box ]? | available | min-content | max-content | fit-content | auto\",\"will-change\":\"auto | <animateable-feature>#\",\"word-break\":\"normal | break-all | keep-all | <-non-standard-word-break>\",\"word-spacing\":\"normal | <length-percentage>\",\"word-wrap\":\"normal | break-word\",\"writing-mode\":\"horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr | <svg-writing-mode>\",\"z-index\":\"auto | <integer>\",\"zoom\":\"normal | reset | <number> | <percentage>\",\"-moz-background-clip\":\"padding | border\",\"-moz-border-radius-bottomleft\":\"<'border-bottom-left-radius'>\",\"-moz-border-radius-bottomright\":\"<'border-bottom-right-radius'>\",\"-moz-border-radius-topleft\":\"<'border-top-left-radius'>\",\"-moz-border-radius-topright\":\"<'border-bottom-right-radius'>\",\"-moz-osx-font-smoothing\":\"auto | grayscale\",\"-moz-user-select\":\"none | text | all | -moz-none\",\"-ms-flex-align\":\"start | end | center | baseline | stretch\",\"-ms-flex-item-align\":\"auto | start | end | center | baseline | stretch\",\"-ms-flex-line-pack\":\"start | end | center | justify | distribute | stretch\",\"-ms-flex-negative\":\"<'flex-shrink'>\",\"-ms-flex-pack\":\"start | end | center | justify | distribute\",\"-ms-flex-order\":\"<integer>\",\"-ms-flex-positive\":\"<'flex-grow'>\",\"-ms-flex-preferred-size\":\"<'flex-basis'>\",\"-ms-interpolation-mode\":\"nearest-neighbor | bicubic\",\"-ms-grid-column-align\":\"start | end | center | stretch\",\"-ms-grid-row-align\":\"start | end | center | stretch\",\"-webkit-background-clip\":\"[ <box> | border | padding | content | text ]#\",\"-webkit-column-break-after\":\"always | auto | avoid\",\"-webkit-column-break-before\":\"always | auto | avoid\",\"-webkit-column-break-inside\":\"always | auto | avoid\",\"-webkit-font-smoothing\":\"auto | none | antialiased | subpixel-antialiased\",\"-webkit-line-clamp\":\"<positive-integer>\",\"-webkit-mask-box-image\":\"[ <url> | <gradient> | none ] [ <length-percentage>{4} <-webkit-mask-box-repeat>{2} ]?\",\"-webkit-print-color-adjust\":\"economy | exact\",\"-webkit-text-security\":\"none | circle | disc | square\",\"-webkit-user-drag\":\"none | element | auto\",\"-webkit-user-select\":\"auto | none | text | all\",\"alignment-baseline\":\"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical\",\"baseline-shift\":\"baseline | sub | super | <svg-length>\",\"behavior\":\"<url>+\",\"clip-rule\":\"nonzero | evenodd\",\"cue\":\"<'cue-before'> <'cue-after'>?\",\"cue-after\":\"<url> <decibel>? | none\",\"cue-before\":\"<url> <decibel>? | none\",\"dominant-baseline\":\"auto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-edge | text-before-edge\",\"fill\":\"<paint>\",\"fill-opacity\":\"<number-zero-one>\",\"fill-rule\":\"nonzero | evenodd\",\"glyph-orientation-horizontal\":\"<angle>\",\"glyph-orientation-vertical\":\"<angle>\",\"kerning\":\"auto | <svg-length>\",\"marker\":\"none | <url>\",\"marker-end\":\"none | <url>\",\"marker-mid\":\"none | <url>\",\"marker-start\":\"none | <url>\",\"pause\":\"<'pause-before'> <'pause-after'>?\",\"pause-after\":\"<time> | none | x-weak | weak | medium | strong | x-strong\",\"pause-before\":\"<time> | none | x-weak | weak | medium | strong | x-strong\",\"rest\":\"<'rest-before'> <'rest-after'>?\",\"rest-after\":\"<time> | none | x-weak | weak | medium | strong | x-strong\",\"rest-before\":\"<time> | none | x-weak | weak | medium | strong | x-strong\",\"shape-rendering\":\"auto | optimizeSpeed | crispEdges | geometricPrecision\",\"src\":\"[ <url> [ format( <string># ) ]? | local( <family-name> ) ]#\",\"speak\":\"auto | none | normal\",\"speak-as\":\"normal | spell-out || digits || [ literal-punctuation | no-punctuation ]\",\"stroke\":\"<paint>\",\"stroke-dasharray\":\"none | [ <svg-length>+ ]#\",\"stroke-dashoffset\":\"<svg-length>\",\"stroke-linecap\":\"butt | round | square\",\"stroke-linejoin\":\"miter | round | bevel\",\"stroke-miterlimit\":\"<number-one-or-greater>\",\"stroke-opacity\":\"<number-zero-one>\",\"stroke-width\":\"<svg-length>\",\"text-anchor\":\"start | middle | end\",\"unicode-range\":\"<unicode-range>#\",\"voice-balance\":\"<number> | left | center | right | leftwards | rightwards\",\"voice-duration\":\"auto | <time>\",\"voice-family\":\"[ [ <family-name> | <generic-voice> ] , ]* [ <family-name> | <generic-voice> ] | preserve\",\"voice-pitch\":\"<frequency> && absolute | [ [ x-low | low | medium | high | x-high ] || [ <frequency> | <semitones> | <percentage> ] ]\",\"voice-range\":\"<frequency> && absolute | [ [ x-low | low | medium | high | x-high ] || [ <frequency> | <semitones> | <percentage> ] ]\",\"voice-rate\":\"[ normal | x-slow | slow | medium | fast | x-fast ] || <percentage>\",\"voice-stress\":\"normal | strong | moderate | none | reduced\",\"voice-volume\":\"silent | [ [ x-soft | soft | medium | loud | x-loud ] || <decibel> ]\"}}");
  32681. /***/ }),
  32682. /* 127 */
  32683. /***/ (function(module, exports, __webpack_require__) {
  32684. var cmpChar = __webpack_require__(0).cmpChar;
  32685. var isNumber = __webpack_require__(0).isNumber;
  32686. var TYPE = __webpack_require__(0).TYPE;
  32687. var IDENTIFIER = TYPE.Identifier;
  32688. var NUMBER = TYPE.Number;
  32689. var PLUSSIGN = TYPE.PlusSign;
  32690. var HYPHENMINUS = TYPE.HyphenMinus;
  32691. var N = 110; // 'n'.charCodeAt(0)
  32692. var DISALLOW_SIGN = true;
  32693. var ALLOW_SIGN = false;
  32694. function checkTokenIsInteger(scanner, disallowSign) {
  32695. var pos = scanner.tokenStart;
  32696. if (scanner.source.charCodeAt(pos) === PLUSSIGN ||
  32697. scanner.source.charCodeAt(pos) === HYPHENMINUS) {
  32698. if (disallowSign) {
  32699. scanner.error();
  32700. }
  32701. pos++;
  32702. }
  32703. for (; pos < scanner.tokenEnd; pos++) {
  32704. if (!isNumber(scanner.source.charCodeAt(pos))) {
  32705. scanner.error('Unexpected input', pos);
  32706. }
  32707. }
  32708. }
  32709. // An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb
  32710. module.exports = {
  32711. name: 'AnPlusB',
  32712. structure: {
  32713. a: [String, null],
  32714. b: [String, null]
  32715. },
  32716. parse: function() {
  32717. var start = this.scanner.tokenStart;
  32718. var end = start;
  32719. var prefix = '';
  32720. var a = null;
  32721. var b = null;
  32722. if (this.scanner.tokenType === NUMBER ||
  32723. this.scanner.tokenType === PLUSSIGN) {
  32724. checkTokenIsInteger(this.scanner, ALLOW_SIGN);
  32725. prefix = this.scanner.getTokenValue();
  32726. this.scanner.next();
  32727. end = this.scanner.tokenStart;
  32728. }
  32729. if (this.scanner.tokenType === IDENTIFIER) {
  32730. var bStart = this.scanner.tokenStart;
  32731. if (cmpChar(this.scanner.source, bStart, HYPHENMINUS)) {
  32732. if (prefix === '') {
  32733. prefix = '-';
  32734. bStart++;
  32735. } else {
  32736. this.scanner.error('Unexpected hyphen minus');
  32737. }
  32738. }
  32739. if (!cmpChar(this.scanner.source, bStart, N)) {
  32740. this.scanner.error();
  32741. }
  32742. a = prefix === '' ? '1' :
  32743. prefix === '+' ? '+1' :
  32744. prefix === '-' ? '-1' :
  32745. prefix;
  32746. var len = this.scanner.tokenEnd - bStart;
  32747. if (len > 1) {
  32748. // ..n-..
  32749. if (this.scanner.source.charCodeAt(bStart + 1) !== HYPHENMINUS) {
  32750. this.scanner.error('Unexpected input', bStart + 1);
  32751. }
  32752. if (len > 2) {
  32753. // ..n-{number}..
  32754. this.scanner.tokenStart = bStart + 2;
  32755. } else {
  32756. // ..n- {number}
  32757. this.scanner.next();
  32758. this.scanner.skipSC();
  32759. }
  32760. checkTokenIsInteger(this.scanner, DISALLOW_SIGN);
  32761. b = '-' + this.scanner.getTokenValue();
  32762. this.scanner.next();
  32763. end = this.scanner.tokenStart;
  32764. } else {
  32765. prefix = '';
  32766. this.scanner.next();
  32767. end = this.scanner.tokenStart;
  32768. this.scanner.skipSC();
  32769. if (this.scanner.tokenType === HYPHENMINUS ||
  32770. this.scanner.tokenType === PLUSSIGN) {
  32771. prefix = this.scanner.getTokenValue();
  32772. this.scanner.next();
  32773. this.scanner.skipSC();
  32774. }
  32775. if (this.scanner.tokenType === NUMBER) {
  32776. checkTokenIsInteger(this.scanner, prefix !== '');
  32777. if (!isNumber(this.scanner.source.charCodeAt(this.scanner.tokenStart))) {
  32778. prefix = this.scanner.source.charAt(this.scanner.tokenStart);
  32779. this.scanner.tokenStart++;
  32780. }
  32781. if (prefix === '') {
  32782. // should be an operator before number
  32783. this.scanner.error();
  32784. } else if (prefix === '+') {
  32785. // plus is using by default
  32786. prefix = '';
  32787. }
  32788. b = prefix + this.scanner.getTokenValue();
  32789. this.scanner.next();
  32790. end = this.scanner.tokenStart;
  32791. } else {
  32792. if (prefix) {
  32793. this.scanner.eat(NUMBER);
  32794. }
  32795. }
  32796. }
  32797. } else {
  32798. if (prefix === '' || prefix === '+') { // no number
  32799. this.scanner.error(
  32800. 'Number or identifier is expected',
  32801. this.scanner.tokenStart + (
  32802. this.scanner.tokenType === PLUSSIGN ||
  32803. this.scanner.tokenType === HYPHENMINUS
  32804. )
  32805. );
  32806. }
  32807. b = prefix;
  32808. }
  32809. return {
  32810. type: 'AnPlusB',
  32811. loc: this.getLocation(start, end),
  32812. a: a,
  32813. b: b
  32814. };
  32815. },
  32816. generate: function(node) {
  32817. var a = node.a !== null && node.a !== undefined;
  32818. var b = node.b !== null && node.b !== undefined;
  32819. if (a) {
  32820. this.chunk(
  32821. node.a === '+1' ? '+n' :
  32822. node.a === '1' ? 'n' :
  32823. node.a === '-1' ? '-n' :
  32824. node.a + 'n'
  32825. );
  32826. if (b) {
  32827. b = String(node.b);
  32828. if (b.charAt(0) === '-' || b.charAt(0) === '+') {
  32829. this.chunk(b.charAt(0));
  32830. this.chunk(b.substr(1));
  32831. } else {
  32832. this.chunk('+');
  32833. this.chunk(b);
  32834. }
  32835. }
  32836. } else {
  32837. this.chunk(String(node.b));
  32838. }
  32839. }
  32840. };
  32841. /***/ }),
  32842. /* 128 */
  32843. /***/ (function(module, exports, __webpack_require__) {
  32844. var TYPE = __webpack_require__(0).TYPE;
  32845. var ATKEYWORD = TYPE.AtKeyword;
  32846. var SEMICOLON = TYPE.Semicolon;
  32847. var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket;
  32848. var RIGHTCURLYBRACKET = TYPE.RightCurlyBracket;
  32849. function consumeRaw(startToken) {
  32850. return this.Raw(startToken, SEMICOLON, LEFTCURLYBRACKET, false, true);
  32851. }
  32852. function isDeclarationBlockAtrule() {
  32853. for (var offset = 1, type; type = this.scanner.lookupType(offset); offset++) {
  32854. if (type === RIGHTCURLYBRACKET) {
  32855. return true;
  32856. }
  32857. if (type === LEFTCURLYBRACKET ||
  32858. type === ATKEYWORD) {
  32859. return false;
  32860. }
  32861. }
  32862. return false;
  32863. }
  32864. module.exports = {
  32865. name: 'Atrule',
  32866. structure: {
  32867. name: String,
  32868. prelude: ['AtrulePrelude', 'Raw', null],
  32869. block: ['Block', null]
  32870. },
  32871. parse: function() {
  32872. var start = this.scanner.tokenStart;
  32873. var name;
  32874. var nameLowerCase;
  32875. var prelude = null;
  32876. var block = null;
  32877. this.scanner.eat(ATKEYWORD);
  32878. name = this.scanner.substrToCursor(start + 1);
  32879. nameLowerCase = name.toLowerCase();
  32880. this.scanner.skipSC();
  32881. // parse prelude
  32882. if (this.scanner.eof === false &&
  32883. this.scanner.tokenType !== LEFTCURLYBRACKET &&
  32884. this.scanner.tokenType !== SEMICOLON) {
  32885. if (this.parseAtrulePrelude) {
  32886. prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name), consumeRaw);
  32887. // turn empty AtrulePrelude into null
  32888. if (prelude.type === 'AtrulePrelude' && prelude.children.head === null) {
  32889. prelude = null;
  32890. }
  32891. } else {
  32892. prelude = consumeRaw.call(this, this.scanner.currentToken);
  32893. }
  32894. this.scanner.skipSC();
  32895. }
  32896. switch (this.scanner.tokenType) {
  32897. case SEMICOLON:
  32898. this.scanner.next();
  32899. break;
  32900. case LEFTCURLYBRACKET:
  32901. if (this.atrule.hasOwnProperty(nameLowerCase) &&
  32902. typeof this.atrule[nameLowerCase].block === 'function') {
  32903. block = this.atrule[nameLowerCase].block.call(this);
  32904. } else {
  32905. // TODO: should consume block content as Raw?
  32906. block = this.Block(isDeclarationBlockAtrule.call(this));
  32907. }
  32908. break;
  32909. }
  32910. return {
  32911. type: 'Atrule',
  32912. loc: this.getLocation(start, this.scanner.tokenStart),
  32913. name: name,
  32914. prelude: prelude,
  32915. block: block
  32916. };
  32917. },
  32918. generate: function(node) {
  32919. this.chunk('@');
  32920. this.chunk(node.name);
  32921. if (node.prelude !== null) {
  32922. this.chunk(' ');
  32923. this.node(node.prelude);
  32924. }
  32925. if (node.block) {
  32926. this.node(node.block);
  32927. } else {
  32928. this.chunk(';');
  32929. }
  32930. },
  32931. walkContext: 'atrule'
  32932. };
  32933. /***/ }),
  32934. /* 129 */
  32935. /***/ (function(module, exports, __webpack_require__) {
  32936. var TYPE = __webpack_require__(0).TYPE;
  32937. var SEMICOLON = TYPE.Semicolon;
  32938. var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket;
  32939. module.exports = {
  32940. name: 'AtrulePrelude',
  32941. structure: {
  32942. children: [[]]
  32943. },
  32944. parse: function(name) {
  32945. var children = null;
  32946. if (name !== null) {
  32947. name = name.toLowerCase();
  32948. }
  32949. this.scanner.skipSC();
  32950. if (this.atrule.hasOwnProperty(name) &&
  32951. typeof this.atrule[name].prelude === 'function') {
  32952. // custom consumer
  32953. children = this.atrule[name].prelude.call(this);
  32954. } else {
  32955. // default consumer
  32956. children = this.readSequence(this.scope.AtrulePrelude);
  32957. }
  32958. this.scanner.skipSC();
  32959. if (this.scanner.eof !== true &&
  32960. this.scanner.tokenType !== LEFTCURLYBRACKET &&
  32961. this.scanner.tokenType !== SEMICOLON) {
  32962. this.scanner.error('Semicolon or block is expected');
  32963. }
  32964. if (children === null) {
  32965. children = this.createList();
  32966. }
  32967. return {
  32968. type: 'AtrulePrelude',
  32969. loc: this.getLocationFromList(children),
  32970. children: children
  32971. };
  32972. },
  32973. generate: function(node) {
  32974. this.children(node);
  32975. },
  32976. walkContext: 'atrulePrelude'
  32977. };
  32978. /***/ }),
  32979. /* 130 */
  32980. /***/ (function(module, exports, __webpack_require__) {
  32981. var TYPE = __webpack_require__(0).TYPE;
  32982. var IDENTIFIER = TYPE.Identifier;
  32983. var STRING = TYPE.String;
  32984. var DOLLARSIGN = TYPE.DollarSign;
  32985. var ASTERISK = TYPE.Asterisk;
  32986. var COLON = TYPE.Colon;
  32987. var EQUALSSIGN = TYPE.EqualsSign;
  32988. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  32989. var RIGHTSQUAREBRACKET = TYPE.RightSquareBracket;
  32990. var CIRCUMFLEXACCENT = TYPE.CircumflexAccent;
  32991. var VERTICALLINE = TYPE.VerticalLine;
  32992. var TILDE = TYPE.Tilde;
  32993. function getAttributeName() {
  32994. if (this.scanner.eof) {
  32995. this.scanner.error('Unexpected end of input');
  32996. }
  32997. var start = this.scanner.tokenStart;
  32998. var expectIdentifier = false;
  32999. var checkColon = true;
  33000. if (this.scanner.tokenType === ASTERISK) {
  33001. expectIdentifier = true;
  33002. checkColon = false;
  33003. this.scanner.next();
  33004. } else if (this.scanner.tokenType !== VERTICALLINE) {
  33005. this.scanner.eat(IDENTIFIER);
  33006. }
  33007. if (this.scanner.tokenType === VERTICALLINE) {
  33008. if (this.scanner.lookupType(1) !== EQUALSSIGN) {
  33009. this.scanner.next();
  33010. this.scanner.eat(IDENTIFIER);
  33011. } else if (expectIdentifier) {
  33012. this.scanner.error('Identifier is expected', this.scanner.tokenEnd);
  33013. }
  33014. } else if (expectIdentifier) {
  33015. this.scanner.error('Vertical line is expected');
  33016. }
  33017. if (checkColon && this.scanner.tokenType === COLON) {
  33018. this.scanner.next();
  33019. this.scanner.eat(IDENTIFIER);
  33020. }
  33021. return {
  33022. type: 'Identifier',
  33023. loc: this.getLocation(start, this.scanner.tokenStart),
  33024. name: this.scanner.substrToCursor(start)
  33025. };
  33026. }
  33027. function getOperator() {
  33028. var start = this.scanner.tokenStart;
  33029. var tokenType = this.scanner.tokenType;
  33030. if (tokenType !== EQUALSSIGN && // =
  33031. tokenType !== TILDE && // ~=
  33032. tokenType !== CIRCUMFLEXACCENT && // ^=
  33033. tokenType !== DOLLARSIGN && // $=
  33034. tokenType !== ASTERISK && // *=
  33035. tokenType !== VERTICALLINE // |=
  33036. ) {
  33037. this.scanner.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');
  33038. }
  33039. if (tokenType === EQUALSSIGN) {
  33040. this.scanner.next();
  33041. } else {
  33042. this.scanner.next();
  33043. this.scanner.eat(EQUALSSIGN);
  33044. }
  33045. return this.scanner.substrToCursor(start);
  33046. }
  33047. // '[' S* attrib_name ']'
  33048. // '[' S* attrib_name S* attrib_matcher S* [ IDENT | STRING ] S* attrib_flags? S* ']'
  33049. module.exports = {
  33050. name: 'AttributeSelector',
  33051. structure: {
  33052. name: 'Identifier',
  33053. matcher: [String, null],
  33054. value: ['String', 'Identifier', null],
  33055. flags: [String, null]
  33056. },
  33057. parse: function() {
  33058. var start = this.scanner.tokenStart;
  33059. var name;
  33060. var matcher = null;
  33061. var value = null;
  33062. var flags = null;
  33063. this.scanner.eat(LEFTSQUAREBRACKET);
  33064. this.scanner.skipSC();
  33065. name = getAttributeName.call(this);
  33066. this.scanner.skipSC();
  33067. if (this.scanner.tokenType !== RIGHTSQUAREBRACKET) {
  33068. // avoid case `[name i]`
  33069. if (this.scanner.tokenType !== IDENTIFIER) {
  33070. matcher = getOperator.call(this);
  33071. this.scanner.skipSC();
  33072. value = this.scanner.tokenType === STRING
  33073. ? this.String()
  33074. : this.Identifier();
  33075. this.scanner.skipSC();
  33076. }
  33077. // attribute flags
  33078. if (this.scanner.tokenType === IDENTIFIER) {
  33079. flags = this.scanner.getTokenValue();
  33080. this.scanner.next();
  33081. this.scanner.skipSC();
  33082. }
  33083. }
  33084. this.scanner.eat(RIGHTSQUAREBRACKET);
  33085. return {
  33086. type: 'AttributeSelector',
  33087. loc: this.getLocation(start, this.scanner.tokenStart),
  33088. name: name,
  33089. matcher: matcher,
  33090. value: value,
  33091. flags: flags
  33092. };
  33093. },
  33094. generate: function(node) {
  33095. var flagsPrefix = ' ';
  33096. this.chunk('[');
  33097. this.node(node.name);
  33098. if (node.matcher !== null) {
  33099. this.chunk(node.matcher);
  33100. if (node.value !== null) {
  33101. this.node(node.value);
  33102. // space between string and flags is not required
  33103. if (node.value.type === 'String') {
  33104. flagsPrefix = '';
  33105. }
  33106. }
  33107. }
  33108. if (node.flags !== null) {
  33109. this.chunk(flagsPrefix);
  33110. this.chunk(node.flags);
  33111. }
  33112. this.chunk(']');
  33113. }
  33114. };
  33115. /***/ }),
  33116. /* 131 */
  33117. /***/ (function(module, exports, __webpack_require__) {
  33118. var TYPE = __webpack_require__(0).TYPE;
  33119. var WHITESPACE = TYPE.WhiteSpace;
  33120. var COMMENT = TYPE.Comment;
  33121. var SEMICOLON = TYPE.Semicolon;
  33122. var ATKEYWORD = TYPE.AtKeyword;
  33123. var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket;
  33124. var RIGHTCURLYBRACKET = TYPE.RightCurlyBracket;
  33125. function consumeRaw(startToken) {
  33126. return this.Raw(startToken, 0, 0, false, true);
  33127. }
  33128. function consumeRule() {
  33129. return this.parseWithFallback(this.Rule, consumeRaw);
  33130. }
  33131. function consumeRawDeclaration(startToken) {
  33132. return this.Raw(startToken, 0, SEMICOLON, true, true);
  33133. }
  33134. function consumeDeclaration() {
  33135. if (this.scanner.tokenType === SEMICOLON) {
  33136. return consumeRawDeclaration.call(this, this.scanner.currentToken);
  33137. }
  33138. var node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);
  33139. if (this.scanner.tokenType === SEMICOLON) {
  33140. this.scanner.next();
  33141. }
  33142. return node;
  33143. }
  33144. module.exports = {
  33145. name: 'Block',
  33146. structure: {
  33147. children: [[
  33148. 'Atrule',
  33149. 'Rule',
  33150. 'Declaration'
  33151. ]]
  33152. },
  33153. parse: function(isDeclaration) {
  33154. var consumer = isDeclaration ? consumeDeclaration : consumeRule;
  33155. var start = this.scanner.tokenStart;
  33156. var children = this.createList();
  33157. this.scanner.eat(LEFTCURLYBRACKET);
  33158. scan:
  33159. while (!this.scanner.eof) {
  33160. switch (this.scanner.tokenType) {
  33161. case RIGHTCURLYBRACKET:
  33162. break scan;
  33163. case WHITESPACE:
  33164. case COMMENT:
  33165. this.scanner.next();
  33166. break;
  33167. case ATKEYWORD:
  33168. children.push(this.parseWithFallback(this.Atrule, consumeRaw));
  33169. break;
  33170. default:
  33171. children.push(consumer.call(this));
  33172. }
  33173. }
  33174. if (!this.scanner.eof) {
  33175. this.scanner.eat(RIGHTCURLYBRACKET);
  33176. }
  33177. return {
  33178. type: 'Block',
  33179. loc: this.getLocation(start, this.scanner.tokenStart),
  33180. children: children
  33181. };
  33182. },
  33183. generate: function(node) {
  33184. this.chunk('{');
  33185. this.children(node, function(prev) {
  33186. if (prev.type === 'Declaration') {
  33187. this.chunk(';');
  33188. }
  33189. });
  33190. this.chunk('}');
  33191. },
  33192. walkContext: 'block'
  33193. };
  33194. /***/ }),
  33195. /* 132 */
  33196. /***/ (function(module, exports, __webpack_require__) {
  33197. var TYPE = __webpack_require__(0).TYPE;
  33198. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  33199. var RIGHTSQUAREBRACKET = TYPE.RightSquareBracket;
  33200. module.exports = {
  33201. name: 'Brackets',
  33202. structure: {
  33203. children: [[]]
  33204. },
  33205. parse: function(readSequence, recognizer) {
  33206. var start = this.scanner.tokenStart;
  33207. var children = null;
  33208. this.scanner.eat(LEFTSQUAREBRACKET);
  33209. children = readSequence.call(this, recognizer);
  33210. if (!this.scanner.eof) {
  33211. this.scanner.eat(RIGHTSQUAREBRACKET);
  33212. }
  33213. return {
  33214. type: 'Brackets',
  33215. loc: this.getLocation(start, this.scanner.tokenStart),
  33216. children: children
  33217. };
  33218. },
  33219. generate: function(node) {
  33220. this.chunk('[');
  33221. this.children(node);
  33222. this.chunk(']');
  33223. }
  33224. };
  33225. /***/ }),
  33226. /* 133 */
  33227. /***/ (function(module, exports, __webpack_require__) {
  33228. var CDC = __webpack_require__(0).TYPE.CDC;
  33229. module.exports = {
  33230. name: 'CDC',
  33231. structure: [],
  33232. parse: function() {
  33233. var start = this.scanner.tokenStart;
  33234. this.scanner.eat(CDC); // -->
  33235. return {
  33236. type: 'CDC',
  33237. loc: this.getLocation(start, this.scanner.tokenStart)
  33238. };
  33239. },
  33240. generate: function() {
  33241. this.chunk('-->');
  33242. }
  33243. };
  33244. /***/ }),
  33245. /* 134 */
  33246. /***/ (function(module, exports, __webpack_require__) {
  33247. var CDO = __webpack_require__(0).TYPE.CDO;
  33248. module.exports = {
  33249. name: 'CDO',
  33250. structure: [],
  33251. parse: function() {
  33252. var start = this.scanner.tokenStart;
  33253. this.scanner.eat(CDO); // <!--
  33254. return {
  33255. type: 'CDO',
  33256. loc: this.getLocation(start, this.scanner.tokenStart)
  33257. };
  33258. },
  33259. generate: function() {
  33260. this.chunk('<!--');
  33261. }
  33262. };
  33263. /***/ }),
  33264. /* 135 */
  33265. /***/ (function(module, exports, __webpack_require__) {
  33266. var TYPE = __webpack_require__(0).TYPE;
  33267. var IDENTIFIER = TYPE.Identifier;
  33268. var FULLSTOP = TYPE.FullStop;
  33269. // '.' ident
  33270. module.exports = {
  33271. name: 'ClassSelector',
  33272. structure: {
  33273. name: String
  33274. },
  33275. parse: function() {
  33276. this.scanner.eat(FULLSTOP);
  33277. return {
  33278. type: 'ClassSelector',
  33279. loc: this.getLocation(this.scanner.tokenStart - 1, this.scanner.tokenEnd),
  33280. name: this.scanner.consume(IDENTIFIER)
  33281. };
  33282. },
  33283. generate: function(node) {
  33284. this.chunk('.');
  33285. this.chunk(node.name);
  33286. }
  33287. };
  33288. /***/ }),
  33289. /* 136 */
  33290. /***/ (function(module, exports, __webpack_require__) {
  33291. var TYPE = __webpack_require__(0).TYPE;
  33292. var PLUSSIGN = TYPE.PlusSign;
  33293. var SOLIDUS = TYPE.Solidus;
  33294. var GREATERTHANSIGN = TYPE.GreaterThanSign;
  33295. var TILDE = TYPE.Tilde;
  33296. // + | > | ~ | /deep/
  33297. module.exports = {
  33298. name: 'Combinator',
  33299. structure: {
  33300. name: String
  33301. },
  33302. parse: function() {
  33303. var start = this.scanner.tokenStart;
  33304. switch (this.scanner.tokenType) {
  33305. case GREATERTHANSIGN:
  33306. case PLUSSIGN:
  33307. case TILDE:
  33308. this.scanner.next();
  33309. break;
  33310. case SOLIDUS:
  33311. this.scanner.next();
  33312. this.scanner.expectIdentifier('deep');
  33313. this.scanner.eat(SOLIDUS);
  33314. break;
  33315. default:
  33316. this.scanner.error('Combinator is expected');
  33317. }
  33318. return {
  33319. type: 'Combinator',
  33320. loc: this.getLocation(start, this.scanner.tokenStart),
  33321. name: this.scanner.substrToCursor(start)
  33322. };
  33323. },
  33324. generate: function(node) {
  33325. this.chunk(node.name);
  33326. }
  33327. };
  33328. /***/ }),
  33329. /* 137 */
  33330. /***/ (function(module, exports, __webpack_require__) {
  33331. var TYPE = __webpack_require__(0).TYPE;
  33332. var ASTERISK = TYPE.Asterisk;
  33333. var SOLIDUS = TYPE.Solidus;
  33334. // '/*' .* '*/'
  33335. module.exports = {
  33336. name: 'Comment',
  33337. structure: {
  33338. value: String
  33339. },
  33340. parse: function() {
  33341. var start = this.scanner.tokenStart;
  33342. var end = this.scanner.tokenEnd;
  33343. if ((end - start + 2) >= 2 &&
  33344. this.scanner.source.charCodeAt(end - 2) === ASTERISK &&
  33345. this.scanner.source.charCodeAt(end - 1) === SOLIDUS) {
  33346. end -= 2;
  33347. }
  33348. this.scanner.next();
  33349. return {
  33350. type: 'Comment',
  33351. loc: this.getLocation(start, this.scanner.tokenStart),
  33352. value: this.scanner.source.substring(start + 2, end)
  33353. };
  33354. },
  33355. generate: function(node) {
  33356. this.chunk('/*');
  33357. this.chunk(node.value);
  33358. this.chunk('*/');
  33359. }
  33360. };
  33361. /***/ }),
  33362. /* 138 */
  33363. /***/ (function(module, exports, __webpack_require__) {
  33364. var isCustomProperty = __webpack_require__(26).isCustomProperty;
  33365. var TYPE = __webpack_require__(0).TYPE;
  33366. var IDENTIFIER = TYPE.Identifier;
  33367. var COLON = TYPE.Colon;
  33368. var EXCLAMATIONMARK = TYPE.ExclamationMark;
  33369. var SOLIDUS = TYPE.Solidus;
  33370. var ASTERISK = TYPE.Asterisk;
  33371. var DOLLARSIGN = TYPE.DollarSign;
  33372. var HYPHENMINUS = TYPE.HyphenMinus;
  33373. var SEMICOLON = TYPE.Semicolon;
  33374. var PLUSSIGN = TYPE.PlusSign;
  33375. var NUMBERSIGN = TYPE.NumberSign;
  33376. function consumeValueRaw(startToken) {
  33377. return this.Raw(startToken, EXCLAMATIONMARK, SEMICOLON, false, true);
  33378. }
  33379. function consumeCustomPropertyRaw(startToken) {
  33380. return this.Raw(startToken, EXCLAMATIONMARK, SEMICOLON, false, false);
  33381. }
  33382. function consumeValue() {
  33383. var startValueToken = this.scanner.currentToken;
  33384. var value = this.Value();
  33385. if (value.type !== 'Raw' &&
  33386. this.scanner.eof === false &&
  33387. this.scanner.tokenType !== SEMICOLON &&
  33388. this.scanner.tokenType !== EXCLAMATIONMARK &&
  33389. this.scanner.isBalanceEdge(startValueToken) === false) {
  33390. this.scanner.error();
  33391. }
  33392. return value;
  33393. }
  33394. module.exports = {
  33395. name: 'Declaration',
  33396. structure: {
  33397. important: [Boolean, String],
  33398. property: String,
  33399. value: ['Value', 'Raw']
  33400. },
  33401. parse: function() {
  33402. var start = this.scanner.tokenStart;
  33403. var startToken = this.scanner.currentToken;
  33404. var property = readProperty.call(this);
  33405. var customProperty = isCustomProperty(property);
  33406. var parseValue = customProperty ? this.parseCustomProperty : this.parseValue;
  33407. var consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;
  33408. var important = false;
  33409. var value;
  33410. this.scanner.skipSC();
  33411. this.scanner.eat(COLON);
  33412. if (!customProperty) {
  33413. this.scanner.skipSC();
  33414. }
  33415. if (parseValue) {
  33416. value = this.parseWithFallback(consumeValue, consumeRaw);
  33417. } else {
  33418. value = consumeRaw.call(this, this.scanner.currentToken);
  33419. }
  33420. if (this.scanner.tokenType === EXCLAMATIONMARK) {
  33421. important = getImportant(this.scanner);
  33422. this.scanner.skipSC();
  33423. }
  33424. // Do not include semicolon to range per spec
  33425. // https://drafts.csswg.org/css-syntax/#declaration-diagram
  33426. if (this.scanner.eof === false &&
  33427. this.scanner.tokenType !== SEMICOLON &&
  33428. this.scanner.isBalanceEdge(startToken) === false) {
  33429. this.scanner.error();
  33430. }
  33431. return {
  33432. type: 'Declaration',
  33433. loc: this.getLocation(start, this.scanner.tokenStart),
  33434. important: important,
  33435. property: property,
  33436. value: value
  33437. };
  33438. },
  33439. generate: function(node) {
  33440. this.chunk(node.property);
  33441. this.chunk(':');
  33442. this.node(node.value);
  33443. if (node.important) {
  33444. this.chunk(node.important === true ? '!important' : '!' + node.important);
  33445. }
  33446. },
  33447. walkContext: 'declaration'
  33448. };
  33449. function readProperty() {
  33450. var start = this.scanner.tokenStart;
  33451. var prefix = 0;
  33452. // hacks
  33453. switch (this.scanner.tokenType) {
  33454. case ASTERISK:
  33455. case DOLLARSIGN:
  33456. case PLUSSIGN:
  33457. case NUMBERSIGN:
  33458. prefix = 1;
  33459. break;
  33460. // TODO: not sure we should support this hack
  33461. case SOLIDUS:
  33462. prefix = this.scanner.lookupType(1) === SOLIDUS ? 2 : 1;
  33463. break;
  33464. }
  33465. if (this.scanner.lookupType(prefix) === HYPHENMINUS) {
  33466. prefix++;
  33467. }
  33468. if (prefix) {
  33469. this.scanner.skip(prefix);
  33470. }
  33471. this.scanner.eat(IDENTIFIER);
  33472. return this.scanner.substrToCursor(start);
  33473. }
  33474. // ! ws* important
  33475. function getImportant(scanner) {
  33476. scanner.eat(EXCLAMATIONMARK);
  33477. scanner.skipSC();
  33478. var important = scanner.consume(IDENTIFIER);
  33479. // store original value in case it differ from `important`
  33480. // for better original source restoring and hacks like `!ie` support
  33481. return important === 'important' ? true : important;
  33482. }
  33483. /***/ }),
  33484. /* 139 */
  33485. /***/ (function(module, exports, __webpack_require__) {
  33486. var TYPE = __webpack_require__(0).TYPE;
  33487. var WHITESPACE = TYPE.WhiteSpace;
  33488. var COMMENT = TYPE.Comment;
  33489. var SEMICOLON = TYPE.Semicolon;
  33490. function consumeRaw(startToken) {
  33491. return this.Raw(startToken, 0, SEMICOLON, true, true);
  33492. }
  33493. module.exports = {
  33494. name: 'DeclarationList',
  33495. structure: {
  33496. children: [[
  33497. 'Declaration'
  33498. ]]
  33499. },
  33500. parse: function() {
  33501. var children = this.createList();
  33502. scan:
  33503. while (!this.scanner.eof) {
  33504. switch (this.scanner.tokenType) {
  33505. case WHITESPACE:
  33506. case COMMENT:
  33507. case SEMICOLON:
  33508. this.scanner.next();
  33509. break;
  33510. default:
  33511. children.push(this.parseWithFallback(this.Declaration, consumeRaw));
  33512. }
  33513. }
  33514. return {
  33515. type: 'DeclarationList',
  33516. loc: this.getLocationFromList(children),
  33517. children: children
  33518. };
  33519. },
  33520. generate: function(node) {
  33521. this.children(node, function(prev) {
  33522. if (prev.type === 'Declaration') {
  33523. this.chunk(';');
  33524. }
  33525. });
  33526. }
  33527. };
  33528. /***/ }),
  33529. /* 140 */
  33530. /***/ (function(module, exports, __webpack_require__) {
  33531. var NUMBER = __webpack_require__(0).TYPE.Number;
  33532. // special reader for units to avoid adjoined IE hacks (i.e. '1px\9')
  33533. function readUnit(scanner) {
  33534. var unit = scanner.getTokenValue();
  33535. var backSlashPos = unit.indexOf('\\');
  33536. if (backSlashPos > 0) {
  33537. // patch token offset
  33538. scanner.tokenStart += backSlashPos;
  33539. // return part before backslash
  33540. return unit.substring(0, backSlashPos);
  33541. }
  33542. // no backslash in unit name
  33543. scanner.next();
  33544. return unit;
  33545. }
  33546. // number ident
  33547. module.exports = {
  33548. name: 'Dimension',
  33549. structure: {
  33550. value: String,
  33551. unit: String
  33552. },
  33553. parse: function() {
  33554. var start = this.scanner.tokenStart;
  33555. var value = this.scanner.consume(NUMBER);
  33556. var unit = readUnit(this.scanner);
  33557. return {
  33558. type: 'Dimension',
  33559. loc: this.getLocation(start, this.scanner.tokenStart),
  33560. value: value,
  33561. unit: unit
  33562. };
  33563. },
  33564. generate: function(node) {
  33565. this.chunk(node.value);
  33566. this.chunk(node.unit);
  33567. }
  33568. };
  33569. /***/ }),
  33570. /* 141 */
  33571. /***/ (function(module, exports, __webpack_require__) {
  33572. var TYPE = __webpack_require__(0).TYPE;
  33573. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  33574. // <function-token> <sequence> ')'
  33575. module.exports = {
  33576. name: 'Function',
  33577. structure: {
  33578. name: String,
  33579. children: [[]]
  33580. },
  33581. parse: function(readSequence, recognizer) {
  33582. var start = this.scanner.tokenStart;
  33583. var name = this.scanner.consumeFunctionName();
  33584. var nameLowerCase = name.toLowerCase();
  33585. var children;
  33586. children = recognizer.hasOwnProperty(nameLowerCase)
  33587. ? recognizer[nameLowerCase].call(this, recognizer)
  33588. : readSequence.call(this, recognizer);
  33589. if (!this.scanner.eof) {
  33590. this.scanner.eat(RIGHTPARENTHESIS);
  33591. }
  33592. return {
  33593. type: 'Function',
  33594. loc: this.getLocation(start, this.scanner.tokenStart),
  33595. name: name,
  33596. children: children
  33597. };
  33598. },
  33599. generate: function(node) {
  33600. this.chunk(node.name);
  33601. this.chunk('(');
  33602. this.children(node);
  33603. this.chunk(')');
  33604. },
  33605. walkContext: 'function'
  33606. };
  33607. /***/ }),
  33608. /* 142 */
  33609. /***/ (function(module, exports, __webpack_require__) {
  33610. var isHex = __webpack_require__(0).isHex;
  33611. var TYPE = __webpack_require__(0).TYPE;
  33612. var IDENTIFIER = TYPE.Identifier;
  33613. var NUMBER = TYPE.Number;
  33614. var NUMBERSIGN = TYPE.NumberSign;
  33615. function consumeHexSequence(scanner, required) {
  33616. if (!isHex(scanner.source.charCodeAt(scanner.tokenStart))) {
  33617. if (required) {
  33618. scanner.error('Unexpected input', scanner.tokenStart);
  33619. } else {
  33620. return;
  33621. }
  33622. }
  33623. for (var pos = scanner.tokenStart + 1; pos < scanner.tokenEnd; pos++) {
  33624. var code = scanner.source.charCodeAt(pos);
  33625. // break on non-hex char
  33626. if (!isHex(code)) {
  33627. // break token, exclude symbol
  33628. scanner.tokenStart = pos;
  33629. return;
  33630. }
  33631. }
  33632. // token is full hex sequence, go to next token
  33633. scanner.next();
  33634. }
  33635. // # ident
  33636. module.exports = {
  33637. name: 'HexColor',
  33638. structure: {
  33639. value: String
  33640. },
  33641. parse: function() {
  33642. var start = this.scanner.tokenStart;
  33643. this.scanner.eat(NUMBERSIGN);
  33644. scan:
  33645. switch (this.scanner.tokenType) {
  33646. case NUMBER:
  33647. consumeHexSequence(this.scanner, true);
  33648. // if token is identifier then number consists of hex only,
  33649. // try to add identifier to result
  33650. if (this.scanner.tokenType === IDENTIFIER) {
  33651. consumeHexSequence(this.scanner, false);
  33652. }
  33653. break;
  33654. case IDENTIFIER:
  33655. consumeHexSequence(this.scanner, true);
  33656. break;
  33657. default:
  33658. this.scanner.error('Number or identifier is expected');
  33659. }
  33660. return {
  33661. type: 'HexColor',
  33662. loc: this.getLocation(start, this.scanner.tokenStart),
  33663. value: this.scanner.substrToCursor(start + 1) // skip #
  33664. };
  33665. },
  33666. generate: function(node) {
  33667. this.chunk('#');
  33668. this.chunk(node.value);
  33669. }
  33670. };
  33671. /***/ }),
  33672. /* 143 */
  33673. /***/ (function(module, exports, __webpack_require__) {
  33674. var TYPE = __webpack_require__(0).TYPE;
  33675. var IDENTIFIER = TYPE.Identifier;
  33676. module.exports = {
  33677. name: 'Identifier',
  33678. structure: {
  33679. name: String
  33680. },
  33681. parse: function() {
  33682. return {
  33683. type: 'Identifier',
  33684. loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),
  33685. name: this.scanner.consume(IDENTIFIER)
  33686. };
  33687. },
  33688. generate: function(node) {
  33689. this.chunk(node.name);
  33690. }
  33691. };
  33692. /***/ }),
  33693. /* 144 */
  33694. /***/ (function(module, exports, __webpack_require__) {
  33695. var TYPE = __webpack_require__(0).TYPE;
  33696. var IDENTIFIER = TYPE.Identifier;
  33697. var NUMBERSIGN = TYPE.NumberSign;
  33698. // '#' ident
  33699. module.exports = {
  33700. name: 'IdSelector',
  33701. structure: {
  33702. name: String
  33703. },
  33704. parse: function() {
  33705. this.scanner.eat(NUMBERSIGN);
  33706. return {
  33707. type: 'IdSelector',
  33708. loc: this.getLocation(this.scanner.tokenStart - 1, this.scanner.tokenEnd),
  33709. name: this.scanner.consume(IDENTIFIER)
  33710. };
  33711. },
  33712. generate: function(node) {
  33713. this.chunk('#');
  33714. this.chunk(node.name);
  33715. }
  33716. };
  33717. /***/ }),
  33718. /* 145 */
  33719. /***/ (function(module, exports, __webpack_require__) {
  33720. var TYPE = __webpack_require__(0).TYPE;
  33721. var IDENTIFIER = TYPE.Identifier;
  33722. var NUMBER = TYPE.Number;
  33723. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  33724. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  33725. var COLON = TYPE.Colon;
  33726. var SOLIDUS = TYPE.Solidus;
  33727. module.exports = {
  33728. name: 'MediaFeature',
  33729. structure: {
  33730. name: String,
  33731. value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
  33732. },
  33733. parse: function() {
  33734. var start = this.scanner.tokenStart;
  33735. var name;
  33736. var value = null;
  33737. this.scanner.eat(LEFTPARENTHESIS);
  33738. this.scanner.skipSC();
  33739. name = this.scanner.consume(IDENTIFIER);
  33740. this.scanner.skipSC();
  33741. if (this.scanner.tokenType !== RIGHTPARENTHESIS) {
  33742. this.scanner.eat(COLON);
  33743. this.scanner.skipSC();
  33744. switch (this.scanner.tokenType) {
  33745. case NUMBER:
  33746. if (this.scanner.lookupType(1) === IDENTIFIER) {
  33747. value = this.Dimension();
  33748. } else if (this.scanner.lookupNonWSType(1) === SOLIDUS) {
  33749. value = this.Ratio();
  33750. } else {
  33751. value = this.Number();
  33752. }
  33753. break;
  33754. case IDENTIFIER:
  33755. value = this.Identifier();
  33756. break;
  33757. default:
  33758. this.scanner.error('Number, dimension, ratio or identifier is expected');
  33759. }
  33760. this.scanner.skipSC();
  33761. }
  33762. this.scanner.eat(RIGHTPARENTHESIS);
  33763. return {
  33764. type: 'MediaFeature',
  33765. loc: this.getLocation(start, this.scanner.tokenStart),
  33766. name: name,
  33767. value: value
  33768. };
  33769. },
  33770. generate: function(node) {
  33771. this.chunk('(');
  33772. this.chunk(node.name);
  33773. if (node.value !== null) {
  33774. this.chunk(':');
  33775. this.node(node.value);
  33776. }
  33777. this.chunk(')');
  33778. }
  33779. };
  33780. /***/ }),
  33781. /* 146 */
  33782. /***/ (function(module, exports, __webpack_require__) {
  33783. var TYPE = __webpack_require__(0).TYPE;
  33784. var WHITESPACE = TYPE.WhiteSpace;
  33785. var COMMENT = TYPE.Comment;
  33786. var IDENTIFIER = TYPE.Identifier;
  33787. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  33788. module.exports = {
  33789. name: 'MediaQuery',
  33790. structure: {
  33791. children: [[
  33792. 'Identifier',
  33793. 'MediaFeature',
  33794. 'WhiteSpace'
  33795. ]]
  33796. },
  33797. parse: function() {
  33798. this.scanner.skipSC();
  33799. var children = this.createList();
  33800. var child = null;
  33801. var space = null;
  33802. scan:
  33803. while (!this.scanner.eof) {
  33804. switch (this.scanner.tokenType) {
  33805. case COMMENT:
  33806. this.scanner.next();
  33807. continue;
  33808. case WHITESPACE:
  33809. space = this.WhiteSpace();
  33810. continue;
  33811. case IDENTIFIER:
  33812. child = this.Identifier();
  33813. break;
  33814. case LEFTPARENTHESIS:
  33815. child = this.MediaFeature();
  33816. break;
  33817. default:
  33818. break scan;
  33819. }
  33820. if (space !== null) {
  33821. children.push(space);
  33822. space = null;
  33823. }
  33824. children.push(child);
  33825. }
  33826. if (child === null) {
  33827. this.scanner.error('Identifier or parenthesis is expected');
  33828. }
  33829. return {
  33830. type: 'MediaQuery',
  33831. loc: this.getLocationFromList(children),
  33832. children: children
  33833. };
  33834. },
  33835. generate: function(node) {
  33836. this.children(node);
  33837. }
  33838. };
  33839. /***/ }),
  33840. /* 147 */
  33841. /***/ (function(module, exports, __webpack_require__) {
  33842. var COMMA = __webpack_require__(0).TYPE.Comma;
  33843. module.exports = {
  33844. name: 'MediaQueryList',
  33845. structure: {
  33846. children: [[
  33847. 'MediaQuery'
  33848. ]]
  33849. },
  33850. parse: function(relative) {
  33851. var children = this.createList();
  33852. this.scanner.skipSC();
  33853. while (!this.scanner.eof) {
  33854. children.push(this.MediaQuery(relative));
  33855. if (this.scanner.tokenType !== COMMA) {
  33856. break;
  33857. }
  33858. this.scanner.next();
  33859. }
  33860. return {
  33861. type: 'MediaQueryList',
  33862. loc: this.getLocationFromList(children),
  33863. children: children
  33864. };
  33865. },
  33866. generate: function(node) {
  33867. this.children(node, function() {
  33868. this.chunk(',');
  33869. });
  33870. }
  33871. };
  33872. /***/ }),
  33873. /* 148 */
  33874. /***/ (function(module, exports) {
  33875. // https://drafts.csswg.org/css-syntax-3/#the-anb-type
  33876. module.exports = {
  33877. name: 'Nth',
  33878. structure: {
  33879. nth: ['AnPlusB', 'Identifier'],
  33880. selector: ['SelectorList', null]
  33881. },
  33882. parse: function(allowOfClause) {
  33883. this.scanner.skipSC();
  33884. var start = this.scanner.tokenStart;
  33885. var end = start;
  33886. var selector = null;
  33887. var query;
  33888. if (this.scanner.lookupValue(0, 'odd') || this.scanner.lookupValue(0, 'even')) {
  33889. query = this.Identifier();
  33890. } else {
  33891. query = this.AnPlusB();
  33892. }
  33893. this.scanner.skipSC();
  33894. if (allowOfClause && this.scanner.lookupValue(0, 'of')) {
  33895. this.scanner.next();
  33896. selector = this.SelectorList();
  33897. if (this.needPositions) {
  33898. end = this.getLastListNode(selector.children).loc.end.offset;
  33899. }
  33900. } else {
  33901. if (this.needPositions) {
  33902. end = query.loc.end.offset;
  33903. }
  33904. }
  33905. return {
  33906. type: 'Nth',
  33907. loc: this.getLocation(start, end),
  33908. nth: query,
  33909. selector: selector
  33910. };
  33911. },
  33912. generate: function(node) {
  33913. this.node(node.nth);
  33914. if (node.selector !== null) {
  33915. this.chunk(' of ');
  33916. this.node(node.selector);
  33917. }
  33918. }
  33919. };
  33920. /***/ }),
  33921. /* 149 */
  33922. /***/ (function(module, exports, __webpack_require__) {
  33923. var NUMBER = __webpack_require__(0).TYPE.Number;
  33924. module.exports = {
  33925. name: 'Number',
  33926. structure: {
  33927. value: String
  33928. },
  33929. parse: function() {
  33930. return {
  33931. type: 'Number',
  33932. loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),
  33933. value: this.scanner.consume(NUMBER)
  33934. };
  33935. },
  33936. generate: function(node) {
  33937. this.chunk(node.value);
  33938. }
  33939. };
  33940. /***/ }),
  33941. /* 150 */
  33942. /***/ (function(module, exports) {
  33943. // '/' | '*' | ',' | ':' | '+' | '-'
  33944. module.exports = {
  33945. name: 'Operator',
  33946. structure: {
  33947. value: String
  33948. },
  33949. parse: function() {
  33950. var start = this.scanner.tokenStart;
  33951. this.scanner.next();
  33952. return {
  33953. type: 'Operator',
  33954. loc: this.getLocation(start, this.scanner.tokenStart),
  33955. value: this.scanner.substrToCursor(start)
  33956. };
  33957. },
  33958. generate: function(node) {
  33959. this.chunk(node.value);
  33960. }
  33961. };
  33962. /***/ }),
  33963. /* 151 */
  33964. /***/ (function(module, exports, __webpack_require__) {
  33965. var TYPE = __webpack_require__(0).TYPE;
  33966. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  33967. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  33968. module.exports = {
  33969. name: 'Parentheses',
  33970. structure: {
  33971. children: [[]]
  33972. },
  33973. parse: function(readSequence, recognizer) {
  33974. var start = this.scanner.tokenStart;
  33975. var children = null;
  33976. this.scanner.eat(LEFTPARENTHESIS);
  33977. children = readSequence.call(this, recognizer);
  33978. if (!this.scanner.eof) {
  33979. this.scanner.eat(RIGHTPARENTHESIS);
  33980. }
  33981. return {
  33982. type: 'Parentheses',
  33983. loc: this.getLocation(start, this.scanner.tokenStart),
  33984. children: children
  33985. };
  33986. },
  33987. generate: function(node) {
  33988. this.chunk('(');
  33989. this.children(node);
  33990. this.chunk(')');
  33991. }
  33992. };
  33993. /***/ }),
  33994. /* 152 */
  33995. /***/ (function(module, exports, __webpack_require__) {
  33996. var TYPE = __webpack_require__(0).TYPE;
  33997. var NUMBER = TYPE.Number;
  33998. var PERCENTSIGN = TYPE.PercentSign;
  33999. module.exports = {
  34000. name: 'Percentage',
  34001. structure: {
  34002. value: String
  34003. },
  34004. parse: function() {
  34005. var start = this.scanner.tokenStart;
  34006. var number = this.scanner.consume(NUMBER);
  34007. this.scanner.eat(PERCENTSIGN);
  34008. return {
  34009. type: 'Percentage',
  34010. loc: this.getLocation(start, this.scanner.tokenStart),
  34011. value: number
  34012. };
  34013. },
  34014. generate: function(node) {
  34015. this.chunk(node.value);
  34016. this.chunk('%');
  34017. }
  34018. };
  34019. /***/ }),
  34020. /* 153 */
  34021. /***/ (function(module, exports, __webpack_require__) {
  34022. var TYPE = __webpack_require__(0).TYPE;
  34023. var IDENTIFIER = TYPE.Identifier;
  34024. var FUNCTION = TYPE.Function;
  34025. var COLON = TYPE.Colon;
  34026. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  34027. // : ident [ '(' .. ')' ]?
  34028. module.exports = {
  34029. name: 'PseudoClassSelector',
  34030. structure: {
  34031. name: String,
  34032. children: [['Raw'], null]
  34033. },
  34034. parse: function() {
  34035. var start = this.scanner.tokenStart;
  34036. var children = null;
  34037. var name;
  34038. var nameLowerCase;
  34039. this.scanner.eat(COLON);
  34040. if (this.scanner.tokenType === FUNCTION) {
  34041. name = this.scanner.consumeFunctionName();
  34042. nameLowerCase = name.toLowerCase();
  34043. if (this.pseudo.hasOwnProperty(nameLowerCase)) {
  34044. this.scanner.skipSC();
  34045. children = this.pseudo[nameLowerCase].call(this);
  34046. this.scanner.skipSC();
  34047. } else {
  34048. children = this.createList();
  34049. children.push(
  34050. this.Raw(this.scanner.currentToken, 0, 0, false, false)
  34051. );
  34052. }
  34053. this.scanner.eat(RIGHTPARENTHESIS);
  34054. } else {
  34055. name = this.scanner.consume(IDENTIFIER);
  34056. }
  34057. return {
  34058. type: 'PseudoClassSelector',
  34059. loc: this.getLocation(start, this.scanner.tokenStart),
  34060. name: name,
  34061. children: children
  34062. };
  34063. },
  34064. generate: function(node) {
  34065. this.chunk(':');
  34066. this.chunk(node.name);
  34067. if (node.children !== null) {
  34068. this.chunk('(');
  34069. this.children(node);
  34070. this.chunk(')');
  34071. }
  34072. },
  34073. walkContext: 'function'
  34074. };
  34075. /***/ }),
  34076. /* 154 */
  34077. /***/ (function(module, exports, __webpack_require__) {
  34078. var TYPE = __webpack_require__(0).TYPE;
  34079. var IDENTIFIER = TYPE.Identifier;
  34080. var FUNCTION = TYPE.Function;
  34081. var COLON = TYPE.Colon;
  34082. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  34083. // :: ident [ '(' .. ')' ]?
  34084. module.exports = {
  34085. name: 'PseudoElementSelector',
  34086. structure: {
  34087. name: String,
  34088. children: [['Raw'], null]
  34089. },
  34090. parse: function() {
  34091. var start = this.scanner.tokenStart;
  34092. var children = null;
  34093. var name;
  34094. var nameLowerCase;
  34095. this.scanner.eat(COLON);
  34096. this.scanner.eat(COLON);
  34097. if (this.scanner.tokenType === FUNCTION) {
  34098. name = this.scanner.consumeFunctionName();
  34099. nameLowerCase = name.toLowerCase();
  34100. if (this.pseudo.hasOwnProperty(nameLowerCase)) {
  34101. this.scanner.skipSC();
  34102. children = this.pseudo[nameLowerCase].call(this);
  34103. this.scanner.skipSC();
  34104. } else {
  34105. children = this.createList();
  34106. children.push(
  34107. this.Raw(this.scanner.currentToken, 0, 0, false, false)
  34108. );
  34109. }
  34110. this.scanner.eat(RIGHTPARENTHESIS);
  34111. } else {
  34112. name = this.scanner.consume(IDENTIFIER);
  34113. }
  34114. return {
  34115. type: 'PseudoElementSelector',
  34116. loc: this.getLocation(start, this.scanner.tokenStart),
  34117. name: name,
  34118. children: children
  34119. };
  34120. },
  34121. generate: function(node) {
  34122. this.chunk('::');
  34123. this.chunk(node.name);
  34124. if (node.children !== null) {
  34125. this.chunk('(');
  34126. this.children(node);
  34127. this.chunk(')');
  34128. }
  34129. },
  34130. walkContext: 'function'
  34131. };
  34132. /***/ }),
  34133. /* 155 */
  34134. /***/ (function(module, exports, __webpack_require__) {
  34135. var isNumber = __webpack_require__(0).isNumber;
  34136. var TYPE = __webpack_require__(0).TYPE;
  34137. var NUMBER = TYPE.Number;
  34138. var SOLIDUS = TYPE.Solidus;
  34139. var FULLSTOP = TYPE.FullStop;
  34140. // Terms of <ratio> should to be a positive number (not zero or negative)
  34141. // (see https://drafts.csswg.org/mediaqueries-3/#values)
  34142. // However, -o-min-device-pixel-ratio takes fractional values as a ratio's term
  34143. // and this is using by various sites. Therefore we relax checking on parse
  34144. // to test a term is unsigned number without exponent part.
  34145. // Additional checks may to be applied on lexer validation.
  34146. function consumeNumber(scanner) {
  34147. var value = scanner.consumeNonWS(NUMBER);
  34148. for (var i = 0; i < value.length; i++) {
  34149. var code = value.charCodeAt(i);
  34150. if (!isNumber(code) && code !== FULLSTOP) {
  34151. scanner.error('Unsigned number is expected', scanner.tokenStart - value.length + i);
  34152. }
  34153. }
  34154. if (Number(value) === 0) {
  34155. scanner.error('Zero number is not allowed', scanner.tokenStart - value.length);
  34156. }
  34157. return value;
  34158. }
  34159. // <positive-integer> S* '/' S* <positive-integer>
  34160. module.exports = {
  34161. name: 'Ratio',
  34162. structure: {
  34163. left: String,
  34164. right: String
  34165. },
  34166. parse: function() {
  34167. var start = this.scanner.tokenStart;
  34168. var left = consumeNumber(this.scanner);
  34169. var right;
  34170. this.scanner.eatNonWS(SOLIDUS);
  34171. right = consumeNumber(this.scanner);
  34172. return {
  34173. type: 'Ratio',
  34174. loc: this.getLocation(start, this.scanner.tokenStart),
  34175. left: left,
  34176. right: right
  34177. };
  34178. },
  34179. generate: function(node) {
  34180. this.chunk(node.left);
  34181. this.chunk('/');
  34182. this.chunk(node.right);
  34183. }
  34184. };
  34185. /***/ }),
  34186. /* 156 */
  34187. /***/ (function(module, exports) {
  34188. module.exports = {
  34189. name: 'Raw',
  34190. structure: {
  34191. value: String
  34192. },
  34193. parse: function(startToken, endTokenType1, endTokenType2, includeTokenType2, excludeWhiteSpace) {
  34194. var startOffset = this.scanner.getTokenStart(startToken);
  34195. var endOffset;
  34196. this.scanner.skip(
  34197. this.scanner.getRawLength(
  34198. startToken,
  34199. endTokenType1,
  34200. endTokenType2,
  34201. includeTokenType2
  34202. )
  34203. );
  34204. if (excludeWhiteSpace && this.scanner.tokenStart > startOffset) {
  34205. endOffset = this.scanner.getOffsetExcludeWS();
  34206. } else {
  34207. endOffset = this.scanner.tokenStart;
  34208. }
  34209. return {
  34210. type: 'Raw',
  34211. loc: this.getLocation(startOffset, endOffset),
  34212. value: this.scanner.source.substring(startOffset, endOffset)
  34213. };
  34214. },
  34215. generate: function(node) {
  34216. this.chunk(node.value);
  34217. }
  34218. };
  34219. /***/ }),
  34220. /* 157 */
  34221. /***/ (function(module, exports, __webpack_require__) {
  34222. var TYPE = __webpack_require__(0).TYPE;
  34223. var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket;
  34224. function consumeRaw(startToken) {
  34225. return this.Raw(startToken, LEFTCURLYBRACKET, 0, false, true);
  34226. }
  34227. function consumePrelude() {
  34228. var prelude = this.SelectorList();
  34229. if (prelude.type !== 'Raw' &&
  34230. this.scanner.eof === false &&
  34231. this.scanner.tokenType !== LEFTCURLYBRACKET) {
  34232. this.scanner.error();
  34233. }
  34234. return prelude;
  34235. }
  34236. module.exports = {
  34237. name: 'Rule',
  34238. structure: {
  34239. prelude: ['SelectorList', 'Raw'],
  34240. block: ['Block']
  34241. },
  34242. parse: function() {
  34243. var startToken = this.scanner.currentToken;
  34244. var startOffset = this.scanner.tokenStart;
  34245. var prelude;
  34246. var block;
  34247. if (this.parseRulePrelude) {
  34248. prelude = this.parseWithFallback(consumePrelude, consumeRaw);
  34249. } else {
  34250. prelude = consumeRaw.call(this, startToken);
  34251. }
  34252. block = this.Block(true);
  34253. return {
  34254. type: 'Rule',
  34255. loc: this.getLocation(startOffset, this.scanner.tokenStart),
  34256. prelude: prelude,
  34257. block: block
  34258. };
  34259. },
  34260. generate: function(node) {
  34261. this.node(node.prelude);
  34262. this.node(node.block);
  34263. },
  34264. walkContext: 'rule'
  34265. };
  34266. /***/ }),
  34267. /* 158 */
  34268. /***/ (function(module, exports) {
  34269. module.exports = {
  34270. name: 'Selector',
  34271. structure: {
  34272. children: [[
  34273. 'TypeSelector',
  34274. 'IdSelector',
  34275. 'ClassSelector',
  34276. 'AttributeSelector',
  34277. 'PseudoClassSelector',
  34278. 'PseudoElementSelector',
  34279. 'Combinator',
  34280. 'WhiteSpace'
  34281. ]]
  34282. },
  34283. parse: function() {
  34284. var children = this.readSequence(this.scope.Selector);
  34285. // nothing were consumed
  34286. if (this.getFirstListNode(children) === null) {
  34287. this.scanner.error('Selector is expected');
  34288. }
  34289. return {
  34290. type: 'Selector',
  34291. loc: this.getLocationFromList(children),
  34292. children: children
  34293. };
  34294. },
  34295. generate: function(node) {
  34296. this.children(node);
  34297. }
  34298. };
  34299. /***/ }),
  34300. /* 159 */
  34301. /***/ (function(module, exports, __webpack_require__) {
  34302. var TYPE = __webpack_require__(0).TYPE;
  34303. var COMMA = TYPE.Comma;
  34304. module.exports = {
  34305. name: 'SelectorList',
  34306. structure: {
  34307. children: [[
  34308. 'Selector',
  34309. 'Raw'
  34310. ]]
  34311. },
  34312. parse: function() {
  34313. var children = this.createList();
  34314. while (!this.scanner.eof) {
  34315. children.push(this.Selector());
  34316. if (this.scanner.tokenType === COMMA) {
  34317. this.scanner.next();
  34318. continue;
  34319. }
  34320. break;
  34321. }
  34322. return {
  34323. type: 'SelectorList',
  34324. loc: this.getLocationFromList(children),
  34325. children: children
  34326. };
  34327. },
  34328. generate: function(node) {
  34329. this.children(node, function() {
  34330. this.chunk(',');
  34331. });
  34332. },
  34333. walkContext: 'selector'
  34334. };
  34335. /***/ }),
  34336. /* 160 */
  34337. /***/ (function(module, exports, __webpack_require__) {
  34338. var STRING = __webpack_require__(0).TYPE.String;
  34339. module.exports = {
  34340. name: 'String',
  34341. structure: {
  34342. value: String
  34343. },
  34344. parse: function() {
  34345. return {
  34346. type: 'String',
  34347. loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),
  34348. value: this.scanner.consume(STRING)
  34349. };
  34350. },
  34351. generate: function(node) {
  34352. this.chunk(node.value);
  34353. }
  34354. };
  34355. /***/ }),
  34356. /* 161 */
  34357. /***/ (function(module, exports, __webpack_require__) {
  34358. var TYPE = __webpack_require__(0).TYPE;
  34359. var WHITESPACE = TYPE.WhiteSpace;
  34360. var COMMENT = TYPE.Comment;
  34361. var EXCLAMATIONMARK = TYPE.ExclamationMark;
  34362. var ATKEYWORD = TYPE.AtKeyword;
  34363. var CDO = TYPE.CDO;
  34364. var CDC = TYPE.CDC;
  34365. function consumeRaw(startToken) {
  34366. return this.Raw(startToken, 0, 0, false, false);
  34367. }
  34368. module.exports = {
  34369. name: 'StyleSheet',
  34370. structure: {
  34371. children: [[
  34372. 'Comment',
  34373. 'CDO',
  34374. 'CDC',
  34375. 'Atrule',
  34376. 'Rule',
  34377. 'Raw'
  34378. ]]
  34379. },
  34380. parse: function() {
  34381. var start = this.scanner.tokenStart;
  34382. var children = this.createList();
  34383. var child;
  34384. scan:
  34385. while (!this.scanner.eof) {
  34386. switch (this.scanner.tokenType) {
  34387. case WHITESPACE:
  34388. this.scanner.next();
  34389. continue;
  34390. case COMMENT:
  34391. // ignore comments except exclamation comments (i.e. /*! .. */) on top level
  34392. if (this.scanner.source.charCodeAt(this.scanner.tokenStart + 2) !== EXCLAMATIONMARK) {
  34393. this.scanner.next();
  34394. continue;
  34395. }
  34396. child = this.Comment();
  34397. break;
  34398. case CDO: // <!--
  34399. child = this.CDO();
  34400. break;
  34401. case CDC: // -->
  34402. child = this.CDC();
  34403. break;
  34404. // CSS Syntax Module Level 3
  34405. // §2.2 Error handling
  34406. // At the "top level" of a stylesheet, an <at-keyword-token> starts an at-rule.
  34407. case ATKEYWORD:
  34408. child = this.parseWithFallback(this.Atrule, consumeRaw);
  34409. break;
  34410. // Anything else starts a qualified rule ...
  34411. default:
  34412. child = this.parseWithFallback(this.Rule, consumeRaw);
  34413. }
  34414. children.push(child);
  34415. }
  34416. return {
  34417. type: 'StyleSheet',
  34418. loc: this.getLocation(start, this.scanner.tokenStart),
  34419. children: children
  34420. };
  34421. },
  34422. generate: function(node) {
  34423. this.children(node);
  34424. },
  34425. walkContext: 'stylesheet'
  34426. };
  34427. /***/ }),
  34428. /* 162 */
  34429. /***/ (function(module, exports, __webpack_require__) {
  34430. var TYPE = __webpack_require__(0).TYPE;
  34431. var IDENTIFIER = TYPE.Identifier;
  34432. var ASTERISK = TYPE.Asterisk;
  34433. var VERTICALLINE = TYPE.VerticalLine;
  34434. function eatIdentifierOrAsterisk() {
  34435. if (this.scanner.tokenType !== IDENTIFIER &&
  34436. this.scanner.tokenType !== ASTERISK) {
  34437. this.scanner.error('Identifier or asterisk is expected');
  34438. }
  34439. this.scanner.next();
  34440. }
  34441. // ident
  34442. // ident|ident
  34443. // ident|*
  34444. // *
  34445. // *|ident
  34446. // *|*
  34447. // |ident
  34448. // |*
  34449. module.exports = {
  34450. name: 'TypeSelector',
  34451. structure: {
  34452. name: String
  34453. },
  34454. parse: function() {
  34455. var start = this.scanner.tokenStart;
  34456. if (this.scanner.tokenType === VERTICALLINE) {
  34457. this.scanner.next();
  34458. eatIdentifierOrAsterisk.call(this);
  34459. } else {
  34460. eatIdentifierOrAsterisk.call(this);
  34461. if (this.scanner.tokenType === VERTICALLINE) {
  34462. this.scanner.next();
  34463. eatIdentifierOrAsterisk.call(this);
  34464. }
  34465. }
  34466. return {
  34467. type: 'TypeSelector',
  34468. loc: this.getLocation(start, this.scanner.tokenStart),
  34469. name: this.scanner.substrToCursor(start)
  34470. };
  34471. },
  34472. generate: function(node) {
  34473. this.chunk(node.name);
  34474. }
  34475. };
  34476. /***/ }),
  34477. /* 163 */
  34478. /***/ (function(module, exports, __webpack_require__) {
  34479. var isHex = __webpack_require__(0).isHex;
  34480. var TYPE = __webpack_require__(0).TYPE;
  34481. var IDENTIFIER = TYPE.Identifier;
  34482. var NUMBER = TYPE.Number;
  34483. var PLUSSIGN = TYPE.PlusSign;
  34484. var HYPHENMINUS = TYPE.HyphenMinus;
  34485. var FULLSTOP = TYPE.FullStop;
  34486. var QUESTIONMARK = TYPE.QuestionMark;
  34487. function scanUnicodeNumber(scanner) {
  34488. for (var pos = scanner.tokenStart + 1; pos < scanner.tokenEnd; pos++) {
  34489. var code = scanner.source.charCodeAt(pos);
  34490. // break on fullstop or hyperminus/plussign after exponent
  34491. if (code === FULLSTOP || code === PLUSSIGN) {
  34492. // break token, exclude symbol
  34493. scanner.tokenStart = pos;
  34494. return false;
  34495. }
  34496. }
  34497. return true;
  34498. }
  34499. // https://drafts.csswg.org/css-syntax-3/#urange
  34500. function scanUnicodeRange(scanner) {
  34501. var hexStart = scanner.tokenStart + 1; // skip +
  34502. var hexLength = 0;
  34503. scan: {
  34504. if (scanner.tokenType === NUMBER) {
  34505. if (scanner.source.charCodeAt(scanner.tokenStart) !== FULLSTOP && scanUnicodeNumber(scanner)) {
  34506. scanner.next();
  34507. } else if (scanner.source.charCodeAt(scanner.tokenStart) !== HYPHENMINUS) {
  34508. break scan;
  34509. }
  34510. } else {
  34511. scanner.next(); // PLUSSIGN
  34512. }
  34513. if (scanner.tokenType === HYPHENMINUS) {
  34514. scanner.next();
  34515. }
  34516. if (scanner.tokenType === NUMBER) {
  34517. scanner.next();
  34518. }
  34519. if (scanner.tokenType === IDENTIFIER) {
  34520. scanner.next();
  34521. }
  34522. if (scanner.tokenStart === hexStart) {
  34523. scanner.error('Unexpected input', hexStart);
  34524. }
  34525. }
  34526. // validate for U+x{1,6} or U+x{1,6}-x{1,6}
  34527. // where x is [0-9a-fA-F]
  34528. for (var i = hexStart, wasHyphenMinus = false; i < scanner.tokenStart; i++) {
  34529. var code = scanner.source.charCodeAt(i);
  34530. if (isHex(code) === false && (code !== HYPHENMINUS || wasHyphenMinus)) {
  34531. scanner.error('Unexpected input', i);
  34532. }
  34533. if (code === HYPHENMINUS) {
  34534. // hex sequence shouldn't be an empty
  34535. if (hexLength === 0) {
  34536. scanner.error('Unexpected input', i);
  34537. }
  34538. wasHyphenMinus = true;
  34539. hexLength = 0;
  34540. } else {
  34541. hexLength++;
  34542. // too long hex sequence
  34543. if (hexLength > 6) {
  34544. scanner.error('Too long hex sequence', i);
  34545. }
  34546. }
  34547. }
  34548. // check we have a non-zero sequence
  34549. if (hexLength === 0) {
  34550. scanner.error('Unexpected input', i - 1);
  34551. }
  34552. // U+abc???
  34553. if (!wasHyphenMinus) {
  34554. // consume as many U+003F QUESTION MARK (?) code points as possible
  34555. for (; hexLength < 6 && !scanner.eof; scanner.next()) {
  34556. if (scanner.tokenType !== QUESTIONMARK) {
  34557. break;
  34558. }
  34559. hexLength++;
  34560. }
  34561. }
  34562. }
  34563. module.exports = {
  34564. name: 'UnicodeRange',
  34565. structure: {
  34566. value: String
  34567. },
  34568. parse: function() {
  34569. var start = this.scanner.tokenStart;
  34570. this.scanner.next(); // U or u
  34571. scanUnicodeRange(this.scanner);
  34572. return {
  34573. type: 'UnicodeRange',
  34574. loc: this.getLocation(start, this.scanner.tokenStart),
  34575. value: this.scanner.substrToCursor(start)
  34576. };
  34577. },
  34578. generate: function(node) {
  34579. this.chunk(node.value);
  34580. }
  34581. };
  34582. /***/ }),
  34583. /* 164 */
  34584. /***/ (function(module, exports, __webpack_require__) {
  34585. var TYPE = __webpack_require__(0).TYPE;
  34586. var STRING = TYPE.String;
  34587. var URL = TYPE.Url;
  34588. var RAW = TYPE.Raw;
  34589. var RIGHTPARENTHESIS = TYPE.RightParenthesis;
  34590. // url '(' S* (string | raw) S* ')'
  34591. module.exports = {
  34592. name: 'Url',
  34593. structure: {
  34594. value: ['String', 'Raw']
  34595. },
  34596. parse: function() {
  34597. var start = this.scanner.tokenStart;
  34598. var value;
  34599. this.scanner.eat(URL);
  34600. this.scanner.skipSC();
  34601. switch (this.scanner.tokenType) {
  34602. case STRING:
  34603. value = this.String();
  34604. break;
  34605. case RAW:
  34606. value = this.Raw(this.scanner.currentToken, 0, RAW, true, false);
  34607. break;
  34608. default:
  34609. this.scanner.error('String or Raw is expected');
  34610. }
  34611. this.scanner.skipSC();
  34612. this.scanner.eat(RIGHTPARENTHESIS);
  34613. return {
  34614. type: 'Url',
  34615. loc: this.getLocation(start, this.scanner.tokenStart),
  34616. value: value
  34617. };
  34618. },
  34619. generate: function(node) {
  34620. this.chunk('url');
  34621. this.chunk('(');
  34622. this.node(node.value);
  34623. this.chunk(')');
  34624. }
  34625. };
  34626. /***/ }),
  34627. /* 165 */
  34628. /***/ (function(module, exports) {
  34629. module.exports = {
  34630. name: 'Value',
  34631. structure: {
  34632. children: [[]]
  34633. },
  34634. parse: function() {
  34635. var start = this.scanner.tokenStart;
  34636. var children = this.readSequence(this.scope.Value);
  34637. return {
  34638. type: 'Value',
  34639. loc: this.getLocation(start, this.scanner.tokenStart),
  34640. children: children
  34641. };
  34642. },
  34643. generate: function(node) {
  34644. this.children(node);
  34645. }
  34646. };
  34647. /***/ }),
  34648. /* 166 */
  34649. /***/ (function(module, exports, __webpack_require__) {
  34650. var WHITESPACE = __webpack_require__(0).TYPE.WhiteSpace;
  34651. var SPACE = Object.freeze({
  34652. type: 'WhiteSpace',
  34653. loc: null,
  34654. value: ' '
  34655. });
  34656. module.exports = {
  34657. name: 'WhiteSpace',
  34658. structure: {
  34659. value: String
  34660. },
  34661. parse: function() {
  34662. this.scanner.eat(WHITESPACE);
  34663. return SPACE;
  34664. // return {
  34665. // type: 'WhiteSpace',
  34666. // loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),
  34667. // value: this.scanner.consume(WHITESPACE)
  34668. // };
  34669. },
  34670. generate: function(node) {
  34671. this.chunk(node.value);
  34672. }
  34673. };
  34674. /***/ }),
  34675. /* 167 */
  34676. /***/ (function(module, exports, __webpack_require__) {
  34677. module.exports = {
  34678. parseContext: {
  34679. default: 'StyleSheet',
  34680. stylesheet: 'StyleSheet',
  34681. atrule: 'Atrule',
  34682. atrulePrelude: function(options) {
  34683. return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);
  34684. },
  34685. mediaQueryList: 'MediaQueryList',
  34686. mediaQuery: 'MediaQuery',
  34687. rule: 'Rule',
  34688. selectorList: 'SelectorList',
  34689. selector: 'Selector',
  34690. block: function() {
  34691. return this.Block(true);
  34692. },
  34693. declarationList: 'DeclarationList',
  34694. declaration: 'Declaration',
  34695. value: 'Value'
  34696. },
  34697. scope: __webpack_require__(168),
  34698. atrule: __webpack_require__(174),
  34699. pseudo: __webpack_require__(180),
  34700. node: __webpack_require__(28)
  34701. };
  34702. /***/ }),
  34703. /* 168 */
  34704. /***/ (function(module, exports, __webpack_require__) {
  34705. module.exports = {
  34706. AtrulePrelude: __webpack_require__(169),
  34707. Selector: __webpack_require__(170),
  34708. Value: __webpack_require__(171)
  34709. };
  34710. /***/ }),
  34711. /* 169 */
  34712. /***/ (function(module, exports, __webpack_require__) {
  34713. module.exports = {
  34714. getNode: __webpack_require__(53)
  34715. };
  34716. /***/ }),
  34717. /* 170 */
  34718. /***/ (function(module, exports, __webpack_require__) {
  34719. var TYPE = __webpack_require__(0).TYPE;
  34720. var IDENTIFIER = TYPE.Identifier;
  34721. var NUMBER = TYPE.Number;
  34722. var NUMBERSIGN = TYPE.NumberSign;
  34723. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  34724. var PLUSSIGN = TYPE.PlusSign;
  34725. var SOLIDUS = TYPE.Solidus;
  34726. var ASTERISK = TYPE.Asterisk;
  34727. var FULLSTOP = TYPE.FullStop;
  34728. var COLON = TYPE.Colon;
  34729. var GREATERTHANSIGN = TYPE.GreaterThanSign;
  34730. var VERTICALLINE = TYPE.VerticalLine;
  34731. var TILDE = TYPE.Tilde;
  34732. function getNode(context) {
  34733. switch (this.scanner.tokenType) {
  34734. case PLUSSIGN:
  34735. case GREATERTHANSIGN:
  34736. case TILDE:
  34737. context.space = null;
  34738. context.ignoreWSAfter = true;
  34739. return this.Combinator();
  34740. case SOLIDUS: // /deep/
  34741. return this.Combinator();
  34742. case FULLSTOP:
  34743. return this.ClassSelector();
  34744. case LEFTSQUAREBRACKET:
  34745. return this.AttributeSelector();
  34746. case NUMBERSIGN:
  34747. return this.IdSelector();
  34748. case COLON:
  34749. if (this.scanner.lookupType(1) === COLON) {
  34750. return this.PseudoElementSelector();
  34751. } else {
  34752. return this.PseudoClassSelector();
  34753. }
  34754. case IDENTIFIER:
  34755. case ASTERISK:
  34756. case VERTICALLINE:
  34757. return this.TypeSelector();
  34758. case NUMBER:
  34759. return this.Percentage();
  34760. }
  34761. };
  34762. module.exports = {
  34763. getNode: getNode
  34764. };
  34765. /***/ }),
  34766. /* 171 */
  34767. /***/ (function(module, exports, __webpack_require__) {
  34768. module.exports = {
  34769. getNode: __webpack_require__(53),
  34770. '-moz-element': __webpack_require__(54),
  34771. 'element': __webpack_require__(54),
  34772. 'expression': __webpack_require__(172),
  34773. 'var': __webpack_require__(173)
  34774. };
  34775. /***/ }),
  34776. /* 172 */
  34777. /***/ (function(module, exports) {
  34778. // legacy IE function
  34779. // expression '(' raw ')'
  34780. module.exports = function() {
  34781. return this.createSingleNodeList(
  34782. this.Raw(this.scanner.currentToken, 0, 0, false, false)
  34783. );
  34784. };
  34785. /***/ }),
  34786. /* 173 */
  34787. /***/ (function(module, exports, __webpack_require__) {
  34788. var TYPE = __webpack_require__(0).TYPE;
  34789. var IDENTIFIER = TYPE.Identifier;
  34790. var COMMA = TYPE.Comma;
  34791. var SEMICOLON = TYPE.Semicolon;
  34792. var HYPHENMINUS = TYPE.HyphenMinus;
  34793. var EXCLAMATIONMARK = TYPE.ExclamationMark;
  34794. // var '(' ident (',' <value>? )? ')'
  34795. module.exports = function() {
  34796. var children = this.createList();
  34797. this.scanner.skipSC();
  34798. var identStart = this.scanner.tokenStart;
  34799. this.scanner.eat(HYPHENMINUS);
  34800. if (this.scanner.source.charCodeAt(this.scanner.tokenStart) !== HYPHENMINUS) {
  34801. this.scanner.error('HyphenMinus is expected');
  34802. }
  34803. this.scanner.eat(IDENTIFIER);
  34804. children.push({
  34805. type: 'Identifier',
  34806. loc: this.getLocation(identStart, this.scanner.tokenStart),
  34807. name: this.scanner.substrToCursor(identStart)
  34808. });
  34809. this.scanner.skipSC();
  34810. if (this.scanner.tokenType === COMMA) {
  34811. children.push(this.Operator());
  34812. children.push(this.parseCustomProperty
  34813. ? this.Value(null)
  34814. : this.Raw(this.scanner.currentToken, EXCLAMATIONMARK, SEMICOLON, false, false)
  34815. );
  34816. }
  34817. return children;
  34818. };
  34819. /***/ }),
  34820. /* 174 */
  34821. /***/ (function(module, exports, __webpack_require__) {
  34822. module.exports = {
  34823. 'font-face': __webpack_require__(175),
  34824. 'import': __webpack_require__(176),
  34825. 'media': __webpack_require__(177),
  34826. 'page': __webpack_require__(178),
  34827. 'supports': __webpack_require__(179)
  34828. };
  34829. /***/ }),
  34830. /* 175 */
  34831. /***/ (function(module, exports) {
  34832. module.exports = {
  34833. parse: {
  34834. prelude: null,
  34835. block: function() {
  34836. return this.Block(true);
  34837. }
  34838. }
  34839. };
  34840. /***/ }),
  34841. /* 176 */
  34842. /***/ (function(module, exports, __webpack_require__) {
  34843. var TYPE = __webpack_require__(0).TYPE;
  34844. var STRING = TYPE.String;
  34845. var IDENTIFIER = TYPE.Identifier;
  34846. var URL = TYPE.Url;
  34847. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  34848. module.exports = {
  34849. parse: {
  34850. prelude: function() {
  34851. var children = this.createList();
  34852. this.scanner.skipSC();
  34853. switch (this.scanner.tokenType) {
  34854. case STRING:
  34855. children.push(this.String());
  34856. break;
  34857. case URL:
  34858. children.push(this.Url());
  34859. break;
  34860. default:
  34861. this.scanner.error('String or url() is expected');
  34862. }
  34863. if (this.scanner.lookupNonWSType(0) === IDENTIFIER ||
  34864. this.scanner.lookupNonWSType(0) === LEFTPARENTHESIS) {
  34865. children.push(this.WhiteSpace());
  34866. children.push(this.MediaQueryList());
  34867. }
  34868. return children;
  34869. },
  34870. block: null
  34871. }
  34872. };
  34873. /***/ }),
  34874. /* 177 */
  34875. /***/ (function(module, exports) {
  34876. module.exports = {
  34877. parse: {
  34878. prelude: function() {
  34879. return this.createSingleNodeList(
  34880. this.MediaQueryList()
  34881. );
  34882. },
  34883. block: function() {
  34884. return this.Block(false);
  34885. }
  34886. }
  34887. };
  34888. /***/ }),
  34889. /* 178 */
  34890. /***/ (function(module, exports) {
  34891. module.exports = {
  34892. parse: {
  34893. prelude: function() {
  34894. return this.createSingleNodeList(
  34895. this.SelectorList()
  34896. );
  34897. },
  34898. block: function() {
  34899. return this.Block(true);
  34900. }
  34901. }
  34902. };
  34903. /***/ }),
  34904. /* 179 */
  34905. /***/ (function(module, exports, __webpack_require__) {
  34906. var TYPE = __webpack_require__(0).TYPE;
  34907. var WHITESPACE = TYPE.WhiteSpace;
  34908. var COMMENT = TYPE.Comment;
  34909. var IDENTIFIER = TYPE.Identifier;
  34910. var FUNCTION = TYPE.Function;
  34911. var LEFTPARENTHESIS = TYPE.LeftParenthesis;
  34912. var HYPHENMINUS = TYPE.HyphenMinus;
  34913. var COLON = TYPE.Colon;
  34914. function consumeRaw() {
  34915. return this.createSingleNodeList(
  34916. this.Raw(this.scanner.currentToken, 0, 0, false, false)
  34917. );
  34918. }
  34919. function parentheses() {
  34920. var index = 0;
  34921. this.scanner.skipSC();
  34922. // TODO: make it simplier
  34923. if (this.scanner.tokenType === IDENTIFIER) {
  34924. index = 1;
  34925. } else if (this.scanner.tokenType === HYPHENMINUS &&
  34926. this.scanner.lookupType(1) === IDENTIFIER) {
  34927. index = 2;
  34928. }
  34929. if (index !== 0 && this.scanner.lookupNonWSType(index) === COLON) {
  34930. return this.createSingleNodeList(
  34931. this.Declaration()
  34932. );
  34933. }
  34934. return readSequence.call(this);
  34935. }
  34936. function readSequence() {
  34937. var children = this.createList();
  34938. var space = null;
  34939. var child;
  34940. this.scanner.skipSC();
  34941. scan:
  34942. while (!this.scanner.eof) {
  34943. switch (this.scanner.tokenType) {
  34944. case WHITESPACE:
  34945. space = this.WhiteSpace();
  34946. continue;
  34947. case COMMENT:
  34948. this.scanner.next();
  34949. continue;
  34950. case FUNCTION:
  34951. child = this.Function(consumeRaw, this.scope.AtrulePrelude);
  34952. break;
  34953. case IDENTIFIER:
  34954. child = this.Identifier();
  34955. break;
  34956. case LEFTPARENTHESIS:
  34957. child = this.Parentheses(parentheses, this.scope.AtrulePrelude);
  34958. break;
  34959. default:
  34960. break scan;
  34961. }
  34962. if (space !== null) {
  34963. children.push(space);
  34964. space = null;
  34965. }
  34966. children.push(child);
  34967. }
  34968. return children;
  34969. }
  34970. module.exports = {
  34971. parse: {
  34972. prelude: function() {
  34973. var children = readSequence.call(this);
  34974. if (this.getFirstListNode(children) === null) {
  34975. this.scanner.error('Condition is expected');
  34976. }
  34977. return children;
  34978. },
  34979. block: function() {
  34980. return this.Block(false);
  34981. }
  34982. }
  34983. };
  34984. /***/ }),
  34985. /* 180 */
  34986. /***/ (function(module, exports, __webpack_require__) {
  34987. module.exports = {
  34988. 'dir': __webpack_require__(181),
  34989. 'has': __webpack_require__(182),
  34990. 'lang': __webpack_require__(183),
  34991. 'matches': __webpack_require__(184),
  34992. 'not': __webpack_require__(185),
  34993. 'nth-child': __webpack_require__(186),
  34994. 'nth-last-child': __webpack_require__(187),
  34995. 'nth-last-of-type': __webpack_require__(188),
  34996. 'nth-of-type': __webpack_require__(189),
  34997. 'slotted': __webpack_require__(190)
  34998. };
  34999. /***/ }),
  35000. /* 181 */
  35001. /***/ (function(module, exports) {
  35002. module.exports = {
  35003. parse: function() {
  35004. return this.createSingleNodeList(
  35005. this.Identifier()
  35006. );
  35007. }
  35008. };
  35009. /***/ }),
  35010. /* 182 */
  35011. /***/ (function(module, exports) {
  35012. module.exports = {
  35013. parse: function() {
  35014. return this.createSingleNodeList(
  35015. this.SelectorList()
  35016. );
  35017. }
  35018. };
  35019. /***/ }),
  35020. /* 183 */
  35021. /***/ (function(module, exports) {
  35022. module.exports = {
  35023. parse: function() {
  35024. return this.createSingleNodeList(
  35025. this.Identifier()
  35026. );
  35027. }
  35028. };
  35029. /***/ }),
  35030. /* 184 */
  35031. /***/ (function(module, exports, __webpack_require__) {
  35032. module.exports = __webpack_require__(55);
  35033. /***/ }),
  35034. /* 185 */
  35035. /***/ (function(module, exports, __webpack_require__) {
  35036. module.exports = __webpack_require__(55);
  35037. /***/ }),
  35038. /* 186 */
  35039. /***/ (function(module, exports, __webpack_require__) {
  35040. module.exports = __webpack_require__(56);
  35041. /***/ }),
  35042. /* 187 */
  35043. /***/ (function(module, exports, __webpack_require__) {
  35044. module.exports = __webpack_require__(56);
  35045. /***/ }),
  35046. /* 188 */
  35047. /***/ (function(module, exports, __webpack_require__) {
  35048. module.exports = __webpack_require__(57);
  35049. /***/ }),
  35050. /* 189 */
  35051. /***/ (function(module, exports, __webpack_require__) {
  35052. module.exports = __webpack_require__(57);
  35053. /***/ }),
  35054. /* 190 */
  35055. /***/ (function(module, exports) {
  35056. module.exports = {
  35057. parse: function compoundSelector() {
  35058. return this.createSingleNodeList(
  35059. this.Selector()
  35060. );
  35061. }
  35062. };
  35063. /***/ }),
  35064. /* 191 */
  35065. /***/ (function(module, exports, __webpack_require__) {
  35066. module.exports = {
  35067. node: __webpack_require__(28)
  35068. };
  35069. /***/ }),
  35070. /* 192 */
  35071. /***/ (function(module, exports, __webpack_require__) {
  35072. var List = __webpack_require__(1).List;
  35073. var clone = __webpack_require__(1).clone;
  35074. var usageUtils = __webpack_require__(193);
  35075. var clean = __webpack_require__(194);
  35076. var replace = __webpack_require__(202);
  35077. var restructure = __webpack_require__(214);
  35078. var walk = __webpack_require__(1).walk;
  35079. function readChunk(children, specialComments) {
  35080. var buffer = new List();
  35081. var nonSpaceTokenInBuffer = false;
  35082. var protectedComment;
  35083. children.nextUntil(children.head, function(node, item, list) {
  35084. if (node.type === 'Comment') {
  35085. if (!specialComments || node.value.charAt(0) !== '!') {
  35086. list.remove(item);
  35087. return;
  35088. }
  35089. if (nonSpaceTokenInBuffer || protectedComment) {
  35090. return true;
  35091. }
  35092. list.remove(item);
  35093. protectedComment = node;
  35094. return;
  35095. }
  35096. if (node.type !== 'WhiteSpace') {
  35097. nonSpaceTokenInBuffer = true;
  35098. }
  35099. buffer.insert(list.remove(item));
  35100. });
  35101. return {
  35102. comment: protectedComment,
  35103. stylesheet: {
  35104. type: 'StyleSheet',
  35105. loc: null,
  35106. children: buffer
  35107. }
  35108. };
  35109. }
  35110. function compressChunk(ast, firstAtrulesAllowed, num, options) {
  35111. options.logger('Compress block #' + num, null, true);
  35112. var seed = 1;
  35113. if (ast.type === 'StyleSheet') {
  35114. ast.firstAtrulesAllowed = firstAtrulesAllowed;
  35115. ast.id = seed++;
  35116. }
  35117. walk(ast, {
  35118. visit: 'Atrule',
  35119. enter: function markScopes(node) {
  35120. if (node.block !== null) {
  35121. node.block.id = seed++;
  35122. }
  35123. }
  35124. });
  35125. options.logger('init', ast);
  35126. // remove redundant
  35127. clean(ast, options);
  35128. options.logger('clean', ast);
  35129. // replace nodes for shortened forms
  35130. replace(ast, options);
  35131. options.logger('replace', ast);
  35132. // structure optimisations
  35133. if (options.restructuring) {
  35134. restructure(ast, options);
  35135. }
  35136. return ast;
  35137. }
  35138. function getCommentsOption(options) {
  35139. var comments = 'comments' in options ? options.comments : 'exclamation';
  35140. if (typeof comments === 'boolean') {
  35141. comments = comments ? 'exclamation' : false;
  35142. } else if (comments !== 'exclamation' && comments !== 'first-exclamation') {
  35143. comments = false;
  35144. }
  35145. return comments;
  35146. }
  35147. function getRestructureOption(options) {
  35148. return 'restructure' in options ? options.restructure :
  35149. 'restructuring' in options ? options.restructuring :
  35150. true;
  35151. }
  35152. function wrapBlock(block) {
  35153. return new List().appendData({
  35154. type: 'Rule',
  35155. loc: null,
  35156. prelude: {
  35157. type: 'SelectorList',
  35158. loc: null,
  35159. children: new List().appendData({
  35160. type: 'Selector',
  35161. loc: null,
  35162. children: new List().appendData({
  35163. type: 'TypeSelector',
  35164. loc: null,
  35165. name: 'x'
  35166. })
  35167. })
  35168. },
  35169. block: block
  35170. });
  35171. }
  35172. module.exports = function compress(ast, options) {
  35173. ast = ast || { type: 'StyleSheet', loc: null, children: new List() };
  35174. options = options || {};
  35175. var compressOptions = {
  35176. logger: typeof options.logger === 'function' ? options.logger : function() {},
  35177. restructuring: getRestructureOption(options),
  35178. forceMediaMerge: Boolean(options.forceMediaMerge),
  35179. usage: options.usage ? usageUtils.buildIndex(options.usage) : false
  35180. };
  35181. var specialComments = getCommentsOption(options);
  35182. var firstAtrulesAllowed = true;
  35183. var input;
  35184. var output = new List();
  35185. var chunk;
  35186. var chunkNum = 1;
  35187. var chunkChildren;
  35188. if (options.clone) {
  35189. ast = clone(ast);
  35190. }
  35191. if (ast.type === 'StyleSheet') {
  35192. input = ast.children;
  35193. ast.children = output;
  35194. } else {
  35195. input = wrapBlock(ast);
  35196. }
  35197. do {
  35198. chunk = readChunk(input, Boolean(specialComments));
  35199. compressChunk(chunk.stylesheet, firstAtrulesAllowed, chunkNum++, compressOptions);
  35200. chunkChildren = chunk.stylesheet.children;
  35201. if (chunk.comment) {
  35202. // add \n before comment if there is another content in output
  35203. if (!output.isEmpty()) {
  35204. output.insert(List.createItem({
  35205. type: 'Raw',
  35206. value: '\n'
  35207. }));
  35208. }
  35209. output.insert(List.createItem(chunk.comment));
  35210. // add \n after comment if chunk is not empty
  35211. if (!chunkChildren.isEmpty()) {
  35212. output.insert(List.createItem({
  35213. type: 'Raw',
  35214. value: '\n'
  35215. }));
  35216. }
  35217. }
  35218. if (firstAtrulesAllowed && !chunkChildren.isEmpty()) {
  35219. var lastRule = chunkChildren.last();
  35220. if (lastRule.type !== 'Atrule' ||
  35221. (lastRule.name !== 'import' && lastRule.name !== 'charset')) {
  35222. firstAtrulesAllowed = false;
  35223. }
  35224. }
  35225. if (specialComments !== 'exclamation') {
  35226. specialComments = false;
  35227. }
  35228. output.appendList(chunkChildren);
  35229. } while (!input.isEmpty());
  35230. return {
  35231. ast: ast
  35232. };
  35233. };
  35234. /***/ }),
  35235. /* 193 */
  35236. /***/ (function(module, exports) {
  35237. var hasOwnProperty = Object.prototype.hasOwnProperty;
  35238. function buildMap(list, caseInsensitive) {
  35239. var map = Object.create(null);
  35240. if (!Array.isArray(list)) {
  35241. return null;
  35242. }
  35243. for (var i = 0; i < list.length; i++) {
  35244. var name = list[i];
  35245. if (caseInsensitive) {
  35246. name = name.toLowerCase();
  35247. }
  35248. map[name] = true;
  35249. }
  35250. return map;
  35251. }
  35252. function buildList(data) {
  35253. if (!data) {
  35254. return null;
  35255. }
  35256. var tags = buildMap(data.tags, true);
  35257. var ids = buildMap(data.ids);
  35258. var classes = buildMap(data.classes);
  35259. if (tags === null &&
  35260. ids === null &&
  35261. classes === null) {
  35262. return null;
  35263. }
  35264. return {
  35265. tags: tags,
  35266. ids: ids,
  35267. classes: classes
  35268. };
  35269. }
  35270. function buildIndex(data) {
  35271. var scopes = false;
  35272. if (data.scopes && Array.isArray(data.scopes)) {
  35273. scopes = Object.create(null);
  35274. for (var i = 0; i < data.scopes.length; i++) {
  35275. var list = data.scopes[i];
  35276. if (!list || !Array.isArray(list)) {
  35277. throw new Error('Wrong usage format');
  35278. }
  35279. for (var j = 0; j < list.length; j++) {
  35280. var name = list[j];
  35281. if (hasOwnProperty.call(scopes, name)) {
  35282. throw new Error('Class can\'t be used for several scopes: ' + name);
  35283. }
  35284. scopes[name] = i + 1;
  35285. }
  35286. }
  35287. }
  35288. return {
  35289. whitelist: buildList(data),
  35290. blacklist: buildList(data.blacklist),
  35291. scopes: scopes
  35292. };
  35293. }
  35294. module.exports = {
  35295. buildIndex: buildIndex
  35296. };
  35297. /***/ }),
  35298. /* 194 */
  35299. /***/ (function(module, exports, __webpack_require__) {
  35300. var walk = __webpack_require__(1).walk;
  35301. var handlers = {
  35302. Atrule: __webpack_require__(195),
  35303. Rule: __webpack_require__(196),
  35304. Declaration: __webpack_require__(197),
  35305. TypeSelector: __webpack_require__(198),
  35306. Comment: __webpack_require__(199),
  35307. Operator: __webpack_require__(200),
  35308. WhiteSpace: __webpack_require__(201)
  35309. };
  35310. module.exports = function(ast, options) {
  35311. walk(ast, {
  35312. leave: function(node, item, list) {
  35313. if (handlers.hasOwnProperty(node.type)) {
  35314. handlers[node.type].call(this, node, item, list, options);
  35315. }
  35316. }
  35317. });
  35318. };
  35319. /***/ }),
  35320. /* 195 */
  35321. /***/ (function(module, exports, __webpack_require__) {
  35322. var resolveKeyword = __webpack_require__(1).keyword;
  35323. module.exports = function cleanAtrule(node, item, list) {
  35324. if (node.block) {
  35325. // otherwise removed at-rule don't prevent @import for removal
  35326. if (this.stylesheet !== null) {
  35327. this.stylesheet.firstAtrulesAllowed = false;
  35328. }
  35329. if (node.block.children.isEmpty()) {
  35330. list.remove(item);
  35331. return;
  35332. }
  35333. }
  35334. switch (node.name) {
  35335. case 'charset':
  35336. if (!node.prelude || node.prelude.children.isEmpty()) {
  35337. list.remove(item);
  35338. return;
  35339. }
  35340. // if there is any rule before @charset -> remove it
  35341. if (item.prev) {
  35342. list.remove(item);
  35343. return;
  35344. }
  35345. break;
  35346. case 'import':
  35347. if (this.stylesheet === null || !this.stylesheet.firstAtrulesAllowed) {
  35348. list.remove(item);
  35349. return;
  35350. }
  35351. // if there are some rules that not an @import or @charset before @import
  35352. // remove it
  35353. list.prevUntil(item.prev, function(rule) {
  35354. if (rule.type === 'Atrule') {
  35355. if (rule.name === 'import' || rule.name === 'charset') {
  35356. return;
  35357. }
  35358. }
  35359. this.root.firstAtrulesAllowed = false;
  35360. list.remove(item);
  35361. return true;
  35362. }, this);
  35363. break;
  35364. default:
  35365. var name = resolveKeyword(node.name).basename;
  35366. if (name === 'keyframes' ||
  35367. name === 'media' ||
  35368. name === 'supports') {
  35369. // drop at-rule with no prelude
  35370. if (!node.prelude || node.prelude.children.isEmpty()) {
  35371. list.remove(item);
  35372. }
  35373. }
  35374. }
  35375. };
  35376. /***/ }),
  35377. /* 196 */
  35378. /***/ (function(module, exports, __webpack_require__) {
  35379. var hasOwnProperty = Object.prototype.hasOwnProperty;
  35380. var walk = __webpack_require__(1).walk;
  35381. function cleanUnused(selectorList, usageData) {
  35382. selectorList.children.each(function(selector, item, list) {
  35383. var shouldRemove = false;
  35384. walk(selector, function(node) {
  35385. // ignore nodes in nested selectors
  35386. if (this.selector === null || this.selector === selectorList) {
  35387. switch (node.type) {
  35388. case 'SelectorList':
  35389. // TODO: remove toLowerCase when pseudo selectors will be normalized
  35390. // ignore selectors inside :not()
  35391. if (this['function'] === null || this['function'].name.toLowerCase() !== 'not') {
  35392. if (cleanUnused(node, usageData)) {
  35393. shouldRemove = true;
  35394. }
  35395. }
  35396. break;
  35397. case 'ClassSelector':
  35398. if (usageData.whitelist !== null &&
  35399. usageData.whitelist.classes !== null &&
  35400. !hasOwnProperty.call(usageData.whitelist.classes, node.name)) {
  35401. shouldRemove = true;
  35402. }
  35403. if (usageData.blacklist !== null &&
  35404. usageData.blacklist.classes !== null &&
  35405. hasOwnProperty.call(usageData.blacklist.classes, node.name)) {
  35406. shouldRemove = true;
  35407. }
  35408. break;
  35409. case 'IdSelector':
  35410. if (usageData.whitelist !== null &&
  35411. usageData.whitelist.ids !== null &&
  35412. !hasOwnProperty.call(usageData.whitelist.ids, node.name)) {
  35413. shouldRemove = true;
  35414. }
  35415. if (usageData.blacklist !== null &&
  35416. usageData.blacklist.ids !== null &&
  35417. hasOwnProperty.call(usageData.blacklist.ids, node.name)) {
  35418. shouldRemove = true;
  35419. }
  35420. break;
  35421. case 'TypeSelector':
  35422. // TODO: remove toLowerCase when type selectors will be normalized
  35423. // ignore universal selectors
  35424. if (node.name.charAt(node.name.length - 1) !== '*') {
  35425. if (usageData.whitelist !== null &&
  35426. usageData.whitelist.tags !== null &&
  35427. !hasOwnProperty.call(usageData.whitelist.tags, node.name.toLowerCase())) {
  35428. shouldRemove = true;
  35429. }
  35430. if (usageData.blacklist !== null &&
  35431. usageData.blacklist.tags !== null &&
  35432. hasOwnProperty.call(usageData.blacklist.tags, node.name.toLowerCase())) {
  35433. shouldRemove = true;
  35434. }
  35435. }
  35436. break;
  35437. }
  35438. }
  35439. });
  35440. if (shouldRemove) {
  35441. list.remove(item);
  35442. }
  35443. });
  35444. return selectorList.children.isEmpty();
  35445. }
  35446. module.exports = function cleanRuleset(node, item, list, options) {
  35447. var usageData = options.usage;
  35448. if (usageData && (usageData.whitelist !== null || usageData.blacklist !== null)) {
  35449. cleanUnused(node.prelude, usageData);
  35450. }
  35451. if (node.prelude.children.isEmpty() ||
  35452. node.block.children.isEmpty()) {
  35453. list.remove(item);
  35454. }
  35455. };
  35456. /***/ }),
  35457. /* 197 */
  35458. /***/ (function(module, exports) {
  35459. module.exports = function cleanDeclartion(node, item, list) {
  35460. if (node.value.children && node.value.children.isEmpty()) {
  35461. list.remove(item);
  35462. }
  35463. };
  35464. /***/ }),
  35465. /* 198 */
  35466. /***/ (function(module, exports) {
  35467. // remove useless universal selector
  35468. module.exports = function cleanType(node, item, list) {
  35469. var name = item.data.name;
  35470. // check it's a non-namespaced universal selector
  35471. if (name !== '*') {
  35472. return;
  35473. }
  35474. // remove when universal selector before other selectors
  35475. var nextType = item.next && item.next.data.type;
  35476. if (nextType === 'IdSelector' ||
  35477. nextType === 'ClassSelector' ||
  35478. nextType === 'AttributeSelector' ||
  35479. nextType === 'PseudoClassSelector' ||
  35480. nextType === 'PseudoElementSelector') {
  35481. list.remove(item);
  35482. }
  35483. };
  35484. /***/ }),
  35485. /* 199 */
  35486. /***/ (function(module, exports) {
  35487. module.exports = function cleanComment(data, item, list) {
  35488. list.remove(item);
  35489. };
  35490. /***/ }),
  35491. /* 200 */
  35492. /***/ (function(module, exports) {
  35493. // remove white spaces around operators when safe
  35494. module.exports = function cleanWhitespace(node, item, list) {
  35495. if (node.value === '+' || node.value === '-') {
  35496. return;
  35497. }
  35498. if (item.prev !== null && item.prev.data.type === 'WhiteSpace') {
  35499. list.remove(item.prev);
  35500. }
  35501. if (item.next !== null && item.next.data.type === 'WhiteSpace') {
  35502. list.remove(item.next);
  35503. }
  35504. };
  35505. /***/ }),
  35506. /* 201 */
  35507. /***/ (function(module, exports) {
  35508. module.exports = function cleanWhitespace(node, item, list) {
  35509. // remove when first or last item in sequence
  35510. if (item.next === null || item.prev === null) {
  35511. list.remove(item);
  35512. return;
  35513. }
  35514. // remove when previous node is whitespace
  35515. if (item.prev.data.type === 'WhiteSpace') {
  35516. list.remove(item);
  35517. return;
  35518. }
  35519. if ((this.stylesheet !== null && this.stylesheet.children === list) ||
  35520. (this.block !== null && this.block.children === list)) {
  35521. list.remove(item);
  35522. return;
  35523. }
  35524. };
  35525. /***/ }),
  35526. /* 202 */
  35527. /***/ (function(module, exports, __webpack_require__) {
  35528. var walk = __webpack_require__(1).walk;
  35529. var handlers = {
  35530. Atrule: __webpack_require__(203),
  35531. AttributeSelector: __webpack_require__(205),
  35532. Value: __webpack_require__(206),
  35533. Dimension: __webpack_require__(210),
  35534. Percentage: __webpack_require__(211),
  35535. Number: __webpack_require__(11),
  35536. String: __webpack_require__(212),
  35537. Url: __webpack_require__(213),
  35538. HexColor: __webpack_require__(29).compressHex,
  35539. Identifier: __webpack_require__(29).compressIdent,
  35540. Function: __webpack_require__(29).compressFunction
  35541. };
  35542. module.exports = function(ast) {
  35543. walk(ast, {
  35544. leave: function(node, item, list) {
  35545. if (handlers.hasOwnProperty(node.type)) {
  35546. handlers[node.type].call(this, node, item, list);
  35547. }
  35548. }
  35549. });
  35550. };
  35551. /***/ }),
  35552. /* 203 */
  35553. /***/ (function(module, exports, __webpack_require__) {
  35554. var resolveKeyword = __webpack_require__(1).keyword;
  35555. var compressKeyframes = __webpack_require__(204);
  35556. module.exports = function(node) {
  35557. // compress @keyframe selectors
  35558. if (resolveKeyword(node.name).basename === 'keyframes') {
  35559. compressKeyframes(node);
  35560. }
  35561. };
  35562. /***/ }),
  35563. /* 204 */
  35564. /***/ (function(module, exports) {
  35565. module.exports = function(node) {
  35566. node.block.children.each(function(rule) {
  35567. rule.prelude.children.each(function(simpleselector) {
  35568. simpleselector.children.each(function(data, item) {
  35569. if (data.type === 'Percentage' && data.value === '100') {
  35570. item.data = {
  35571. type: 'TypeSelector',
  35572. loc: data.loc,
  35573. name: 'to'
  35574. };
  35575. } else if (data.type === 'TypeSelector' && data.name === 'from') {
  35576. item.data = {
  35577. type: 'Percentage',
  35578. loc: data.loc,
  35579. value: '0'
  35580. };
  35581. }
  35582. });
  35583. });
  35584. });
  35585. };
  35586. /***/ }),
  35587. /* 205 */
  35588. /***/ (function(module, exports) {
  35589. // Can unquote attribute detection
  35590. // Adopted implementation of Mathias Bynens
  35591. // https://github.com/mathiasbynens/mothereff.in/blob/master/unquoted-attributes/eff.js
  35592. var escapesRx = /\\([0-9A-Fa-f]{1,6})(\r\n|[ \t\n\f\r])?|\\./g;
  35593. var blockUnquoteRx = /^(-?\d|--)|[\u0000-\u002c\u002e\u002f\u003A-\u0040\u005B-\u005E\u0060\u007B-\u009f]/;
  35594. function canUnquote(value) {
  35595. if (value === '' || value === '-') {
  35596. return;
  35597. }
  35598. // Escapes are valid, so replace them with a valid non-empty string
  35599. value = value.replace(escapesRx, 'a');
  35600. return !blockUnquoteRx.test(value);
  35601. }
  35602. module.exports = function(node) {
  35603. var attrValue = node.value;
  35604. if (!attrValue || attrValue.type !== 'String') {
  35605. return;
  35606. }
  35607. var unquotedValue = attrValue.value.replace(/^(.)(.*)\1$/, '$2');
  35608. if (canUnquote(unquotedValue)) {
  35609. node.value = {
  35610. type: 'Identifier',
  35611. loc: attrValue.loc,
  35612. name: unquotedValue
  35613. };
  35614. }
  35615. };
  35616. /***/ }),
  35617. /* 206 */
  35618. /***/ (function(module, exports, __webpack_require__) {
  35619. var resolveName = __webpack_require__(1).property;
  35620. var handlers = {
  35621. 'font': __webpack_require__(207),
  35622. 'font-weight': __webpack_require__(208),
  35623. 'background': __webpack_require__(209),
  35624. 'border': __webpack_require__(58),
  35625. 'outline': __webpack_require__(58)
  35626. };
  35627. module.exports = function compressValue(node) {
  35628. if (!this.declaration) {
  35629. return;
  35630. }
  35631. var property = resolveName(this.declaration.property);
  35632. if (handlers.hasOwnProperty(property.basename)) {
  35633. handlers[property.basename](node);
  35634. }
  35635. };
  35636. /***/ }),
  35637. /* 207 */
  35638. /***/ (function(module, exports) {
  35639. module.exports = function compressFont(node) {
  35640. var list = node.children;
  35641. list.eachRight(function(node, item) {
  35642. if (node.type === 'Identifier') {
  35643. if (node.name === 'bold') {
  35644. item.data = {
  35645. type: 'Number',
  35646. loc: node.loc,
  35647. value: '700'
  35648. };
  35649. } else if (node.name === 'normal') {
  35650. var prev = item.prev;
  35651. if (prev && prev.data.type === 'Operator' && prev.data.value === '/') {
  35652. this.remove(prev);
  35653. }
  35654. this.remove(item);
  35655. } else if (node.name === 'medium') {
  35656. var next = item.next;
  35657. if (!next || next.data.type !== 'Operator') {
  35658. this.remove(item);
  35659. }
  35660. }
  35661. }
  35662. });
  35663. // remove redundant spaces
  35664. list.each(function(node, item) {
  35665. if (node.type === 'WhiteSpace') {
  35666. if (!item.prev || !item.next || item.next.data.type === 'WhiteSpace') {
  35667. this.remove(item);
  35668. }
  35669. }
  35670. });
  35671. if (list.isEmpty()) {
  35672. list.insert(list.createItem({
  35673. type: 'Identifier',
  35674. name: 'normal'
  35675. }));
  35676. }
  35677. };
  35678. /***/ }),
  35679. /* 208 */
  35680. /***/ (function(module, exports) {
  35681. module.exports = function compressFontWeight(node) {
  35682. var value = node.children.head.data;
  35683. if (value.type === 'Identifier') {
  35684. switch (value.name) {
  35685. case 'normal':
  35686. node.children.head.data = {
  35687. type: 'Number',
  35688. loc: value.loc,
  35689. value: '400'
  35690. };
  35691. break;
  35692. case 'bold':
  35693. node.children.head.data = {
  35694. type: 'Number',
  35695. loc: value.loc,
  35696. value: '700'
  35697. };
  35698. break;
  35699. }
  35700. }
  35701. };
  35702. /***/ }),
  35703. /* 209 */
  35704. /***/ (function(module, exports, __webpack_require__) {
  35705. var List = __webpack_require__(1).List;
  35706. module.exports = function compressBackground(node) {
  35707. function lastType() {
  35708. if (buffer.length) {
  35709. return buffer[buffer.length - 1].type;
  35710. }
  35711. }
  35712. function flush() {
  35713. if (lastType() === 'WhiteSpace') {
  35714. buffer.pop();
  35715. }
  35716. if (!buffer.length) {
  35717. buffer.unshift(
  35718. {
  35719. type: 'Number',
  35720. loc: null,
  35721. value: '0'
  35722. },
  35723. {
  35724. type: 'WhiteSpace',
  35725. value: ' '
  35726. },
  35727. {
  35728. type: 'Number',
  35729. loc: null,
  35730. value: '0'
  35731. }
  35732. );
  35733. }
  35734. newValue.push.apply(newValue, buffer);
  35735. buffer = [];
  35736. }
  35737. var newValue = [];
  35738. var buffer = [];
  35739. node.children.each(function(node) {
  35740. if (node.type === 'Operator' && node.value === ',') {
  35741. flush();
  35742. newValue.push(node);
  35743. return;
  35744. }
  35745. // remove defaults
  35746. if (node.type === 'Identifier') {
  35747. if (node.name === 'transparent' ||
  35748. node.name === 'none' ||
  35749. node.name === 'repeat' ||
  35750. node.name === 'scroll') {
  35751. return;
  35752. }
  35753. }
  35754. // don't add redundant spaces
  35755. if (node.type === 'WhiteSpace' && (!buffer.length || lastType() === 'WhiteSpace')) {
  35756. return;
  35757. }
  35758. buffer.push(node);
  35759. });
  35760. flush();
  35761. node.children = new List().fromArray(newValue);
  35762. };
  35763. /***/ }),
  35764. /* 210 */
  35765. /***/ (function(module, exports, __webpack_require__) {
  35766. var packNumber = __webpack_require__(11).pack;
  35767. var LENGTH_UNIT = {
  35768. // absolute length units
  35769. 'px': true,
  35770. 'mm': true,
  35771. 'cm': true,
  35772. 'in': true,
  35773. 'pt': true,
  35774. 'pc': true,
  35775. // relative length units
  35776. 'em': true,
  35777. 'ex': true,
  35778. 'ch': true,
  35779. 'rem': true,
  35780. // viewport-percentage lengths
  35781. 'vh': true,
  35782. 'vw': true,
  35783. 'vmin': true,
  35784. 'vmax': true,
  35785. 'vm': true
  35786. };
  35787. module.exports = function compressDimension(node, item) {
  35788. var value = packNumber(node.value, item);
  35789. node.value = value;
  35790. if (value === '0' && this.declaration !== null && this.atrulePrelude === null) {
  35791. var unit = node.unit.toLowerCase();
  35792. // only length values can be compressed
  35793. if (!LENGTH_UNIT.hasOwnProperty(unit)) {
  35794. return;
  35795. }
  35796. // issue #362: shouldn't remove unit in -ms-flex since it breaks flex in IE10/11
  35797. // issue #200: shouldn't remove unit in flex since it breaks flex in IE10/11
  35798. if (this.declaration.property === '-ms-flex' ||
  35799. this.declaration.property === 'flex') {
  35800. return;
  35801. }
  35802. // issue #222: don't remove units inside calc
  35803. if (this['function'] && this['function'].name === 'calc') {
  35804. return;
  35805. }
  35806. item.data = {
  35807. type: 'Number',
  35808. loc: node.loc,
  35809. value: value
  35810. };
  35811. }
  35812. };
  35813. /***/ }),
  35814. /* 211 */
  35815. /***/ (function(module, exports, __webpack_require__) {
  35816. var packNumber = __webpack_require__(11).pack;
  35817. var PERCENTAGE_LENGTH_PROPERTY = {
  35818. 'margin': true,
  35819. 'margin-top': true,
  35820. 'margin-left': true,
  35821. 'margin-bottom': true,
  35822. 'margin-right': true,
  35823. 'padding': true,
  35824. 'padding-top': true,
  35825. 'padding-left': true,
  35826. 'padding-bottom': true,
  35827. 'padding-right': true,
  35828. 'top': true,
  35829. 'left': true,
  35830. 'bottom': true,
  35831. 'right': true,
  35832. 'background-position': true,
  35833. 'background-position-x': true,
  35834. 'background-position-y': true,
  35835. 'background-size': true,
  35836. 'border': true,
  35837. 'border-width': true,
  35838. 'border-top-width': true,
  35839. 'border-left-width': true,
  35840. 'border-bottom-width': true,
  35841. 'border-right-width': true,
  35842. 'border-image-width': true,
  35843. 'border-radius': true,
  35844. 'border-bottom-left-radius': true,
  35845. 'border-bottom-right-radius': true,
  35846. 'border-top-left-radius': true,
  35847. 'border-top-right-radius': true
  35848. };
  35849. module.exports = function compressPercentage(node, item) {
  35850. var value = packNumber(node.value, item);
  35851. var property = this.declaration !== null ? this.declaration.property : null;
  35852. node.value = value;
  35853. if (property !== null && PERCENTAGE_LENGTH_PROPERTY.hasOwnProperty(property)) {
  35854. if (value === '0') {
  35855. item.data = {
  35856. type: 'Number',
  35857. loc: node.loc,
  35858. value: value
  35859. };
  35860. }
  35861. }
  35862. };
  35863. /***/ }),
  35864. /* 212 */
  35865. /***/ (function(module, exports) {
  35866. module.exports = function(node) {
  35867. var value = node.value;
  35868. // remove escaped newlines, i.e.
  35869. // .a { content: "foo\
  35870. // bar"}
  35871. // ->
  35872. // .a { content: "foobar" }
  35873. value = value.replace(/\\(\r\n|\r|\n|\f)/g, '');
  35874. node.value = value;
  35875. };
  35876. /***/ }),
  35877. /* 213 */
  35878. /***/ (function(module, exports) {
  35879. var UNICODE = '\\\\[0-9a-f]{1,6}(\\r\\n|[ \\n\\r\\t\\f])?';
  35880. var ESCAPE = '(' + UNICODE + '|\\\\[^\\n\\r\\f0-9a-fA-F])';
  35881. var NONPRINTABLE = '\u0000\u0008\u000b\u000e-\u001f\u007f';
  35882. var SAFE_URL = new RegExp('^(' + ESCAPE + '|[^\"\'\\(\\)\\\\\\s' + NONPRINTABLE + '])*$', 'i');
  35883. module.exports = function(node) {
  35884. var value = node.value;
  35885. if (value.type !== 'String') {
  35886. return;
  35887. }
  35888. var quote = value.value[0];
  35889. var url = value.value.substr(1, value.value.length - 2);
  35890. // convert `\\` to `/`
  35891. url = url.replace(/\\\\/g, '/');
  35892. // remove quotes when safe
  35893. // https://www.w3.org/TR/css-syntax-3/#url-unquoted-diagram
  35894. if (SAFE_URL.test(url)) {
  35895. node.value = {
  35896. type: 'Raw',
  35897. loc: node.value.loc,
  35898. value: url
  35899. };
  35900. } else {
  35901. // use double quotes if string has no double quotes
  35902. // otherwise use original quotes
  35903. // TODO: make better quote type selection
  35904. node.value.value = url.indexOf('"') === -1 ? '"' + url + '"' : quote + url + quote;
  35905. }
  35906. };
  35907. /***/ }),
  35908. /* 214 */
  35909. /***/ (function(module, exports, __webpack_require__) {
  35910. var prepare = __webpack_require__(215);
  35911. var mergeAtrule = __webpack_require__(219);
  35912. var initialMergeRuleset = __webpack_require__(220);
  35913. var disjoinRuleset = __webpack_require__(221);
  35914. var restructShorthand = __webpack_require__(222);
  35915. var restructBlock = __webpack_require__(223);
  35916. var mergeRuleset = __webpack_require__(224);
  35917. var restructRuleset = __webpack_require__(225);
  35918. module.exports = function(ast, options) {
  35919. // prepare ast for restructing
  35920. var indexer = prepare(ast, options);
  35921. options.logger('prepare', ast);
  35922. mergeAtrule(ast, options);
  35923. options.logger('mergeAtrule', ast);
  35924. initialMergeRuleset(ast);
  35925. options.logger('initialMergeRuleset', ast);
  35926. disjoinRuleset(ast);
  35927. options.logger('disjoinRuleset', ast);
  35928. restructShorthand(ast, indexer);
  35929. options.logger('restructShorthand', ast);
  35930. restructBlock(ast);
  35931. options.logger('restructBlock', ast);
  35932. mergeRuleset(ast);
  35933. options.logger('mergeRuleset', ast);
  35934. restructRuleset(ast);
  35935. options.logger('restructRuleset', ast);
  35936. };
  35937. /***/ }),
  35938. /* 215 */
  35939. /***/ (function(module, exports, __webpack_require__) {
  35940. var resolveKeyword = __webpack_require__(1).keyword;
  35941. var walk = __webpack_require__(1).walk;
  35942. var generate = __webpack_require__(1).generate;
  35943. var createDeclarationIndexer = __webpack_require__(216);
  35944. var processSelector = __webpack_require__(217);
  35945. module.exports = function prepare(ast, options) {
  35946. var markDeclaration = createDeclarationIndexer();
  35947. walk(ast, {
  35948. visit: 'Rule',
  35949. enter: function processRule(node) {
  35950. node.block.children.each(markDeclaration);
  35951. processSelector(node, options.usage);
  35952. }
  35953. });
  35954. walk(ast, {
  35955. visit: 'Atrule',
  35956. enter: function(node) {
  35957. if (node.prelude) {
  35958. node.prelude.id = null; // pre-init property to avoid multiple hidden class for generate
  35959. node.prelude.id = generate(node.prelude);
  35960. }
  35961. // compare keyframe selectors by its values
  35962. // NOTE: still no clarification about problems with keyframes selector grouping (issue #197)
  35963. if (resolveKeyword(node.name).basename === 'keyframes') {
  35964. node.block.avoidRulesMerge = true; /* probably we don't need to prevent those merges for @keyframes
  35965. TODO: need to be checked */
  35966. node.block.children.each(function(rule) {
  35967. rule.prelude.children.each(function(simpleselector) {
  35968. simpleselector.compareMarker = simpleselector.id;
  35969. });
  35970. });
  35971. }
  35972. }
  35973. });
  35974. return {
  35975. declaration: markDeclaration
  35976. };
  35977. };
  35978. /***/ }),
  35979. /* 216 */
  35980. /***/ (function(module, exports, __webpack_require__) {
  35981. var generate = __webpack_require__(1).generate;
  35982. function Index() {
  35983. this.seed = 0;
  35984. this.map = Object.create(null);
  35985. }
  35986. Index.prototype.resolve = function(str) {
  35987. var index = this.map[str];
  35988. if (!index) {
  35989. index = ++this.seed;
  35990. this.map[str] = index;
  35991. }
  35992. return index;
  35993. };
  35994. module.exports = function createDeclarationIndexer() {
  35995. var ids = new Index();
  35996. return function markDeclaration(node) {
  35997. var id = generate(node);
  35998. node.id = ids.resolve(id);
  35999. node.length = id.length;
  36000. node.fingerprint = null;
  36001. return node;
  36002. };
  36003. };
  36004. /***/ }),
  36005. /* 217 */
  36006. /***/ (function(module, exports, __webpack_require__) {
  36007. var generate = __webpack_require__(1).generate;
  36008. var specificity = __webpack_require__(218);
  36009. var nonFreezePseudoElements = {
  36010. 'first-letter': true,
  36011. 'first-line': true,
  36012. 'after': true,
  36013. 'before': true
  36014. };
  36015. var nonFreezePseudoClasses = {
  36016. 'link': true,
  36017. 'visited': true,
  36018. 'hover': true,
  36019. 'active': true,
  36020. 'first-letter': true,
  36021. 'first-line': true,
  36022. 'after': true,
  36023. 'before': true
  36024. };
  36025. module.exports = function freeze(node, usageData) {
  36026. var pseudos = Object.create(null);
  36027. var hasPseudo = false;
  36028. node.prelude.children.each(function(simpleSelector) {
  36029. var tagName = '*';
  36030. var scope = 0;
  36031. simpleSelector.children.each(function(node) {
  36032. switch (node.type) {
  36033. case 'ClassSelector':
  36034. if (usageData && usageData.scopes) {
  36035. var classScope = usageData.scopes[node.name] || 0;
  36036. if (scope !== 0 && classScope !== scope) {
  36037. throw new Error('Selector can\'t has classes from different scopes: ' + generate(simpleSelector));
  36038. }
  36039. scope = classScope;
  36040. }
  36041. break;
  36042. case 'PseudoClassSelector':
  36043. var name = node.name.toLowerCase();
  36044. if (!nonFreezePseudoClasses.hasOwnProperty(name)) {
  36045. pseudos[name] = true;
  36046. hasPseudo = true;
  36047. }
  36048. break;
  36049. case 'PseudoElementSelector':
  36050. var name = node.name.toLowerCase();
  36051. if (!nonFreezePseudoElements.hasOwnProperty(name)) {
  36052. pseudos[name] = true;
  36053. hasPseudo = true;
  36054. }
  36055. break;
  36056. case 'TypeSelector':
  36057. tagName = node.name.toLowerCase();
  36058. break;
  36059. case 'AttributeSelector':
  36060. if (node.flags) {
  36061. pseudos['[' + node.flags.toLowerCase() + ']'] = true;
  36062. hasPseudo = true;
  36063. }
  36064. break;
  36065. case 'WhiteSpace':
  36066. case 'Combinator':
  36067. tagName = '*';
  36068. break;
  36069. }
  36070. });
  36071. simpleSelector.compareMarker = specificity(simpleSelector).toString();
  36072. simpleSelector.id = null; // pre-init property to avoid multiple hidden class
  36073. simpleSelector.id = generate(simpleSelector);
  36074. if (scope) {
  36075. simpleSelector.compareMarker += ':' + scope;
  36076. }
  36077. if (tagName !== '*') {
  36078. simpleSelector.compareMarker += ',' + tagName;
  36079. }
  36080. });
  36081. // add property to all rule nodes to avoid multiple hidden class
  36082. node.pseudoSignature = hasPseudo && Object.keys(pseudos).sort().join(',');
  36083. };
  36084. /***/ }),
  36085. /* 218 */
  36086. /***/ (function(module, exports) {
  36087. module.exports = function specificity(simpleSelector) {
  36088. var A = 0;
  36089. var B = 0;
  36090. var C = 0;
  36091. simpleSelector.children.each(function walk(node) {
  36092. switch (node.type) {
  36093. case 'SelectorList':
  36094. case 'Selector':
  36095. node.children.each(walk);
  36096. break;
  36097. case 'IdSelector':
  36098. A++;
  36099. break;
  36100. case 'ClassSelector':
  36101. case 'AttributeSelector':
  36102. B++;
  36103. break;
  36104. case 'PseudoClassSelector':
  36105. switch (node.name.toLowerCase()) {
  36106. case 'not':
  36107. node.children.each(walk);
  36108. break;
  36109. case 'before':
  36110. case 'after':
  36111. case 'first-line':
  36112. case 'first-letter':
  36113. C++;
  36114. break;
  36115. // TODO: support for :nth-*(.. of <SelectorList>), :matches(), :has()
  36116. default:
  36117. B++;
  36118. }
  36119. break;
  36120. case 'PseudoElementSelector':
  36121. C++;
  36122. break;
  36123. case 'TypeSelector':
  36124. // ignore universal selector
  36125. if (node.name.charAt(node.name.length - 1) !== '*') {
  36126. C++;
  36127. }
  36128. break;
  36129. }
  36130. });
  36131. return [A, B, C];
  36132. };
  36133. /***/ }),
  36134. /* 219 */
  36135. /***/ (function(module, exports, __webpack_require__) {
  36136. var List = __webpack_require__(1).List;
  36137. var resolveKeyword = __webpack_require__(1).keyword;
  36138. var hasOwnProperty = Object.prototype.hasOwnProperty;
  36139. var walk = __webpack_require__(1).walk;
  36140. function addRuleToMap(map, item, list, single) {
  36141. var node = item.data;
  36142. var name = resolveKeyword(node.name).basename;
  36143. var id = node.name.toLowerCase() + '/' + (node.prelude ? node.prelude.id : null);
  36144. if (!hasOwnProperty.call(map, name)) {
  36145. map[name] = Object.create(null);
  36146. }
  36147. if (single) {
  36148. delete map[name][id];
  36149. }
  36150. if (!hasOwnProperty.call(map[name], id)) {
  36151. map[name][id] = new List();
  36152. }
  36153. map[name][id].append(list.remove(item));
  36154. }
  36155. function relocateAtrules(ast, options) {
  36156. var collected = Object.create(null);
  36157. var topInjectPoint = null;
  36158. ast.children.each(function(node, item, list) {
  36159. if (node.type === 'Atrule') {
  36160. var name = resolveKeyword(node.name).basename;
  36161. switch (name) {
  36162. case 'keyframes':
  36163. addRuleToMap(collected, item, list, true);
  36164. return;
  36165. case 'media':
  36166. if (options.forceMediaMerge) {
  36167. addRuleToMap(collected, item, list, false);
  36168. return;
  36169. }
  36170. break;
  36171. }
  36172. if (topInjectPoint === null &&
  36173. name !== 'charset' &&
  36174. name !== 'import') {
  36175. topInjectPoint = item;
  36176. }
  36177. } else {
  36178. if (topInjectPoint === null) {
  36179. topInjectPoint = item;
  36180. }
  36181. }
  36182. });
  36183. for (var atrule in collected) {
  36184. for (var id in collected[atrule]) {
  36185. ast.children.insertList(
  36186. collected[atrule][id],
  36187. atrule === 'media' ? null : topInjectPoint
  36188. );
  36189. }
  36190. }
  36191. };
  36192. function isMediaRule(node) {
  36193. return node.type === 'Atrule' && node.name === 'media';
  36194. }
  36195. function processAtrule(node, item, list) {
  36196. if (!isMediaRule(node)) {
  36197. return;
  36198. }
  36199. var prev = item.prev && item.prev.data;
  36200. if (!prev || !isMediaRule(prev)) {
  36201. return;
  36202. }
  36203. // merge @media with same query
  36204. if (node.prelude &&
  36205. prev.prelude &&
  36206. node.prelude.id === prev.prelude.id) {
  36207. prev.block.children.appendList(node.block.children);
  36208. list.remove(item);
  36209. // TODO: use it when we can refer to several points in source
  36210. // prev.loc = {
  36211. // primary: prev.loc,
  36212. // merged: node.loc
  36213. // };
  36214. }
  36215. }
  36216. module.exports = function rejoinAtrule(ast, options) {
  36217. relocateAtrules(ast, options);
  36218. walk(ast, {
  36219. visit: 'Atrule',
  36220. reverse: true,
  36221. enter: processAtrule
  36222. });
  36223. };
  36224. /***/ }),
  36225. /* 220 */
  36226. /***/ (function(module, exports, __webpack_require__) {
  36227. var walk = __webpack_require__(1).walk;
  36228. var utils = __webpack_require__(30);
  36229. function processRule(node, item, list) {
  36230. var selectors = node.prelude.children;
  36231. var declarations = node.block.children;
  36232. list.prevUntil(item.prev, function(prev) {
  36233. // skip non-ruleset node if safe
  36234. if (prev.type !== 'Rule') {
  36235. return utils.unsafeToSkipNode.call(selectors, prev);
  36236. }
  36237. var prevSelectors = prev.prelude.children;
  36238. var prevDeclarations = prev.block.children;
  36239. // try to join rulesets with equal pseudo signature
  36240. if (node.pseudoSignature === prev.pseudoSignature) {
  36241. // try to join by selectors
  36242. if (utils.isEqualSelectors(prevSelectors, selectors)) {
  36243. prevDeclarations.appendList(declarations);
  36244. list.remove(item);
  36245. return true;
  36246. }
  36247. // try to join by declarations
  36248. if (utils.isEqualDeclarations(declarations, prevDeclarations)) {
  36249. utils.addSelectors(prevSelectors, selectors);
  36250. list.remove(item);
  36251. return true;
  36252. }
  36253. }
  36254. // go to prev ruleset if has no selector similarities
  36255. return utils.hasSimilarSelectors(selectors, prevSelectors);
  36256. });
  36257. }
  36258. // NOTE: direction should be left to right, since rulesets merge to left
  36259. // ruleset. When direction right to left unmerged rulesets may prevent lookup
  36260. // TODO: remove initial merge
  36261. module.exports = function initialMergeRule(ast) {
  36262. walk(ast, {
  36263. visit: 'Rule',
  36264. enter: processRule
  36265. });
  36266. };
  36267. /***/ }),
  36268. /* 221 */
  36269. /***/ (function(module, exports, __webpack_require__) {
  36270. var List = __webpack_require__(1).List;
  36271. var walk = __webpack_require__(1).walk;
  36272. function processRule(node, item, list) {
  36273. var selectors = node.prelude.children;
  36274. // generate new rule sets:
  36275. // .a, .b { color: red; }
  36276. // ->
  36277. // .a { color: red; }
  36278. // .b { color: red; }
  36279. // while there are more than 1 simple selector split for rulesets
  36280. while (selectors.head !== selectors.tail) {
  36281. var newSelectors = new List();
  36282. newSelectors.insert(selectors.remove(selectors.head));
  36283. list.insert(list.createItem({
  36284. type: 'Rule',
  36285. loc: node.loc,
  36286. prelude: {
  36287. type: 'SelectorList',
  36288. loc: node.prelude.loc,
  36289. children: newSelectors
  36290. },
  36291. block: {
  36292. type: 'Block',
  36293. loc: node.block.loc,
  36294. children: node.block.children.copy()
  36295. },
  36296. pseudoSignature: node.pseudoSignature
  36297. }), item);
  36298. }
  36299. }
  36300. module.exports = function disjoinRule(ast) {
  36301. walk(ast, {
  36302. visit: 'Rule',
  36303. reverse: true,
  36304. enter: processRule
  36305. });
  36306. };
  36307. /***/ }),
  36308. /* 222 */
  36309. /***/ (function(module, exports, __webpack_require__) {
  36310. var List = __webpack_require__(1).List;
  36311. var generate = __webpack_require__(1).generate;
  36312. var walk = __webpack_require__(1).walk;
  36313. var REPLACE = 1;
  36314. var REMOVE = 2;
  36315. var TOP = 0;
  36316. var RIGHT = 1;
  36317. var BOTTOM = 2;
  36318. var LEFT = 3;
  36319. var SIDES = ['top', 'right', 'bottom', 'left'];
  36320. var SIDE = {
  36321. 'margin-top': 'top',
  36322. 'margin-right': 'right',
  36323. 'margin-bottom': 'bottom',
  36324. 'margin-left': 'left',
  36325. 'padding-top': 'top',
  36326. 'padding-right': 'right',
  36327. 'padding-bottom': 'bottom',
  36328. 'padding-left': 'left',
  36329. 'border-top-color': 'top',
  36330. 'border-right-color': 'right',
  36331. 'border-bottom-color': 'bottom',
  36332. 'border-left-color': 'left',
  36333. 'border-top-width': 'top',
  36334. 'border-right-width': 'right',
  36335. 'border-bottom-width': 'bottom',
  36336. 'border-left-width': 'left',
  36337. 'border-top-style': 'top',
  36338. 'border-right-style': 'right',
  36339. 'border-bottom-style': 'bottom',
  36340. 'border-left-style': 'left'
  36341. };
  36342. var MAIN_PROPERTY = {
  36343. 'margin': 'margin',
  36344. 'margin-top': 'margin',
  36345. 'margin-right': 'margin',
  36346. 'margin-bottom': 'margin',
  36347. 'margin-left': 'margin',
  36348. 'padding': 'padding',
  36349. 'padding-top': 'padding',
  36350. 'padding-right': 'padding',
  36351. 'padding-bottom': 'padding',
  36352. 'padding-left': 'padding',
  36353. 'border-color': 'border-color',
  36354. 'border-top-color': 'border-color',
  36355. 'border-right-color': 'border-color',
  36356. 'border-bottom-color': 'border-color',
  36357. 'border-left-color': 'border-color',
  36358. 'border-width': 'border-width',
  36359. 'border-top-width': 'border-width',
  36360. 'border-right-width': 'border-width',
  36361. 'border-bottom-width': 'border-width',
  36362. 'border-left-width': 'border-width',
  36363. 'border-style': 'border-style',
  36364. 'border-top-style': 'border-style',
  36365. 'border-right-style': 'border-style',
  36366. 'border-bottom-style': 'border-style',
  36367. 'border-left-style': 'border-style'
  36368. };
  36369. function TRBL(name) {
  36370. this.name = name;
  36371. this.loc = null;
  36372. this.iehack = undefined;
  36373. this.sides = {
  36374. 'top': null,
  36375. 'right': null,
  36376. 'bottom': null,
  36377. 'left': null
  36378. };
  36379. }
  36380. TRBL.prototype.getValueSequence = function(declaration, count) {
  36381. var values = [];
  36382. var iehack = '';
  36383. var hasBadValues = declaration.value.children.some(function(child) {
  36384. var special = false;
  36385. switch (child.type) {
  36386. case 'Identifier':
  36387. switch (child.name) {
  36388. case '\\0':
  36389. case '\\9':
  36390. iehack = child.name;
  36391. return;
  36392. case 'inherit':
  36393. case 'initial':
  36394. case 'unset':
  36395. case 'revert':
  36396. special = child.name;
  36397. break;
  36398. }
  36399. break;
  36400. case 'Dimension':
  36401. switch (child.unit) {
  36402. // is not supported until IE11
  36403. case 'rem':
  36404. // v* units is too buggy across browsers and better
  36405. // don't merge values with those units
  36406. case 'vw':
  36407. case 'vh':
  36408. case 'vmin':
  36409. case 'vmax':
  36410. case 'vm': // IE9 supporting "vm" instead of "vmin".
  36411. special = child.unit;
  36412. break;
  36413. }
  36414. break;
  36415. case 'HexColor': // color
  36416. case 'Number':
  36417. case 'Percentage':
  36418. break;
  36419. case 'Function':
  36420. special = child.name;
  36421. break;
  36422. case 'WhiteSpace':
  36423. return false; // ignore space
  36424. default:
  36425. return true; // bad value
  36426. }
  36427. values.push({
  36428. node: child,
  36429. special: special,
  36430. important: declaration.important
  36431. });
  36432. });
  36433. if (hasBadValues || values.length > count) {
  36434. return false;
  36435. }
  36436. if (typeof this.iehack === 'string' && this.iehack !== iehack) {
  36437. return false;
  36438. }
  36439. this.iehack = iehack; // move outside
  36440. return values;
  36441. };
  36442. TRBL.prototype.canOverride = function(side, value) {
  36443. var currentValue = this.sides[side];
  36444. return !currentValue || (value.important && !currentValue.important);
  36445. };
  36446. TRBL.prototype.add = function(name, declaration) {
  36447. function attemptToAdd() {
  36448. var sides = this.sides;
  36449. var side = SIDE[name];
  36450. if (side) {
  36451. if (side in sides === false) {
  36452. return false;
  36453. }
  36454. var values = this.getValueSequence(declaration, 1);
  36455. if (!values || !values.length) {
  36456. return false;
  36457. }
  36458. // can mix only if specials are equal
  36459. for (var key in sides) {
  36460. if (sides[key] !== null && sides[key].special !== values[0].special) {
  36461. return false;
  36462. }
  36463. }
  36464. if (!this.canOverride(side, values[0])) {
  36465. return true;
  36466. }
  36467. sides[side] = values[0];
  36468. return true;
  36469. } else if (name === this.name) {
  36470. var values = this.getValueSequence(declaration, 4);
  36471. if (!values || !values.length) {
  36472. return false;
  36473. }
  36474. switch (values.length) {
  36475. case 1:
  36476. values[RIGHT] = values[TOP];
  36477. values[BOTTOM] = values[TOP];
  36478. values[LEFT] = values[TOP];
  36479. break;
  36480. case 2:
  36481. values[BOTTOM] = values[TOP];
  36482. values[LEFT] = values[RIGHT];
  36483. break;
  36484. case 3:
  36485. values[LEFT] = values[RIGHT];
  36486. break;
  36487. }
  36488. // can mix only if specials are equal
  36489. for (var i = 0; i < 4; i++) {
  36490. for (var key in sides) {
  36491. if (sides[key] !== null && sides[key].special !== values[i].special) {
  36492. return false;
  36493. }
  36494. }
  36495. }
  36496. for (var i = 0; i < 4; i++) {
  36497. if (this.canOverride(SIDES[i], values[i])) {
  36498. sides[SIDES[i]] = values[i];
  36499. }
  36500. }
  36501. return true;
  36502. }
  36503. }
  36504. if (!attemptToAdd.call(this)) {
  36505. return false;
  36506. }
  36507. // TODO: use it when we can refer to several points in source
  36508. // if (this.loc) {
  36509. // this.loc = {
  36510. // primary: this.loc,
  36511. // merged: declaration.loc
  36512. // };
  36513. // } else {
  36514. // this.loc = declaration.loc;
  36515. // }
  36516. if (!this.loc) {
  36517. this.loc = declaration.loc;
  36518. }
  36519. return true;
  36520. };
  36521. TRBL.prototype.isOkToMinimize = function() {
  36522. var top = this.sides.top;
  36523. var right = this.sides.right;
  36524. var bottom = this.sides.bottom;
  36525. var left = this.sides.left;
  36526. if (top && right && bottom && left) {
  36527. var important =
  36528. top.important +
  36529. right.important +
  36530. bottom.important +
  36531. left.important;
  36532. return important === 0 || important === 4;
  36533. }
  36534. return false;
  36535. };
  36536. TRBL.prototype.getValue = function() {
  36537. var result = new List();
  36538. var sides = this.sides;
  36539. var values = [
  36540. sides.top,
  36541. sides.right,
  36542. sides.bottom,
  36543. sides.left
  36544. ];
  36545. var stringValues = [
  36546. generate(sides.top.node),
  36547. generate(sides.right.node),
  36548. generate(sides.bottom.node),
  36549. generate(sides.left.node)
  36550. ];
  36551. if (stringValues[LEFT] === stringValues[RIGHT]) {
  36552. values.pop();
  36553. if (stringValues[BOTTOM] === stringValues[TOP]) {
  36554. values.pop();
  36555. if (stringValues[RIGHT] === stringValues[TOP]) {
  36556. values.pop();
  36557. }
  36558. }
  36559. }
  36560. for (var i = 0; i < values.length; i++) {
  36561. if (i) {
  36562. result.appendData({ type: 'WhiteSpace', value: ' ' });
  36563. }
  36564. result.appendData(values[i].node);
  36565. }
  36566. if (this.iehack) {
  36567. result.appendData({ type: 'WhiteSpace', value: ' ' });
  36568. result.appendData({
  36569. type: 'Identifier',
  36570. loc: null,
  36571. name: this.iehack
  36572. });
  36573. }
  36574. return {
  36575. type: 'Value',
  36576. loc: null,
  36577. children: result
  36578. };
  36579. };
  36580. TRBL.prototype.getDeclaration = function() {
  36581. return {
  36582. type: 'Declaration',
  36583. loc: this.loc,
  36584. important: this.sides.top.important,
  36585. property: this.name,
  36586. value: this.getValue()
  36587. };
  36588. };
  36589. function processRule(rule, shorts, shortDeclarations, lastShortSelector) {
  36590. var declarations = rule.block.children;
  36591. var selector = rule.prelude.children.first().id;
  36592. rule.block.children.eachRight(function(declaration, item) {
  36593. var property = declaration.property;
  36594. if (!MAIN_PROPERTY.hasOwnProperty(property)) {
  36595. return;
  36596. }
  36597. var key = MAIN_PROPERTY[property];
  36598. var shorthand;
  36599. var operation;
  36600. if (!lastShortSelector || selector === lastShortSelector) {
  36601. if (key in shorts) {
  36602. operation = REMOVE;
  36603. shorthand = shorts[key];
  36604. }
  36605. }
  36606. if (!shorthand || !shorthand.add(property, declaration)) {
  36607. operation = REPLACE;
  36608. shorthand = new TRBL(key);
  36609. // if can't parse value ignore it and break shorthand children
  36610. if (!shorthand.add(property, declaration)) {
  36611. lastShortSelector = null;
  36612. return;
  36613. }
  36614. }
  36615. shorts[key] = shorthand;
  36616. shortDeclarations.push({
  36617. operation: operation,
  36618. block: declarations,
  36619. item: item,
  36620. shorthand: shorthand
  36621. });
  36622. lastShortSelector = selector;
  36623. });
  36624. return lastShortSelector;
  36625. }
  36626. function processShorthands(shortDeclarations, markDeclaration) {
  36627. shortDeclarations.forEach(function(item) {
  36628. var shorthand = item.shorthand;
  36629. if (!shorthand.isOkToMinimize()) {
  36630. return;
  36631. }
  36632. if (item.operation === REPLACE) {
  36633. item.item.data = markDeclaration(shorthand.getDeclaration());
  36634. } else {
  36635. item.block.remove(item.item);
  36636. }
  36637. });
  36638. }
  36639. module.exports = function restructBlock(ast, indexer) {
  36640. var stylesheetMap = {};
  36641. var shortDeclarations = [];
  36642. walk(ast, {
  36643. visit: 'Rule',
  36644. reverse: true,
  36645. enter: function(node) {
  36646. var stylesheet = this.block || this.stylesheet;
  36647. var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id;
  36648. var ruleMap;
  36649. var shorts;
  36650. if (!stylesheetMap.hasOwnProperty(stylesheet.id)) {
  36651. ruleMap = {
  36652. lastShortSelector: null
  36653. };
  36654. stylesheetMap[stylesheet.id] = ruleMap;
  36655. } else {
  36656. ruleMap = stylesheetMap[stylesheet.id];
  36657. }
  36658. if (ruleMap.hasOwnProperty(ruleId)) {
  36659. shorts = ruleMap[ruleId];
  36660. } else {
  36661. shorts = {};
  36662. ruleMap[ruleId] = shorts;
  36663. }
  36664. ruleMap.lastShortSelector = processRule.call(this, node, shorts, shortDeclarations, ruleMap.lastShortSelector);
  36665. }
  36666. });
  36667. processShorthands(shortDeclarations, indexer.declaration);
  36668. };
  36669. /***/ }),
  36670. /* 223 */
  36671. /***/ (function(module, exports, __webpack_require__) {
  36672. var resolveProperty = __webpack_require__(1).property;
  36673. var resolveKeyword = __webpack_require__(1).keyword;
  36674. var walk = __webpack_require__(1).walk;
  36675. var generate = __webpack_require__(1).generate;
  36676. var fingerprintId = 1;
  36677. var dontRestructure = {
  36678. 'src': 1 // https://github.com/afelix/csso/issues/50
  36679. };
  36680. var DONT_MIX_VALUE = {
  36681. // https://developer.mozilla.org/en-US/docs/Web/CSS/display#Browser_compatibility
  36682. 'display': /table|ruby|flex|-(flex)?box$|grid|contents|run-in/i,
  36683. // https://developer.mozilla.org/en/docs/Web/CSS/text-align
  36684. 'text-align': /^(start|end|match-parent|justify-all)$/i
  36685. };
  36686. var CURSOR_SAFE_VALUE = [
  36687. 'auto', 'crosshair', 'default', 'move', 'text', 'wait', 'help',
  36688. 'n-resize', 'e-resize', 's-resize', 'w-resize',
  36689. 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize',
  36690. 'pointer', 'progress', 'not-allowed', 'no-drop', 'vertical-text', 'all-scroll',
  36691. 'col-resize', 'row-resize'
  36692. ];
  36693. var POSITION_SAFE_VALUE = [
  36694. 'static', 'relative', 'absolute', 'fixed'
  36695. ];
  36696. var NEEDLESS_TABLE = {
  36697. 'border-width': ['border'],
  36698. 'border-style': ['border'],
  36699. 'border-color': ['border'],
  36700. 'border-top': ['border'],
  36701. 'border-right': ['border'],
  36702. 'border-bottom': ['border'],
  36703. 'border-left': ['border'],
  36704. 'border-top-width': ['border-top', 'border-width', 'border'],
  36705. 'border-right-width': ['border-right', 'border-width', 'border'],
  36706. 'border-bottom-width': ['border-bottom', 'border-width', 'border'],
  36707. 'border-left-width': ['border-left', 'border-width', 'border'],
  36708. 'border-top-style': ['border-top', 'border-style', 'border'],
  36709. 'border-right-style': ['border-right', 'border-style', 'border'],
  36710. 'border-bottom-style': ['border-bottom', 'border-style', 'border'],
  36711. 'border-left-style': ['border-left', 'border-style', 'border'],
  36712. 'border-top-color': ['border-top', 'border-color', 'border'],
  36713. 'border-right-color': ['border-right', 'border-color', 'border'],
  36714. 'border-bottom-color': ['border-bottom', 'border-color', 'border'],
  36715. 'border-left-color': ['border-left', 'border-color', 'border'],
  36716. 'margin-top': ['margin'],
  36717. 'margin-right': ['margin'],
  36718. 'margin-bottom': ['margin'],
  36719. 'margin-left': ['margin'],
  36720. 'padding-top': ['padding'],
  36721. 'padding-right': ['padding'],
  36722. 'padding-bottom': ['padding'],
  36723. 'padding-left': ['padding'],
  36724. 'font-style': ['font'],
  36725. 'font-variant': ['font'],
  36726. 'font-weight': ['font'],
  36727. 'font-size': ['font'],
  36728. 'font-family': ['font'],
  36729. 'list-style-type': ['list-style'],
  36730. 'list-style-position': ['list-style'],
  36731. 'list-style-image': ['list-style']
  36732. };
  36733. function getPropertyFingerprint(propertyName, declaration, fingerprints) {
  36734. var realName = resolveProperty(propertyName).basename;
  36735. if (realName === 'background') {
  36736. return propertyName + ':' + generate(declaration.value);
  36737. }
  36738. var declarationId = declaration.id;
  36739. var fingerprint = fingerprints[declarationId];
  36740. if (!fingerprint) {
  36741. switch (declaration.value.type) {
  36742. case 'Value':
  36743. var vendorId = '';
  36744. var iehack = '';
  36745. var special = {};
  36746. var raw = false;
  36747. declaration.value.children.each(function walk(node) {
  36748. switch (node.type) {
  36749. case 'Value':
  36750. case 'Brackets':
  36751. case 'Parentheses':
  36752. node.children.each(walk);
  36753. break;
  36754. case 'Raw':
  36755. raw = true;
  36756. break;
  36757. case 'Identifier':
  36758. var name = node.name;
  36759. if (!vendorId) {
  36760. vendorId = resolveKeyword(name).vendor;
  36761. }
  36762. if (/\\[09]/.test(name)) {
  36763. iehack = RegExp.lastMatch;
  36764. }
  36765. if (realName === 'cursor') {
  36766. if (CURSOR_SAFE_VALUE.indexOf(name) === -1) {
  36767. special[name] = true;
  36768. }
  36769. } else if (realName === 'position') {
  36770. if (POSITION_SAFE_VALUE.indexOf(name) === -1) {
  36771. special[name] = true;
  36772. }
  36773. } else if (DONT_MIX_VALUE.hasOwnProperty(realName)) {
  36774. if (DONT_MIX_VALUE[realName].test(name)) {
  36775. special[name] = true;
  36776. }
  36777. }
  36778. break;
  36779. case 'Function':
  36780. var name = node.name;
  36781. if (!vendorId) {
  36782. vendorId = resolveKeyword(name).vendor;
  36783. }
  36784. if (name === 'rect') {
  36785. // there are 2 forms of rect:
  36786. // rect(<top>, <right>, <bottom>, <left>) - standart
  36787. // rect(<top> <right> <bottom> <left>) – backwards compatible syntax
  36788. // only the same form values can be merged
  36789. var hasComma = node.children.some(function(node) {
  36790. return node.type === 'Operator' && node.value === ',';
  36791. });
  36792. if (!hasComma) {
  36793. name = 'rect-backward';
  36794. }
  36795. }
  36796. special[name + '()'] = true;
  36797. // check nested tokens too
  36798. node.children.each(walk);
  36799. break;
  36800. case 'Dimension':
  36801. var unit = node.unit;
  36802. switch (unit) {
  36803. // is not supported until IE11
  36804. case 'rem':
  36805. // v* units is too buggy across browsers and better
  36806. // don't merge values with those units
  36807. case 'vw':
  36808. case 'vh':
  36809. case 'vmin':
  36810. case 'vmax':
  36811. case 'vm': // IE9 supporting "vm" instead of "vmin".
  36812. special[unit] = true;
  36813. break;
  36814. }
  36815. break;
  36816. }
  36817. });
  36818. fingerprint = raw
  36819. ? '!' + fingerprintId++
  36820. : '!' + Object.keys(special).sort() + '|' + iehack + vendorId;
  36821. break;
  36822. case 'Raw':
  36823. fingerprint = '!' + declaration.value.value;
  36824. break;
  36825. default:
  36826. fingerprint = generate(declaration.value);
  36827. }
  36828. fingerprints[declarationId] = fingerprint;
  36829. }
  36830. return propertyName + fingerprint;
  36831. }
  36832. function needless(props, declaration, fingerprints) {
  36833. var property = resolveProperty(declaration.property);
  36834. if (NEEDLESS_TABLE.hasOwnProperty(property.basename)) {
  36835. var table = NEEDLESS_TABLE[property.basename];
  36836. for (var i = 0; i < table.length; i++) {
  36837. var ppre = getPropertyFingerprint(property.prefix + table[i], declaration, fingerprints);
  36838. var prev = props.hasOwnProperty(ppre) ? props[ppre] : null;
  36839. if (prev && (!declaration.important || prev.item.data.important)) {
  36840. return prev;
  36841. }
  36842. }
  36843. }
  36844. }
  36845. function processRule(rule, item, list, props, fingerprints) {
  36846. var declarations = rule.block.children;
  36847. declarations.eachRight(function(declaration, declarationItem) {
  36848. var property = declaration.property;
  36849. var fingerprint = getPropertyFingerprint(property, declaration, fingerprints);
  36850. var prev = props[fingerprint];
  36851. if (prev && !dontRestructure.hasOwnProperty(property)) {
  36852. if (declaration.important && !prev.item.data.important) {
  36853. props[fingerprint] = {
  36854. block: declarations,
  36855. item: declarationItem
  36856. };
  36857. prev.block.remove(prev.item);
  36858. // TODO: use it when we can refer to several points in source
  36859. // declaration.loc = {
  36860. // primary: declaration.loc,
  36861. // merged: prev.item.data.loc
  36862. // };
  36863. } else {
  36864. declarations.remove(declarationItem);
  36865. // TODO: use it when we can refer to several points in source
  36866. // prev.item.data.loc = {
  36867. // primary: prev.item.data.loc,
  36868. // merged: declaration.loc
  36869. // };
  36870. }
  36871. } else {
  36872. var prev = needless(props, declaration, fingerprints);
  36873. if (prev) {
  36874. declarations.remove(declarationItem);
  36875. // TODO: use it when we can refer to several points in source
  36876. // prev.item.data.loc = {
  36877. // primary: prev.item.data.loc,
  36878. // merged: declaration.loc
  36879. // };
  36880. } else {
  36881. declaration.fingerprint = fingerprint;
  36882. props[fingerprint] = {
  36883. block: declarations,
  36884. item: declarationItem
  36885. };
  36886. }
  36887. }
  36888. });
  36889. if (declarations.isEmpty()) {
  36890. list.remove(item);
  36891. }
  36892. }
  36893. module.exports = function restructBlock(ast) {
  36894. var stylesheetMap = {};
  36895. var fingerprints = Object.create(null);
  36896. walk(ast, {
  36897. visit: 'Rule',
  36898. reverse: true,
  36899. enter: function(node, item, list) {
  36900. var stylesheet = this.block || this.stylesheet;
  36901. var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id;
  36902. var ruleMap;
  36903. var props;
  36904. if (!stylesheetMap.hasOwnProperty(stylesheet.id)) {
  36905. ruleMap = {};
  36906. stylesheetMap[stylesheet.id] = ruleMap;
  36907. } else {
  36908. ruleMap = stylesheetMap[stylesheet.id];
  36909. }
  36910. if (ruleMap.hasOwnProperty(ruleId)) {
  36911. props = ruleMap[ruleId];
  36912. } else {
  36913. props = {};
  36914. ruleMap[ruleId] = props;
  36915. }
  36916. processRule.call(this, node, item, list, props, fingerprints);
  36917. }
  36918. });
  36919. };
  36920. /***/ }),
  36921. /* 224 */
  36922. /***/ (function(module, exports, __webpack_require__) {
  36923. var walk = __webpack_require__(1).walk;
  36924. var utils = __webpack_require__(30);
  36925. /*
  36926. At this step all rules has single simple selector. We try to join by equal
  36927. declaration blocks to first rule, e.g.
  36928. .a { color: red }
  36929. b { ... }
  36930. .b { color: red }
  36931. ->
  36932. .a, .b { color: red }
  36933. b { ... }
  36934. */
  36935. function processRule(node, item, list) {
  36936. var selectors = node.prelude.children;
  36937. var declarations = node.block.children;
  36938. var nodeCompareMarker = selectors.first().compareMarker;
  36939. var skippedCompareMarkers = {};
  36940. list.nextUntil(item.next, function(next, nextItem) {
  36941. // skip non-ruleset node if safe
  36942. if (next.type !== 'Rule') {
  36943. return utils.unsafeToSkipNode.call(selectors, next);
  36944. }
  36945. if (node.pseudoSignature !== next.pseudoSignature) {
  36946. return true;
  36947. }
  36948. var nextFirstSelector = next.prelude.children.head;
  36949. var nextDeclarations = next.block.children;
  36950. var nextCompareMarker = nextFirstSelector.data.compareMarker;
  36951. // if next ruleset has same marked as one of skipped then stop joining
  36952. if (nextCompareMarker in skippedCompareMarkers) {
  36953. return true;
  36954. }
  36955. // try to join by selectors
  36956. if (selectors.head === selectors.tail) {
  36957. if (selectors.first().id === nextFirstSelector.data.id) {
  36958. declarations.appendList(nextDeclarations);
  36959. list.remove(nextItem);
  36960. return;
  36961. }
  36962. }
  36963. // try to join by properties
  36964. if (utils.isEqualDeclarations(declarations, nextDeclarations)) {
  36965. var nextStr = nextFirstSelector.data.id;
  36966. selectors.some(function(data, item) {
  36967. var curStr = data.id;
  36968. if (nextStr < curStr) {
  36969. selectors.insert(nextFirstSelector, item);
  36970. return true;
  36971. }
  36972. if (!item.next) {
  36973. selectors.insert(nextFirstSelector);
  36974. return true;
  36975. }
  36976. });
  36977. list.remove(nextItem);
  36978. return;
  36979. }
  36980. // go to next ruleset if current one can be skipped (has no equal specificity nor element selector)
  36981. if (nextCompareMarker === nodeCompareMarker) {
  36982. return true;
  36983. }
  36984. skippedCompareMarkers[nextCompareMarker] = true;
  36985. });
  36986. }
  36987. module.exports = function mergeRule(ast) {
  36988. walk(ast, {
  36989. visit: 'Rule',
  36990. enter: processRule
  36991. });
  36992. };
  36993. /***/ }),
  36994. /* 225 */
  36995. /***/ (function(module, exports, __webpack_require__) {
  36996. var List = __webpack_require__(1).List;
  36997. var walk = __webpack_require__(1).walk;
  36998. var utils = __webpack_require__(30);
  36999. function calcSelectorLength(list) {
  37000. var length = 0;
  37001. list.each(function(data) {
  37002. length += data.id.length + 1;
  37003. });
  37004. return length - 1;
  37005. }
  37006. function calcDeclarationsLength(tokens) {
  37007. var length = 0;
  37008. for (var i = 0; i < tokens.length; i++) {
  37009. length += tokens[i].length;
  37010. }
  37011. return (
  37012. length + // declarations
  37013. tokens.length - 1 // delimeters
  37014. );
  37015. }
  37016. function processRule(node, item, list) {
  37017. var avoidRulesMerge = this.block !== null ? this.block.avoidRulesMerge : false;
  37018. var selectors = node.prelude.children;
  37019. var block = node.block;
  37020. var disallowDownMarkers = Object.create(null);
  37021. var allowMergeUp = true;
  37022. var allowMergeDown = true;
  37023. list.prevUntil(item.prev, function(prev, prevItem) {
  37024. // skip non-ruleset node if safe
  37025. if (prev.type !== 'Rule') {
  37026. return utils.unsafeToSkipNode.call(selectors, prev);
  37027. }
  37028. var prevSelectors = prev.prelude.children;
  37029. var prevBlock = prev.block;
  37030. if (node.pseudoSignature !== prev.pseudoSignature) {
  37031. return true;
  37032. }
  37033. allowMergeDown = !prevSelectors.some(function(selector) {
  37034. return selector.compareMarker in disallowDownMarkers;
  37035. });
  37036. // try prev ruleset if simpleselectors has no equal specifity and element selector
  37037. if (!allowMergeDown && !allowMergeUp) {
  37038. return true;
  37039. }
  37040. // try to join by selectors
  37041. if (allowMergeUp && utils.isEqualSelectors(prevSelectors, selectors)) {
  37042. prevBlock.children.appendList(block.children);
  37043. list.remove(item);
  37044. return true;
  37045. }
  37046. // try to join by properties
  37047. var diff = utils.compareDeclarations(block.children, prevBlock.children);
  37048. // console.log(diff.eq, diff.ne1, diff.ne2);
  37049. if (diff.eq.length) {
  37050. if (!diff.ne1.length && !diff.ne2.length) {
  37051. // equal blocks
  37052. if (allowMergeDown) {
  37053. utils.addSelectors(selectors, prevSelectors);
  37054. list.remove(prevItem);
  37055. }
  37056. return true;
  37057. } else if (!avoidRulesMerge) { /* probably we don't need to prevent those merges for @keyframes
  37058. TODO: need to be checked */
  37059. if (diff.ne1.length && !diff.ne2.length) {
  37060. // prevBlock is subset block
  37061. var selectorLength = calcSelectorLength(selectors);
  37062. var blockLength = calcDeclarationsLength(diff.eq); // declarations length
  37063. if (allowMergeUp && selectorLength < blockLength) {
  37064. utils.addSelectors(prevSelectors, selectors);
  37065. block.children = new List().fromArray(diff.ne1);
  37066. }
  37067. } else if (!diff.ne1.length && diff.ne2.length) {
  37068. // node is subset of prevBlock
  37069. var selectorLength = calcSelectorLength(prevSelectors);
  37070. var blockLength = calcDeclarationsLength(diff.eq); // declarations length
  37071. if (allowMergeDown && selectorLength < blockLength) {
  37072. utils.addSelectors(selectors, prevSelectors);
  37073. prevBlock.children = new List().fromArray(diff.ne2);
  37074. }
  37075. } else {
  37076. // diff.ne1.length && diff.ne2.length
  37077. // extract equal block
  37078. var newSelector = {
  37079. type: 'SelectorList',
  37080. loc: null,
  37081. children: utils.addSelectors(prevSelectors.copy(), selectors)
  37082. };
  37083. var newBlockLength = calcSelectorLength(newSelector.children) + 2; // selectors length + curly braces length
  37084. var blockLength = calcDeclarationsLength(diff.eq); // declarations length
  37085. // create new ruleset if declarations length greater than
  37086. // ruleset description overhead
  37087. if (allowMergeDown && blockLength >= newBlockLength) {
  37088. var newRule = {
  37089. type: 'Rule',
  37090. loc: null,
  37091. prelude: newSelector,
  37092. block: {
  37093. type: 'Block',
  37094. loc: null,
  37095. children: new List().fromArray(diff.eq)
  37096. },
  37097. pseudoSignature: node.pseudoSignature
  37098. };
  37099. block.children = new List().fromArray(diff.ne1);
  37100. prevBlock.children = new List().fromArray(diff.ne2.concat(diff.ne2overrided));
  37101. list.insert(list.createItem(newRule), prevItem);
  37102. return true;
  37103. }
  37104. }
  37105. }
  37106. }
  37107. if (allowMergeUp) {
  37108. // TODO: disallow up merge only if any property interception only (i.e. diff.ne2overrided.length > 0);
  37109. // await property families to find property interception correctly
  37110. allowMergeUp = !prevSelectors.some(function(prevSelector) {
  37111. return selectors.some(function(selector) {
  37112. return selector.compareMarker === prevSelector.compareMarker;
  37113. });
  37114. });
  37115. }
  37116. prevSelectors.each(function(data) {
  37117. disallowDownMarkers[data.compareMarker] = true;
  37118. });
  37119. });
  37120. }
  37121. module.exports = function restructRule(ast) {
  37122. walk(ast, {
  37123. visit: 'Rule',
  37124. reverse: true,
  37125. enter: processRule
  37126. });
  37127. };
  37128. /***/ }),
  37129. /* 226 */
  37130. /***/ (function(module) {
  37131. module.exports = JSON.parse("{\"name\":\"csso\",\"version\":\"3.5.1\",\"description\":\"CSS minifier with structural optimisations\",\"keywords\":[\"css\",\"compress\",\"minifier\",\"minify\",\"optimise\",\"optimisation\",\"csstree\"],\"homepage\":\"https://github.com/css/csso\",\"author\":\"Sergey Kryzhanovsky <skryzhanovsky@ya.ru> (https://github.com/afelix)\",\"maintainers\":[{\"name\":\"Roman Dvornov\",\"email\":\"rdvornov@gmail.com\",\"github-username\":\"lahmatiy\"}],\"license\":\"MIT\",\"repository\":\"css/csso\",\"bugs\":{\"url\":\"https://github.com/css/csso/issues\"},\"main\":\"./lib/index\",\"eslintConfig\":{\"env\":{\"node\":true,\"mocha\":true,\"es6\":true},\"rules\":{\"no-duplicate-case\":2,\"no-undef\":2,\"no-unused-vars\":[2,{\"vars\":\"all\",\"args\":\"after-used\"}]}},\"scripts\":{\"test\":\"mocha --reporter dot\",\"codestyle\":\"jscs lib test && eslint lib test\",\"codestyle-and-test\":\"npm run codestyle && npm test\",\"hydrogen\":\"node --trace-hydrogen --trace-phase=Z --trace-deopt --code-comments --hydrogen-track-positions --redirect-code-traces --redirect-code-traces-to=code.asm --trace_hydrogen_file=code.cfg --print-opt-code bin/csso --stat -o /dev/null\",\"coverage\":\"istanbul cover _mocha -- -R dot\",\"coveralls\":\"istanbul cover _mocha --report lcovonly -- -R dot && cat ./coverage/lcov.info | coveralls\",\"travis\":\"npm run codestyle-and-test && npm run coveralls\",\"browserify\":\"browserify -t package-json-versionify --standalone csso lib/index.js | uglifyjs --compress --mangle -o dist/csso-browser.js\",\"gh-pages\":\"git clone --depth=1 -b gh-pages https://github.com/css/csso.git .gh-pages && npm run browserify && cp dist/csso-browser.js .gh-pages/ && cd .gh-pages && git commit -am \\\"update\\\" && git push && cd .. && rm -rf .gh-pages\",\"prepublish\":\"npm run browserify\",\"postpublish\":\"npm run gh-pages\"},\"dependencies\":{\"css-tree\":\"1.0.0-alpha.29\"},\"devDependencies\":{\"browserify\":\"^13.0.0\",\"coveralls\":\"^2.11.6\",\"eslint\":\"^2.2.0\",\"istanbul\":\"^0.4.2\",\"jscs\":\"~3.0.7\",\"mocha\":\"^3.5.3\",\"package-json-versionify\":\"^1.0.4\",\"source-map\":\"^0.5.6\",\"uglify-js\":\"^2.6.1\"},\"engines\":{\"node\":\">=0.10.0\"},\"files\":[\"dist/csso-browser.js\",\"lib\",\"HISTORY.md\",\"LICENSE\",\"README.md\"]}");
  37132. /***/ }),
  37133. /* 227 */
  37134. /***/ (function(module, exports, __webpack_require__) {
  37135. const path = __webpack_require__(3)
  37136. const _ = __webpack_require__(10)
  37137. const compiler = _.getCompiler()
  37138. const wxmlCache = {}
  37139. const compilerResCache = {}
  37140. module.exports = {
  37141. /**
  37142. * 获取 wxml
  37143. */
  37144. getWxml(componentPath, config) {
  37145. let wxml = wxmlCache[componentPath]
  37146. if (wxml) return wxml
  37147. if (config.compiler === 'official') {
  37148. // 使用官方编译器
  37149. if (!compiler) {
  37150. wxml = _.readFile(`${componentPath}.wxml`)
  37151. if (typeof wxml !== 'function') {
  37152. // 可能是用官方编译器编译好的函数,所以需要加此判断(如在 karma 测试)
  37153. throw new Error('not support official compiler, please use simulate compiler')
  37154. }
  37155. } else {
  37156. let gwx
  37157. if (compilerResCache[config.rootPath]) {
  37158. gwx = compilerResCache[config.rootPath]
  37159. } else {
  37160. const compileString = compiler.wxmlToJs(config.rootPath, config.compilerOptions)
  37161. // eslint-disable-next-line no-new-func
  37162. const compileFunc = new Function(compileString)
  37163. gwx = compileFunc()
  37164. compilerResCache[config.rootPath] = gwx
  37165. }
  37166. let relativeWxmlPath = `${path.relative(config.rootPath, componentPath)}.wxml`
  37167. relativeWxmlPath = relativeWxmlPath.replace(/\\/g, '/')
  37168. // 构建编译结果为函数
  37169. wxml = gwx(relativeWxmlPath)
  37170. }
  37171. } else {
  37172. // 使用纯 js 实现的编译器
  37173. wxml = _.readFile(`${componentPath}.wxml`)
  37174. }
  37175. // 缓存 wxml 内容
  37176. wxmlCache[componentPath] = wxml
  37177. return wxml
  37178. }
  37179. }
  37180. /***/ }),
  37181. /* 228 */
  37182. /***/ (function(module, exports, __webpack_require__) {
  37183. /* WEBPACK VAR INJECTION */(function(global) {const _ = __webpack_require__(10)
  37184. /**
  37185. * Touch polyfill
  37186. */
  37187. class Touch {
  37188. constructor(options = {}) {
  37189. this.clientX = 0
  37190. this.clientY = 0
  37191. this.identifier = 0
  37192. this.pageX = 0
  37193. this.pageY = 0
  37194. this.screenX = 0
  37195. this.screenY = 0
  37196. this.target = null
  37197. Object.keys(options).forEach(key => {
  37198. this[key] = options[key]
  37199. })
  37200. }
  37201. }
  37202. module.exports = function() {
  37203. if (_.getEnv() === 'nodejs') {
  37204. try {
  37205. global.Touch = window.Touch = Touch
  37206. } catch (err) {
  37207. // ignore
  37208. }
  37209. }
  37210. }
  37211. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  37212. /***/ }),
  37213. /* 229 */
  37214. /***/ (function(module, exports, __webpack_require__) {
  37215. /* WEBPACK VAR INJECTION */(function(global) {const jComponent = __webpack_require__(31)
  37216. const api = __webpack_require__(230)
  37217. const officialTagList = [
  37218. 'view', 'scroll-view', 'swiper', 'movable-view', 'cover-view', 'cover-view',
  37219. 'icon', 'text', 'rich-text', 'progress',
  37220. 'button', 'checkbox', 'form', 'input', 'label', 'picker', 'picker', 'picker-view', 'radio', 'slider', 'switch', 'textarea',
  37221. 'navigator', 'function-page-navigator',
  37222. 'audio', 'image', 'video', 'camera', 'live-player', 'live-pusher',
  37223. 'map',
  37224. 'canvas',
  37225. 'open-data', 'web-view', 'ad'
  37226. ]
  37227. module.exports = function() {
  37228. // 注册内置组件
  37229. officialTagList.forEach(name => {
  37230. jComponent.register({
  37231. id: name,
  37232. tagName: `wx-${name}`,
  37233. template: '<slot/>',
  37234. })
  37235. })
  37236. // 注入 api
  37237. if (typeof global.wx === 'object') global.wx = Object.assign(api, global.wx)
  37238. else global.wx = api
  37239. }
  37240. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2)))
  37241. /***/ }),
  37242. /* 230 */
  37243. /***/ (function(module, exports, __webpack_require__) {
  37244. const Animation = __webpack_require__(231)
  37245. const MapContext = __webpack_require__(232)
  37246. const UpdateManager = __webpack_require__(233)
  37247. const dataApi = __webpack_require__(234)
  37248. const openApi = __webpack_require__(235)
  37249. const _ = __webpack_require__(12)
  37250. let nextTickQueue = []
  37251. let nextTickTimer = null
  37252. module.exports = {
  37253. request: _.mockAsync('request'),
  37254. uploadFile: _.mockAsync('uploadFile'),
  37255. downloadFile: _.mockAsync('downloadFile'),
  37256. connectSocket: _.mockAsync('connectSocket'),
  37257. onSocketOpen: _.mockAsync('onSocketOpen'),
  37258. onSocketError: _.mockAsync('onSocketError'),
  37259. sendSocketMessage: _.mockAsync('sendSocketMessage'),
  37260. onSocketMessage: _.mockAsync('onSocketMessage'),
  37261. closeSocket: _.mockAsync('closeSocket'),
  37262. onSocketClose: _.mockAsync('onSocketClose'),
  37263. chooseImage: _.mockAsync('chooseImage'),
  37264. previewImage: _.mockAsync('previewImage'),
  37265. getImageInfo: _.mockAsync('getImageInfo'),
  37266. saveImageToPhotosAlbum: _.mockAsync('saveImageToPhotosAlbum'),
  37267. startRecord: _.mockAsync('startRecord'),
  37268. stopRecord: _.mockAsync('stopRecord'),
  37269. getRecorderManager: _.mockAsync('getRecorderManager'),
  37270. playVoice: _.mockAsync('playVoice'),
  37271. pauseVoice: _.mockAsync('pauseVoice'),
  37272. stopVoice: _.mockAsync('stopVoice'),
  37273. getBackgroundAudioPlayerState: _.mockAsync('getBackgroundAudioPlayerState'),
  37274. playBackgroundAudio: _.mockAsync('playBackgroundAudio'),
  37275. pauseBackgroundAudio: _.mockAsync('pauseBackgroundAudio'),
  37276. seekBackgroundAudio: _.mockAsync('seekBackgroundAudio'),
  37277. stopBackgroundAudio: _.mockAsync('stopBackgroundAudio'),
  37278. onBackgroundAudioPlay: _.mockAsync('onBackgroundAudioPlay'),
  37279. onBackgroundAudioPause: _.mockAsync('onBackgroundAudioPause'),
  37280. onBackgroundAudioStop: _.mockAsync('onBackgroundAudioStop'),
  37281. getBackgroundAudioManager: _.mockAsync('getBackgroundAudioManager'),
  37282. createAudioContext: _.mockAsync('createAudioContext'),
  37283. createInnerAudioContext: _.mockAsync('createInnerAudioContext'),
  37284. getAvailableAudioSources: _.mockAsync('getAvailableAudioSources'),
  37285. chooseVideo: _.mockAsync('chooseVideo'),
  37286. saveVideoToPhotosAlbum: _.mockAsync('saveVideoToPhotosAlbum'),
  37287. createVideoContext: _.mockAsync('createVideoContext'),
  37288. createCameraContext: _.mockAsync('createCameraContext'),
  37289. createLivePlayerContext: _.mockAsync('createLivePlayerContext'),
  37290. createLivePusherContext: _.mockAsync('createLivePusherContext'),
  37291. loadFontFace: _.mockAsync('loadFontFace'),
  37292. saveFile: _.mockAsync('saveFile'),
  37293. getFileInfo: _.mockAsync('getFileInfo'),
  37294. getSavedFileList: _.mockAsync('getSavedFileList'),
  37295. getSavedFileInfo: _.mockAsync('getSavedFileInfo'),
  37296. removeSavedFile: _.mockAsync('removeSavedFile'),
  37297. openDocument: _.mockAsync('openDocument'),
  37298. onMemoryWarning: _.mockAsync('onMemoryWarning'),
  37299. getNetworkType: _.mockAsync('getNetworkType'),
  37300. onNetworkStatusChange: _.mockAsync('onNetworkStatusChange'),
  37301. onAccelerometerChange: _.mockAsync('onAccelerometerChange'),
  37302. startAccelerometer: _.mockAsync('startAccelerometer'),
  37303. stopAccelerometer: _.mockAsync('stopAccelerometer'),
  37304. onCompassChange: _.mockAsync('onCompassChange'),
  37305. startCompass: _.mockAsync('startCompass'),
  37306. stopCompass: _.mockAsync('stopCompass'),
  37307. makePhoneCall: _.mockAsync('makePhoneCall'),
  37308. scanCode: _.mockAsync('scanCode'),
  37309. setClipboardData: _.mockAsync('setClipboardData'),
  37310. getClipboardData: _.mockAsync('getClipboardData'),
  37311. openBluetoothAdapter: _.mockAsync('openBluetoothAdapter'),
  37312. closeBluetoothAdapter: _.mockAsync('closeBluetoothAdapter'),
  37313. getBluetoothAdapterState: _.mockAsync('getBluetoothAdapterState'),
  37314. onBluetoothAdapterStateChange: _.mockAsync('onBluetoothAdapterStateChange'),
  37315. startBluetoothDevicesDiscovery: _.mockAsync('startBluetoothDevicesDiscovery'),
  37316. stopBluetoothDevicesDiscovery: _.mockAsync('stopBluetoothDevicesDiscovery'),
  37317. getBluetoothDevices: _.mockAsync('getBluetoothDevices'),
  37318. getConnectedBluetoothDevices: _.mockAsync('getConnectedBluetoothDevices'),
  37319. onBluetoothDeviceFound: _.mockAsync('onBluetoothDeviceFound'),
  37320. createBLEConnection: _.mockAsync('createBLEConnection'),
  37321. closeBLEConnection: _.mockAsync('closeBLEConnection'),
  37322. getBLEDeviceServices: _.mockAsync('getBLEDeviceServices'),
  37323. getBLEDeviceCharacteristics: _.mockAsync('getBLEDeviceCharacteristics'),
  37324. readBLECharacteristicValue: _.mockAsync('readBLECharacteristicValue'),
  37325. writeBLECharacteristicValue: _.mockAsync('writeBLECharacteristicValue'),
  37326. notifyBLECharacteristicValueChange: _.mockAsync('notifyBLECharacteristicValueChange'),
  37327. onBLEConnectionStateChange: _.mockAsync('onBLEConnectionStateChange'),
  37328. onBLECharacteristicValueChange: _.mockAsync('onBLECharacteristicValueChange'),
  37329. startBeaconDiscovery: _.mockAsync('startBeaconDiscovery'),
  37330. stopBeaconDiscovery: _.mockAsync('stopBeaconDiscovery'),
  37331. getBeacons: _.mockAsync('getBeacons'),
  37332. onBeaconUpdate: _.mockAsync('onBeaconUpdate'),
  37333. onBeaconServiceChange: _.mockAsync('onBeaconServiceChange'),
  37334. setScreenBrightness: _.mockAsync('setScreenBrightness'),
  37335. getScreenBrightness: _.mockAsync('getScreenBrightness'),
  37336. setKeepScreenOn: _.mockAsync('setKeepScreenOn'),
  37337. onUserCaptureScreen: _.mockAsync('onUserCaptureScreen'),
  37338. vibrateLong: _.mockAsync('vibrateLong'),
  37339. vibrateShort: _.mockAsync('vibrateShort'),
  37340. addPhoneContact: _.mockAsync('addPhoneContact'),
  37341. getHCEState: _.mockAsync('getHCEState'),
  37342. startHCE: _.mockAsync('startHCE'),
  37343. stopHCE: _.mockAsync('stopHCE'),
  37344. onHCEMessage: _.mockAsync('onHCEMessage'),
  37345. sendHCEMessage: _.mockAsync('sendHCEMessage'),
  37346. startWifi: _.mockAsync('startWifi'),
  37347. stopWifi: _.mockAsync('stopWifi'),
  37348. connectWifi: _.mockAsync('connectWifi'),
  37349. getWifiList: _.mockAsync('getWifiList'),
  37350. onGetWifiList: _.mockAsync('onGetWifiList'),
  37351. setWifiList: _.mockAsync('setWifiList'),
  37352. onWifiConnected: _.mockAsync('onWifiConnected'),
  37353. getConnectedWifi: _.mockAsync('getConnectedWifi'),
  37354. showToast: _.mockAsync('showToast'),
  37355. showLoading: _.mockAsync('showLoading'),
  37356. hideToast: _.mockAsync('hideToast'),
  37357. hideLoading: _.mockAsync('hideLoading'),
  37358. showModal: _.mockAsync('showModal'),
  37359. showActionSheet: _.mockAsync('showActionSheet'),
  37360. setNavigationBarTitle: _.mockAsync('setNavigationBarTitle'),
  37361. showNavigationBarLoading: _.mockAsync('showNavigationBarLoading'),
  37362. hideNavigationBarLoading: _.mockAsync('hideNavigationBarLoading'),
  37363. setNavigationBarColor: _.mockAsync('setNavigationBarColor'),
  37364. setTabBarBadge: _.mockAsync('setTabBarBadge'),
  37365. removeTabBarBadge: _.mockAsync('removeTabBarBadge'),
  37366. showTabBarRedDot: _.mockAsync('showTabBarRedDot'),
  37367. hideTabBarRedDot: _.mockAsync('hideTabBarRedDot'),
  37368. setTabBarStyle: _.mockAsync('setTabBarStyle'),
  37369. setTabBarItem: _.mockAsync('setTabBarItem'),
  37370. showTabBar: _.mockAsync('showTabBar'),
  37371. hideTabBar: _.mockAsync('hideTabBar'),
  37372. setBackgroundColor: _.mockAsync('setBackgroundColor'),
  37373. setBackgroundTextStyle: _.mockAsync('setBackgroundTextStyle'),
  37374. setTopBarText: _.mockAsync('setTopBarText'),
  37375. createAnimation(transition = {}) {
  37376. return new Animation(transition)
  37377. },
  37378. pageScrollTo: _.mockAsync('pageScrollTo'),
  37379. createCanvasContext: _.mockAsync('createCanvasContext'),
  37380. createContext: _.mockAsync('createContext'),
  37381. drawCanvas: _.mockAsync('drawCanvas'),
  37382. canvasToTempFilePath: _.mockAsync('canvasToTempFilePath'),
  37383. canvasGetImageData: _.mockAsync('canvasGetImageData'),
  37384. canvasPutImageData: _.mockAsync('canvasPutImageData'),
  37385. startPullDownRefresh: _.mockAsync('startPullDownRefresh'),
  37386. stopPullDownRefresh: _.mockAsync('stopPullDownRefresh'),
  37387. createWorker: _.mockAsync('createWorker'),
  37388. // network
  37389. // TODO
  37390. // media
  37391. // TOOD
  37392. // file
  37393. // TODO
  37394. // data
  37395. ...dataApi,
  37396. // location
  37397. chooseLocation(options = {}) {
  37398. _.runInAsync(options, {
  37399. errMsg: 'chooseLocation:ok',
  37400. address: '广东省广州市海珠区tit创意园品牌街',
  37401. name: '腾讯微信总部',
  37402. latitude: 23.1001,
  37403. longitude: 113.32456,
  37404. })
  37405. },
  37406. getLocation(options = {}) {
  37407. _.runInAsync(options, {
  37408. errMsg: 'getLocation:ok',
  37409. accuracy: 65,
  37410. altitude: 0,
  37411. latitude: 23.12908,
  37412. longitude: 113.26436,
  37413. speed: -1,
  37414. verticalAccuracy: 65,
  37415. horizontalAccuracy: 65,
  37416. })
  37417. },
  37418. openLocation: _.mockAsync('openLocation'),
  37419. // device
  37420. // TODO
  37421. // open
  37422. ...openApi,
  37423. // update
  37424. getUpdateManager() {
  37425. return new UpdateManager()
  37426. },
  37427. // worker
  37428. // TODO
  37429. // report
  37430. reportMonitor: _.mockSync(null),
  37431. // miniprogram
  37432. // TODO
  37433. // base
  37434. canIUse: _.mockSync(true),
  37435. // canvas
  37436. // TODO
  37437. // debug
  37438. getLogManager: _.mockSync(console),
  37439. setEnableDebug: _.mockSync(null),
  37440. // thirdparty
  37441. getExtConfig(options = {}) {
  37442. _.runInAsync(options, {
  37443. errMsg: 'getExtConfig:ok',
  37444. extConfig: wx.getExtConfigSync(),
  37445. })
  37446. },
  37447. getExtConfigSync() {
  37448. return {}
  37449. },
  37450. // map
  37451. createMapContext(...args) {
  37452. return new MapContext(...args)
  37453. },
  37454. // route
  37455. navigateTo: _.mockAsync('navigateTo'),
  37456. redirectTo: _.mockAsync('redirectTo'),
  37457. switchTab: _.mockAsync('switchTab'),
  37458. navigateBack: _.mockAsync('navigateBack'),
  37459. reLaunch: _.mockAsync('reLaunch'),
  37460. // share
  37461. getShareInfo(options = {}) {
  37462. _.runInAsync(options, {
  37463. errMsg: 'getShareInfo:ok',
  37464. encryptedData: 'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==',
  37465. iv: 'r7BXXKkLb8qrSNn05n0qiA==',
  37466. })
  37467. },
  37468. hideShareMenu: _.mockAsync('hideShareMenu'),
  37469. showShareMenu: _.mockAsync('showShareMenu'),
  37470. updateShareMenu: _.mockAsync('updateShareMenu'),
  37471. // system
  37472. getSystemInfo(options = {}) {
  37473. _.runInAsync(options, {
  37474. errMsg: 'getSystemInfo:ok',
  37475. ...wx.getSystemInfoSync(),
  37476. })
  37477. },
  37478. getSystemInfoSync() {
  37479. return {
  37480. SDKVersion: '2.3.0',
  37481. batteryLevel: 100,
  37482. benchmarkLevel: 1,
  37483. brand: 'devtools',
  37484. fontSizeSetting: 16,
  37485. language: 'zh_CN',
  37486. model: 'iPhone 7 Plus',
  37487. pixelRatio: 3,
  37488. platform: 'devtools',
  37489. screenHeight: 736,
  37490. screenWidth: 414,
  37491. statusBarHeight: 20,
  37492. system: 'iOS 10.0.1',
  37493. version: '6.6.3',
  37494. windowHeight: 672,
  37495. windowWidth: 414,
  37496. }
  37497. },
  37498. // wxml
  37499. createSelectorQuery() {
  37500. return {
  37501. in(compInst) {
  37502. return compInst.createSelectorQuery()
  37503. },
  37504. }
  37505. },
  37506. createIntersectionObserver(compInst, options) {
  37507. return compInst.createIntersectionObserver(options)
  37508. },
  37509. nextTick(func) {
  37510. nextTickQueue.push(func)
  37511. if (nextTickTimer) return
  37512. nextTickTimer = setTimeout(() => {
  37513. const funcQueue = nextTickQueue
  37514. nextTickQueue = []
  37515. nextTickTimer = null
  37516. for (const func of funcQueue) {
  37517. if (func) func()
  37518. }
  37519. }, 0)
  37520. },
  37521. }
  37522. /***/ }),
  37523. /* 231 */
  37524. /***/ (function(module, exports) {
  37525. class Animation {
  37526. constructor(option = {}) {
  37527. this.actions = []
  37528. this.currentTransform = []
  37529. this.currentStepAnimates = []
  37530. this.option = {
  37531. transition: {
  37532. duration: option.duration !== undefined ? option.duration : 400,
  37533. timingFunction: option.timingFunction !== undefined ? option.timingFunction : 'linear',
  37534. delay: option.delay !== undefined ? option.delay : 0,
  37535. },
  37536. transformOrigin: option.transformOrigin || '50% 50% 0',
  37537. }
  37538. }
  37539. export() {
  37540. const actions = this.actions
  37541. this.actions = []
  37542. return {actions}
  37543. }
  37544. step(option = {}) {
  37545. this.currentStepAnimates.forEach((animate) => {
  37546. if (animate.type !== 'style') {
  37547. this.currentTransform[animate.type] = animate
  37548. } else {
  37549. this.currentTransform[`${animate.type}.${animate.args[0]}`] = animate
  37550. }
  37551. })
  37552. this.actions.push({
  37553. animates: Object.keys(this.currentTransform).reduce((prev, key) => [...prev, this.currentTransform[key]], []),
  37554. option: {
  37555. transformOrigin: option.transformOrigin !== undefined ? option.transformOrigin : this.option.transformOrigin,
  37556. transition: {
  37557. duration: option.duration !== undefined ? option.duration : this.option.transition.duration,
  37558. timingFunction: option.timingFunction !== undefined ? option.timingFunction : this.option.transition.timingFunction,
  37559. delay: option.delay !== undefined ? option.delay : this.option.transition.delay,
  37560. },
  37561. },
  37562. })
  37563. this.currentStepAnimates = []
  37564. return this
  37565. }
  37566. matrix(a = 1, b = 0, c = 0, d = 1, tx = 1, ty = 1) {
  37567. this.currentStepAnimates.push({type: 'matrix', args: [a, b, c, d, tx, ty]})
  37568. return this
  37569. }
  37570. matrix3d(a1 = 1, b1 = 0, c1 = 0, d1 = 0, a2 = 0, b2 = 1, c2 = 0, d2 = 0, a3 = 0, b3 = 0, c3 = 1, d3 = 0, a4 = 0, b4 = 0, c4 = 0, d4 = 1) {
  37571. this.currentStepAnimates.push({type: 'matrix3d', args: [a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4]})
  37572. this.stepping = false
  37573. return this
  37574. }
  37575. rotate(angle = 0) {
  37576. this.currentStepAnimates.push({type: 'rotate', args: [angle]})
  37577. return this
  37578. }
  37579. rotate3d(x = 0, y = 0, z = 0, a = 0) {
  37580. this.currentStepAnimates.push({type: 'rotate3d', args: [x, y, z, a]})
  37581. this.stepping = false
  37582. return this
  37583. }
  37584. rotateX(a = 0) {
  37585. this.currentStepAnimates.push({type: 'rotateX', args: [a]})
  37586. this.stepping = false
  37587. return this
  37588. }
  37589. rotateY(a = 0) {
  37590. this.currentStepAnimates.push({type: 'rotateY', args: [a]})
  37591. this.stepping = false
  37592. return this
  37593. }
  37594. rotateZ(a = 0) {
  37595. this.currentStepAnimates.push({type: 'rotateZ', args: [a]})
  37596. this.stepping = false
  37597. return this
  37598. }
  37599. scale(sx = 1, sy) {
  37600. this.currentStepAnimates.push({type: 'scale', args: [sx, sy !== undefined ? sy : sx]})
  37601. return this
  37602. }
  37603. scale3d(sx = 1, sy = 1, sz = 1) {
  37604. this.currentStepAnimates.push({type: 'scale3d', args: [sx, sy, sz]})
  37605. return this
  37606. }
  37607. scaleX(s = 1) {
  37608. this.currentStepAnimates.push({type: 'scaleX', args: [s]})
  37609. return this
  37610. }
  37611. scaleY(s = 1) {
  37612. this.currentStepAnimates.push({type: 'scaleY', args: [s]})
  37613. return this
  37614. }
  37615. scaleZ(s = 1) {
  37616. this.currentStepAnimates.push({type: 'scaleZ', args: [s]})
  37617. return this
  37618. }
  37619. skew(ax = 0, ay = 0) {
  37620. this.currentStepAnimates.push({type: 'skew', args: [ax, ay]})
  37621. return this
  37622. }
  37623. skewX(a = 0) {
  37624. this.currentStepAnimates.push({type: 'skewX', args: [a]})
  37625. return this
  37626. }
  37627. skewY(a = 0) {
  37628. this.currentStepAnimates.push({type: 'skewY', args: [a]})
  37629. return this
  37630. }
  37631. translate(tx = 0, ty = 0) {
  37632. this.currentStepAnimates.push({type: 'translate', args: [tx, ty]})
  37633. return this
  37634. }
  37635. translate3d(tx = 0, ty = 0, tz = 0) {
  37636. this.currentStepAnimates.push({type: 'translate3d', args: [tx, ty, tz]})
  37637. return this
  37638. }
  37639. translateX(t = 0) {
  37640. this.currentStepAnimates.push({type: 'translateX', args: [t]})
  37641. return this
  37642. }
  37643. translateY(t = 0) {
  37644. this.currentStepAnimates.push({type: 'translateY', args: [t]})
  37645. return this
  37646. }
  37647. translateZ(t = 0) {
  37648. this.currentStepAnimates.push({type: 'translateZ', args: [t]})
  37649. return this
  37650. }
  37651. opacity(value) {
  37652. this.currentStepAnimates.push({type: 'style', args: ['opacity', value]})
  37653. return this
  37654. }
  37655. backgroundColor(value) {
  37656. this.currentStepAnimates.push({type: 'style', args: ['background-color', value]})
  37657. return this
  37658. }
  37659. width(value) {
  37660. this.currentStepAnimates.push({type: 'style', args: ['width', typeof value === 'number' ? value + 'px' : value]})
  37661. return this
  37662. }
  37663. height(value) {
  37664. this.currentStepAnimates.push({type: 'style', args: ['height', typeof value === 'number' ? value + 'px' : value]})
  37665. return this
  37666. }
  37667. left(value) {
  37668. this.currentStepAnimates.push({type: 'style', args: ['left', typeof value === 'number' ? value + 'px' : value]})
  37669. return this
  37670. }
  37671. right(value) {
  37672. this.currentStepAnimates.push({type: 'style', args: ['right', typeof value === 'number' ? value + 'px' : value]})
  37673. return this
  37674. }
  37675. top(value) {
  37676. this.currentStepAnimates.push({type: 'style', args: ['top', typeof value === 'number' ? value + 'px' : value]})
  37677. return this
  37678. }
  37679. bottom(value) {
  37680. this.currentStepAnimates.push({type: 'style', args: ['bottom', typeof value === 'number' ? value + 'px' : value]})
  37681. return this
  37682. }
  37683. }
  37684. module.exports = Animation
  37685. /***/ }),
  37686. /* 232 */
  37687. /***/ (function(module, exports, __webpack_require__) {
  37688. /* eslint-disable class-methods-use-this */
  37689. const _ = __webpack_require__(12)
  37690. class MapContext {
  37691. constructor(id, parent) {
  37692. this._exparserNode = parent.selectComponent(`#${id}`)
  37693. }
  37694. getCenterLocation(options = {}) {
  37695. _.runInAsync(options, {
  37696. errMsg: 'getMapCenterLocation:ok',
  37697. latitude: 39.92,
  37698. longitude: 116.46,
  37699. })
  37700. }
  37701. getRegion(options = {}) {
  37702. _.runInAsync(options, {
  37703. errMsg: 'getMapRegion:ok',
  37704. northeast: {
  37705. latitude: 39.92493685384383,
  37706. longitude: 116.47287460327148,
  37707. },
  37708. southwest: {
  37709. latitude: 39.91506279020459,
  37710. longitude: 116.44712539672851,
  37711. },
  37712. })
  37713. }
  37714. getScale(options = {}) {
  37715. _.runInAsync(options, {
  37716. errMsg: 'getMapScale:ok',
  37717. scale: 14,
  37718. })
  37719. }
  37720. get includePoints() {
  37721. return _.mockAsync('includePoints')
  37722. }
  37723. get moveToLocation() {
  37724. return _.mockSync(null)
  37725. }
  37726. get translateMarker() {
  37727. return _.mockAsync('translateMarker')
  37728. }
  37729. }
  37730. module.exports = MapContext
  37731. /***/ }),
  37732. /* 233 */
  37733. /***/ (function(module, exports) {
  37734. /* eslint-disable class-methods-use-this */
  37735. class UpdateManager {
  37736. constructor() {
  37737. this.updateCallback = null
  37738. }
  37739. applyUpdate() {
  37740. setTimeout(() => {
  37741. if (this.updateCallback && typeof this.updateCallback === 'function') {
  37742. this.updateCallback()
  37743. }
  37744. }, 0)
  37745. }
  37746. onCheckForUpdate(callback) {
  37747. setTimeout(() => {
  37748. if (callback && typeof callback === 'function') {
  37749. callback({hasUpdate: true})
  37750. }
  37751. }, 0)
  37752. }
  37753. onUpdateFailed() {}
  37754. onUpdateReady(callback) {
  37755. this.updateCallback = callback
  37756. }
  37757. }
  37758. module.exports = UpdateManager
  37759. /***/ }),
  37760. /* 234 */
  37761. /***/ (function(module, exports, __webpack_require__) {
  37762. /* global localStorage */
  37763. const _ = __webpack_require__(12)
  37764. module.exports = {
  37765. clearStorage(options) {
  37766. const res = {errMsg: 'clearStorage:ok'}
  37767. try {
  37768. wx.clearStorageSync()
  37769. } catch (err) {
  37770. res.errMsg = `clearStorage:fail ${err.message}`
  37771. }
  37772. _.runInAsync(options, res)
  37773. },
  37774. clearStorageSync() {
  37775. localStorage.clear()
  37776. },
  37777. getStorage(options) {
  37778. const res = {errMsg: 'getStorage:ok'}
  37779. try {
  37780. res.data = wx.getStorageSync(options.key)
  37781. } catch (err) {
  37782. res.errMsg = `getStorage:fail ${err.message}`
  37783. }
  37784. _.runInAsync(options, res)
  37785. },
  37786. getStorageSync(key) {
  37787. const res = localStorage.getItem(key)
  37788. try {
  37789. return JSON.parse(res)
  37790. } catch (err) {
  37791. return res
  37792. }
  37793. },
  37794. getStorageInfo(options) {
  37795. let res = {errMsg: 'getStorageInfo:ok'}
  37796. try {
  37797. const data = wx.getStorageInfoSync()
  37798. res = Object.assign(res, data)
  37799. } catch (err) {
  37800. res.errMsg = `getStorageInfo:fail ${err.message}`
  37801. }
  37802. _.runInAsync(options, res)
  37803. },
  37804. getStorageInfoSync() {
  37805. const length = localStorage.length
  37806. const keys = []
  37807. let currentSize = 0
  37808. for (let i = 0; i < length; i++) {
  37809. const key = localStorage.key(i)
  37810. keys.push(key)
  37811. currentSize += _.getSize(localStorage.getItem(key))
  37812. }
  37813. return {
  37814. keys,
  37815. currentSize,
  37816. limitSize: 1024 * 10,
  37817. }
  37818. },
  37819. removeStorage(options) {
  37820. const res = {errMsg: 'removeStorage:ok'}
  37821. try {
  37822. wx.removeStorageSync(options.key)
  37823. } catch (err) {
  37824. res.errMsg = `removeStorage:fail ${err.message}`
  37825. }
  37826. _.runInAsync(options, res)
  37827. },
  37828. removeStorageSync(key) {
  37829. localStorage.removeItem(key)
  37830. },
  37831. setStorage(options) {
  37832. const res = {errMsg: 'setStorage:ok'}
  37833. try {
  37834. wx.setStorageSync(options.key, options.data)
  37835. } catch (err) {
  37836. res.errMsg = `setStorage:fail ${err.message}`
  37837. }
  37838. _.runInAsync(options, res)
  37839. },
  37840. setStorageSync(key, data) {
  37841. localStorage.setItem(key, JSON.stringify(data))
  37842. },
  37843. }
  37844. /***/ }),
  37845. /* 235 */
  37846. /***/ (function(module, exports, __webpack_require__) {
  37847. const _ = __webpack_require__(12)
  37848. module.exports = {
  37849. getAccountInfoSync: _.mockSync({
  37850. miniProgram: {appId: 'wx4f4bc4dec97d474b'},
  37851. }),
  37852. chooseAddress(options = {}) {
  37853. _.runInAsync(options, {
  37854. errMsg: 'chooseAddress:ok',
  37855. cityName: '广州市',
  37856. countyName: '海珠区',
  37857. detailInfo: '新港中路397号',
  37858. nationalCode: '510000',
  37859. postalCode: '510000',
  37860. provinceName: '广东省',
  37861. telNumber: '020-81167888',
  37862. userName: '张三',
  37863. })
  37864. },
  37865. authorize: _.mockAsync('authorize'),
  37866. addCard(options = {}) {
  37867. const cardList = (options.cardList || []).map(item => ({
  37868. code: 'this is a mock code',
  37869. isSuccess: true,
  37870. ...item,
  37871. }))
  37872. _.runInAsync(options, {
  37873. errMsg: 'addCard:ok',
  37874. cardList
  37875. })
  37876. },
  37877. openCard: _.mockAsync('openCard'),
  37878. reportAnalytics: _.mockSync(null),
  37879. chooseInvoice(options = {}) {
  37880. _.runInAsync(options, {
  37881. errMsg: 'chooseInvoice:ok',
  37882. invoiceInfo: {
  37883. cardId: 'pjZ8Yt5crPbAouhFqFf6JFgZv4Lc',
  37884. encryptCode: 'fbdt/fWy1VitQwhbKtSjNeR3BJyfpeJXfZjjGsdCXiM=',
  37885. publisherAppId: 'wx00000000000000',
  37886. },
  37887. })
  37888. },
  37889. chooseInvoiceTitle(options = {}) {
  37890. _.runInAsync(options, {
  37891. errMsg: 'chooseInvoiceTitle:ok',
  37892. bankAccount: '1209 0928 2210 301',
  37893. bankName: '招商银行股份有限公司广州市体育东路支行',
  37894. companyAddress: '广州市海珠区新港中路397号自编72号(商业街F5-1)',
  37895. taxNumber: '91440101327598294H',
  37896. telephone: '020-81167888',
  37897. title: '广州腾讯科技有限公司',
  37898. type: 0,
  37899. })
  37900. },
  37901. checkSession: _.mockAsync('checkSession'),
  37902. login(options = {}) {
  37903. _.runInAsync(options, {
  37904. errMsg: 'login:ok',
  37905. code: '033UAswz1j8Fjb0lT4yz1Wmrwz1UAsw9',
  37906. })
  37907. },
  37908. navigateBackMiniProgram: _.mockAsync('navigateBackMiniProgram'),
  37909. navigateToMiniProgram: _.mockAsync('navigateToMiniProgram'),
  37910. requestPayment: _.mockAsync('requestPayment'),
  37911. getSetting(options = {}) {
  37912. _.runInAsync(options, {
  37913. errMsg: 'getSetting:ok',
  37914. authSetting: {
  37915. 'scope.address': true,
  37916. 'scope.invoice': true,
  37917. 'scope.invoiceTitle': true,
  37918. 'scope.subscribemsg': true,
  37919. },
  37920. })
  37921. },
  37922. openSetting(options = {}) {
  37923. _.runInAsync(options, {
  37924. errMsg: 'openSetting:ok',
  37925. authSetting: {
  37926. 'scope.address': true,
  37927. 'scope.invoice': true,
  37928. 'scope.invoiceTitle': true,
  37929. 'scope.subscribemsg': true,
  37930. },
  37931. })
  37932. },
  37933. checkIsSoterEnrolledInDevice(options = {}) {
  37934. _.runInAsync(options, {
  37935. errMsg: 'checkIsSoterEnrolledInDevice:ok',
  37936. isEnrolled: true,
  37937. })
  37938. },
  37939. checkIsSupportSoterAuthentication(options = {}) {
  37940. _.runInAsync(options, {
  37941. errMsg: 'checkIsSupportSoterAuthentication:ok',
  37942. supportMode: ['fingerPrint'],
  37943. })
  37944. },
  37945. startSoterAuthentication: _.mockAsync('startSoterAuthentication'),
  37946. getUserInfo(options) {
  37947. _.runInAsync(options, {
  37948. errMsg: 'getUserInfo:ok',
  37949. userInfo: {
  37950. nickName: 'Band',
  37951. gender: 1,
  37952. language: 'zh_CN',
  37953. city: 'Guangzhou',
  37954. province: 'Guangdong',
  37955. country: 'CN',
  37956. avatarUrl: 'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0',
  37957. },
  37958. rawData: '{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}HyVFkGl5F5OQWJZZaNzBBg==',
  37959. signature: '75e81ceda165f4ffa64f4068af58c64b8f54b88c',
  37960. encryptedData: 'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==',
  37961. iv: 'r7BXXKkLb8qrSNn05n0qiA==',
  37962. })
  37963. },
  37964. getWeRunData(options) {
  37965. _.runInAsync(options, {
  37966. errMsg: 'getUserInfo:ok',
  37967. encryptedData: 'XoLUxF76jN/OsfTGUqF/ZqRn+2PtO66lAMg/g0D3bg1L2/Nds8gTQrH7fGmbTgGtUC2R9lbJh7fLEaO9boeCqru1Em2BD/IbfN6lI/nu55himuBvypESz+H9uV7izLP/',
  37968. iv: 'r7BXXKkLb8qrSNn05n0qiA==',
  37969. })
  37970. },
  37971. }
  37972. /***/ })
  37973. /******/ ]);